File Index
Files and directories
Sign in
FILE

q6dsp-lpass-ports.c

File preview with syntax highlighting.

linux-6.19.14/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c C
  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 = "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
599int 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}
617EXPORT_SYMBOL_GPL(q6dsp_audio_ports_of_xlate_dai_name);
618
619struct 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}
658EXPORT_SYMBOL_GPL(q6dsp_audio_ports_set_config);
~/ Read-only file preview.