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