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