1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2020, Linaro Limited
3
4 #include <sound/pcm.h>
5 #include <sound/soc.h>
6 #include <sound/pcm_params.h>
7 #include <dt-bindings/sound/qcom,q6afe.h>
8 #include "q6dsp-lpass-ports.h"
9
10 #define Q6AFE_TDM_PB_DAI(pre, num, did) { \
11 .playback = { \
12 .stream_name = pre" TDM"#num" Playback", \
13 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
14 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\
15 SNDRV_PCM_RATE_176400, \
16 .formats = SNDRV_PCM_FMTBIT_S16_LE | \
17 SNDRV_PCM_FMTBIT_S24_LE | \
18 SNDRV_PCM_FMTBIT_S32_LE, \
19 .channels_min = 1, \
20 .channels_max = 8, \
21 .rate_min = 8000, \
22 .rate_max = 176400, \
23 }, \
24 .name = #did, \
25 .id = did, \
26 }
27
28 #define Q6AFE_TDM_CAP_DAI(pre, num, did) { \
29 .capture = { \
30 .stream_name = pre" TDM"#num" Capture", \
31 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
32 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\
33 SNDRV_PCM_RATE_176400, \
34 .formats = SNDRV_PCM_FMTBIT_S16_LE | \
35 SNDRV_PCM_FMTBIT_S24_LE | \
36 SNDRV_PCM_FMTBIT_S32_LE, \
37 .channels_min = 1, \
38 .channels_max = 8, \
39 .rate_min = 8000, \
40 .rate_max = 176400, \
41 }, \
42 .name = #did, \
43 .id = did, \
44 }
45
46 #define Q6AFE_CDC_DMA_RX_DAI(did) { \
47 .playback = { \
48 .stream_name = #did" Playback", \
49 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
50 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\
51 SNDRV_PCM_RATE_176400, \
52 .formats = SNDRV_PCM_FMTBIT_S16_LE | \
53 SNDRV_PCM_FMTBIT_S24_LE | \
54 SNDRV_PCM_FMTBIT_S32_LE, \
55 .channels_min = 1, \
56 .channels_max = 8, \
57 .rate_min = 8000, \
58 .rate_max = 176400, \
59 }, \
60 .name = #did, \
61 .id = did, \
62 }
63
64 #define Q6AFE_CDC_DMA_TX_DAI(did) { \
65 .capture = { \
66 .stream_name = #did" Capture", \
67 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
68 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\
69 SNDRV_PCM_RATE_176400, \
70 .formats = SNDRV_PCM_FMTBIT_S16_LE | \
71 SNDRV_PCM_FMTBIT_S24_LE | \
72 SNDRV_PCM_FMTBIT_S32_LE, \
73 .channels_min = 1, \
74 .channels_max = 8, \
75 .rate_min = 8000, \
76 .rate_max = 176400, \
77 }, \
78 .name = #did, \
79 .id = did, \
80 }
81
82 #define Q6AFE_DP_RX_DAI(did) { \
83 .playback = { \
84 .stream_name = #did" Playback", \
85 .rates = SNDRV_PCM_RATE_48000 | \
86 SNDRV_PCM_RATE_96000 | \
87 SNDRV_PCM_RATE_192000, \
88 .formats = SNDRV_PCM_FMTBIT_S16_LE | \
89 SNDRV_PCM_FMTBIT_S24_LE, \
90 .channels_min = 2, \
91 .channels_max = 8, \
92 .rate_min = 48000, \
93 .rate_max = 192000, \
94 }, \
95 .name = #did, \
96 .id = did, \
97 }
98
99 static struct snd_soc_dai_driver q6dsp_audio_fe_dais[] = {
100 {
101 .playback = {
102 .stream_name = "USB Playback",
103 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |
104 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
105 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
106 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
107 SNDRV_PCM_RATE_192000,
108 .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE |
109 SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE |
110 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE |
111 SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE,
112 .channels_min = 1,
113 .channels_max = 2,
114 .rate_min = 8000,
115 .rate_max = 192000,
116 },
117 .id = USB_RX,
118 .name = "USB_RX",
119 },
120 {
121 .playback = {
122 .stream_name = "HDMI Playback",
123 .rates = SNDRV_PCM_RATE_48000 |
124 SNDRV_PCM_RATE_96000 |
125 SNDRV_PCM_RATE_192000,
126 .formats = SNDRV_PCM_FMTBIT_S16_LE |
127 SNDRV_PCM_FMTBIT_S24_LE,
128 .channels_min = 2,
129 .channels_max = 8,
130 .rate_max = 192000,
131 .rate_min = 48000,
132 },
133 .id = HDMI_RX,
134 .name = "HDMI",
135 }, {
136 .name = "SLIMBUS_0_RX",
137 .id = SLIMBUS_0_RX,
138 .playback = {
139 .stream_name = "Slimbus Playback",
140 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
141 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
142 SNDRV_PCM_RATE_192000,
143 .formats = SNDRV_PCM_FMTBIT_S16_LE |
144 SNDRV_PCM_FMTBIT_S24_LE,
145 .channels_min = 1,
146 .channels_max = 8,
147 .rate_min = 8000,
148 .rate_max = 192000,
149 },
150 }, {
151 .name = "SLIMBUS_0_TX",
152 .id = SLIMBUS_0_TX,
153 .capture = {
154 .stream_name = "Slimbus Capture",
155 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
156 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
157 SNDRV_PCM_RATE_192000,
158 .formats = SNDRV_PCM_FMTBIT_S16_LE |
159 SNDRV_PCM_FMTBIT_S24_LE,
160 .channels_min = 1,
161 .channels_max = 8,
162 .rate_min = 8000,
163 .rate_max = 192000,
164 },
165 }, {
166 .playback = {
167 .stream_name = "Slimbus1 Playback",
168 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
169 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
170 SNDRV_PCM_RATE_192000,
171 .formats = SNDRV_PCM_FMTBIT_S16_LE |
172 SNDRV_PCM_FMTBIT_S24_LE,
173 .channels_min = 1,
174 .channels_max = 2,
175 .rate_min = 8000,
176 .rate_max = 192000,
177 },
178 .name = "SLIMBUS_1_RX",
179 .id = SLIMBUS_1_RX,
180 }, {
181 .name = "SLIMBUS_1_TX",
182 .id = SLIMBUS_1_TX,
183 .capture = {
184 .stream_name = "Slimbus1 Capture",
185 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
186 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
187 SNDRV_PCM_RATE_192000,
188 .formats = SNDRV_PCM_FMTBIT_S16_LE |
189 SNDRV_PCM_FMTBIT_S24_LE,
190 .channels_min = 1,
191 .channels_max = 8,
192 .rate_min = 8000,
193 .rate_max = 192000,
194 },
195 }, {
196 .playback = {
197 .stream_name = "Slimbus2 Playback",
198 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
199 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
200 SNDRV_PCM_RATE_192000,
201 .formats = SNDRV_PCM_FMTBIT_S16_LE |
202 SNDRV_PCM_FMTBIT_S24_LE,
203 .channels_min = 1,
204 .channels_max = 8,
205 .rate_min = 8000,
206 .rate_max = 192000,
207 },
208 .name = "SLIMBUS_2_RX",
209 .id = SLIMBUS_2_RX,
210
211 }, {
212 .name = "SLIMBUS_2_TX",
213 .id = SLIMBUS_2_TX,
214 .capture = {
215 .stream_name = "Slimbus2 Capture",
216 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
217 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
218 SNDRV_PCM_RATE_192000,
219 .formats = SNDRV_PCM_FMTBIT_S16_LE |
220 SNDRV_PCM_FMTBIT_S24_LE,
221 .channels_min = 1,
222 .channels_max = 8,
223 .rate_min = 8000,
224 .rate_max = 192000,
225 },
226 }, {
227 .playback = {
228 .stream_name = "Slimbus3 Playback",
229 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
230 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
231 SNDRV_PCM_RATE_192000,
232 .formats = SNDRV_PCM_FMTBIT_S16_LE |
233 SNDRV_PCM_FMTBIT_S24_LE,
234 .channels_min = 1,
235 .channels_max = 2,
236 .rate_min = 8000,
237 .rate_max = 192000,
238 },
239 .name = "SLIMBUS_3_RX",
240 .id = SLIMBUS_3_RX,
241
242 }, {
243 .name = "SLIMBUS_3_TX",
244 .id = SLIMBUS_3_TX,
245 .capture = {
246 .stream_name = "Slimbus3 Capture",
247 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
248 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
249 SNDRV_PCM_RATE_192000,
250 .formats = SNDRV_PCM_FMTBIT_S16_LE |
251 SNDRV_PCM_FMTBIT_S24_LE,
252 .channels_min = 1,
253 .channels_max = 8,
254 .rate_min = 8000,
255 .rate_max = 192000,
256 },
257 }, {
258 .playback = {
259 .stream_name = "Slimbus4 Playback",
260 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
261 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
262 SNDRV_PCM_RATE_192000,
263 .formats = SNDRV_PCM_FMTBIT_S16_LE |
264 SNDRV_PCM_FMTBIT_S24_LE,
265 .channels_min = 1,
266 .channels_max = 2,
267 .rate_min = 8000,
268 .rate_max = 192000,
269 },
270 .name = "SLIMBUS_4_RX",
271 .id = SLIMBUS_4_RX,
272
273 }, {
274 .name = "SLIMBUS_4_TX",
275 .id = SLIMBUS_4_TX,
276 .capture = {
277 .stream_name = "Slimbus4 Capture",
278 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
279 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
280 SNDRV_PCM_RATE_192000,
281 .formats = SNDRV_PCM_FMTBIT_S16_LE |
282 SNDRV_PCM_FMTBIT_S24_LE,
283 .channels_min = 1,
284 .channels_max = 8,
285 .rate_min = 8000,
286 .rate_max = 192000,
287 },
288 }, {
289 .playback = {
290 .stream_name = "Slimbus5 Playback",
291 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
292 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
293 SNDRV_PCM_RATE_192000,
294 .formats = SNDRV_PCM_FMTBIT_S16_LE |
295 SNDRV_PCM_FMTBIT_S24_LE,
296 .channels_min = 1,
297 .channels_max = 2,
298 .rate_min = 8000,
299 .rate_max = 192000,
300 },
301 .name = "SLIMBUS_5_RX",
302 .id = SLIMBUS_5_RX,
303
304 }, {
305 .name = "SLIMBUS_5_TX",
306 .id = SLIMBUS_5_TX,
307 .capture = {
308 .stream_name = "Slimbus5 Capture",
309 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
310 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
311 SNDRV_PCM_RATE_192000,
312 .formats = SNDRV_PCM_FMTBIT_S16_LE |
313 SNDRV_PCM_FMTBIT_S24_LE,
314 .channels_min = 1,
315 .channels_max = 8,
316 .rate_min = 8000,
317 .rate_max = 192000,
318 },
319 }, {
320 .playback = {
321 .stream_name = "Slimbus6 Playback",
322 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
323 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
324 SNDRV_PCM_RATE_192000,
325 .formats = SNDRV_PCM_FMTBIT_S16_LE |
326 SNDRV_PCM_FMTBIT_S24_LE,
327 .channels_min = 1,
328 .channels_max = 2,
329 .rate_min = 8000,
330 .rate_max = 192000,
331 },
332 .name = "SLIMBUS_6_RX",
333 .id = SLIMBUS_6_RX,
334
335 }, {
336 .name = "SLIMBUS_6_TX",
337 .id = SLIMBUS_6_TX,
338 .capture = {
339 .stream_name = "Slimbus6 Capture",
340 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
341 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
342 SNDRV_PCM_RATE_192000,
343 .formats = SNDRV_PCM_FMTBIT_S16_LE |
344 SNDRV_PCM_FMTBIT_S24_LE,
345 .channels_min = 1,
346 .channels_max = 8,
347 .rate_min = 8000,
348 .rate_max = 192000,
349 },
350 }, {
351 .playback = {
352 .stream_name = "Primary MI2S Playback",
353 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
354 SNDRV_PCM_RATE_16000,
355 .formats = SNDRV_PCM_FMTBIT_S16_LE |
356 SNDRV_PCM_FMTBIT_S24_LE,
357 .channels_min = 1,
358 .channels_max = 8,
359 .rate_min = 8000,
360 .rate_max = 48000,
361 },
362 .id = PRIMARY_MI2S_RX,
363 .name = "PRI_MI2S_RX",
364 }, {
365 .capture = {
366 .stream_name = "Primary MI2S Capture",
367 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
368 SNDRV_PCM_RATE_16000,
369 .formats = SNDRV_PCM_FMTBIT_S16_LE |
370 SNDRV_PCM_FMTBIT_S24_LE,
371 .channels_min = 1,
372 .channels_max = 8,
373 .rate_min = 8000,
374 .rate_max = 48000,
375 },
376 .id = PRIMARY_MI2S_TX,
377 .name = "PRI_MI2S_TX",
378 }, {
379 .playback = {
380 .stream_name = "Secondary MI2S Playback",
381 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
382 SNDRV_PCM_RATE_16000,
383 .formats = SNDRV_PCM_FMTBIT_S16_LE,
384 .channels_min = 1,
385 .channels_max = 8,
386 .rate_min = 8000,
387 .rate_max = 48000,
388 },
389 .name = "SEC_MI2S_RX",
390 .id = SECONDARY_MI2S_RX,
391 }, {
392 .capture = {
393 .stream_name = "Secondary MI2S Capture",
394 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
395 SNDRV_PCM_RATE_16000,
396 .formats = SNDRV_PCM_FMTBIT_S16_LE |
397 SNDRV_PCM_FMTBIT_S24_LE,
398 .channels_min = 1,
399 .channels_max = 8,
400 .rate_min = 8000,
401 .rate_max = 48000,
402 },
403 .id = SECONDARY_MI2S_TX,
404 .name = "SEC_MI2S_TX",
405 }, {
406 .playback = {
407 .stream_name = "Tertiary MI2S Playback",
408 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
409 SNDRV_PCM_RATE_16000,
410 .formats = SNDRV_PCM_FMTBIT_S16_LE,
411 .channels_min = 1,
412 .channels_max = 8,
413 .rate_min = 8000,
414 .rate_max = 48000,
415 },
416 .name = "TERT_MI2S_RX",
417 .id = TERTIARY_MI2S_RX,
418 }, {
419 .capture = {
420 .stream_name = "Tertiary MI2S Capture",
421 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
422 SNDRV_PCM_RATE_16000,
423 .formats = SNDRV_PCM_FMTBIT_S16_LE |
424 SNDRV_PCM_FMTBIT_S24_LE,
425 .channels_min = 1,
426 .channels_max = 8,
427 .rate_min = 8000,
428 .rate_max = 48000,
429 },
430 .id = TERTIARY_MI2S_TX,
431 .name = "TERT_MI2S_TX",
432 }, {
433 .playback = {
434 .stream_name = "Quaternary MI2S Playback",
435 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
436 SNDRV_PCM_RATE_16000,
437 .formats = SNDRV_PCM_FMTBIT_S16_LE,
438 .channels_min = 1,
439 .channels_max = 8,
440 .rate_min = 8000,
441 .rate_max = 48000,
442 },
443 .name = "QUAT_MI2S_RX",
444 .id = QUATERNARY_MI2S_RX,
445 }, {
446 .capture = {
447 .stream_name = "Quaternary MI2S Capture",
448 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
449 SNDRV_PCM_RATE_16000,
450 .formats = SNDRV_PCM_FMTBIT_S16_LE |
451 SNDRV_PCM_FMTBIT_S24_LE,
452 .channels_min = 1,
453 .channels_max = 8,
454 .rate_min = 8000,
455 .rate_max = 48000,
456 },
457 .id = QUATERNARY_MI2S_TX,
458 .name = "QUAT_MI2S_TX",
459 }, {
460 .playback = {
461 .stream_name = "Quinary MI2S Playback",
462 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
463 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_96000 |
464 SNDRV_PCM_RATE_192000,
465 .formats = SNDRV_PCM_FMTBIT_S16_LE,
466 .channels_min = 1,
467 .channels_max = 8,
468 .rate_min = 8000,
469 .rate_max = 192000,
470 },
471 .id = QUINARY_MI2S_RX,
472 .name = "QUIN_MI2S_RX",
473 }, {
474 .capture = {
475 .stream_name = "Quinary MI2S Capture",
476 .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
477 SNDRV_PCM_RATE_16000,
478 .formats = SNDRV_PCM_FMTBIT_S16_LE,
479 .channels_min = 1,
480 .channels_max = 8,
481 .rate_min = 8000,
482 .rate_max = 48000,
483 },
484 .id = QUINARY_MI2S_TX,
485 .name = "QUIN_MI2S_TX",
486 },
487 Q6AFE_TDM_PB_DAI("Primary", 0, PRIMARY_TDM_RX_0),
488 Q6AFE_TDM_PB_DAI("Primary", 1, PRIMARY_TDM_RX_1),
489 Q6AFE_TDM_PB_DAI("Primary", 2, PRIMARY_TDM_RX_2),
490 Q6AFE_TDM_PB_DAI("Primary", 3, PRIMARY_TDM_RX_3),
491 Q6AFE_TDM_PB_DAI("Primary", 4, PRIMARY_TDM_RX_4),
492 Q6AFE_TDM_PB_DAI("Primary", 5, PRIMARY_TDM_RX_5),
493 Q6AFE_TDM_PB_DAI("Primary", 6, PRIMARY_TDM_RX_6),
494 Q6AFE_TDM_PB_DAI("Primary", 7, PRIMARY_TDM_RX_7),
495 Q6AFE_TDM_CAP_DAI("Primary", 0, PRIMARY_TDM_TX_0),
496 Q6AFE_TDM_CAP_DAI("Primary", 1, PRIMARY_TDM_TX_1),
497 Q6AFE_TDM_CAP_DAI("Primary", 2, PRIMARY_TDM_TX_2),
498 Q6AFE_TDM_CAP_DAI("Primary", 3, PRIMARY_TDM_TX_3),
499 Q6AFE_TDM_CAP_DAI("Primary", 4, PRIMARY_TDM_TX_4),
500 Q6AFE_TDM_CAP_DAI("Primary", 5, PRIMARY_TDM_TX_5),
501 Q6AFE_TDM_CAP_DAI("Primary", 6, PRIMARY_TDM_TX_6),
502 Q6AFE_TDM_CAP_DAI("Primary", 7, PRIMARY_TDM_TX_7),
503 Q6AFE_TDM_PB_DAI("Secondary", 0, SECONDARY_TDM_RX_0),
504 Q6AFE_TDM_PB_DAI("Secondary", 1, SECONDARY_TDM_RX_1),
505 Q6AFE_TDM_PB_DAI("Secondary", 2, SECONDARY_TDM_RX_2),
506 Q6AFE_TDM_PB_DAI("Secondary", 3, SECONDARY_TDM_RX_3),
507 Q6AFE_TDM_PB_DAI("Secondary", 4, SECONDARY_TDM_RX_4),
508 Q6AFE_TDM_PB_DAI("Secondary", 5, SECONDARY_TDM_RX_5),
509 Q6AFE_TDM_PB_DAI("Secondary", 6, SECONDARY_TDM_RX_6),
510 Q6AFE_TDM_PB_DAI("Secondary", 7, SECONDARY_TDM_RX_7),
511 Q6AFE_TDM_CAP_DAI("Secondary", 0, SECONDARY_TDM_TX_0),
512 Q6AFE_TDM_CAP_DAI("Secondary", 1, SECONDARY_TDM_TX_1),
513 Q6AFE_TDM_CAP_DAI("Secondary", 2, SECONDARY_TDM_TX_2),
514 Q6AFE_TDM_CAP_DAI("Secondary", 3, SECONDARY_TDM_TX_3),
515 Q6AFE_TDM_CAP_DAI("Secondary", 4, SECONDARY_TDM_TX_4),
516 Q6AFE_TDM_CAP_DAI("Secondary", 5, SECONDARY_TDM_TX_5),
517 Q6AFE_TDM_CAP_DAI("Secondary", 6, SECONDARY_TDM_TX_6),
518 Q6AFE_TDM_CAP_DAI("Secondary", 7, SECONDARY_TDM_TX_7),
519 Q6AFE_TDM_PB_DAI("Tertiary", 0, TERTIARY_TDM_RX_0),
520 Q6AFE_TDM_PB_DAI("Tertiary", 1, TERTIARY_TDM_RX_1),
521 Q6AFE_TDM_PB_DAI("Tertiary", 2, TERTIARY_TDM_RX_2),
522 Q6AFE_TDM_PB_DAI("Tertiary", 3, TERTIARY_TDM_RX_3),
523 Q6AFE_TDM_PB_DAI("Tertiary", 4, TERTIARY_TDM_RX_4),
524 Q6AFE_TDM_PB_DAI("Tertiary", 5, TERTIARY_TDM_RX_5),
525 Q6AFE_TDM_PB_DAI("Tertiary", 6, TERTIARY_TDM_RX_6),
526 Q6AFE_TDM_PB_DAI("Tertiary", 7, TERTIARY_TDM_RX_7),
527 Q6AFE_TDM_CAP_DAI("Tertiary", 0, TERTIARY_TDM_TX_0),
528 Q6AFE_TDM_CAP_DAI("Tertiary", 1, TERTIARY_TDM_TX_1),
529 Q6AFE_TDM_CAP_DAI("Tertiary", 2, TERTIARY_TDM_TX_2),
530 Q6AFE_TDM_CAP_DAI("Tertiary", 3, TERTIARY_TDM_TX_3),
531 Q6AFE_TDM_CAP_DAI("Tertiary", 4, TERTIARY_TDM_TX_4),
532 Q6AFE_TDM_CAP_DAI("Tertiary", 5, TERTIARY_TDM_TX_5),
533 Q6AFE_TDM_CAP_DAI("Tertiary", 6, TERTIARY_TDM_TX_6),
534 Q6AFE_TDM_CAP_DAI("Tertiary", 7, TERTIARY_TDM_TX_7),
535 Q6AFE_TDM_PB_DAI("Quaternary", 0, QUATERNARY_TDM_RX_0),
536 Q6AFE_TDM_PB_DAI("Quaternary", 1, QUATERNARY_TDM_RX_1),
537 Q6AFE_TDM_PB_DAI("Quaternary", 2, QUATERNARY_TDM_RX_2),
538 Q6AFE_TDM_PB_DAI("Quaternary", 3, QUATERNARY_TDM_RX_3),
539 Q6AFE_TDM_PB_DAI("Quaternary", 4, QUATERNARY_TDM_RX_4),
540 Q6AFE_TDM_PB_DAI("Quaternary", 5, QUATERNARY_TDM_RX_5),
541 Q6AFE_TDM_PB_DAI("Quaternary", 6, QUATERNARY_TDM_RX_6),
542 Q6AFE_TDM_PB_DAI("Quaternary", 7, QUATERNARY_TDM_RX_7),
543 Q6AFE_TDM_CAP_DAI("Quaternary", 0, QUATERNARY_TDM_TX_0),
544 Q6AFE_TDM_CAP_DAI("Quaternary", 1, QUATERNARY_TDM_TX_1),
545 Q6AFE_TDM_CAP_DAI("Quaternary", 2, QUATERNARY_TDM_TX_2),
546 Q6AFE_TDM_CAP_DAI("Quaternary", 3, QUATERNARY_TDM_TX_3),
547 Q6AFE_TDM_CAP_DAI("Quaternary", 4, QUATERNARY_TDM_TX_4),
548 Q6AFE_TDM_CAP_DAI("Quaternary", 5, QUATERNARY_TDM_TX_5),
549 Q6AFE_TDM_CAP_DAI("Quaternary", 6, QUATERNARY_TDM_TX_6),
550 Q6AFE_TDM_CAP_DAI("Quaternary", 7, QUATERNARY_TDM_TX_7),
551 Q6AFE_TDM_PB_DAI("Quinary", 0, QUINARY_TDM_RX_0),
552 Q6AFE_TDM_PB_DAI("Quinary", 1, QUINARY_TDM_RX_1),
553 Q6AFE_TDM_PB_DAI("Quinary", 2, QUINARY_TDM_RX_2),
554 Q6AFE_TDM_PB_DAI("Quinary", 3, QUINARY_TDM_RX_3),
555 Q6AFE_TDM_PB_DAI("Quinary", 4, QUINARY_TDM_RX_4),
556 Q6AFE_TDM_PB_DAI("Quinary", 5, QUINARY_TDM_RX_5),
557 Q6AFE_TDM_PB_DAI("Quinary", 6, QUINARY_TDM_RX_6),
558 Q6AFE_TDM_PB_DAI("Quinary", 7, QUINARY_TDM_RX_7),
559 Q6AFE_TDM_CAP_DAI("Quinary", 0, QUINARY_TDM_TX_0),
560 Q6AFE_TDM_CAP_DAI("Quinary", 1, QUINARY_TDM_TX_1),
561 Q6AFE_TDM_CAP_DAI("Quinary", 2, QUINARY_TDM_TX_2),
562 Q6AFE_TDM_CAP_DAI("Quinary", 3, QUINARY_TDM_TX_3),
563 Q6AFE_TDM_CAP_DAI("Quinary", 4, QUINARY_TDM_TX_4),
564 Q6AFE_TDM_CAP_DAI("Quinary", 5, QUINARY_TDM_TX_5),
565 Q6AFE_TDM_CAP_DAI("Quinary", 6, QUINARY_TDM_TX_6),
566 Q6AFE_TDM_CAP_DAI("Quinary", 7, QUINARY_TDM_TX_7),
567 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_0),
568 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_1),
569 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_2),
570 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_3),
571 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_4),
572 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_5),
573 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_6),
574 Q6AFE_DP_RX_DAI(DISPLAY_PORT_RX_7),
575 Q6AFE_CDC_DMA_RX_DAI(WSA_CODEC_DMA_RX_0),
576 Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_0),
577 Q6AFE_CDC_DMA_RX_DAI(WSA_CODEC_DMA_RX_1),
578 Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_1),
579 Q6AFE_CDC_DMA_TX_DAI(WSA_CODEC_DMA_TX_2),
580 Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_0),
581 Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_1),
582 Q6AFE_CDC_DMA_TX_DAI(VA_CODEC_DMA_TX_2),
583 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_0),
584 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_0),
585 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_1),
586 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_1),
587 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_2),
588 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_2),
589 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_3),
590 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_3),
591 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_4),
592 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_4),
593 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_5),
594 Q6AFE_CDC_DMA_TX_DAI(TX_CODEC_DMA_TX_5),
595 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_6),
596 Q6AFE_CDC_DMA_RX_DAI(RX_CODEC_DMA_RX_7),
597 };
598
q6dsp_audio_ports_of_xlate_dai_name(struct snd_soc_component * component,const struct of_phandle_args * args,const char ** dai_name)599 int q6dsp_audio_ports_of_xlate_dai_name(struct snd_soc_component *component,
600 const struct of_phandle_args *args,
601 const char **dai_name)
602 {
603 int id = args->args[0];
604 int ret = -EINVAL;
605 int i;
606
607 for (i = 0; i < ARRAY_SIZE(q6dsp_audio_fe_dais); i++) {
608 if (q6dsp_audio_fe_dais[i].id == id) {
609 *dai_name = q6dsp_audio_fe_dais[i].name;
610 ret = 0;
611 break;
612 }
613 }
614
615 return ret;
616 }
617 EXPORT_SYMBOL_GPL(q6dsp_audio_ports_of_xlate_dai_name);
618
q6dsp_audio_ports_set_config(struct device * dev,struct q6dsp_audio_port_dai_driver_config * cfg,int * num_dais)619 struct snd_soc_dai_driver *q6dsp_audio_ports_set_config(struct device *dev,
620 struct q6dsp_audio_port_dai_driver_config *cfg,
621 int *num_dais)
622 {
623 int i;
624
625 for (i = 0; i < ARRAY_SIZE(q6dsp_audio_fe_dais); i++) {
626 switch (q6dsp_audio_fe_dais[i].id) {
627 case HDMI_RX:
628 case DISPLAY_PORT_RX:
629 q6dsp_audio_fe_dais[i].ops = cfg->q6hdmi_ops;
630 break;
631 case DISPLAY_PORT_RX_1 ... DISPLAY_PORT_RX_7:
632 q6dsp_audio_fe_dais[i].ops = cfg->q6hdmi_ops;
633 break;
634 case SLIMBUS_0_RX ... SLIMBUS_6_TX:
635 q6dsp_audio_fe_dais[i].ops = cfg->q6slim_ops;
636 break;
637 case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
638 case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
639 q6dsp_audio_fe_dais[i].ops = cfg->q6i2s_ops;
640 break;
641 case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7:
642 q6dsp_audio_fe_dais[i].ops = cfg->q6tdm_ops;
643 break;
644 case WSA_CODEC_DMA_RX_0 ... RX_CODEC_DMA_RX_7:
645 q6dsp_audio_fe_dais[i].ops = cfg->q6dma_ops;
646 break;
647 case USB_RX:
648 q6dsp_audio_fe_dais[i].ops = cfg->q6usb_ops;
649 break;
650 default:
651 break;
652 }
653 }
654
655 *num_dais = ARRAY_SIZE(q6dsp_audio_fe_dais);
656 return q6dsp_audio_fe_dais;
657 }
658 EXPORT_SYMBOL_GPL(q6dsp_audio_ports_set_config);
659