xref: /linux/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c (revision c0c9379f235df33a12ceae94370ad80c5278324d)
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