blob: 89a9cc24a2e05c7fb5ae7a1cd11a3bb39757253f [file] [log] [blame]
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05301/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13
14#include <linux/init.h>
15#include <linux/module.h>
16#include <linux/device.h>
17#include <linux/platform_device.h>
18#include <linux/of_device.h>
19#include <sound/core.h>
20#include <sound/pcm.h>
21#include <sound/soc.h>
22
23static struct snd_soc_dai_ops msm_fe_dai_ops = {};
24
25/* Conventional and unconventional sample rate supported */
26static unsigned int supported_sample_rates[] = {
27 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000,
28 88200, 96000, 176400, 192000, 352800, 384000
29};
30
31static struct snd_pcm_hw_constraint_list constraints_sample_rates = {
32 .count = ARRAY_SIZE(supported_sample_rates),
33 .list = supported_sample_rates,
34 .mask = 0,
35};
36
37static int multimedia_startup(struct snd_pcm_substream *substream,
38 struct snd_soc_dai *dai)
39{
40 snd_pcm_hw_constraint_list(substream->runtime, 0,
41 SNDRV_PCM_HW_PARAM_RATE,
42 &constraints_sample_rates);
43 return 0;
44}
45
46static int fe_dai_probe(struct snd_soc_dai *dai)
47{
48 struct snd_soc_dapm_route intercon;
49 struct snd_soc_dapm_context *dapm;
50
51 if (!dai || !dai->driver) {
52 pr_err("%s invalid params\n", __func__);
53 return -EINVAL;
54 }
55 dapm = snd_soc_component_get_dapm(dai->component);
56 memset(&intercon, 0, sizeof(intercon));
57 if (dai->driver->playback.stream_name &&
58 dai->driver->playback.aif_name) {
59 dev_dbg(dai->dev, "%s add route for widget %s",
60 __func__, dai->driver->playback.stream_name);
61 intercon.source = dai->driver->playback.stream_name;
62 intercon.sink = dai->driver->playback.aif_name;
63 dev_dbg(dai->dev, "%s src %s sink %s\n",
64 __func__, intercon.source, intercon.sink);
65 snd_soc_dapm_add_routes(dapm, &intercon, 1);
66 snd_soc_dapm_ignore_suspend(dapm, intercon.source);
67 }
68 if (dai->driver->capture.stream_name &&
69 dai->driver->capture.aif_name) {
70 dev_dbg(dai->dev, "%s add route for widget %s",
71 __func__, dai->driver->capture.stream_name);
72 intercon.sink = dai->driver->capture.stream_name;
73 intercon.source = dai->driver->capture.aif_name;
74 dev_dbg(dai->dev, "%s src %s sink %s\n",
75 __func__, intercon.source, intercon.sink);
76 snd_soc_dapm_add_routes(dapm, &intercon, 1);
77 snd_soc_dapm_ignore_suspend(dapm, intercon.sink);
78 }
79 return 0;
80}
81
82static struct snd_soc_dai_ops msm_fe_Multimedia_dai_ops = {
83 .startup = multimedia_startup,
84};
85
86static const struct snd_soc_component_driver msm_fe_dai_component = {
87 .name = "msm-dai-fe",
88};
89
90static struct snd_soc_dai_driver msm_fe_dais[] = {
91 {
92 .playback = {
93 .stream_name = "MultiMedia1 Playback",
94 .aif_name = "MM_DL1",
95 .rates = (SNDRV_PCM_RATE_8000_384000|
96 SNDRV_PCM_RATE_KNOT),
97 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
98 SNDRV_PCM_FMTBIT_S24_LE |
99 SNDRV_PCM_FMTBIT_S24_3LE |
100 SNDRV_PCM_FMTBIT_S32_LE),
101 .channels_min = 1,
102 .channels_max = 8,
103 .rate_min = 8000,
104 .rate_max = 384000,
105 },
106 .capture = {
107 .stream_name = "MultiMedia1 Capture",
108 .aif_name = "MM_UL1",
109 .rates = (SNDRV_PCM_RATE_8000_384000|
110 SNDRV_PCM_RATE_KNOT),
111 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
112 SNDRV_PCM_FMTBIT_S24_LE |
113 SNDRV_PCM_FMTBIT_S24_3LE |
114 SNDRV_PCM_FMTBIT_S32_LE),
115 .channels_min = 1,
116 .channels_max = 8,
117 .rate_min = 8000,
118 .rate_max = 48000,
119 },
120 .ops = &msm_fe_Multimedia_dai_ops,
121 .name = "MultiMedia1",
122 .probe = fe_dai_probe,
123 },
124 {
125 .playback = {
126 .stream_name = "MultiMedia2 Playback",
127 .aif_name = "MM_DL2",
128 .rates = (SNDRV_PCM_RATE_8000_384000|
129 SNDRV_PCM_RATE_KNOT),
130 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
131 SNDRV_PCM_FMTBIT_S24_LE |
132 SNDRV_PCM_FMTBIT_S24_3LE |
133 SNDRV_PCM_FMTBIT_S32_LE),
134 .channels_min = 1,
135 .channels_max = 8,
136 .rate_min = 8000,
137 .rate_max = 384000,
138 },
139 .capture = {
140 .stream_name = "MultiMedia2 Capture",
141 .aif_name = "MM_UL2",
142 .rates = (SNDRV_PCM_RATE_8000_384000|
143 SNDRV_PCM_RATE_KNOT),
144 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
145 SNDRV_PCM_FMTBIT_S24_LE |
146 SNDRV_PCM_FMTBIT_S24_3LE |
147 SNDRV_PCM_FMTBIT_S32_LE),
148 .channels_min = 1,
149 .channels_max = 8,
150 .rate_min = 8000,
151 .rate_max = 48000,
152 },
153 .ops = &msm_fe_Multimedia_dai_ops,
154 .name = "MultiMedia2",
155 .probe = fe_dai_probe,
156 },
157 {
158 .playback = {
159 .stream_name = "CS-VOICE Playback",
160 .aif_name = "CS-VOICE_DL1",
161 .rates = SNDRV_PCM_RATE_8000_48000,
162 .formats = SNDRV_PCM_FMTBIT_S16_LE,
163 .channels_min = 1,
164 .channels_max = 2,
165 .rate_min = 8000,
166 .rate_max = 48000,
167 },
168 .capture = {
169 .stream_name = "CS-VOICE Capture",
170 .aif_name = "CS-VOICE_UL1",
171 .rates = SNDRV_PCM_RATE_8000_48000,
172 .formats = SNDRV_PCM_FMTBIT_S16_LE,
173 .channels_min = 1,
174 .channels_max = 2,
175 .rate_min = 8000,
176 .rate_max = 48000,
177 },
178 .ops = &msm_fe_dai_ops,
179 .name = "CS-VOICE",
180 .probe = fe_dai_probe,
181 },
182 {
183 .playback = {
184 .stream_name = "VoIP Playback",
185 .aif_name = "VOIP_DL",
186 .rates = SNDRV_PCM_RATE_8000_48000,
187 .formats = SNDRV_PCM_FMTBIT_S16_LE |
188 SNDRV_PCM_FMTBIT_SPECIAL,
189 .channels_min = 1,
190 .channels_max = 2,
191 .rate_min = 8000,
192 .rate_max = 48000,
193 },
194 .capture = {
195 .stream_name = "VoIP Capture",
196 .aif_name = "VOIP_UL",
197 .rates = SNDRV_PCM_RATE_8000_48000,
198 .formats = SNDRV_PCM_FMTBIT_S16_LE |
199 SNDRV_PCM_FMTBIT_SPECIAL,
200 .channels_min = 1,
201 .channels_max = 2,
202 .rate_min = 8000,
203 .rate_max = 48000,
204 },
205 .ops = &msm_fe_dai_ops,
206 .name = "VoIP",
207 .probe = fe_dai_probe,
208 },
209 {
210 .playback = {
211 .stream_name = "MultiMedia3 Playback",
212 .aif_name = "MM_DL3",
213 .rates = (SNDRV_PCM_RATE_8000_384000 |
214 SNDRV_PCM_RATE_KNOT),
215 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
216 SNDRV_PCM_FMTBIT_S24_LE |
217 SNDRV_PCM_FMTBIT_S24_3LE |
218 SNDRV_PCM_FMTBIT_S32_LE),
219 .channels_min = 1,
220 .channels_max = 6,
221 .rate_min = 8000,
222 .rate_max = 384000,
223 },
224 .capture = {
225 .stream_name = "MultiMedia3 Capture",
226 .aif_name = "MM_UL3",
227 .rates = (SNDRV_PCM_RATE_8000_384000|
228 SNDRV_PCM_RATE_KNOT),
229 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
230 SNDRV_PCM_FMTBIT_S24_LE |
231 SNDRV_PCM_FMTBIT_S24_3LE |
232 SNDRV_PCM_FMTBIT_S32_LE),
233 .channels_min = 1,
234 .channels_max = 8,
235 .rate_min = 8000,
236 .rate_max = 48000,
237 },
238 .ops = &msm_fe_Multimedia_dai_ops,
239 .name = "MultiMedia3",
240 .probe = fe_dai_probe,
241 },
242 {
243 .playback = {
244 .stream_name = "MultiMedia4 Playback",
245 .aif_name = "MM_DL4",
246 .rates = (SNDRV_PCM_RATE_8000_384000 |
247 SNDRV_PCM_RATE_KNOT),
248 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
249 SNDRV_PCM_FMTBIT_S24_LE |
250 SNDRV_PCM_FMTBIT_S24_3LE |
251 SNDRV_PCM_FMTBIT_S32_LE),
252 .channels_min = 1,
253 .channels_max = 8,
254 .rate_min = 8000,
255 .rate_max = 384000,
256 },
257 .ops = &msm_fe_Multimedia_dai_ops,
258 .compress_new = snd_soc_new_compress,
259 .name = "MultiMedia4",
260 .probe = fe_dai_probe,
261 },
262 {
263 .playback = {
264 .stream_name = "MultiMedia5 Playback",
265 .aif_name = "MM_DL5",
266 .rates = (SNDRV_PCM_RATE_8000_384000 |
267 SNDRV_PCM_RATE_KNOT),
268 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
269 SNDRV_PCM_FMTBIT_S24_LE |
270 SNDRV_PCM_FMTBIT_S24_3LE |
271 SNDRV_PCM_FMTBIT_S32_LE),
272 .channels_min = 1,
273 .channels_max = 8,
274 .rate_min = 8000,
275 .rate_max = 384000,
276 },
277 .capture = {
278 .stream_name = "MultiMedia5 Capture",
279 .aif_name = "MM_UL5",
280 .rates = (SNDRV_PCM_RATE_8000_48000|
281 SNDRV_PCM_RATE_KNOT),
282 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
283 SNDRV_PCM_FMTBIT_S24_LE |
284 SNDRV_PCM_FMTBIT_S24_3LE |
285 SNDRV_PCM_FMTBIT_S32_LE),
286 .channels_min = 1,
287 .channels_max = 8,
288 .rate_min = 8000,
289 .rate_max = 48000,
290 },
291 .ops = &msm_fe_Multimedia_dai_ops,
292 .name = "MultiMedia5",
293 .probe = fe_dai_probe,
294 },
295 {
296 .playback = {
297 .stream_name = "MultiMedia6 Playback",
298 .aif_name = "MM_DL6",
299 .rates = (SNDRV_PCM_RATE_8000_384000 |
300 SNDRV_PCM_RATE_KNOT),
301 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
302 SNDRV_PCM_FMTBIT_S24_LE |
303 SNDRV_PCM_FMTBIT_S24_3LE |
304 SNDRV_PCM_FMTBIT_S32_LE),
305 .channels_min = 1,
306 .channels_max = 8,
307 .rate_min = 8000,
308 .rate_max = 384000,
309 },
310 .capture = {
311 .stream_name = "MultiMedia6 Capture",
312 .aif_name = "MM_UL6",
313 .rates = (SNDRV_PCM_RATE_8000_48000|
314 SNDRV_PCM_RATE_KNOT),
315 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
316 SNDRV_PCM_FMTBIT_S24_LE |
317 SNDRV_PCM_FMTBIT_S24_3LE |
318 SNDRV_PCM_FMTBIT_S32_LE),
319 .channels_min = 1,
320 .channels_max = 8,
321 .rate_min = 8000,
322 .rate_max = 48000,
323 },
324 .ops = &msm_fe_Multimedia_dai_ops,
325 .name = "MultiMedia6",
326 .probe = fe_dai_probe,
327 },
328 {
329 .playback = {
330 .stream_name = "MultiMedia7 Playback",
331 .aif_name = "MM_DL7",
332 .rates = (SNDRV_PCM_RATE_8000_384000 |
333 SNDRV_PCM_RATE_KNOT),
334 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
335 SNDRV_PCM_FMTBIT_S24_LE |
336 SNDRV_PCM_FMTBIT_S24_3LE |
337 SNDRV_PCM_FMTBIT_S32_LE),
338 .channels_min = 1,
339 .channels_max = 8,
340 .rate_min = 8000,
341 .rate_max = 384000,
342 },
343 .ops = &msm_fe_Multimedia_dai_ops,
344 .compress_new = snd_soc_new_compress,
345 .name = "MultiMedia7",
346 .probe = fe_dai_probe,
347 },
348 {
349 .playback = {
350 .stream_name = "MultiMedia8 Playback",
351 .aif_name = "MM_DL8",
352 .rates = (SNDRV_PCM_RATE_8000_384000 |
353 SNDRV_PCM_RATE_KNOT),
354 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
355 SNDRV_PCM_FMTBIT_S24_LE |
356 SNDRV_PCM_FMTBIT_S24_3LE |
357 SNDRV_PCM_FMTBIT_S32_LE),
358 .channels_min = 1,
359 .channels_max = 8,
360 .rate_min = 8000,
361 .rate_max = 384000,
362 },
363 .capture = {
364 .stream_name = "MultiMedia8 Capture",
365 .aif_name = "MM_UL8",
366 .rates = (SNDRV_PCM_RATE_8000_48000|
367 SNDRV_PCM_RATE_KNOT),
368 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
369 SNDRV_PCM_FMTBIT_S24_LE |
370 SNDRV_PCM_FMTBIT_S24_3LE |
371 SNDRV_PCM_FMTBIT_S32_LE),
372 .channels_min = 1,
373 .channels_max = 8,
374 .rate_min = 8000,
375 .rate_max = 48000,
376 },
377 .ops = &msm_fe_Multimedia_dai_ops,
378 .name = "MultiMedia8",
379 .probe = fe_dai_probe,
380 },
381 /* FE DAIs created for hostless operation purpose */
382 {
383 .playback = {
384 .stream_name = "SLIMBUS0_HOSTLESS Playback",
385 .aif_name = "SLIM0_DL_HL",
386 .rates = SNDRV_PCM_RATE_8000_384000,
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 = 384000,
393 },
394 .capture = {
395 .stream_name = "SLIMBUS0_HOSTLESS Capture",
396 .aif_name = "SLIM0_UL_HL",
397 .rates = SNDRV_PCM_RATE_8000_96000,
398 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
399 SNDRV_PCM_FMTBIT_S24_LE |
400 SNDRV_PCM_FMTBIT_S32_LE),
401 .channels_min = 1,
402 .channels_max = 8,
403 .rate_min = 8000,
404 .rate_max = 384000,
405 },
406 .ops = &msm_fe_dai_ops,
407 .name = "SLIMBUS0_HOSTLESS",
408 .probe = fe_dai_probe,
409 },
410 {
411 .playback = {
412 .stream_name = "SLIMBUS1_HOSTLESS Playback",
413 .aif_name = "SLIM1_DL_HL",
414 .rates = SNDRV_PCM_RATE_8000_384000,
415 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
416 SNDRV_PCM_FMTBIT_S24_LE),
417 .channels_min = 1,
418 .channels_max = 2,
419 .rate_min = 8000,
420 .rate_max = 384000,
421 },
422 .capture = {
423 .stream_name = "SLIMBUS1_HOSTLESS Capture",
424 .aif_name = "SLIM1_UL_HL",
425 .rates = SNDRV_PCM_RATE_8000_48000,
426 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
427 SNDRV_PCM_FMTBIT_S24_LE),
428 .channels_min = 1,
429 .channels_max = 2,
430 .rate_min = 8000,
431 .rate_max = 48000,
432 },
433 .ops = &msm_fe_dai_ops,
434 .name = "SLIMBUS1_HOSTLESS",
435 .probe = fe_dai_probe,
436 },
437 {
438 .playback = {
439 .stream_name = "SLIMBUS3_HOSTLESS Playback",
440 .aif_name = "SLIM3_DL_HL",
441 .rates = SNDRV_PCM_RATE_8000_384000,
442 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
443 SNDRV_PCM_FMTBIT_S24_LE),
444 .channels_min = 1,
445 .channels_max = 2,
446 .rate_min = 8000,
447 .rate_max = 384000,
448 },
449 .capture = {
450 .stream_name = "SLIMBUS3_HOSTLESS Capture",
451 .aif_name = "SLIM3_UL_HL",
452 .rates = SNDRV_PCM_RATE_8000_48000,
453 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
454 SNDRV_PCM_FMTBIT_S24_LE),
455 .channels_min = 1,
456 .channels_max = 2,
457 .rate_min = 8000,
458 .rate_max = 48000,
459 },
460 .ops = &msm_fe_dai_ops,
461 .name = "SLIMBUS3_HOSTLESS",
462 .probe = fe_dai_probe,
463 },
464 {
465 .playback = {
466 .stream_name = "SLIMBUS4_HOSTLESS Playback",
467 .aif_name = "SLIM4_DL_HL",
468 .rates = SNDRV_PCM_RATE_8000_384000,
469 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
470 SNDRV_PCM_FMTBIT_S24_LE),
471 .channels_min = 1,
472 .channels_max = 2,
473 .rate_min = 8000,
474 .rate_max = 384000,
475 },
476 .capture = {
477 .stream_name = "SLIMBUS4_HOSTLESS Capture",
478 .aif_name = "SLIM4_UL_HL",
479 .rates = SNDRV_PCM_RATE_8000_48000,
480 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
481 SNDRV_PCM_FMTBIT_S24_LE),
482 .channels_min = 1,
483 .channels_max = 2,
484 .rate_min = 8000,
485 .rate_max = 48000,
486 },
487 .ops = &msm_fe_dai_ops,
488 .name = "SLIMBUS4_HOSTLESS",
489 .probe = fe_dai_probe,
490 },
491 {
492 .playback = {
493 .stream_name = "SLIMBUS6_HOSTLESS Playback",
494 .aif_name = "SLIM6_DL_HL",
495 .rates = SNDRV_PCM_RATE_8000_384000,
496 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
497 SNDRV_PCM_FMTBIT_S24_LE),
498 .channels_min = 1,
499 .channels_max = 8,
500 .rate_min = 8000,
501 .rate_max = 384000,
502 },
503 .ops = &msm_fe_dai_ops,
504 .name = "SLIMBUS6_HOSTLESS",
505 .probe = fe_dai_probe,
506 },
507 {
508 .playback = {
509 .stream_name = "SLIMBUS7_HOSTLESS Playback",
510 .aif_name = "SLIM7_DL_HL",
511 .rates = SNDRV_PCM_RATE_8000_384000,
512 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
513 SNDRV_PCM_FMTBIT_S24_LE),
514 .channels_min = 1,
515 .channels_max = 8,
516 .rate_min = 8000,
517 .rate_max = 384000,
518 },
519 .capture = {
520 .stream_name = "SLIMBUS7_HOSTLESS Capture",
521 .aif_name = "SLIM7_UL_HL",
522 .rates = SNDRV_PCM_RATE_8000_384000,
523 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
524 SNDRV_PCM_FMTBIT_S24_LE),
525 .channels_min = 1,
526 .channels_max = 8,
527 .rate_min = 8000,
528 .rate_max = 384000,
529 },
530 .ops = &msm_fe_dai_ops,
531 .name = "SLIMBUS7_HOSTLESS",
532 .probe = fe_dai_probe,
533 },
534 {
535 .playback = {
536 .stream_name = "SLIMBUS8_HOSTLESS Playback",
537 .aif_name = "SLIM8_DL_HL",
538 .rates = SNDRV_PCM_RATE_8000_384000,
539 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
540 SNDRV_PCM_FMTBIT_S24_LE),
541 .channels_min = 1,
542 .channels_max = 8,
543 .rate_min = 8000,
544 .rate_max = 384000,
545 },
546 .capture = {
547 .stream_name = "SLIMBUS8_HOSTLESS Capture",
548 .aif_name = "SLIM8_UL_HL",
549 .rates = SNDRV_PCM_RATE_8000_384000,
550 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
551 SNDRV_PCM_FMTBIT_S24_LE),
552 .channels_min = 1,
553 .channels_max = 8,
554 .rate_min = 8000,
555 .rate_max = 384000,
556 },
557 .ops = &msm_fe_dai_ops,
558 .name = "SLIMBUS8_HOSTLESS",
559 .probe = fe_dai_probe,
560 },
561 {
562 .playback = {
563 .stream_name = "INT_FM_HOSTLESS Playback",
564 .aif_name = "INTFM_DL_HL",
565 .rates = SNDRV_PCM_RATE_8000_48000,
566 .formats = SNDRV_PCM_FMTBIT_S16_LE,
567 .channels_min = 1,
568 .channels_max = 2,
569 .rate_min = 8000,
570 .rate_max = 48000,
571 },
572 .capture = {
573 .stream_name = "INT_FM_HOSTLESS Capture",
574 .aif_name = "INTFM_UL_HL",
575 .rates = SNDRV_PCM_RATE_8000_48000,
576 .formats = SNDRV_PCM_FMTBIT_S16_LE,
577 .channels_min = 1,
578 .channels_max = 2,
579 .rate_min = 8000,
580 .rate_max = 48000,
581 },
582 .ops = &msm_fe_dai_ops,
583 .name = "INT_FM_HOSTLESS",
584 .probe = fe_dai_probe,
585 },
586 {
587 .playback = {
588 .stream_name = "INT_HFP_BT Hostless Playback",
589 .aif_name = "INTHFP_DL_HL",
590 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
591 .formats = SNDRV_PCM_FMTBIT_S16_LE,
592 .channels_min = 1,
593 .channels_max = 2,
594 .rate_min = 8000,
595 .rate_max = 16000,
596 },
597 .capture = {
598 .stream_name = "INT_HFP_BT Hostless Capture",
599 .aif_name = "INTHFP_UL_HL",
600 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
601 .formats = SNDRV_PCM_FMTBIT_S16_LE,
602 .channels_min = 1,
603 .channels_max = 2,
604 .rate_min = 8000,
605 .rate_max = 16000,
606 },
607 .ops = &msm_fe_dai_ops,
608 .name = "INT_HFP_BT_HOSTLESS",
609 .probe = fe_dai_probe,
610 },
611 {
612 .playback = {
613 .stream_name = "USBAUDIO_HOSTLESS Playback",
614 .aif_name = "USBAUDIO_DL_HL",
615 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |
616 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
617 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
618 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 |
619 SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 |
620 SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_352800 |
621 SNDRV_PCM_RATE_384000,
622 .formats = SNDRV_PCM_FMTBIT_S16_LE |
623 SNDRV_PCM_FMTBIT_S24_LE |
624 SNDRV_PCM_FMTBIT_S24_3LE |
625 SNDRV_PCM_FMTBIT_S32_LE,
626 .channels_min = 1,
627 .channels_max = 8,
628 .rate_min = 8000,
629 .rate_max = 384000,
630 },
631 .capture = {
632 .stream_name = "USBAUDIO_HOSTLESS Capture",
633 .aif_name = "USBAUDIO_UL_HL",
634 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |
635 SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
636 SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
637 SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 |
638 SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 |
639 SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_352800 |
640 SNDRV_PCM_RATE_384000,
641 .formats = SNDRV_PCM_FMTBIT_S16_LE |
642 SNDRV_PCM_FMTBIT_S24_LE |
643 SNDRV_PCM_FMTBIT_S24_3LE |
644 SNDRV_PCM_FMTBIT_S32_LE,
645 .channels_min = 1,
646 .channels_max = 8,
647 .rate_min = 8000,
648 .rate_max = 384000,
649 },
650 .ops = &msm_fe_dai_ops,
651 .name = "USBAUDIO_HOSTLESS",
652 .probe = fe_dai_probe,
653 },
654 {
655 .playback = {
656 .stream_name = "AFE Playback",
657 .aif_name = "PCM_RX",
658 .rates = (SNDRV_PCM_RATE_8000 |
659 SNDRV_PCM_RATE_16000 |
660 SNDRV_PCM_RATE_48000),
661 .formats = SNDRV_PCM_FMTBIT_S16_LE,
662 .channels_min = 1,
663 .channels_max = 2,
664 .rate_min = 8000,
665 .rate_max = 48000,
666 },
667 .capture = {
668 .stream_name = "AFE Capture",
669 .aif_name = "PCM_TX",
670 .rates = (SNDRV_PCM_RATE_8000 |
671 SNDRV_PCM_RATE_16000 |
672 SNDRV_PCM_RATE_48000),
673 .formats = SNDRV_PCM_FMTBIT_S16_LE,
674 .channels_min = 1,
675 .channels_max = 2,
676 .rate_min = 8000,
677 .rate_max = 48000,
678 },
679 .ops = &msm_fe_dai_ops,
680 .name = "AFE-PROXY",
681 .probe = fe_dai_probe,
682 },
683 {
684 .playback = {
685 .stream_name = "HDMI_HOSTLESS Playback",
686 .aif_name = "HDMI_DL_HL",
687 .rates = SNDRV_PCM_RATE_8000_48000,
688 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
689 SNDRV_PCM_FMTBIT_S24_LE),
690 .channels_min = 1,
691 .channels_max = 2,
692 .rate_min = 8000,
693 .rate_max = 48000,
694 },
695 .ops = &msm_fe_dai_ops,
696 .name = "HDMI_HOSTLESS",
697 .probe = fe_dai_probe,
698 },
699 {
700 .playback = {
701 .stream_name = "AUXPCM_HOSTLESS Playback",
702 .aif_name = "AUXPCM_DL_HL",
703 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
704 .formats = SNDRV_PCM_FMTBIT_S16_LE,
705 .channels_min = 1,
706 .channels_max = 1,
707 .rate_min = 8000,
708 .rate_max = 16000,
709 },
710 .capture = {
711 .stream_name = "AUXPCM_HOSTLESS Capture",
712 .aif_name = "AUXPCM_UL_HL",
713 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
714 .formats = SNDRV_PCM_FMTBIT_S16_LE,
715 .channels_min = 1,
716 .channels_max = 1,
717 .rate_min = 8000,
718 .rate_max = 16000,
719 },
720 .ops = &msm_fe_dai_ops,
721 .name = "AUXPCM_HOSTLESS",
722 .probe = fe_dai_probe,
723 },
724 {
725 .playback = {
726 .stream_name = "VOICE_STUB Playback",
727 .aif_name = "VOICE_STUB_DL",
728 .rates = SNDRV_PCM_RATE_8000_48000,
729 .formats = SNDRV_PCM_FMTBIT_S16_LE,
730 .channels_min = 1,
731 .channels_max = 2,
732 .rate_min = 8000,
733 .rate_max = 48000,
734 },
735 .capture = {
736 .stream_name = "VOICE_STUB Capture",
737 .aif_name = "VOICE_STUB_UL",
738 .rates = SNDRV_PCM_RATE_8000_48000,
739 .formats = SNDRV_PCM_FMTBIT_S16_LE,
740 .channels_min = 1,
741 .channels_max = 2,
742 .rate_min = 8000,
743 .rate_max = 48000,
744 },
745 .ops = &msm_fe_dai_ops,
746 .name = "VOICE_STUB",
747 .probe = fe_dai_probe,
748 },
749 {
750 .playback = {
751 .stream_name = "VoLTE Playback",
752 .aif_name = "VoLTE_DL",
753 .rates = SNDRV_PCM_RATE_8000_48000,
754 .formats = SNDRV_PCM_FMTBIT_S16_LE,
755 .channels_min = 1,
756 .channels_max = 2,
757 .rate_min = 8000,
758 .rate_max = 48000,
759 },
760 .capture = {
761 .stream_name = "VoLTE Capture",
762 .aif_name = "VoLTE_UL",
763 .rates = SNDRV_PCM_RATE_8000_48000,
764 .formats = SNDRV_PCM_FMTBIT_S16_LE,
765 .channels_min = 1,
766 .channels_max = 2,
767 .rate_min = 8000,
768 .rate_max = 48000,
769 },
770 .ops = &msm_fe_dai_ops,
771 .name = "VoLTE",
772 .probe = fe_dai_probe,
773 },
774 {
775 .playback = {
776 .stream_name = "MI2S_RX_HOSTLESS Playback",
777 .aif_name = "MI2S_DL_HL",
778 .rates = SNDRV_PCM_RATE_8000_48000,
779 .formats = SNDRV_PCM_FMTBIT_S16_LE,
780 .channels_min = 1,
781 .channels_max = 2,
782 .rate_min = 8000,
783 .rate_max = 48000,
784 },
785 .capture = {
786 .stream_name = "MI2S_TX_HOSTLESS Capture",
787 .aif_name = "MI2S_UL_HL",
788 .rates = SNDRV_PCM_RATE_8000_48000,
789 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
790 SNDRV_PCM_FMTBIT_S24_LE),
791 .channels_min = 1,
792 .channels_max = 2,
793 .rate_min = 8000,
794 .rate_max = 48000,
795 },
796 .ops = &msm_fe_dai_ops,
797 .name = "MI2S_TX_HOSTLESS",
798 .probe = fe_dai_probe,
799 },
800 {
801 .playback = {
802 .stream_name = "SEC_I2S_RX_HOSTLESS Playback",
803 .aif_name = "SEC_I2S_DL_HL",
804 .rates = SNDRV_PCM_RATE_8000_48000,
805 .formats = SNDRV_PCM_FMTBIT_S16_LE,
806 .channels_min = 1,
807 .channels_max = 2,
808 .rate_min = 8000,
809 .rate_max = 48000,
810 },
811 .ops = &msm_fe_dai_ops,
812 .name = "SEC_I2S_RX_HOSTLESS",
813 .probe = fe_dai_probe,
814 },
815 {
816 .capture = {
817 .stream_name = "Primary MI2S_TX Hostless Capture",
818 .aif_name = "PRI_MI2S_UL_HL",
819 .rates = SNDRV_PCM_RATE_8000_48000,
820 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
821 SNDRV_PCM_FMTBIT_S24_LE),
822 .channels_min = 1,
823 .channels_max = 2,
824 .rate_min = 8000,
825 .rate_max = 48000,
826 },
827 .ops = &msm_fe_dai_ops,
828 .name = "PRI_MI2S_TX_HOSTLESS",
829 .probe = fe_dai_probe,
830 },
831 {
832 .playback = {
833 .stream_name = "Primary MI2S_RX Hostless Playback",
834 .aif_name = "PRI_MI2S_DL_HL",
835 .rates = SNDRV_PCM_RATE_8000_384000,
836 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
837 SNDRV_PCM_FMTBIT_S24_LE),
838 .channels_min = 1,
839 .channels_max = 2,
840 .rate_min = 8000,
841 .rate_max = 384000,
842 },
843 .ops = &msm_fe_dai_ops,
844 .name = "PRI_MI2S_RX_HOSTLESS",
845 .probe = fe_dai_probe,
846 },
847 {
848 .capture = {
849 .stream_name = "Secondary MI2S_TX Hostless Capture",
850 .aif_name = "SEC_MI2S_UL_HL",
851 .rates = SNDRV_PCM_RATE_8000_48000,
852 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
853 SNDRV_PCM_FMTBIT_S24_LE),
854 .channels_min = 1,
855 .channels_max = 2,
856 .rate_min = 8000,
857 .rate_max = 48000,
858 },
859 .ops = &msm_fe_dai_ops,
860 .name = "SEC_MI2S_TX_HOSTLESS",
861 .probe = fe_dai_probe,
862 },
863 {
864 .playback = {
865 .stream_name = "Secondary MI2S_RX Hostless Playback",
866 .aif_name = "SEC_MI2S_DL_HL",
867 .rates = SNDRV_PCM_RATE_8000_384000,
868 .formats = SNDRV_PCM_FMTBIT_S16_LE |
869 SNDRV_PCM_FMTBIT_S24_LE,
870 .channels_min = 1,
871 .channels_max = 2,
872 .rate_min = 8000,
873 .rate_max = 384000,
874 },
875 .ops = &msm_fe_dai_ops,
876 .name = "SEC_MI2S_RX_HOSTLESS",
877 .probe = fe_dai_probe,
878 },
879 {
880 .capture = {
881 .stream_name = "Tertiary MI2S_TX Hostless Capture",
882 .aif_name = "TERT_MI2S_UL_HL",
883 .rates = SNDRV_PCM_RATE_8000_48000,
884 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
885 SNDRV_PCM_FMTBIT_S24_LE),
886 .channels_min = 1,
887 .channels_max = 2,
888 .rate_min = 8000,
889 .rate_max = 48000,
890 },
891 .ops = &msm_fe_dai_ops,
892 .name = "TERT_MI2S_TX_HOSTLESS",
893 .probe = fe_dai_probe,
894 },
895 {
896 .playback = {
897 .stream_name = "Tertiary MI2S_RX Hostless Playback",
898 .aif_name = "TERT_MI2S_DL_HL",
899 .rates = SNDRV_PCM_RATE_8000_384000,
900 .formats = SNDRV_PCM_FMTBIT_S16_LE |
901 SNDRV_PCM_FMTBIT_S24_LE,
902 .channels_min = 1,
903 .channels_max = 2,
904 .rate_min = 8000,
905 .rate_max = 384000,
906 },
907 .ops = &msm_fe_dai_ops,
908 .name = "TERT_MI2S_RX_HOSTLESS",
909 .probe = fe_dai_probe,
910 },
911 {
912 .capture = {
913 .stream_name = "Quaternary MI2S_TX Hostless Capture",
914 .aif_name = "QUAT_MI2S_UL_HL",
915 .rates = SNDRV_PCM_RATE_8000_48000,
916 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
917 SNDRV_PCM_FMTBIT_S24_LE),
918 .channels_min = 1,
919 .channels_max = 2,
920 .rate_min = 8000,
921 .rate_max = 48000,
922 },
923 .ops = &msm_fe_dai_ops,
924 .name = "QUAT_MI2S_TX_HOSTLESS",
925 .probe = fe_dai_probe,
926 },
927 {
928 .playback = {
929 .stream_name = "Quaternary MI2S_RX Hostless Playback",
930 .aif_name = "QUAT_MI2S_DL_HL",
931 .rates = SNDRV_PCM_RATE_8000_384000,
932 .formats = SNDRV_PCM_FMTBIT_S16_LE |
933 SNDRV_PCM_FMTBIT_S24_LE,
934 .channels_min = 1,
935 .channels_max = 8,
936 .rate_min = 8000,
937 .rate_max = 384000,
938 },
939 .ops = &msm_fe_dai_ops,
940 .name = "QUAT_MI2S_RX_HOSTLESS",
941 .probe = fe_dai_probe,
942 },
943 {
944 .playback = {
945 .stream_name = "INT0 MI2S_RX Hostless Playback",
946 .aif_name = "INT0_MI2S_DL_HL",
947 .rates = SNDRV_PCM_RATE_8000_192000,
948 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
949 SNDRV_PCM_FMTBIT_S24_LE),
950 .channels_min = 1,
951 .channels_max = 2,
952 .rate_min = 8000,
953 .rate_max = 192000,
954 },
955 .ops = &msm_fe_dai_ops,
956 .name = "INT0_MI2S_RX_HOSTLESS",
957 .probe = fe_dai_probe,
958 },
959 {
960 .playback = {
961 .stream_name = "INT4 MI2S_RX Hostless Playback",
962 .aif_name = "INT4_MI2S_DL_HL",
963 .rates = SNDRV_PCM_RATE_8000_192000,
964 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
965 SNDRV_PCM_FMTBIT_S24_LE),
966 .channels_min = 1,
967 .channels_max = 4,
968 .rate_min = 8000,
969 .rate_max = 192000,
970 },
971 .ops = &msm_fe_dai_ops,
972 .name = "INT4_MI2S_RX_HOSTLESS",
973 .probe = fe_dai_probe,
974 },
975 {
976 .capture = {
977 .stream_name = "INT3 MI2S_TX Hostless Capture",
978 .aif_name = "INT3_MI2S_UL_HL",
979 .rates = SNDRV_PCM_RATE_8000_48000,
980 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
981 SNDRV_PCM_FMTBIT_S24_LE),
982 .channels_min = 1,
983 .channels_max = 2,
984 .rate_min = 8000,
985 .rate_max = 48000,
986 },
987 .ops = &msm_fe_dai_ops,
988 .name = "INT3_MI2S_TX_HOSTLESS",
989 .probe = fe_dai_probe,
990 },
991 /* TDM Hostless */
992 {
993 .capture = {
994 .stream_name = "Primary TDM0 Hostless Capture",
995 .aif_name = "PRI_TDM_TX_0_UL_HL",
996 .rates = SNDRV_PCM_RATE_8000_48000,
997 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
998 SNDRV_PCM_FMTBIT_S24_LE),
999 .channels_min = 1,
1000 .channels_max = 8,
1001 .rate_min = 8000,
1002 .rate_max = 48000,
1003 },
1004 .ops = &msm_fe_dai_ops,
1005 .name = "PRI_TDM_TX_0_HOSTLESS",
1006 .probe = fe_dai_probe,
1007 },
1008 {
1009 .playback = {
1010 .stream_name = "Primary TDM0 Hostless Playback",
1011 .aif_name = "PRI_TDM_RX_0_DL_HL",
1012 .rates = SNDRV_PCM_RATE_8000_48000,
1013 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1014 SNDRV_PCM_FMTBIT_S24_LE),
1015 .channels_min = 1,
1016 .channels_max = 8,
1017 .rate_min = 8000,
1018 .rate_max = 48000,
1019 },
1020 .ops = &msm_fe_dai_ops,
1021 .name = "PRI_TDM_RX_0_HOSTLESS",
1022 .probe = fe_dai_probe,
1023 },
1024 {
1025 .capture = {
1026 .stream_name = "Primary TDM1 Hostless Capture",
1027 .aif_name = "PRI_TDM_TX_1_UL_HL",
1028 .rates = SNDRV_PCM_RATE_8000_48000,
1029 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1030 SNDRV_PCM_FMTBIT_S24_LE),
1031 .channels_min = 1,
1032 .channels_max = 8,
1033 .rate_min = 8000,
1034 .rate_max = 48000,
1035 },
1036 .ops = &msm_fe_dai_ops,
1037 .name = "PRI_TDM_TX_1_HOSTLESS",
1038 .probe = fe_dai_probe,
1039 },
1040 {
1041 .playback = {
1042 .stream_name = "Primary TDM1 Hostless Playback",
1043 .aif_name = "PRI_TDM_RX_1_DL_HL",
1044 .rates = SNDRV_PCM_RATE_8000_48000,
1045 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1046 SNDRV_PCM_FMTBIT_S24_LE),
1047 .channels_min = 1,
1048 .channels_max = 8,
1049 .rate_min = 8000,
1050 .rate_max = 48000,
1051 },
1052 .ops = &msm_fe_dai_ops,
1053 .name = "PRI_TDM_RX_1_HOSTLESS",
1054 .probe = fe_dai_probe,
1055 },
1056 {
1057 .capture = {
1058 .stream_name = "Primary TDM2 Hostless Capture",
1059 .aif_name = "PRI_TDM_TX_2_UL_HL",
1060 .rates = SNDRV_PCM_RATE_8000_48000,
1061 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1062 SNDRV_PCM_FMTBIT_S24_LE),
1063 .channels_min = 1,
1064 .channels_max = 8,
1065 .rate_min = 8000,
1066 .rate_max = 48000,
1067 },
1068 .ops = &msm_fe_dai_ops,
1069 .name = "PRI_TDM_TX_2_HOSTLESS",
1070 .probe = fe_dai_probe,
1071 },
1072 {
1073 .playback = {
1074 .stream_name = "Primary TDM2 Hostless Playback",
1075 .aif_name = "PRI_TDM_RX_2_DL_HL",
1076 .rates = SNDRV_PCM_RATE_8000_48000,
1077 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1078 SNDRV_PCM_FMTBIT_S24_LE),
1079 .channels_min = 1,
1080 .channels_max = 8,
1081 .rate_min = 8000,
1082 .rate_max = 48000,
1083 },
1084 .ops = &msm_fe_dai_ops,
1085 .name = "PRI_TDM_RX_2_HOSTLESS",
1086 .probe = fe_dai_probe,
1087 },
1088 {
1089 .capture = {
1090 .stream_name = "Primary TDM3 Hostless Capture",
1091 .aif_name = "PRI_TDM_TX_3_UL_HL",
1092 .rates = SNDRV_PCM_RATE_8000_48000,
1093 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1094 SNDRV_PCM_FMTBIT_S24_LE),
1095 .channels_min = 1,
1096 .channels_max = 8,
1097 .rate_min = 8000,
1098 .rate_max = 48000,
1099 },
1100 .ops = &msm_fe_dai_ops,
1101 .name = "PRI_TDM_TX_3_HOSTLESS",
1102 .probe = fe_dai_probe,
1103 },
1104 {
1105 .playback = {
1106 .stream_name = "Primary TDM3 Hostless Playback",
1107 .aif_name = "PRI_TDM_RX_3_DL_HL",
1108 .rates = SNDRV_PCM_RATE_8000_48000,
1109 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1110 SNDRV_PCM_FMTBIT_S24_LE),
1111 .channels_min = 1,
1112 .channels_max = 8,
1113 .rate_min = 8000,
1114 .rate_max = 48000,
1115 },
1116 .ops = &msm_fe_dai_ops,
1117 .name = "PRI_TDM_RX_3_HOSTLESS",
1118 .probe = fe_dai_probe,
1119 },
1120 {
1121 .capture = {
1122 .stream_name = "Primary TDM4 Hostless Capture",
1123 .aif_name = "PRI_TDM_TX_4_UL_HL",
1124 .rates = SNDRV_PCM_RATE_8000_48000,
1125 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1126 SNDRV_PCM_FMTBIT_S24_LE),
1127 .channels_min = 1,
1128 .channels_max = 8,
1129 .rate_min = 8000,
1130 .rate_max = 48000,
1131 },
1132 .ops = &msm_fe_dai_ops,
1133 .name = "PRI_TDM_TX_4_HOSTLESS",
1134 .probe = fe_dai_probe,
1135 },
1136 {
1137 .playback = {
1138 .stream_name = "Primary TDM4 Hostless Playback",
1139 .aif_name = "PRI_TDM_RX_4_DL_HL",
1140 .rates = SNDRV_PCM_RATE_8000_48000,
1141 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1142 SNDRV_PCM_FMTBIT_S24_LE),
1143 .channels_min = 1,
1144 .channels_max = 8,
1145 .rate_min = 8000,
1146 .rate_max = 48000,
1147 },
1148 .ops = &msm_fe_dai_ops,
1149 .name = "PRI_TDM_RX_4_HOSTLESS",
1150 .probe = fe_dai_probe,
1151 },
1152 {
1153 .capture = {
1154 .stream_name = "Primary TDM5 Hostless Capture",
1155 .aif_name = "PRI_TDM_TX_5_UL_HL",
1156 .rates = SNDRV_PCM_RATE_8000_48000,
1157 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1158 SNDRV_PCM_FMTBIT_S24_LE),
1159 .channels_min = 1,
1160 .channels_max = 8,
1161 .rate_min = 8000,
1162 .rate_max = 48000,
1163 },
1164 .ops = &msm_fe_dai_ops,
1165 .name = "PRI_TDM_TX_5_HOSTLESS",
1166 .probe = fe_dai_probe,
1167 },
1168 {
1169 .playback = {
1170 .stream_name = "Primary TDM5 Hostless Playback",
1171 .aif_name = "PRI_TDM_RX_5_DL_HL",
1172 .rates = SNDRV_PCM_RATE_8000_48000,
1173 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1174 SNDRV_PCM_FMTBIT_S24_LE),
1175 .channels_min = 1,
1176 .channels_max = 8,
1177 .rate_min = 8000,
1178 .rate_max = 48000,
1179 },
1180 .ops = &msm_fe_dai_ops,
1181 .name = "PRI_TDM_RX_5_HOSTLESS",
1182 .probe = fe_dai_probe,
1183 },
1184 {
1185 .capture = {
1186 .stream_name = "Primary TDM6 Hostless Capture",
1187 .aif_name = "PRI_TDM_TX_6_UL_HL",
1188 .rates = SNDRV_PCM_RATE_8000_48000,
1189 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1190 SNDRV_PCM_FMTBIT_S24_LE),
1191 .channels_min = 1,
1192 .channels_max = 8,
1193 .rate_min = 8000,
1194 .rate_max = 48000,
1195 },
1196 .ops = &msm_fe_dai_ops,
1197 .name = "PRI_TDM_TX_6_HOSTLESS",
1198 .probe = fe_dai_probe,
1199 },
1200 {
1201 .playback = {
1202 .stream_name = "Primary TDM6 Hostless Playback",
1203 .aif_name = "PRI_TDM_RX_6_DL_HL",
1204 .rates = SNDRV_PCM_RATE_8000_48000,
1205 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1206 SNDRV_PCM_FMTBIT_S24_LE),
1207 .channels_min = 1,
1208 .channels_max = 8,
1209 .rate_min = 8000,
1210 .rate_max = 48000,
1211 },
1212 .ops = &msm_fe_dai_ops,
1213 .name = "PRI_TDM_RX_6_HOSTLESS",
1214 .probe = fe_dai_probe,
1215 },
1216 {
1217 .capture = {
1218 .stream_name = "Primary TDM7 Hostless Capture",
1219 .aif_name = "PRI_TDM_TX_7_UL_HL",
1220 .rates = SNDRV_PCM_RATE_8000_48000,
1221 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1222 SNDRV_PCM_FMTBIT_S24_LE),
1223 .channels_min = 1,
1224 .channels_max = 8,
1225 .rate_min = 8000,
1226 .rate_max = 48000,
1227 },
1228 .ops = &msm_fe_dai_ops,
1229 .name = "PRI_TDM_TX_7_HOSTLESS",
1230 .probe = fe_dai_probe,
1231 },
1232 {
1233 .playback = {
1234 .stream_name = "Primary TDM7 Hostless Playback",
1235 .aif_name = "PRI_TDM_RX_7_DL_HL",
1236 .rates = SNDRV_PCM_RATE_8000_48000,
1237 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1238 SNDRV_PCM_FMTBIT_S24_LE),
1239 .channels_min = 1,
1240 .channels_max = 8,
1241 .rate_min = 8000,
1242 .rate_max = 48000,
1243 },
1244 .ops = &msm_fe_dai_ops,
1245 .name = "PRI_TDM_RX_7_HOSTLESS",
1246 .probe = fe_dai_probe,
1247 },
1248 {
1249 .capture = {
1250 .stream_name = "Secondary TDM0 Hostless Capture",
1251 .aif_name = "SEC_TDM_TX_0_UL_HL",
1252 .rates = SNDRV_PCM_RATE_8000_48000,
1253 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1254 SNDRV_PCM_FMTBIT_S24_LE),
1255 .channels_min = 1,
1256 .channels_max = 8,
1257 .rate_min = 8000,
1258 .rate_max = 48000,
1259 },
1260 .ops = &msm_fe_dai_ops,
1261 .name = "SEC_TDM_TX_0_HOSTLESS",
1262 .probe = fe_dai_probe,
1263 },
1264 {
1265 .playback = {
1266 .stream_name = "Secondary TDM0 Hostless Playback",
1267 .aif_name = "SEC_TDM_RX_0_DL_HL",
1268 .rates = SNDRV_PCM_RATE_8000_48000,
1269 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1270 SNDRV_PCM_FMTBIT_S24_LE),
1271 .channels_min = 1,
1272 .channels_max = 8,
1273 .rate_min = 8000,
1274 .rate_max = 48000,
1275 },
1276 .ops = &msm_fe_dai_ops,
1277 .name = "SEC_TDM_RX_0_HOSTLESS",
1278 .probe = fe_dai_probe,
1279 },
1280 {
1281 .capture = {
1282 .stream_name = "Secondary TDM1 Hostless Capture",
1283 .aif_name = "SEC_TDM_TX_1_UL_HL",
1284 .rates = SNDRV_PCM_RATE_8000_48000,
1285 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1286 SNDRV_PCM_FMTBIT_S24_LE),
1287 .channels_min = 1,
1288 .channels_max = 8,
1289 .rate_min = 8000,
1290 .rate_max = 48000,
1291 },
1292 .ops = &msm_fe_dai_ops,
1293 .name = "SEC_TDM_TX_1_HOSTLESS",
1294 .probe = fe_dai_probe,
1295 },
1296 {
1297 .playback = {
1298 .stream_name = "Secondary TDM1 Hostless Playback",
1299 .aif_name = "SEC_TDM_RX_1_DL_HL",
1300 .rates = SNDRV_PCM_RATE_8000_48000,
1301 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1302 SNDRV_PCM_FMTBIT_S24_LE),
1303 .channels_min = 1,
1304 .channels_max = 8,
1305 .rate_min = 8000,
1306 .rate_max = 48000,
1307 },
1308 .ops = &msm_fe_dai_ops,
1309 .name = "SEC_TDM_RX_1_HOSTLESS",
1310 .probe = fe_dai_probe,
1311 },
1312 {
1313 .capture = {
1314 .stream_name = "Secondary TDM2 Hostless Capture",
1315 .aif_name = "SEC_TDM_TX_2_UL_HL",
1316 .rates = SNDRV_PCM_RATE_8000_48000,
1317 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1318 SNDRV_PCM_FMTBIT_S24_LE),
1319 .channels_min = 1,
1320 .channels_max = 8,
1321 .rate_min = 8000,
1322 .rate_max = 48000,
1323 },
1324 .ops = &msm_fe_dai_ops,
1325 .name = "SEC_TDM_TX_2_HOSTLESS",
1326 .probe = fe_dai_probe,
1327 },
1328 {
1329 .playback = {
1330 .stream_name = "Secondary TDM2 Hostless Playback",
1331 .aif_name = "SEC_TDM_RX_2_DL_HL",
1332 .rates = SNDRV_PCM_RATE_8000_48000,
1333 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1334 SNDRV_PCM_FMTBIT_S24_LE),
1335 .channels_min = 1,
1336 .channels_max = 8,
1337 .rate_min = 8000,
1338 .rate_max = 48000,
1339 },
1340 .ops = &msm_fe_dai_ops,
1341 .name = "SEC_TDM_RX_2_HOSTLESS",
1342 .probe = fe_dai_probe,
1343 },
1344 {
1345 .capture = {
1346 .stream_name = "Secondary TDM3 Hostless Capture",
1347 .aif_name = "SEC_TDM_TX_3_UL_HL",
1348 .rates = SNDRV_PCM_RATE_8000_48000,
1349 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1350 SNDRV_PCM_FMTBIT_S24_LE),
1351 .channels_min = 1,
1352 .channels_max = 8,
1353 .rate_min = 8000,
1354 .rate_max = 48000,
1355 },
1356 .ops = &msm_fe_dai_ops,
1357 .name = "SEC_TDM_TX_3_HOSTLESS",
1358 .probe = fe_dai_probe,
1359 },
1360 {
1361 .playback = {
1362 .stream_name = "Secondary TDM3 Hostless Playback",
1363 .aif_name = "SEC_TDM_RX_3_DL_HL",
1364 .rates = SNDRV_PCM_RATE_8000_48000,
1365 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1366 SNDRV_PCM_FMTBIT_S24_LE),
1367 .channels_min = 1,
1368 .channels_max = 8,
1369 .rate_min = 8000,
1370 .rate_max = 48000,
1371 },
1372 .ops = &msm_fe_dai_ops,
1373 .name = "SEC_TDM_RX_3_HOSTLESS",
1374 .probe = fe_dai_probe,
1375 },
1376 {
1377 .capture = {
1378 .stream_name = "Secondary TDM4 Hostless Capture",
1379 .aif_name = "SEC_TDM_TX_4_UL_HL",
1380 .rates = SNDRV_PCM_RATE_8000_48000,
1381 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1382 SNDRV_PCM_FMTBIT_S24_LE),
1383 .channels_min = 1,
1384 .channels_max = 8,
1385 .rate_min = 8000,
1386 .rate_max = 48000,
1387 },
1388 .ops = &msm_fe_dai_ops,
1389 .name = "SEC_TDM_TX_4_HOSTLESS",
1390 .probe = fe_dai_probe,
1391 },
1392 {
1393 .playback = {
1394 .stream_name = "Secondary TDM4 Hostless Playback",
1395 .aif_name = "SEC_TDM_RX_4_DL_HL",
1396 .rates = SNDRV_PCM_RATE_8000_48000,
1397 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1398 SNDRV_PCM_FMTBIT_S24_LE),
1399 .channels_min = 1,
1400 .channels_max = 8,
1401 .rate_min = 8000,
1402 .rate_max = 48000,
1403 },
1404 .ops = &msm_fe_dai_ops,
1405 .name = "SEC_TDM_RX_4_HOSTLESS",
1406 .probe = fe_dai_probe,
1407 },
1408 {
1409 .capture = {
1410 .stream_name = "Secondary TDM5 Hostless Capture",
1411 .aif_name = "SEC_TDM_TX_5_UL_HL",
1412 .rates = SNDRV_PCM_RATE_8000_48000,
1413 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1414 SNDRV_PCM_FMTBIT_S24_LE),
1415 .channels_min = 1,
1416 .channels_max = 8,
1417 .rate_min = 8000,
1418 .rate_max = 48000,
1419 },
1420 .ops = &msm_fe_dai_ops,
1421 .name = "SEC_TDM_TX_5_HOSTLESS",
1422 .probe = fe_dai_probe,
1423 },
1424 {
1425 .playback = {
1426 .stream_name = "Secondary TDM5 Hostless Playback",
1427 .aif_name = "SEC_TDM_RX_5_DL_HL",
1428 .rates = SNDRV_PCM_RATE_8000_48000,
1429 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1430 SNDRV_PCM_FMTBIT_S24_LE),
1431 .channels_min = 1,
1432 .channels_max = 8,
1433 .rate_min = 8000,
1434 .rate_max = 48000,
1435 },
1436 .ops = &msm_fe_dai_ops,
1437 .name = "SEC_TDM_RX_5_HOSTLESS",
1438 .probe = fe_dai_probe,
1439 },
1440 {
1441 .capture = {
1442 .stream_name = "Secondary TDM6 Hostless Capture",
1443 .aif_name = "SEC_TDM_TX_6_UL_HL",
1444 .rates = SNDRV_PCM_RATE_8000_48000,
1445 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1446 SNDRV_PCM_FMTBIT_S24_LE),
1447 .channels_min = 1,
1448 .channels_max = 8,
1449 .rate_min = 8000,
1450 .rate_max = 48000,
1451 },
1452 .ops = &msm_fe_dai_ops,
1453 .name = "SEC_TDM_TX_6_HOSTLESS",
1454 .probe = fe_dai_probe,
1455 },
1456 {
1457 .playback = {
1458 .stream_name = "Secondary TDM6 Hostless Playback",
1459 .aif_name = "SEC_TDM_RX_6_DL_HL",
1460 .rates = SNDRV_PCM_RATE_8000_48000,
1461 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1462 SNDRV_PCM_FMTBIT_S24_LE),
1463 .channels_min = 1,
1464 .channels_max = 8,
1465 .rate_min = 8000,
1466 .rate_max = 48000,
1467 },
1468 .ops = &msm_fe_dai_ops,
1469 .name = "SEC_TDM_RX_6_HOSTLESS",
1470 .probe = fe_dai_probe,
1471 },
1472 {
1473 .capture = {
1474 .stream_name = "Secondary TDM7 Hostless Capture",
1475 .aif_name = "SEC_TDM_TX_7_UL_HL",
1476 .rates = SNDRV_PCM_RATE_8000_48000,
1477 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1478 SNDRV_PCM_FMTBIT_S24_LE),
1479 .channels_min = 1,
1480 .channels_max = 8,
1481 .rate_min = 8000,
1482 .rate_max = 48000,
1483 },
1484 .ops = &msm_fe_dai_ops,
1485 .name = "SEC_TDM_TX_7_HOSTLESS",
1486 .probe = fe_dai_probe,
1487 },
1488 {
1489 .playback = {
1490 .stream_name = "Secondary TDM7 Hostless Playback",
1491 .aif_name = "SEC_TDM_RX_7_DL_HL",
1492 .rates = SNDRV_PCM_RATE_8000_48000,
1493 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1494 SNDRV_PCM_FMTBIT_S24_LE),
1495 .channels_min = 1,
1496 .channels_max = 8,
1497 .rate_min = 8000,
1498 .rate_max = 48000,
1499 },
1500 .ops = &msm_fe_dai_ops,
1501 .name = "SEC_TDM_RX_7_HOSTLESS",
1502 .probe = fe_dai_probe,
1503 },
1504 {
1505 .capture = {
1506 .stream_name = "Tertiary TDM0 Hostless Capture",
1507 .aif_name = "TERT_TDM_TX_0_UL_HL",
1508 .rates = SNDRV_PCM_RATE_8000_48000,
1509 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1510 SNDRV_PCM_FMTBIT_S24_LE),
1511 .channels_min = 1,
1512 .channels_max = 8,
1513 .rate_min = 8000,
1514 .rate_max = 48000,
1515 },
1516 .ops = &msm_fe_dai_ops,
1517 .name = "TERT_TDM_TX_0_HOSTLESS",
1518 .probe = fe_dai_probe,
1519 },
1520 {
1521 .playback = {
1522 .stream_name = "Tertiary TDM0 Hostless Playback",
1523 .aif_name = "TERT_TDM_RX_0_DL_HL",
1524 .rates = SNDRV_PCM_RATE_8000_48000,
1525 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1526 SNDRV_PCM_FMTBIT_S24_LE),
1527 .channels_min = 1,
1528 .channels_max = 8,
1529 .rate_min = 8000,
1530 .rate_max = 48000,
1531 },
1532 .ops = &msm_fe_dai_ops,
1533 .name = "TERT_TDM_RX_0_HOSTLESS",
1534 .probe = fe_dai_probe,
1535 },
1536 {
1537 .capture = {
1538 .stream_name = "Tertiary TDM1 Hostless Capture",
1539 .aif_name = "TERT_TDM_TX_1_UL_HL",
1540 .rates = SNDRV_PCM_RATE_8000_48000,
1541 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1542 SNDRV_PCM_FMTBIT_S24_LE),
1543 .channels_min = 1,
1544 .channels_max = 8,
1545 .rate_min = 8000,
1546 .rate_max = 48000,
1547 },
1548 .ops = &msm_fe_dai_ops,
1549 .name = "TERT_TDM_TX_1_HOSTLESS",
1550 .probe = fe_dai_probe,
1551 },
1552 {
1553 .playback = {
1554 .stream_name = "Tertiary TDM1 Hostless Playback",
1555 .aif_name = "TERT_TDM_RX_1_DL_HL",
1556 .rates = SNDRV_PCM_RATE_8000_48000,
1557 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1558 SNDRV_PCM_FMTBIT_S24_LE),
1559 .channels_min = 1,
1560 .channels_max = 8,
1561 .rate_min = 8000,
1562 .rate_max = 48000,
1563 },
1564 .ops = &msm_fe_dai_ops,
1565 .name = "TERT_TDM_RX_1_HOSTLESS",
1566 .probe = fe_dai_probe,
1567 },
1568 {
1569 .capture = {
1570 .stream_name = "Tertiary TDM2 Hostless Capture",
1571 .aif_name = "TERT_TDM_TX_2_UL_HL",
1572 .rates = SNDRV_PCM_RATE_8000_48000,
1573 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1574 SNDRV_PCM_FMTBIT_S24_LE),
1575 .channels_min = 1,
1576 .channels_max = 8,
1577 .rate_min = 8000,
1578 .rate_max = 48000,
1579 },
1580 .ops = &msm_fe_dai_ops,
1581 .name = "TERT_TDM_TX_2_HOSTLESS",
1582 .probe = fe_dai_probe,
1583 },
1584 {
1585 .playback = {
1586 .stream_name = "Tertiary TDM2 Hostless Playback",
1587 .aif_name = "TERT_TDM_RX_2_DL_HL",
1588 .rates = SNDRV_PCM_RATE_8000_48000,
1589 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1590 SNDRV_PCM_FMTBIT_S24_LE),
1591 .channels_min = 1,
1592 .channels_max = 8,
1593 .rate_min = 8000,
1594 .rate_max = 48000,
1595 },
1596 .ops = &msm_fe_dai_ops,
1597 .name = "TERT_TDM_RX_2_HOSTLESS",
1598 .probe = fe_dai_probe,
1599 },
1600 {
1601 .capture = {
1602 .stream_name = "Tertiary TDM3 Hostless Capture",
1603 .aif_name = "TERT_TDM_TX_3_UL_HL",
1604 .rates = SNDRV_PCM_RATE_8000_48000,
1605 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1606 SNDRV_PCM_FMTBIT_S24_LE),
1607 .channels_min = 1,
1608 .channels_max = 8,
1609 .rate_min = 8000,
1610 .rate_max = 48000,
1611 },
1612 .ops = &msm_fe_dai_ops,
1613 .name = "TERT_TDM_TX_3_HOSTLESS",
1614 .probe = fe_dai_probe,
1615 },
1616 {
1617 .playback = {
1618 .stream_name = "Tertiary TDM3 Hostless Playback",
1619 .aif_name = "TERT_TDM_RX_3_DL_HL",
1620 .rates = SNDRV_PCM_RATE_8000_48000,
1621 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1622 SNDRV_PCM_FMTBIT_S24_LE),
1623 .channels_min = 1,
1624 .channels_max = 8,
1625 .rate_min = 8000,
1626 .rate_max = 48000,
1627 },
1628 .ops = &msm_fe_dai_ops,
1629 .name = "TERT_TDM_RX_3_HOSTLESS",
1630 .probe = fe_dai_probe,
1631 },
1632 {
1633 .capture = {
1634 .stream_name = "Tertiary TDM4 Hostless Capture",
1635 .aif_name = "TERT_TDM_TX_4_UL_HL",
1636 .rates = SNDRV_PCM_RATE_8000_48000,
1637 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1638 SNDRV_PCM_FMTBIT_S24_LE),
1639 .channels_min = 1,
1640 .channels_max = 8,
1641 .rate_min = 8000,
1642 .rate_max = 48000,
1643 },
1644 .ops = &msm_fe_dai_ops,
1645 .name = "TERT_TDM_TX_4_HOSTLESS",
1646 .probe = fe_dai_probe,
1647 },
1648 {
1649 .playback = {
1650 .stream_name = "Tertiary TDM4 Hostless Playback",
1651 .aif_name = "TERT_TDM_RX_4_DL_HL",
1652 .rates = SNDRV_PCM_RATE_8000_48000,
1653 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1654 SNDRV_PCM_FMTBIT_S24_LE),
1655 .channels_min = 1,
1656 .channels_max = 8,
1657 .rate_min = 8000,
1658 .rate_max = 48000,
1659 },
1660 .ops = &msm_fe_dai_ops,
1661 .name = "TERT_TDM_RX_4_HOSTLESS",
1662 .probe = fe_dai_probe,
1663 },
1664 {
1665 .capture = {
1666 .stream_name = "Tertiary TDM5 Hostless Capture",
1667 .aif_name = "TERT_TDM_TX_5_UL_HL",
1668 .rates = SNDRV_PCM_RATE_8000_48000,
1669 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1670 SNDRV_PCM_FMTBIT_S24_LE),
1671 .channels_min = 1,
1672 .channels_max = 8,
1673 .rate_min = 8000,
1674 .rate_max = 48000,
1675 },
1676 .ops = &msm_fe_dai_ops,
1677 .name = "TERT_TDM_TX_5_HOSTLESS",
1678 .probe = fe_dai_probe,
1679 },
1680 {
1681 .playback = {
1682 .stream_name = "Tertiary TDM5 Hostless Playback",
1683 .aif_name = "TERT_TDM_RX_5_DL_HL",
1684 .rates = SNDRV_PCM_RATE_8000_48000,
1685 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1686 SNDRV_PCM_FMTBIT_S24_LE),
1687 .channels_min = 1,
1688 .channels_max = 8,
1689 .rate_min = 8000,
1690 .rate_max = 48000,
1691 },
1692 .ops = &msm_fe_dai_ops,
1693 .name = "TERT_TDM_RX_5_HOSTLESS",
1694 .probe = fe_dai_probe,
1695 },
1696 {
1697 .capture = {
1698 .stream_name = "Tertiary TDM6 Hostless Capture",
1699 .aif_name = "TERT_TDM_TX_6_UL_HL",
1700 .rates = SNDRV_PCM_RATE_8000_48000,
1701 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1702 SNDRV_PCM_FMTBIT_S24_LE),
1703 .channels_min = 1,
1704 .channels_max = 8,
1705 .rate_min = 8000,
1706 .rate_max = 48000,
1707 },
1708 .ops = &msm_fe_dai_ops,
1709 .name = "TERT_TDM_TX_6_HOSTLESS",
1710 .probe = fe_dai_probe,
1711 },
1712 {
1713 .playback = {
1714 .stream_name = "Tertiary TDM6 Hostless Playback",
1715 .aif_name = "TERT_TDM_RX_6_DL_HL",
1716 .rates = SNDRV_PCM_RATE_8000_48000,
1717 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1718 SNDRV_PCM_FMTBIT_S24_LE),
1719 .channels_min = 1,
1720 .channels_max = 8,
1721 .rate_min = 8000,
1722 .rate_max = 48000,
1723 },
1724 .ops = &msm_fe_dai_ops,
1725 .name = "TERT_TDM_RX_6_HOSTLESS",
1726 .probe = fe_dai_probe,
1727 },
1728 {
1729 .capture = {
1730 .stream_name = "Tertiary TDM7 Hostless Capture",
1731 .aif_name = "TERT_TDM_TX_7_UL_HL",
1732 .rates = SNDRV_PCM_RATE_8000_48000,
1733 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1734 SNDRV_PCM_FMTBIT_S24_LE),
1735 .channels_min = 1,
1736 .channels_max = 8,
1737 .rate_min = 8000,
1738 .rate_max = 48000,
1739 },
1740 .ops = &msm_fe_dai_ops,
1741 .name = "TERT_TDM_TX_7_HOSTLESS",
1742 .probe = fe_dai_probe,
1743 },
1744 {
1745 .playback = {
1746 .stream_name = "Tertiary TDM7 Hostless Playback",
1747 .aif_name = "TERT_TDM_RX_7_DL_HL",
1748 .rates = SNDRV_PCM_RATE_8000_48000,
1749 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1750 SNDRV_PCM_FMTBIT_S24_LE),
1751 .channels_min = 1,
1752 .channels_max = 8,
1753 .rate_min = 8000,
1754 .rate_max = 48000,
1755 },
1756 .ops = &msm_fe_dai_ops,
1757 .name = "TERT_TDM_RX_7_HOSTLESS",
1758 .probe = fe_dai_probe,
1759 },
1760 {
1761 .capture = {
1762 .stream_name = "Quaternary TDM0 Hostless Capture",
1763 .aif_name = "QUAT_TDM_TX_0_UL_HL",
1764 .rates = SNDRV_PCM_RATE_8000_48000,
1765 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1766 SNDRV_PCM_FMTBIT_S24_LE),
1767 .channels_min = 1,
1768 .channels_max = 8,
1769 .rate_min = 8000,
1770 .rate_max = 48000,
1771 },
1772 .ops = &msm_fe_dai_ops,
1773 .name = "QUAT_TDM_TX_0_HOSTLESS",
1774 .probe = fe_dai_probe,
1775 },
1776 {
1777 .playback = {
1778 .stream_name = "Quaternary TDM0 Hostless Playback",
1779 .aif_name = "QUAT_TDM_RX_0_DL_HL",
1780 .rates = SNDRV_PCM_RATE_8000_48000,
1781 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1782 SNDRV_PCM_FMTBIT_S24_LE),
1783 .channels_min = 1,
1784 .channels_max = 8,
1785 .rate_min = 8000,
1786 .rate_max = 48000,
1787 },
1788 .ops = &msm_fe_dai_ops,
1789 .name = "QUAT_TDM_RX_0_HOSTLESS",
1790 .probe = fe_dai_probe,
1791 },
1792 {
1793 .capture = {
1794 .stream_name = "Quaternary TDM1 Hostless Capture",
1795 .aif_name = "QUAT_TDM_TX_1_UL_HL",
1796 .rates = SNDRV_PCM_RATE_8000_48000,
1797 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1798 SNDRV_PCM_FMTBIT_S24_LE),
1799 .channels_min = 1,
1800 .channels_max = 8,
1801 .rate_min = 8000,
1802 .rate_max = 48000,
1803 },
1804 .ops = &msm_fe_dai_ops,
1805 .name = "QUAT_TDM_TX_1_HOSTLESS",
1806 .probe = fe_dai_probe,
1807 },
1808 {
1809 .playback = {
1810 .stream_name = "Quaternary TDM1 Hostless Playback",
1811 .aif_name = "QUAT_TDM_RX_1_DL_HL",
1812 .rates = SNDRV_PCM_RATE_8000_48000,
1813 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1814 SNDRV_PCM_FMTBIT_S24_LE),
1815 .channels_min = 1,
1816 .channels_max = 8,
1817 .rate_min = 8000,
1818 .rate_max = 48000,
1819 },
1820 .ops = &msm_fe_dai_ops,
1821 .name = "QUAT_TDM_RX_1_HOSTLESS",
1822 .probe = fe_dai_probe,
1823 },
1824 {
1825 .capture = {
1826 .stream_name = "Quaternary TDM2 Hostless Capture",
1827 .aif_name = "QUAT_TDM_TX_2_UL_HL",
1828 .rates = SNDRV_PCM_RATE_8000_48000,
1829 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1830 SNDRV_PCM_FMTBIT_S24_LE),
1831 .channels_min = 1,
1832 .channels_max = 8,
1833 .rate_min = 8000,
1834 .rate_max = 48000,
1835 },
1836 .ops = &msm_fe_dai_ops,
1837 .name = "QUAT_TDM_TX_2_HOSTLESS",
1838 .probe = fe_dai_probe,
1839 },
1840 {
1841 .playback = {
1842 .stream_name = "Quaternary TDM2 Hostless Playback",
1843 .aif_name = "QUAT_TDM_RX_2_DL_HL",
1844 .rates = SNDRV_PCM_RATE_8000_48000,
1845 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1846 SNDRV_PCM_FMTBIT_S24_LE),
1847 .channels_min = 1,
1848 .channels_max = 8,
1849 .rate_min = 8000,
1850 .rate_max = 48000,
1851 },
1852 .ops = &msm_fe_dai_ops,
1853 .name = "QUAT_TDM_RX_2_HOSTLESS",
1854 .probe = fe_dai_probe,
1855 },
1856 {
1857 .capture = {
1858 .stream_name = "Quaternary TDM3 Hostless Capture",
1859 .aif_name = "QUAT_TDM_TX_3_UL_HL",
1860 .rates = SNDRV_PCM_RATE_8000_48000,
1861 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1862 SNDRV_PCM_FMTBIT_S24_LE),
1863 .channels_min = 1,
1864 .channels_max = 8,
1865 .rate_min = 8000,
1866 .rate_max = 48000,
1867 },
1868 .ops = &msm_fe_dai_ops,
1869 .name = "QUAT_TDM_TX_3_HOSTLESS",
1870 .probe = fe_dai_probe,
1871 },
1872 {
1873 .playback = {
1874 .stream_name = "Quaternary TDM3 Hostless Playback",
1875 .aif_name = "QUAT_TDM_RX_3_DL_HL",
1876 .rates = SNDRV_PCM_RATE_8000_48000,
1877 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1878 SNDRV_PCM_FMTBIT_S24_LE),
1879 .channels_min = 1,
1880 .channels_max = 8,
1881 .rate_min = 8000,
1882 .rate_max = 48000,
1883 },
1884 .ops = &msm_fe_dai_ops,
1885 .name = "QUAT_TDM_RX_3_HOSTLESS",
1886 .probe = fe_dai_probe,
1887 },
1888 {
1889 .capture = {
1890 .stream_name = "Quaternary TDM4 Hostless Capture",
1891 .aif_name = "QUAT_TDM_TX_4_UL_HL",
1892 .rates = SNDRV_PCM_RATE_8000_48000,
1893 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1894 SNDRV_PCM_FMTBIT_S24_LE),
1895 .channels_min = 1,
1896 .channels_max = 8,
1897 .rate_min = 8000,
1898 .rate_max = 48000,
1899 },
1900 .ops = &msm_fe_dai_ops,
1901 .name = "QUAT_TDM_TX_4_HOSTLESS",
1902 .probe = fe_dai_probe,
1903 },
1904 {
1905 .playback = {
1906 .stream_name = "Quaternary TDM4 Hostless Playback",
1907 .aif_name = "QUAT_TDM_RX_4_DL_HL",
1908 .rates = SNDRV_PCM_RATE_8000_48000,
1909 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1910 SNDRV_PCM_FMTBIT_S24_LE),
1911 .channels_min = 1,
1912 .channels_max = 8,
1913 .rate_min = 8000,
1914 .rate_max = 48000,
1915 },
1916 .ops = &msm_fe_dai_ops,
1917 .name = "QUAT_TDM_RX_4_HOSTLESS",
1918 .probe = fe_dai_probe,
1919 },
1920 {
1921 .capture = {
1922 .stream_name = "Quaternary TDM5 Hostless Capture",
1923 .aif_name = "QUAT_TDM_TX_5_UL_HL",
1924 .rates = SNDRV_PCM_RATE_8000_48000,
1925 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1926 SNDRV_PCM_FMTBIT_S24_LE),
1927 .channels_min = 1,
1928 .channels_max = 8,
1929 .rate_min = 8000,
1930 .rate_max = 48000,
1931 },
1932 .ops = &msm_fe_dai_ops,
1933 .name = "QUAT_TDM_TX_5_HOSTLESS",
1934 .probe = fe_dai_probe,
1935 },
1936 {
1937 .playback = {
1938 .stream_name = "Quaternary TDM5 Hostless Playback",
1939 .aif_name = "QUAT_TDM_RX_5_DL_HL",
1940 .rates = SNDRV_PCM_RATE_8000_48000,
1941 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1942 SNDRV_PCM_FMTBIT_S24_LE),
1943 .channels_min = 1,
1944 .channels_max = 8,
1945 .rate_min = 8000,
1946 .rate_max = 48000,
1947 },
1948 .ops = &msm_fe_dai_ops,
1949 .name = "QUAT_TDM_RX_5_HOSTLESS",
1950 .probe = fe_dai_probe,
1951 },
1952 {
1953 .capture = {
1954 .stream_name = "Quaternary TDM6 Hostless Capture",
1955 .aif_name = "QUAT_TDM_TX_6_UL_HL",
1956 .rates = SNDRV_PCM_RATE_8000_48000,
1957 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1958 SNDRV_PCM_FMTBIT_S24_LE),
1959 .channels_min = 1,
1960 .channels_max = 8,
1961 .rate_min = 8000,
1962 .rate_max = 48000,
1963 },
1964 .ops = &msm_fe_dai_ops,
1965 .name = "QUAT_TDM_TX_6_HOSTLESS",
1966 .probe = fe_dai_probe,
1967 },
1968 {
1969 .playback = {
1970 .stream_name = "Quaternary TDM6 Hostless Playback",
1971 .aif_name = "QUAT_TDM_RX_6_DL_HL",
1972 .rates = SNDRV_PCM_RATE_8000_48000,
1973 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1974 SNDRV_PCM_FMTBIT_S24_LE),
1975 .channels_min = 1,
1976 .channels_max = 8,
1977 .rate_min = 8000,
1978 .rate_max = 48000,
1979 },
1980 .ops = &msm_fe_dai_ops,
1981 .name = "QUAT_TDM_RX_6_HOSTLESS",
1982 .probe = fe_dai_probe,
1983 },
1984 {
1985 .capture = {
1986 .stream_name = "Quaternary TDM7 Hostless Capture",
1987 .aif_name = "QUAT_TDM_TX_7_UL_HL",
1988 .rates = SNDRV_PCM_RATE_8000_48000,
1989 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
1990 SNDRV_PCM_FMTBIT_S24_LE),
1991 .channels_min = 1,
1992 .channels_max = 8,
1993 .rate_min = 8000,
1994 .rate_max = 48000,
1995 },
1996 .ops = &msm_fe_dai_ops,
1997 .name = "QUAT_TDM_TX_7_HOSTLESS",
1998 .probe = fe_dai_probe,
1999 },
2000 {
2001 .playback = {
2002 .stream_name = "Quaternary TDM7 Hostless Playback",
2003 .aif_name = "QUAT_TDM_RX_7_DL_HL",
2004 .rates = SNDRV_PCM_RATE_8000_48000,
2005 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2006 SNDRV_PCM_FMTBIT_S24_LE),
2007 .channels_min = 1,
2008 .channels_max = 8,
2009 .rate_min = 8000,
2010 .rate_max = 48000,
2011 },
2012 .ops = &msm_fe_dai_ops,
2013 .name = "QUAT_TDM_RX_7_HOSTLESS",
2014 .probe = fe_dai_probe,
2015 },
2016 {
2017 .playback = {
2018 .stream_name = "Voice2 Playback",
2019 .aif_name = "VOICE2_DL",
2020 .rates = SNDRV_PCM_RATE_8000_48000,
2021 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2022 .channels_min = 1,
2023 .channels_max = 2,
2024 .rate_min = 8000,
2025 .rate_max = 48000,
2026 },
2027 .capture = {
2028 .stream_name = "Voice2 Capture",
2029 .aif_name = "VOICE2_UL",
2030 .rates = SNDRV_PCM_RATE_8000_48000,
2031 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2032 .channels_min = 1,
2033 .channels_max = 2,
2034 .rate_min = 8000,
2035 .rate_max = 48000,
2036 },
2037 .ops = &msm_fe_dai_ops,
2038 .name = "Voice2",
2039 .probe = fe_dai_probe,
2040 },
2041 {
2042 .playback = {
2043 .stream_name = "Pseudo Playback",
2044 .aif_name = "MM_DL9",
2045 .rates = (SNDRV_PCM_RATE_8000_48000 |
2046 SNDRV_PCM_RATE_KNOT),
2047 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2048 .channels_min = 1,
2049 .channels_max = 8,
2050 .rate_min = 8000,
2051 .rate_max = 48000,
2052 },
2053 .capture = {
2054 .stream_name = "Pseudo Capture",
2055 .aif_name = "MM_UL9",
2056 .rates = (SNDRV_PCM_RATE_8000_48000|
2057 SNDRV_PCM_RATE_KNOT),
2058 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2059 .channels_min = 1,
2060 .channels_max = 8,
2061 .rate_min = 8000,
2062 .rate_max = 48000,
2063 },
2064 .ops = &msm_fe_Multimedia_dai_ops,
2065 .name = "Pseudo",
2066 .probe = fe_dai_probe,
2067 },
2068 {
2069 .playback = {
2070 .stream_name = "DTMF_RX_HOSTLESS Playback",
2071 .aif_name = "DTMF_DL_HL",
2072 .rates = SNDRV_PCM_RATE_8000_48000,
2073 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2074 .channels_min = 1,
2075 .channels_max = 2,
2076 .rate_min = 8000,
2077 .rate_max = 48000,
2078 },
2079 .ops = &msm_fe_dai_ops,
2080 .name = "DTMF_RX_HOSTLESS",
2081 .probe = fe_dai_probe,
2082 },
2083 {
2084 .capture = {
2085 .stream_name = "CPE Listen Audio capture",
2086 .aif_name = "CPE_LSM_UL_HL",
2087 .rates = SNDRV_PCM_RATE_8000_48000,
2088 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2089 SNDRV_PCM_FMTBIT_S24_LE),
2090 .channels_min = 1,
2091 .channels_max = 1,
2092 .rate_min = 8000,
2093 .rate_max = 48000,
2094 },
2095 .ops = &msm_fe_dai_ops,
2096 .name = "CPE_LSM_NOHOST",
2097 },
2098 {
2099 .playback = {
2100 .stream_name = "VOLTE_STUB Playback",
2101 .aif_name = "VOLTE_STUB_DL",
2102 .rates = SNDRV_PCM_RATE_8000_48000,
2103 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2104 .channels_min = 1,
2105 .channels_max = 2,
2106 .rate_min = 8000,
2107 .rate_max = 48000,
2108 },
2109 .capture = {
2110 .stream_name = "VOLTE_STUB Capture",
2111 .aif_name = "VOLTE_STUB_UL",
2112 .rates = SNDRV_PCM_RATE_8000_48000,
2113 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2114 .channels_min = 1,
2115 .channels_max = 2,
2116 .rate_min = 8000,
2117 .rate_max = 48000,
2118 },
2119 .ops = &msm_fe_dai_ops,
2120 .name = "VOLTE_STUB",
2121 .probe = fe_dai_probe,
2122 },
2123 {
2124 .playback = {
2125 .stream_name = "VOICE2_STUB Playback",
2126 .aif_name = "VOICE2_STUB_DL",
2127 .rates = SNDRV_PCM_RATE_8000_48000,
2128 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2129 .channels_min = 1,
2130 .channels_max = 2,
2131 .rate_min = 8000,
2132 .rate_max = 48000,
2133 },
2134 .capture = {
2135 .stream_name = "VOICE2_STUB Capture",
2136 .aif_name = "VOICE2_STUB_UL",
2137 .rates = SNDRV_PCM_RATE_8000_48000,
2138 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2139 .channels_min = 1,
2140 .channels_max = 2,
2141 .rate_min = 8000,
2142 .rate_max = 48000,
2143 },
2144 .ops = &msm_fe_dai_ops,
2145 .name = "VOICE2_STUB",
2146 .probe = fe_dai_probe,
2147 },
2148 {
2149 .playback = {
2150 .stream_name = "MultiMedia9 Playback",
2151 .aif_name = "MM_DL9",
2152 .rates = (SNDRV_PCM_RATE_8000_384000|
2153 SNDRV_PCM_RATE_KNOT),
2154 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2155 SNDRV_PCM_FMTBIT_S24_LE |
2156 SNDRV_PCM_FMTBIT_S24_3LE),
2157 .channels_min = 1,
2158 .channels_max = 8,
2159 .rate_min = 8000,
2160 .rate_max = 384000,
2161 },
2162 .capture = {
2163 .stream_name = "MultiMedia9 Capture",
2164 .aif_name = "MM_UL9",
2165 .rates = (SNDRV_PCM_RATE_8000_48000|
2166 SNDRV_PCM_RATE_KNOT),
2167 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2168 .channels_min = 1,
2169 .channels_max = 8,
2170 .rate_min = 8000,
2171 .rate_max = 48000,
2172 },
2173 .ops = &msm_fe_Multimedia_dai_ops,
2174 .name = "MultiMedia9",
2175 .probe = fe_dai_probe,
2176 },
2177 {
2178 .playback = {
2179 .stream_name = "QCHAT Playback",
2180 .aif_name = "QCHAT_DL",
2181 .rates = SNDRV_PCM_RATE_8000_48000,
2182 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2183 .channels_min = 1,
2184 .channels_max = 2,
2185 .rate_min = 8000,
2186 .rate_max = 48000,
2187 },
2188 .capture = {
2189 .stream_name = "QCHAT Capture",
2190 .aif_name = "QCHAT_UL",
2191 .rates = SNDRV_PCM_RATE_8000_48000,
2192 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2193 .channels_min = 1,
2194 .channels_max = 2,
2195 .rate_min = 8000,
2196 .rate_max = 48000,
2197 },
2198 .ops = &msm_fe_dai_ops,
2199 .name = "QCHAT",
2200 .probe = fe_dai_probe,
2201 },
2202 {
2203 .capture = {
2204 .stream_name = "Listen 1 Audio Service Capture",
2205 .aif_name = "LSM1_UL_HL",
2206 .rates = (SNDRV_PCM_RATE_16000 |
2207 SNDRV_PCM_RATE_48000),
2208 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2209 SNDRV_PCM_FMTBIT_S24_LE),
2210 .channels_min = 1,
2211 .channels_max = 4,
2212 .rate_min = 16000,
2213 .rate_max = 48000,
2214 },
2215 .ops = &msm_fe_dai_ops,
2216 .name = "LSM1",
2217 .probe = fe_dai_probe,
2218 },
2219 {
2220 .capture = {
2221 .stream_name = "Listen 2 Audio Service Capture",
2222 .aif_name = "LSM2_UL_HL",
2223 .rates = (SNDRV_PCM_RATE_16000 |
2224 SNDRV_PCM_RATE_48000),
2225 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2226 SNDRV_PCM_FMTBIT_S24_LE),
2227 .channels_min = 1,
2228 .channels_max = 4,
2229 .rate_min = 16000,
2230 .rate_max = 48000,
2231 },
2232 .ops = &msm_fe_dai_ops,
2233 .name = "LSM2",
2234 .probe = fe_dai_probe,
2235 },
2236 {
2237 .capture = {
2238 .stream_name = "Listen 3 Audio Service Capture",
2239 .aif_name = "LSM3_UL_HL",
2240 .rates = (SNDRV_PCM_RATE_16000 |
2241 SNDRV_PCM_RATE_48000),
2242 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2243 SNDRV_PCM_FMTBIT_S24_LE),
2244 .channels_min = 1,
2245 .channels_max = 4,
2246 .rate_min = 16000,
2247 .rate_max = 48000,
2248 },
2249 .ops = &msm_fe_dai_ops,
2250 .name = "LSM3",
2251 .probe = fe_dai_probe,
2252 },
2253 {
2254 .capture = {
2255 .stream_name = "Listen 4 Audio Service Capture",
2256 .aif_name = "LSM4_UL_HL",
2257 .rates = (SNDRV_PCM_RATE_16000 |
2258 SNDRV_PCM_RATE_48000),
2259 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2260 SNDRV_PCM_FMTBIT_S24_LE),
2261 .channels_min = 1,
2262 .channels_max = 4,
2263 .rate_min = 16000,
2264 .rate_max = 48000,
2265 },
2266 .ops = &msm_fe_dai_ops,
2267 .name = "LSM4",
2268 .probe = fe_dai_probe,
2269 },
2270 {
2271 .capture = {
2272 .stream_name = "Listen 5 Audio Service Capture",
2273 .aif_name = "LSM5_UL_HL",
2274 .rates = (SNDRV_PCM_RATE_16000 |
2275 SNDRV_PCM_RATE_48000),
2276 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2277 SNDRV_PCM_FMTBIT_S24_LE),
2278 .channels_min = 1,
2279 .channels_max = 4,
2280 .rate_min = 16000,
2281 .rate_max = 48000,
2282 },
2283 .ops = &msm_fe_dai_ops,
2284 .name = "LSM5",
2285 .probe = fe_dai_probe,
2286 },
2287 {
2288 .capture = {
2289 .stream_name = "Listen 6 Audio Service Capture",
2290 .aif_name = "LSM6_UL_HL",
2291 .rates = (SNDRV_PCM_RATE_16000 |
2292 SNDRV_PCM_RATE_48000),
2293 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2294 SNDRV_PCM_FMTBIT_S24_LE),
2295 .channels_min = 1,
2296 .channels_max = 4,
2297 .rate_min = 16000,
2298 .rate_max = 48000,
2299 },
2300 .ops = &msm_fe_dai_ops,
2301 .name = "LSM6",
2302 .probe = fe_dai_probe,
2303 },
2304 {
2305 .capture = {
2306 .stream_name = "Listen 7 Audio Service Capture",
2307 .aif_name = "LSM7_UL_HL",
2308 .rates = (SNDRV_PCM_RATE_16000 |
2309 SNDRV_PCM_RATE_48000),
2310 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2311 SNDRV_PCM_FMTBIT_S24_LE),
2312 .channels_min = 1,
2313 .channels_max = 4,
2314 .rate_min = 16000,
2315 .rate_max = 48000,
2316 },
2317 .ops = &msm_fe_dai_ops,
2318 .name = "LSM7",
2319 .probe = fe_dai_probe,
2320 },
2321 {
2322 .capture = {
2323 .stream_name = "Listen 8 Audio Service Capture",
2324 .aif_name = "LSM8_UL_HL",
2325 .rates = (SNDRV_PCM_RATE_16000 |
2326 SNDRV_PCM_RATE_48000),
2327 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2328 SNDRV_PCM_FMTBIT_S24_LE),
2329 .channels_min = 1,
2330 .channels_max = 4,
2331 .rate_min = 16000,
2332 .rate_max = 48000,
2333 },
2334 .ops = &msm_fe_dai_ops,
2335 .name = "LSM8",
2336 .probe = fe_dai_probe,
2337 },
2338 {
2339 .playback = {
2340 .stream_name = "VoWLAN Playback",
2341 .aif_name = "VoWLAN_DL",
2342 .rates = SNDRV_PCM_RATE_8000_48000,
2343 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2344 .channels_min = 1,
2345 .channels_max = 2,
2346 .rate_min = 8000,
2347 .rate_max = 48000,
2348 },
2349 .capture = {
2350 .stream_name = "VoWLAN Capture",
2351 .aif_name = "VoWLAN_UL",
2352 .rates = SNDRV_PCM_RATE_8000_48000,
2353 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2354 .channels_min = 1,
2355 .channels_max = 2,
2356 .rate_min = 8000,
2357 .rate_max = 48000,
2358 },
2359 .ops = &msm_fe_dai_ops,
2360 .name = "VoWLAN",
2361 .probe = fe_dai_probe,
2362 },
2363 /* FE DAIs created for multiple instances of offload playback */
2364 {
2365 .playback = {
2366 .stream_name = "MultiMedia10 Playback",
2367 .aif_name = "MM_DL10",
2368 .rates = (SNDRV_PCM_RATE_8000_384000 |
2369 SNDRV_PCM_RATE_KNOT),
2370 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2371 SNDRV_PCM_FMTBIT_S24_LE |
2372 SNDRV_PCM_FMTBIT_S24_3LE |
2373 SNDRV_PCM_FMTBIT_S32_LE),
2374 .channels_min = 1,
2375 .channels_max = 8,
2376 .rate_min = 8000,
2377 .rate_max = 384000,
2378 },
Laxminath Kasam38070be2017-08-17 18:21:59 +05302379 .capture = {
2380 .stream_name = "MultiMedia10 Capture",
2381 .aif_name = "MM_UL10",
2382 .rates = (SNDRV_PCM_RATE_8000_48000 |
2383 SNDRV_PCM_RATE_KNOT),
2384 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2385 SNDRV_PCM_FMTBIT_S24_LE |
2386 SNDRV_PCM_FMTBIT_S24_3LE),
2387 .channels_min = 1,
2388 .channels_max = 8,
2389 .rate_min = 8000,
2390 .rate_max = 48000,
2391 },
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302392 .ops = &msm_fe_Multimedia_dai_ops,
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302393 .name = "MultiMedia10",
2394 .probe = fe_dai_probe,
2395 },
2396 {
2397 .playback = {
2398 .stream_name = "MultiMedia11 Playback",
2399 .aif_name = "MM_DL11",
2400 .rates = (SNDRV_PCM_RATE_8000_384000 |
2401 SNDRV_PCM_RATE_KNOT),
2402 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2403 SNDRV_PCM_FMTBIT_S24_LE |
2404 SNDRV_PCM_FMTBIT_S24_3LE |
2405 SNDRV_PCM_FMTBIT_S32_LE),
2406 .channels_min = 1,
2407 .channels_max = 8,
2408 .rate_min = 8000,
2409 .rate_max = 384000,
2410 },
2411 .ops = &msm_fe_Multimedia_dai_ops,
2412 .compress_new = snd_soc_new_compress,
2413 .name = "MultiMedia11",
2414 .probe = fe_dai_probe,
2415 },
2416 {
2417 .playback = {
2418 .stream_name = "MultiMedia12 Playback",
2419 .aif_name = "MM_DL12",
2420 .rates = (SNDRV_PCM_RATE_8000_384000 |
2421 SNDRV_PCM_RATE_KNOT),
2422 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2423 SNDRV_PCM_FMTBIT_S24_LE |
2424 SNDRV_PCM_FMTBIT_S24_3LE |
2425 SNDRV_PCM_FMTBIT_S32_LE),
2426 .channels_min = 1,
2427 .channels_max = 8,
2428 .rate_min = 8000,
2429 .rate_max = 384000,
2430 },
2431 .ops = &msm_fe_Multimedia_dai_ops,
2432 .compress_new = snd_soc_new_compress,
2433 .name = "MultiMedia12",
2434 .probe = fe_dai_probe,
2435 },
2436 {
2437 .playback = {
2438 .stream_name = "MultiMedia13 Playback",
2439 .aif_name = "MM_DL13",
2440 .rates = (SNDRV_PCM_RATE_8000_384000 |
2441 SNDRV_PCM_RATE_KNOT),
2442 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2443 SNDRV_PCM_FMTBIT_S24_LE |
2444 SNDRV_PCM_FMTBIT_S24_3LE |
2445 SNDRV_PCM_FMTBIT_S32_LE),
2446 .channels_min = 1,
2447 .channels_max = 8,
2448 .rate_min = 8000,
2449 .rate_max = 384000,
2450 },
2451 .ops = &msm_fe_Multimedia_dai_ops,
2452 .compress_new = snd_soc_new_compress,
2453 .name = "MultiMedia13",
2454 .probe = fe_dai_probe,
2455 },
2456 {
2457 .playback = {
2458 .stream_name = "MultiMedia14 Playback",
2459 .aif_name = "MM_DL14",
2460 .rates = (SNDRV_PCM_RATE_8000_384000 |
2461 SNDRV_PCM_RATE_KNOT),
2462 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2463 SNDRV_PCM_FMTBIT_S24_LE |
2464 SNDRV_PCM_FMTBIT_S24_3LE |
2465 SNDRV_PCM_FMTBIT_S32_LE),
2466 .channels_min = 1,
2467 .channels_max = 8,
2468 .rate_min = 8000,
2469 .rate_max = 384000,
2470 },
2471 .ops = &msm_fe_Multimedia_dai_ops,
2472 .compress_new = snd_soc_new_compress,
2473 .name = "MultiMedia14",
2474 .probe = fe_dai_probe,
2475 },
2476 {
2477 .playback = {
2478 .stream_name = "MultiMedia15 Playback",
2479 .aif_name = "MM_DL15",
2480 .rates = (SNDRV_PCM_RATE_8000_384000 |
2481 SNDRV_PCM_RATE_KNOT),
2482 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2483 SNDRV_PCM_FMTBIT_S24_LE |
2484 SNDRV_PCM_FMTBIT_S24_3LE |
2485 SNDRV_PCM_FMTBIT_S32_LE),
2486 .channels_min = 1,
2487 .channels_max = 8,
2488 .rate_min = 8000,
2489 .rate_max = 384000,
2490 },
2491 .ops = &msm_fe_Multimedia_dai_ops,
2492 .compress_new = snd_soc_new_compress,
2493 .name = "MultiMedia15",
2494 .probe = fe_dai_probe,
2495 },
2496 {
2497 .playback = {
2498 .stream_name = "MultiMedia16 Playback",
2499 .aif_name = "MM_DL16",
2500 .rates = (SNDRV_PCM_RATE_8000_384000 |
2501 SNDRV_PCM_RATE_KNOT),
2502 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2503 SNDRV_PCM_FMTBIT_S24_LE |
2504 SNDRV_PCM_FMTBIT_S24_3LE |
2505 SNDRV_PCM_FMTBIT_S32_LE),
2506 .channels_min = 1,
2507 .channels_max = 8,
2508 .rate_min = 8000,
2509 .rate_max = 384000,
2510 },
Asish Bhattacharya34504582017-08-08 12:55:01 +05302511 .capture = {
2512 .stream_name = "MultiMedia16 Capture",
2513 .aif_name = "MM_UL16",
2514 .rates = (SNDRV_PCM_RATE_8000_48000|
2515 SNDRV_PCM_RATE_KNOT),
2516 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2517 SNDRV_PCM_FMTBIT_S24_LE |
2518 SNDRV_PCM_FMTBIT_S24_3LE |
2519 SNDRV_PCM_FMTBIT_S32_LE),
2520 .channels_min = 1,
2521 .channels_max = 8,
2522 .rate_min = 8000,
2523 .rate_max = 48000,
2524 },
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302525 .ops = &msm_fe_Multimedia_dai_ops,
Asish Bhattacharya8e2277f2017-07-20 18:31:55 +05302526 .name = "MultiMedia16",
2527 .probe = fe_dai_probe,
2528 },
2529 {
2530 .playback = {
2531 .stream_name = "VoiceMMode1 Playback",
2532 .aif_name = "VOICEMMODE1_DL",
2533 .rates = SNDRV_PCM_RATE_8000_48000,
2534 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2535 .channels_min = 1,
2536 .channels_max = 2,
2537 .rate_min = 8000,
2538 .rate_max = 48000,
2539 },
2540 .capture = {
2541 .stream_name = "VoiceMMode1 Capture",
2542 .aif_name = "VOICEMMODE1_UL",
2543 .rates = SNDRV_PCM_RATE_8000_48000,
2544 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2545 .channels_min = 1,
2546 .channels_max = 2,
2547 .rate_min = 8000,
2548 .rate_max = 48000,
2549 },
2550 .ops = &msm_fe_dai_ops,
2551 .name = "VoiceMMode1",
2552 .probe = fe_dai_probe,
2553 },
2554 {
2555 .playback = {
2556 .stream_name = "VoiceMMode2 Playback",
2557 .aif_name = "VOICEMMODE2_DL",
2558 .rates = SNDRV_PCM_RATE_8000_48000,
2559 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2560 .channels_min = 1,
2561 .channels_max = 2,
2562 .rate_min = 8000,
2563 .rate_max = 48000,
2564 },
2565 .capture = {
2566 .stream_name = "VoiceMMode2 Capture",
2567 .aif_name = "VOICEMMODE2_UL",
2568 .rates = SNDRV_PCM_RATE_8000_48000,
2569 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2570 .channels_min = 1,
2571 .channels_max = 2,
2572 .rate_min = 8000,
2573 .rate_max = 48000,
2574 },
2575 .ops = &msm_fe_dai_ops,
2576 .name = "VoiceMMode2",
2577 .probe = fe_dai_probe,
2578 },
2579 {
2580 .capture = {
2581 .stream_name = "MultiMedia17 Capture",
2582 .aif_name = "MM_UL17",
2583 .rates = (SNDRV_PCM_RATE_8000_48000|
2584 SNDRV_PCM_RATE_KNOT),
2585 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2586 SNDRV_PCM_FMTBIT_S24_LE |
2587 SNDRV_PCM_FMTBIT_S24_3LE),
2588 .channels_min = 1,
2589 .channels_max = 8,
2590 .rate_min = 8000,
2591 .rate_max = 48000,
2592 },
2593 .ops = &msm_fe_Multimedia_dai_ops,
2594 .compress_new = snd_soc_new_compress,
2595 .name = "MultiMedia17",
2596 .probe = fe_dai_probe,
2597 },
2598 {
2599 .capture = {
2600 .stream_name = "MultiMedia18 Capture",
2601 .aif_name = "MM_UL18",
2602 .rates = (SNDRV_PCM_RATE_8000_48000|
2603 SNDRV_PCM_RATE_KNOT),
2604 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2605 SNDRV_PCM_FMTBIT_S24_LE |
2606 SNDRV_PCM_FMTBIT_S24_3LE),
2607 .channels_min = 1,
2608 .channels_max = 8,
2609 .rate_min = 8000,
2610 .rate_max = 192000,
2611 },
2612 .ops = &msm_fe_Multimedia_dai_ops,
2613 .compress_new = snd_soc_new_compress,
2614 .name = "MultiMedia18",
2615 .probe = fe_dai_probe,
2616 },
2617 {
2618 .capture = {
2619 .stream_name = "MultiMedia19 Capture",
2620 .aif_name = "MM_UL19",
2621 .rates = (SNDRV_PCM_RATE_8000_48000|
2622 SNDRV_PCM_RATE_KNOT),
2623 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2624 SNDRV_PCM_FMTBIT_S24_LE |
2625 SNDRV_PCM_FMTBIT_S24_3LE),
2626 .channels_min = 1,
2627 .channels_max = 8,
2628 .rate_min = 8000,
2629 .rate_max = 48000,
2630 },
2631 .ops = &msm_fe_Multimedia_dai_ops,
2632 .compress_new = snd_soc_new_compress,
2633 .name = "MultiMedia19",
2634 .probe = fe_dai_probe,
2635 },
2636 {
2637 .playback = {
2638 .stream_name = "MultiMedia20 Playback",
2639 .aif_name = "MM_DL20",
2640 .rates = (SNDRV_PCM_RATE_8000_384000|
2641 SNDRV_PCM_RATE_KNOT),
2642 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2643 SNDRV_PCM_FMTBIT_S24_LE |
2644 SNDRV_PCM_FMTBIT_S24_3LE |
2645 SNDRV_PCM_FMTBIT_S32_LE),
2646 .channels_min = 1,
2647 .channels_max = 8,
2648 .rate_min = 8000,
2649 .rate_max = 384000,
2650 },
2651 .capture = {
2652 .stream_name = "MultiMedia20 Capture",
2653 .aif_name = "MM_UL20",
2654 .rates = (SNDRV_PCM_RATE_8000_48000|
2655 SNDRV_PCM_RATE_KNOT),
2656 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
2657 SNDRV_PCM_FMTBIT_S24_LE |
2658 SNDRV_PCM_FMTBIT_S24_3LE |
2659 SNDRV_PCM_FMTBIT_S32_LE),
2660 .channels_min = 1,
2661 .channels_max = 8,
2662 .rate_min = 8000,
2663 .rate_max = 48000,
2664 },
2665 .ops = &msm_fe_Multimedia_dai_ops,
2666 .name = "MultiMedia20",
2667 .probe = fe_dai_probe,
2668 },
2669};
2670
2671static int msm_fe_dai_dev_probe(struct platform_device *pdev)
2672{
2673
2674 dev_dbg(&pdev->dev, "%s: dev name %s\n", __func__,
2675 dev_name(&pdev->dev));
2676 return snd_soc_register_component(&pdev->dev, &msm_fe_dai_component,
2677 msm_fe_dais, ARRAY_SIZE(msm_fe_dais));
2678}
2679
2680static int msm_fe_dai_dev_remove(struct platform_device *pdev)
2681{
2682 snd_soc_unregister_component(&pdev->dev);
2683 return 0;
2684}
2685
2686static const struct of_device_id msm_dai_fe_dt_match[] = {
2687 {.compatible = "qcom,msm-dai-fe"},
2688 {}
2689};
2690
2691static struct platform_driver msm_fe_dai_driver = {
2692 .probe = msm_fe_dai_dev_probe,
2693 .remove = msm_fe_dai_dev_remove,
2694 .driver = {
2695 .name = "msm-dai-fe",
2696 .owner = THIS_MODULE,
2697 .of_match_table = msm_dai_fe_dt_match,
2698 },
2699};
2700
2701static int __init msm_fe_dai_init(void)
2702{
2703 return platform_driver_register(&msm_fe_dai_driver);
2704}
2705module_init(msm_fe_dai_init);
2706
2707static void __exit msm_fe_dai_exit(void)
2708{
2709 platform_driver_unregister(&msm_fe_dai_driver);
2710}
2711module_exit(msm_fe_dai_exit);
2712
2713/* Module information */
2714MODULE_DESCRIPTION("MSM Frontend DAI driver");
2715MODULE_LICENSE("GPL v2");