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