blob: d316ab0e0de96eef684221c7bf39bb321b83f140 [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* arch/arm/mach-msm/qdsp6/q6audio_devices.h
2 *
3 * Copyright (C) 2009 Google, Inc.
4 * Author: Brian Swetland <swetland@google.com>
5 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17struct q6_device_info {
18 uint32_t id;
19 uint32_t cad_id;
20 uint32_t path;
21 uint32_t rate;
22 uint8_t dir;
23 uint8_t codec;
24 uint8_t hw;
25};
26
27#define Q6_ICODEC_RX 0
28#define Q6_ICODEC_TX 1
29#define Q6_ECODEC_RX 2
30#define Q6_ECODEC_TX 3
31#define Q6_SDAC_RX 6
32#define Q6_SDAC_TX 7
33#define Q6_CODEC_NONE 255
34
35#define Q6_TX 1
36#define Q6_RX 2
37#define Q6_TX_RX 3
38
39#define Q6_HW_HANDSET 0
40#define Q6_HW_HEADSET 1
41#define Q6_HW_SPEAKER 2
42#define Q6_HW_TTY 3
43#define Q6_HW_BT_SCO 4
44#define Q6_HW_BT_A2DP 5
45
46#define Q6_HW_COUNT 6
47
48#define CAD_HW_DEVICE_ID_HANDSET_MIC 0x01
49#define CAD_HW_DEVICE_ID_HANDSET_SPKR 0x02
50#define CAD_HW_DEVICE_ID_HEADSET_MIC 0x03
51#define CAD_HW_DEVICE_ID_HEADSET_SPKR_MONO 0x04
52#define CAD_HW_DEVICE_ID_HEADSET_SPKR_STEREO 0x05
53#define CAD_HW_DEVICE_ID_SPKR_PHONE_MIC 0x06
54#define CAD_HW_DEVICE_ID_SPKR_PHONE_MONO 0x07
55#define CAD_HW_DEVICE_ID_SPKR_PHONE_STEREO 0x08
56#define CAD_HW_DEVICE_ID_BT_SCO_MIC 0x09
57#define CAD_HW_DEVICE_ID_BT_SCO_SPKR 0x0A
58#define CAD_HW_DEVICE_ID_BT_A2DP_SPKR 0x0B
59#define CAD_HW_DEVICE_ID_TTY_HEADSET_MIC 0x0C
60#define CAD_HW_DEVICE_ID_TTY_HEADSET_SPKR 0x0D
61
62#define CAD_HW_DEVICE_ID_DEFAULT_TX 0x0E
63#define CAD_HW_DEVICE_ID_DEFAULT_RX 0x0F
64
65
66#define CAD_HW_DEVICE_ID_SPKR_PHONE_DUAL_MIC_BROADSIDE 0x2B
67#define CAD_HW_DEVICE_ID_SPKR_PHONE_DUAL_MIC_ENDFIRE 0x2D
68#define CAD_HW_DEVICE_ID_HANDSET_DUAL_MIC_BROADSIDE 0x2C
69#define CAD_HW_DEVICE_ID_HANDSET_DUAL_MIC_ENDFIRE 0x2E
70
71/* Logical Device to indicate A2DP routing */
72#define CAD_HW_DEVICE_ID_BT_A2DP_TX 0x10
73#define CAD_HW_DEVICE_ID_HEADSET_MONO_PLUS_SPKR_MONO_RX 0x11
74#define CAD_HW_DEVICE_ID_HEADSET_MONO_PLUS_SPKR_STEREO_RX 0x12
75#define CAD_HW_DEVICE_ID_HEADSET_STEREO_PLUS_SPKR_MONO_RX 0x13
76#define CAD_HW_DEVICE_ID_HEADSET_STEREO_PLUS_SPKR_STEREO_RX 0x14
77
78#define CAD_HW_DEVICE_ID_VOICE 0x15
79
80#define CAD_HW_DEVICE_ID_I2S_RX 0x20
81#define CAD_HW_DEVICE_ID_I2S_TX 0x21
82
83/* AUXPGA */
84#define CAD_HW_DEVICE_ID_HEADSET_SPKR_STEREO_LB 0x22
85#define CAD_HW_DEVICE_ID_HEADSET_SPKR_MONO_LB 0x23
86#define CAD_HW_DEVICE_ID_SPEAKER_SPKR_STEREO_LB 0x24
87#define CAD_HW_DEVICE_ID_SPEAKER_SPKR_MONO_LB 0x25
88
89#define CAD_HW_DEVICE_ID_NULL_RX 0x2A
90
91#define CAD_HW_DEVICE_ID_MAX_NUM 0x2F
92
93#define CAD_HW_DEVICE_ID_INVALID 0xFF
94
95#define CAD_RX_DEVICE 0x00
96#define CAD_TX_DEVICE 0x01
97
98static struct q6_device_info q6_audio_devices[] = {
99 {
100 .id = ADSP_AUDIO_DEVICE_ID_HANDSET_SPKR,
101 .cad_id = CAD_HW_DEVICE_ID_HANDSET_SPKR,
102 .path = ADIE_PATH_HANDSET_RX,
103 .rate = 48000,
104 .dir = Q6_RX,
105 .codec = Q6_ICODEC_RX,
106 .hw = Q6_HW_HANDSET,
107 },
108 {
109 .id = ADSP_AUDIO_DEVICE_ID_HEADSET_SPKR_MONO,
110 .cad_id = CAD_HW_DEVICE_ID_HEADSET_SPKR_MONO,
111 .path = ADIE_PATH_HEADSET_MONO_RX,
112 .rate = 48000,
113 .dir = Q6_RX,
114 .codec = Q6_ICODEC_RX,
115 .hw = Q6_HW_HEADSET,
116 },
117 {
118 .id = ADSP_AUDIO_DEVICE_ID_HEADSET_SPKR_STEREO,
119 .cad_id = CAD_HW_DEVICE_ID_HEADSET_SPKR_STEREO,
120 .path = ADIE_PATH_HEADSET_STEREO_RX,
121 .rate = 48000,
122 .dir = Q6_RX,
123 .codec = Q6_ICODEC_RX,
124 .hw = Q6_HW_HEADSET,
125 },
126 {
127 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_MONO,
128 .cad_id = CAD_HW_DEVICE_ID_SPKR_PHONE_MONO,
129 .path = ADIE_PATH_SPEAKER_RX,
130 .rate = 48000,
131 .dir = Q6_RX,
132 .codec = Q6_ICODEC_RX,
133 .hw = Q6_HW_SPEAKER,
134 },
135 {
136 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_STEREO,
137 .cad_id = CAD_HW_DEVICE_ID_SPKR_PHONE_STEREO,
138 .path = ADIE_PATH_SPEAKER_STEREO_RX,
139 .rate = 48000,
140 .dir = Q6_RX,
141 .codec = Q6_ICODEC_RX,
142 .hw = Q6_HW_SPEAKER,
143 },
144 {
145 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_MONO_W_MONO_HEADSET,
146 .cad_id = CAD_HW_DEVICE_ID_HEADSET_MONO_PLUS_SPKR_MONO_RX,
147 .path = ADIE_PATH_SPKR_MONO_HDPH_MONO_RX,
148 .rate = 48000,
149 .dir = Q6_RX,
150 .codec = Q6_ICODEC_RX,
151 .hw = Q6_HW_SPEAKER,
152 },
153 {
154 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_MONO_W_STEREO_HEADSET,
155 .cad_id = CAD_HW_DEVICE_ID_HEADSET_STEREO_PLUS_SPKR_MONO_RX,
156 .path = ADIE_PATH_SPKR_MONO_HDPH_STEREO_RX,
157 .rate = 48000,
158 .dir = Q6_RX,
159 .codec = Q6_ICODEC_RX,
160 .hw = Q6_HW_SPEAKER,
161 },
162 {
163 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_STEREO_W_MONO_HEADSET,
164 .cad_id = CAD_HW_DEVICE_ID_HEADSET_MONO_PLUS_SPKR_STEREO_RX,
165 .path = ADIE_PATH_SPKR_STEREO_HDPH_MONO_RX,
166 .rate = 48000,
167 .dir = Q6_RX,
168 .codec = Q6_ICODEC_RX,
169 .hw = Q6_HW_SPEAKER,
170 },
171 {
172 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_STEREO_W_STEREO_HEADSET,
173 .cad_id = CAD_HW_DEVICE_ID_HEADSET_STEREO_PLUS_SPKR_STEREO_RX,
174 .path = ADIE_PATH_SPKR_STEREO_HDPH_STEREO_RX,
175 .rate = 48000,
176 .dir = Q6_RX,
177 .codec = Q6_ICODEC_RX,
178 .hw = Q6_HW_SPEAKER,
179 },
180 {
181 .id = ADSP_AUDIO_DEVICE_ID_TTY_HEADSET_SPKR,
182 .cad_id = CAD_HW_DEVICE_ID_TTY_HEADSET_SPKR,
183 .path = ADIE_PATH_TTY_HEADSET_RX,
184 .rate = 48000,
185 .dir = Q6_RX,
186 .codec = Q6_ICODEC_RX,
187 .hw = Q6_HW_TTY,
188 },
189 {
190 .id = ADSP_AUDIO_DEVICE_ID_HANDSET_MIC,
191 .cad_id = CAD_HW_DEVICE_ID_HANDSET_MIC,
192 .path = ADIE_PATH_HANDSET_TX,
193 .rate = 8000,
194 .dir = Q6_TX,
195 .codec = Q6_ICODEC_TX,
196 .hw = Q6_HW_HANDSET,
197 },
198 {
199 .id = ADSP_AUDIO_DEVICE_ID_HEADSET_MIC,
200 .cad_id = CAD_HW_DEVICE_ID_HEADSET_MIC,
201 .path = ADIE_PATH_HEADSET_MONO_TX,
202 .rate = 8000,
203 .dir = Q6_TX,
204 .codec = Q6_ICODEC_TX,
205 .hw = Q6_HW_HEADSET,
206 },
207 {
208 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_MIC,
209 .cad_id = CAD_HW_DEVICE_ID_SPKR_PHONE_MIC,
210 .path = ADIE_PATH_SPEAKER_TX,
211 .rate = 8000,
212 .dir = Q6_TX,
213 .codec = Q6_ICODEC_TX,
214 .hw = Q6_HW_SPEAKER,
215 },
216 {
217 .id = ADSP_AUDIO_DEVICE_ID_HANDSET_DUAL_MIC,
218 .cad_id = CAD_HW_DEVICE_ID_HANDSET_DUAL_MIC_ENDFIRE,
219 .path = ADIE_CODEC_HANDSET_SPKR_EF_TX,
220 .rate = 8000,
221 .dir = Q6_TX,
222 .codec = Q6_ICODEC_TX,
223 .hw = Q6_HW_HANDSET,
224 },
225 {
226 .id = ADSP_AUDIO_DEVICE_ID_HANDSET_DUAL_MIC,
227 .cad_id = CAD_HW_DEVICE_ID_HANDSET_DUAL_MIC_BROADSIDE,
228 .path = ADIE_CODEC_HANDSET_SPKR_BS_TX,
229 .rate = 8000,
230 .dir = Q6_TX,
231 .codec = Q6_ICODEC_TX,
232 .hw = Q6_HW_HANDSET,
233 },
234 {
235 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_DUAL_MIC,
236 .cad_id = CAD_HW_DEVICE_ID_SPKR_PHONE_DUAL_MIC_ENDFIRE,
237 .path = ADIE_CODEC_HANDSET_SPKR_EF_TX,
238 .rate = 8000,
239 .dir = Q6_TX,
240 .codec = Q6_ICODEC_TX,
241 .hw = Q6_HW_SPEAKER,
242 },
243 {
244 .id = ADSP_AUDIO_DEVICE_ID_SPKR_PHONE_DUAL_MIC,
245 .cad_id = CAD_HW_DEVICE_ID_SPKR_PHONE_DUAL_MIC_BROADSIDE,
246 .path = ADIE_CODEC_HANDSET_SPKR_BS_TX,
247 .rate = 8000,
248 .dir = Q6_TX,
249 .codec = Q6_ICODEC_TX,
250 .hw = Q6_HW_SPEAKER,
251 },
252 {
253 .id = ADSP_AUDIO_DEVICE_ID_TTY_HEADSET_MIC,
254 .cad_id = CAD_HW_DEVICE_ID_TTY_HEADSET_MIC,
255 .path = ADIE_PATH_TTY_HEADSET_TX,
256 .rate = 8000,
257 .dir = Q6_TX,
258 .codec = Q6_ICODEC_TX,
259 .hw = Q6_HW_HEADSET,
260 },
261 {
262 .id = ADSP_AUDIO_DEVICE_ID_BT_SCO_SPKR,
263 .cad_id = CAD_HW_DEVICE_ID_BT_SCO_SPKR,
264 .path = 0, /* XXX */
265 .rate = 48000,
266 .dir = Q6_RX,
267 .codec = Q6_ECODEC_RX,
268 .hw = Q6_HW_BT_SCO,
269 },
270 {
271 .id = ADSP_AUDIO_DEVICE_ID_BT_A2DP_SPKR,
272 .cad_id = CAD_HW_DEVICE_ID_BT_A2DP_SPKR,
273 .path = 0, /* XXX */
274 .rate = 48000,
275 .dir = Q6_RX,
276 .codec = Q6_ECODEC_RX,
277 .hw = Q6_HW_BT_A2DP,
278 },
279 {
280 .id = ADSP_AUDIO_DEVICE_ID_BT_SCO_MIC,
281 .cad_id = CAD_HW_DEVICE_ID_BT_SCO_MIC,
282 .path = 0, /* XXX */
283 .rate = 8000,
284 .dir = Q6_TX,
285 .codec = Q6_ECODEC_TX,
286 .hw = Q6_HW_BT_SCO,
287 },
288 {
289 .id = ADSP_AUDIO_DEVICE_ID_I2S_SPKR,
290 .cad_id = CAD_HW_DEVICE_ID_I2S_RX,
291 .path = 0, /* XXX */
292 .rate = 48000,
293 .dir = Q6_RX,
294 .codec = Q6_SDAC_RX,
295 .hw = Q6_HW_SPEAKER,
296 },
297 {
298 .id = ADSP_AUDIO_DEVICE_ID_I2S_MIC,
299 .cad_id = CAD_HW_DEVICE_ID_I2S_TX,
300 .path = 0, /* XXX */
301 .rate = 16000,
302 .dir = Q6_TX,
303 .codec = Q6_SDAC_TX,
304 .hw = Q6_HW_SPEAKER,
305 },
306 {
307 .id = ADSP_AUDIO_DEVICE_ID_AUXPCM_RX,
308 .cad_id = CAD_HW_DEVICE_ID_BT_SCO_SPKR,
309 .path = 0, /* XXX */
310 .rate = 8000,
311 .dir = Q6_RX,
312 .codec = Q6_ECODEC_RX,
313 .hw = Q6_HW_BT_SCO,
314 },
315 {
316 .id = ADSP_AUDIO_DEVICE_ID_AUXPCM_TX,
317 .cad_id = CAD_HW_DEVICE_ID_BT_SCO_MIC,
318 .path = 0, /* XXX */
319 .rate = 8000,
320 .dir = Q6_TX,
321 .codec = Q6_ECODEC_TX,
322 .hw = Q6_HW_BT_SCO,
323 },
324 {
325 .id = 0,
326 .cad_id = 0,
327 .path = 0,
328 .rate = 8000,
329 .dir = 0,
330 .codec = Q6_CODEC_NONE,
331 .hw = 0,
332 },
333};
334