1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* include/linux/msm_audio.h
2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Copyright (C) 2008 Google, Inc.
4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This software is licensed under the terms of the GNU General Public
6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * License version 2, as published by the Free Software Foundation, and
7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * may be copied, distributed, and modified under those terms.
8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This program is distributed in the hope that it will be useful,
10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * but WITHOUT ANY WARRANTY; without even the implied warranty of
11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * GNU General Public License for more details.
13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __LINUX_MSM_AUDIO_H
17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __LINUX_MSM_AUDIO_H
18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/types.h>
20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/ioctl.h>
21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <asm/sizes.h>
22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* PCM Audio */
24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_IOCTL_MAGIC 'a'
26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_START        _IOW(AUDIO_IOCTL_MAGIC, 0, unsigned)
28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_STOP         _IOW(AUDIO_IOCTL_MAGIC, 1, unsigned)
29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_FLUSH        _IOW(AUDIO_IOCTL_MAGIC, 2, unsigned)
30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_GET_CONFIG   _IOR(AUDIO_IOCTL_MAGIC, 3, unsigned)
31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_SET_CONFIG   _IOW(AUDIO_IOCTL_MAGIC, 4, unsigned)
32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_GET_STATS    _IOR(AUDIO_IOCTL_MAGIC, 5, unsigned)
33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_ENABLE_AUDPP _IOW(AUDIO_IOCTL_MAGIC, 6, unsigned)
34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_SET_ADRC     _IOW(AUDIO_IOCTL_MAGIC, 7, unsigned)
35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_SET_EQ       _IOW(AUDIO_IOCTL_MAGIC, 8, unsigned)
36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_SET_RX_IIR   _IOW(AUDIO_IOCTL_MAGIC, 9, unsigned)
37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_SET_VOLUME   _IOW(AUDIO_IOCTL_MAGIC, 10, unsigned)
38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_ENABLE_AUDPRE  _IOW(AUDIO_IOCTL_MAGIC, 11, unsigned)
39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_SET_AGC        _IOW(AUDIO_IOCTL_MAGIC, 12, unsigned)
40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_SET_NS         _IOW(AUDIO_IOCTL_MAGIC, 13, unsigned)
41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define AUDIO_SET_TX_IIR     _IOW(AUDIO_IOCTL_MAGIC, 14, unsigned)
42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct msm_audio_config {
44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t buffer_size;
45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t buffer_count;
46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t channel_count;
47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t sample_rate;
48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t type;
49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t unused[3];
50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct msm_audio_stats {
53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t byte_count;
54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t sample_count;
55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t unused[2];
56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Audio routing */
59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SND_IOCTL_MAGIC 's'
61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SND_MUTE_UNMUTED 0
63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SND_MUTE_MUTED   1
64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct msm_snd_device_config {
66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t device;
67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t ear_mute;
68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t mic_mute;
69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SND_SET_DEVICE _IOW(SND_IOCTL_MAGIC, 2, struct msm_device_config *)
72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SND_METHOD_VOICE 0
74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct msm_snd_volume_config {
76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t device;
77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t method;
78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	uint32_t volume;
79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SND_SET_VOLUME _IOW(SND_IOCTL_MAGIC, 3, struct msm_snd_volume_config *)
82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Returns the number of SND endpoints supported. */
84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SND_GET_NUM_ENDPOINTS _IOR(SND_IOCTL_MAGIC, 4, unsigned *)
86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct msm_snd_endpoint {
88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int id; /* input and output */
89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	char name[64]; /* output only */
90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Takes an index between 0 and one less than the number returned by
93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SND_GET_NUM_ENDPOINTS, and returns the SND index and name of a
94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SND endpoint.  On input, the .id field contains the number of the
95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * endpoint, and on exit it contains the SND index, while .name contains
96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * the description of the endpoint.
97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SND_GET_ENDPOINT _IOWR(SND_IOCTL_MAGIC, 5, struct msm_snd_endpoint *)
100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __LINUX_MSM_AUDIO_H */
102