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
99static 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
579int 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}
597EXPORT_SYMBOL_GPL(q6dsp_audio_ports_of_xlate_dai_name);
598
599struct 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}
635EXPORT_SYMBOL_GPL(q6dsp_audio_ports_set_config);
636