blob: feb52b0f1401d6cfc786cf6f02daedf2a75653e3 [file] [log] [blame]
Soumya Managoli9d627242018-02-24 16:13:25 +05301/* Copyright (c) 2015-2018, 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#include <linux/of.h>
14#include <sound/core.h>
15#include <sound/soc.h>
16#include <sound/soc-dapm.h>
17#include <sound/pcm.h>
18#include "msm8952-slimbus.h"
19#include "msm-pcm-routing-v2.h"
20#include "codecs/wcd9335.h"
21
22#define DEV_NAME_STR_LEN 32
23
24/* dummy definition of below deprecated FE DAI's*/
25enum {
26 MSM_FRONTEND_DAI_CS_VOICE = 39,
27 MSM_FRONTEND_DAI_VOICE2,
28 MSM_FRONTEND_DAI_VOLTE,
29 MSM_FRONTEND_DAI_VOWLAN,
30};
31
32enum TASHA_LITE_DEVICE {
33 MSM8952_TASHA_LITE = 0,
34 MSM8953_TASHA_LITE,
35 NUM_OF_TASHA_LITE_DEVICE,
36};
37
38static struct snd_soc_card snd_soc_card_msm_card;
39
40static struct snd_soc_ops msm8952_quat_mi2s_be_ops = {
41 .startup = msm_quat_mi2s_snd_startup,
42 .hw_params = msm_mi2s_snd_hw_params,
43 .shutdown = msm_quat_mi2s_snd_shutdown,
44};
45
46static struct snd_soc_ops msm8952_quin_mi2s_be_ops = {
47 .startup = msm_quin_mi2s_snd_startup,
48 .hw_params = msm_mi2s_snd_hw_params,
49 .shutdown = msm_quin_mi2s_snd_shutdown,
50};
51
52static struct snd_soc_ops msm_pri_auxpcm_be_ops = {
53 .startup = msm_prim_auxpcm_startup,
54 .shutdown = msm_prim_auxpcm_shutdown,
55};
56
57static struct snd_soc_ops msm8952_slimbus_be_ops = {
58 .hw_params = msm_snd_hw_params,
59};
60
61
62static struct snd_soc_ops msm8952_cpe_ops = {
63 .hw_params = msm_snd_cpe_hw_params,
64};
65
66static struct snd_soc_ops msm8952_slimbus_2_be_ops = {
67 .hw_params = msm8952_slimbus_2_hw_params,
68};
69
70static struct snd_soc_ops msm_tdm_be_ops = {
71 .startup = msm_tdm_startup,
72 .hw_params = msm_tdm_snd_hw_params,
73 .shutdown = msm_tdm_shutdown,
74};
75
76static struct snd_soc_dai_link msm8952_tasha_fe_dai[] = {
77 /* tasha_vifeedback for speaker protection */
78 {
79 .name = LPASS_BE_SLIMBUS_4_TX,
80 .stream_name = "Slimbus4 Capture",
81 .cpu_dai_name = "msm-dai-q6-dev.16393",
82 .platform_name = "msm-pcm-hostless",
83 .codec_name = "tasha_codec",
84 .codec_dai_name = "tasha_vifeedback",
85 .id = MSM_BACKEND_DAI_SLIMBUS_4_TX,
86 .be_hw_params_fixup = msm_slim_4_tx_be_hw_params_fixup,
87 .ops = &msm8952_slimbus_be_ops,
88 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
89 .ignore_suspend = 1,
90 },
91 /* Ultrasound RX DAI Link */
92 {
93 .name = "SLIMBUS_2 Hostless Playback",
94 .stream_name = "SLIMBUS_2 Hostless Playback",
95 .cpu_dai_name = "msm-dai-q6-dev.16388",
96 .platform_name = "msm-pcm-hostless",
97 .codec_name = "tasha_codec",
98 .codec_dai_name = "tasha_rx2",
99 .ignore_suspend = 1,
100 .dpcm_playback = 1,
101 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
102 .ops = &msm8952_slimbus_2_be_ops,
103 },
104 /* Ultrasound TX DAI Link */
105 {
106 .name = "SLIMBUS_2 Hostless Capture",
107 .stream_name = "SLIMBUS_2 Hostless Capture",
108 .cpu_dai_name = "msm-dai-q6-dev.16389",
109 .platform_name = "msm-pcm-hostless",
110 .codec_name = "tasha_codec",
111 .codec_dai_name = "tasha_tx2",
112 .ignore_suspend = 1,
113 .dpcm_capture = 1,
114 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
115 .ops = &msm8952_slimbus_2_be_ops,
116 },
117 /* CPE LSM direct dai-link */
118 {
119 .name = "CPE Listen service",
120 .stream_name = "CPE Listen Audio Service",
121 .cpu_dai_name = "msm-dai-slim",
Soumya Managolid4db3812018-03-01 17:40:05 +0530122 .platform_name = "msm-cpe-lsm",
Soumya Managoli9d627242018-02-24 16:13:25 +0530123 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
124 SND_SOC_DPCM_TRIGGER_POST},
125 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
126 .ignore_suspend = 1,
127 .dpcm_capture = 1,
128 .codec_dai_name = "tasha_mad1",
129 .codec_name = "tasha_codec",
130 .ops = &msm8952_cpe_ops,
131 },
132 /* slimbus rx 6 hostless */
133 {
134 .name = "SLIMBUS_6 Hostless Playback",
135 .stream_name = "SLIMBUS_6 Hostless",
136 .cpu_dai_name = "SLIMBUS6_HOSTLESS",
137 .platform_name = "msm-pcm-hostless",
138 .dynamic = 1,
139 .dpcm_playback = 1,
140 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
141 SND_SOC_DPCM_TRIGGER_POST},
142 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
143 .ignore_suspend = 1,
144 /* this dailink has playback support */
145 .codec_dai_name = "snd-soc-dummy-dai",
146 .codec_name = "snd-soc-dummy",
147 },
148 /* QCHAT */
149 {/* hw:x,42 */
150 .name = "QCHAT",
151 .stream_name = "QCHAT",
152 .cpu_dai_name = "QCHAT",
153 .platform_name = "msm-pcm-voice",
154 .dynamic = 1,
155 .dpcm_playback = 1,
156 .dpcm_capture = 1,
157 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
158 SND_SOC_DPCM_TRIGGER_POST},
159 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
160 .ignore_suspend = 1,
161 .codec_dai_name = "snd-soc-dummy-dai",
162 .codec_name = "snd-soc-dummy",
163 .id = MSM_FRONTEND_DAI_QCHAT,
164 },
165};
166
167static struct snd_soc_dai_link msm8952_tasha_be_dai[] = {
168 /* Backend DAI Links */
169 {
170 .name = LPASS_BE_SLIMBUS_0_RX,
171 .stream_name = "Slimbus Playback",
172 .cpu_dai_name = "msm-dai-q6-dev.16384",
173 .platform_name = "msm-pcm-routing",
174 .codec_name = "tasha_codec",
175 .codec_dai_name = "tasha_mix_rx1",
176 .no_pcm = 1,
177 .dpcm_playback = 1,
178 .id = MSM_BACKEND_DAI_SLIMBUS_0_RX,
179 .init = &msm_audrx_init,
180 .be_hw_params_fixup = msm_slim_0_rx_be_hw_params_fixup,
181 /* this dainlink has playback support */
182 .ignore_pmdown_time = 1,
183 .ignore_suspend = 1,
184 .ops = &msm8952_slimbus_be_ops,
185 },
186 {
187 .name = LPASS_BE_SLIMBUS_0_TX,
188 .stream_name = "Slimbus Capture",
189 .cpu_dai_name = "msm-dai-q6-dev.16385",
190 .platform_name = "msm-pcm-routing",
191 .codec_name = "tasha_codec",
192 .codec_dai_name = "tasha_tx1",
193 .no_pcm = 1,
194 .dpcm_capture = 1,
195 .id = MSM_BACKEND_DAI_SLIMBUS_0_TX,
196 .be_hw_params_fixup = msm_slim_0_tx_be_hw_params_fixup,
197 .ignore_suspend = 1,
198 .ops = &msm8952_slimbus_be_ops,
199 },
200 {
201 .name = LPASS_BE_SLIMBUS_1_RX,
202 .stream_name = "Slimbus1 Playback",
203 .cpu_dai_name = "msm-dai-q6-dev.16386",
204 .platform_name = "msm-pcm-routing",
205 .codec_name = "tasha_codec",
206 .codec_dai_name = "tasha_mix_rx1",
207 .no_pcm = 1,
208 .dpcm_playback = 1,
209 .id = MSM_BACKEND_DAI_SLIMBUS_1_RX,
210 .be_hw_params_fixup = msm_slim_0_rx_be_hw_params_fixup,
211 .ops = &msm8952_slimbus_be_ops,
212 /* dai link has playback support */
213 .ignore_pmdown_time = 1,
214 .ignore_suspend = 1,
215 },
216 {
217 .name = LPASS_BE_SLIMBUS_1_TX,
218 .stream_name = "Slimbus1 Capture",
219 .cpu_dai_name = "msm-dai-q6-dev.16387",
220 .platform_name = "msm-pcm-routing",
221 .codec_name = "tasha_codec",
222 .codec_dai_name = "tasha_tx3",
223 .no_pcm = 1,
224 .dpcm_capture = 1,
225 .id = MSM_BACKEND_DAI_SLIMBUS_1_TX,
226 .be_hw_params_fixup = msm_slim_1_tx_be_hw_params_fixup,
227 .ops = &msm8952_slimbus_be_ops,
228 .ignore_suspend = 1,
229 },
230 {
231 .name = LPASS_BE_SLIMBUS_3_RX,
232 .stream_name = "Slimbus3 Playback",
233 .cpu_dai_name = "msm-dai-q6-dev.16390",
234 .platform_name = "msm-pcm-routing",
235 .codec_name = "tasha_codec",
236 .codec_dai_name = "tasha_mix_rx1",
237 .no_pcm = 1,
238 .dpcm_playback = 1,
239 .id = MSM_BACKEND_DAI_SLIMBUS_3_RX,
240 .be_hw_params_fixup = msm_slim_0_rx_be_hw_params_fixup,
241 .ops = &msm8952_slimbus_be_ops,
242 /* dai link has playback support */
243 .ignore_pmdown_time = 1,
244 .ignore_suspend = 1,
245 },
246 {
247 .name = LPASS_BE_SLIMBUS_3_TX,
248 .stream_name = "Slimbus3 Capture",
249 .cpu_dai_name = "msm-dai-q6-dev.16391",
250 .platform_name = "msm-pcm-routing",
251 .codec_name = "tasha_codec",
252 .codec_dai_name = "tasha_tx1",
253 .no_pcm = 1,
254 .dpcm_capture = 1,
255 .id = MSM_BACKEND_DAI_SLIMBUS_3_TX,
256 .be_hw_params_fixup = msm_slim_0_tx_be_hw_params_fixup,
257 .ops = &msm8952_slimbus_be_ops,
258 .ignore_suspend = 1,
259 },
260 {
261 .name = LPASS_BE_SLIMBUS_4_RX,
262 .stream_name = "Slimbus4 Playback",
263 .cpu_dai_name = "msm-dai-q6-dev.16392",
264 .platform_name = "msm-pcm-routing",
265 .codec_name = "tasha_codec",
266 .codec_dai_name = "tasha_mix_rx1",
267 .no_pcm = 1,
268 .dpcm_playback = 1,
269 .id = MSM_BACKEND_DAI_SLIMBUS_4_RX,
270 .be_hw_params_fixup = msm_slim_4_rx_be_hw_params_fixup,
271 .ops = &msm8952_slimbus_be_ops,
272 /* dai link has playback support */
273 .ignore_pmdown_time = 1,
274 .ignore_suspend = 1,
275 },
276 {
277 .name = LPASS_BE_SLIMBUS_5_RX,
278 .stream_name = "Slimbus5 Playback",
279 .cpu_dai_name = "msm-dai-q6-dev.16394",
280 .platform_name = "msm-pcm-routing",
281 .codec_name = "tasha_codec",
282 .codec_dai_name = "tasha_rx3",
283 .no_pcm = 1,
284 .dpcm_playback = 1,
285 .id = MSM_BACKEND_DAI_SLIMBUS_5_RX,
286 .be_hw_params_fixup = msm_slim_5_rx_be_hw_params_fixup,
287 .ops = &msm8952_slimbus_be_ops,
288 /* dai link has playback support */
289 .ignore_pmdown_time = 1,
290 .ignore_suspend = 1,
291 },
292 /* MAD BE */
293 {
294 .name = LPASS_BE_SLIMBUS_5_TX,
295 .stream_name = "Slimbus5 Capture",
296 .cpu_dai_name = "msm-dai-q6-dev.16395",
297 .platform_name = "msm-pcm-routing",
298 .codec_name = "tasha_codec",
299 .codec_dai_name = "tasha_mad1",
300 .no_pcm = 1,
301 .dpcm_capture = 1,
302 .id = MSM_BACKEND_DAI_SLIMBUS_5_TX,
303 .be_hw_params_fixup = msm_slim_5_tx_be_hw_params_fixup,
304 .ops = &msm8952_slimbus_be_ops,
305 .ignore_suspend = 1,
306 },
307 {
308 .name = LPASS_BE_SLIMBUS_6_RX,
309 .stream_name = "Slimbus6 Playback",
310 .cpu_dai_name = "msm-dai-q6-dev.16396",
311 .platform_name = "msm-pcm-routing",
312 .codec_name = "tasha_codec",
313 .codec_dai_name = "tasha_rx4",
314 .no_pcm = 1,
315 .dpcm_playback = 1,
316 .id = MSM_BACKEND_DAI_SLIMBUS_6_RX,
317 .be_hw_params_fixup = msm_slim_6_rx_be_hw_params_fixup,
318 .ops = &msm8952_slimbus_be_ops,
319 /* dai link has playback support */
320 .ignore_pmdown_time = 1,
321 .ignore_suspend = 1,
322 },
323};
324
325static struct snd_soc_dai_link msm8952_common_fe_dai[] = {
326 /* FrontEnd DAI Links */
327 {/* hw:x,0 */
328 .name = "MSM8X16 Media1",
329 .stream_name = "MultiMedia1",
330 .cpu_dai_name = "MultiMedia1",
331 .platform_name = "msm-pcm-dsp.0",
332 .dynamic = 1,
333 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
334 SND_SOC_DPCM_TRIGGER_POST},
335 .codec_dai_name = "snd-soc-dummy-dai",
336 .codec_name = "snd-soc-dummy",
337 .ignore_suspend = 1,
338 .dpcm_playback = 1,
339 .dpcm_capture = 1,
340 /* this dai link has playback support */
341 .ignore_pmdown_time = 1,
342 .id = MSM_FRONTEND_DAI_MULTIMEDIA1
343 },
344 {/* hw:x,1 */
345 .name = "MSM8X16 Media2",
346 .stream_name = "MultiMedia2",
347 .cpu_dai_name = "MultiMedia2",
348 .platform_name = "msm-pcm-dsp.0",
349 .dynamic = 1,
350 .dpcm_playback = 1,
351 .dpcm_capture = 1,
352 .codec_dai_name = "snd-soc-dummy-dai",
353 .codec_name = "snd-soc-dummy",
354 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
355 SND_SOC_DPCM_TRIGGER_POST},
356 .ignore_suspend = 1,
357 /* this dai link has playback support */
358 .ignore_pmdown_time = 1,
359 .id = MSM_FRONTEND_DAI_MULTIMEDIA2,
360 },
361 {/* hw:x,2 */
362 .name = "Circuit-Switch Voice",
363 .stream_name = "CS-Voice",
364 .cpu_dai_name = "VoiceMMode1",
365 .platform_name = "msm-pcm-voice",
366 .dynamic = 1,
367 .dpcm_capture = 1,
368 .dpcm_playback = 1,
369 .codec_dai_name = "snd-soc-dummy-dai",
370 .codec_name = "snd-soc-dummy",
371 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
372 SND_SOC_DPCM_TRIGGER_POST},
373 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
374 .ignore_suspend = 1,
375 /* this dai link has playback support */
376 .ignore_pmdown_time = 1,
377 .id = MSM_FRONTEND_DAI_CS_VOICE,
378 },
379 {/* hw:x,3 */
380 .name = "MSM VoIP",
381 .stream_name = "VoIP",
382 .cpu_dai_name = "VoIP",
383 .platform_name = "msm-voip-dsp",
384 .dynamic = 1,
385 .dpcm_playback = 1,
386 .dpcm_capture = 1,
387 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
388 SND_SOC_DPCM_TRIGGER_POST},
389 .codec_dai_name = "snd-soc-dummy-dai",
390 .codec_name = "snd-soc-dummy",
391 .ignore_suspend = 1,
392 /* this dai link has playback support */
393 .ignore_pmdown_time = 1,
394 .id = MSM_FRONTEND_DAI_VOIP,
395 },
396 {/* hw:x,4 */
397 .name = "MSM8X16 ULL",
398 .stream_name = "ULL",
399 .cpu_dai_name = "MultiMedia3",
400 .platform_name = "msm-pcm-dsp.2",
401 .dynamic = 1,
402 .dpcm_playback = 1,
403 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
404 SND_SOC_DPCM_TRIGGER_POST},
405 .codec_dai_name = "snd-soc-dummy-dai",
406 .codec_name = "snd-soc-dummy",
407 .ignore_suspend = 1,
408 /* this dai link has playback support */
409 .ignore_pmdown_time = 1,
410 .id = MSM_FRONTEND_DAI_MULTIMEDIA3,
411 },
412 /* Hostless PCM purpose */
413 {/* hw:x,5 */
414 .name = "SLIMBUS_0 Hostless",
415 .stream_name = "SLIMBUS_0 Hostless",
416 .cpu_dai_name = "SLIMBUS0_HOSTLESS",
417 .platform_name = "msm-pcm-hostless",
418 .dynamic = 1,
419 .dpcm_capture = 1,
420 .dpcm_playback = 1,
421 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
422 SND_SOC_DPCM_TRIGGER_POST},
423 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
424 .ignore_suspend = 1,
425 .ignore_pmdown_time = 1,
426 /* This dai link has MI2S support */
427 .codec_dai_name = "snd-soc-dummy-dai",
428 .codec_name = "snd-soc-dummy",
429 },
430 {/* hw:x,6 */
431 .name = "INT_FM Hostless",
432 .stream_name = "INT_FM Hostless",
433 .cpu_dai_name = "INT_FM_HOSTLESS",
434 .platform_name = "msm-pcm-hostless",
435 .dynamic = 1,
436 .dpcm_capture = 1,
437 .dpcm_playback = 1,
438 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
439 SND_SOC_DPCM_TRIGGER_POST},
440 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
441 .ignore_suspend = 1,
442 /* this dai link has playback support */
443 .ignore_pmdown_time = 1,
444 .codec_dai_name = "snd-soc-dummy-dai",
445 .codec_name = "snd-soc-dummy",
446 },
447 {/* hw:x,7 */
448 .name = "MSM AFE-PCM RX",
449 .stream_name = "AFE-PROXY RX",
450 .cpu_dai_name = "msm-dai-q6-dev.241",
451 .codec_name = "msm-stub-codec.1",
452 .codec_dai_name = "msm-stub-rx",
453 .platform_name = "msm-pcm-afe",
454 .ignore_suspend = 1,
455 /* this dai link has playback support */
456 .ignore_pmdown_time = 1,
457 },
458 {/* hw:x,8 */
459 .name = "MSM AFE-PCM TX",
460 .stream_name = "AFE-PROXY TX",
461 .cpu_dai_name = "msm-dai-q6-dev.240",
462 .codec_name = "msm-stub-codec.1",
463 .codec_dai_name = "msm-stub-tx",
464 .platform_name = "msm-pcm-afe",
465 .ignore_suspend = 1,
466 },
467 {/* hw:x,9 */
468 .name = "MSM8X16 Compress1",
469 .stream_name = "Compress1",
470 .cpu_dai_name = "MultiMedia4",
471 .platform_name = "msm-compress-dsp",
472 .dynamic = 1,
473 .dpcm_capture = 1,
474 .dpcm_playback = 1,
475 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
476 SND_SOC_DPCM_TRIGGER_POST},
477 .codec_dai_name = "snd-soc-dummy-dai",
478 .codec_name = "snd-soc-dummy",
479 .ignore_suspend = 1,
480 .ignore_pmdown_time = 1,
481 /* this dai link has playback support */
482 .id = MSM_FRONTEND_DAI_MULTIMEDIA4,
483 },
484 {/* hw:x,10 */
485 .name = "AUXPCM Hostless",
486 .stream_name = "AUXPCM Hostless",
487 .cpu_dai_name = "AUXPCM_HOSTLESS",
488 .platform_name = "msm-pcm-hostless",
489 .dynamic = 1,
490 .dpcm_capture = 1,
491 .dpcm_playback = 1,
492 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
493 SND_SOC_DPCM_TRIGGER_POST},
494 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
495 .ignore_suspend = 1,
496 /* this dai link has playback support */
497 .ignore_pmdown_time = 1,
498 .codec_dai_name = "snd-soc-dummy-dai",
499 .codec_name = "snd-soc-dummy",
500 },
501 {/* hw:x,11 */
502 .name = "SLIMBUS_1 Hostless",
503 .stream_name = "SLIMBUS_1 Hostless",
504 .cpu_dai_name = "SLIMBUS1_HOSTLESS",
505 .platform_name = "msm-pcm-hostless",
506 .dynamic = 1,
507 .dpcm_capture = 1,
508 .dpcm_playback = 1,
509 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
510 SND_SOC_DPCM_TRIGGER_POST},
511 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
512 .ignore_suspend = 1,
513 .ignore_pmdown_time = 1, /* dai link has playback support */
514 .codec_dai_name = "snd-soc-dummy-dai",
515 .codec_name = "snd-soc-dummy",
516 },
517 {/* hw:x,12 */
518 .name = "MSM8952 LowLatency",
519 .stream_name = "MultiMedia5",
520 .cpu_dai_name = "MultiMedia5",
521 .platform_name = "msm-pcm-dsp.1",
522 .dynamic = 1,
523 .dpcm_capture = 1,
524 .dpcm_playback = 1,
525 .codec_dai_name = "snd-soc-dummy-dai",
526 .codec_name = "snd-soc-dummy",
527 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
528 SND_SOC_DPCM_TRIGGER_POST},
529 .ignore_suspend = 1,
530 /* this dai link has playback support */
531 .ignore_pmdown_time = 1,
532 .id = MSM_FRONTEND_DAI_MULTIMEDIA5,
533 },
534 {/* hw:x,13 */
535 .name = "Voice2",
536 .stream_name = "Voice2",
537 .cpu_dai_name = "VoiceMMode1",
538 .platform_name = "msm-pcm-voice",
539 .dynamic = 1,
540 .dpcm_capture = 1,
541 .dpcm_playback = 1,
542 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
543 SND_SOC_DPCM_TRIGGER_POST},
544 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
545 .ignore_suspend = 1,
546 /* this dai link has playback support */
547 .ignore_pmdown_time = 1,
548 .codec_dai_name = "snd-soc-dummy-dai",
549 .codec_name = "snd-soc-dummy",
550 .id = MSM_FRONTEND_DAI_VOICE2,
551 },
552 {/* hw:x,14 */
553 .name = "MSM8952 Media9",
554 .stream_name = "MultiMedia9",
555 .cpu_dai_name = "MultiMedia9",
556 .platform_name = "msm-pcm-dsp.0",
557 .dynamic = 1,
558 .dpcm_capture = 1,
559 .dpcm_playback = 1,
560 .codec_dai_name = "snd-soc-dummy-dai",
561 .codec_name = "snd-soc-dummy",
562 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
563 SND_SOC_DPCM_TRIGGER_POST},
564 .ignore_suspend = 1,
565 /* This dailink has playback support */
566 .ignore_pmdown_time = 1,
567 .id = MSM_FRONTEND_DAI_MULTIMEDIA9,
568 },
569 { /* hw:x,15 */
570 .name = "VoLTE",
571 .stream_name = "VoLTE",
572 .cpu_dai_name = "VoiceMMode1",
573 .platform_name = "msm-pcm-voice",
574 .dynamic = 1,
575 .dpcm_capture = 1,
576 .dpcm_playback = 1,
577 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
578 SND_SOC_DPCM_TRIGGER_POST},
579 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
580 .ignore_suspend = 1,
581 /* this dai link has playback support */
582 .ignore_pmdown_time = 1,
583 .codec_dai_name = "snd-soc-dummy-dai",
584 .codec_name = "snd-soc-dummy",
585 .id = MSM_FRONTEND_DAI_VOLTE,
586 },
587 { /* hw:x,16 */
588 .name = "VoWLAN",
589 .stream_name = "VoWLAN",
590 .cpu_dai_name = "VoiceMMode1",
591 .platform_name = "msm-pcm-voice",
592 .dynamic = 1,
593 .dpcm_capture = 1,
594 .dpcm_playback = 1,
595 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
596 SND_SOC_DPCM_TRIGGER_POST},
597 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
598 .ignore_suspend = 1,
599 .ignore_pmdown_time = 1,
600 .codec_dai_name = "snd-soc-dummy-dai",
601 .codec_name = "snd-soc-dummy",
602 .id = MSM_FRONTEND_DAI_VOWLAN,
603 },
604 {/* hw:x,17 */
605 .name = "INT_HFP_BT Hostless",
606 .stream_name = "INT_HFP_BT Hostless",
607 .cpu_dai_name = "INT_HFP_BT_HOSTLESS",
608 .platform_name = "msm-pcm-hostless",
609 .dynamic = 1,
610 .dpcm_capture = 1,
611 .dpcm_playback = 1,
612 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
613 SND_SOC_DPCM_TRIGGER_POST},
614 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
615 .ignore_suspend = 1,
616 /* this dai link has playback support */
617 .ignore_pmdown_time = 1,
618 .codec_dai_name = "snd-soc-dummy-dai",
619 .codec_name = "snd-soc-dummy",
620 },
621 {/* hw:x,18 */
622 .name = "MSM8916 HFP",
623 .stream_name = "MultiMedia6",
624 .cpu_dai_name = "MultiMedia6",
625 .platform_name = "msm-pcm-loopback",
626 .dynamic = 1,
627 .dpcm_capture = 1,
628 .dpcm_playback = 1,
629 .codec_dai_name = "snd-soc-dummy-dai",
630 .codec_name = "snd-soc-dummy",
631 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
632 SND_SOC_DPCM_TRIGGER_POST},
633 .ignore_suspend = 1,
634 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
635 /* this dai link has playback support */
636 .ignore_pmdown_time = 1,
637 .id = MSM_FRONTEND_DAI_MULTIMEDIA6,
638 },
639 /* LSM FE */
640 {/* hw:x,19 */
641 .name = "Listen 1 Audio Service",
642 .stream_name = "Listen 1 Audio Service",
643 .cpu_dai_name = "LSM1",
644 .platform_name = "msm-lsm-client",
645 .dynamic = 1,
646 .dpcm_capture = 1,
647 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
648 SND_SOC_DPCM_TRIGGER_POST },
649 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
650 .ignore_suspend = 1,
651 .ignore_pmdown_time = 1,
652 .codec_dai_name = "snd-soc-dummy-dai",
653 .codec_name = "snd-soc-dummy",
654 .id = MSM_FRONTEND_DAI_LSM1,
655 },
656 {/* hw:x,20 */
657 .name = "Listen 2 Audio Service",
658 .stream_name = "Listen 2 Audio Service",
659 .cpu_dai_name = "LSM2",
660 .platform_name = "msm-lsm-client",
661 .dynamic = 1,
662 .dpcm_capture = 1,
663 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
664 SND_SOC_DPCM_TRIGGER_POST },
665 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
666 .ignore_suspend = 1,
667 .ignore_pmdown_time = 1,
668 .codec_dai_name = "snd-soc-dummy-dai",
669 .codec_name = "snd-soc-dummy",
670 .id = MSM_FRONTEND_DAI_LSM2,
671 },
672 {/* hw:x,21 */
673 .name = "Listen 3 Audio Service",
674 .stream_name = "Listen 3 Audio Service",
675 .cpu_dai_name = "LSM3",
676 .platform_name = "msm-lsm-client",
677 .dynamic = 1,
678 .dpcm_capture = 1,
679 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
680 SND_SOC_DPCM_TRIGGER_POST },
681 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
682 .ignore_suspend = 1,
683 .ignore_pmdown_time = 1,
684 .codec_dai_name = "snd-soc-dummy-dai",
685 .codec_name = "snd-soc-dummy",
686 .id = MSM_FRONTEND_DAI_LSM3,
687 },
688 {/* hw:x,22 */
689 .name = "Listen 4 Audio Service",
690 .stream_name = "Listen 4 Audio Service",
691 .cpu_dai_name = "LSM4",
692 .platform_name = "msm-lsm-client",
693 .dynamic = 1,
694 .dpcm_capture = 1,
695 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
696 SND_SOC_DPCM_TRIGGER_POST },
697 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
698 .ignore_suspend = 1,
699 .ignore_pmdown_time = 1,
700 .codec_dai_name = "snd-soc-dummy-dai",
701 .codec_name = "snd-soc-dummy",
702 .id = MSM_FRONTEND_DAI_LSM4,
703 },
704 {/* hw:x,23 */
705 .name = "Listen 5 Audio Service",
706 .stream_name = "Listen 5 Audio Service",
707 .cpu_dai_name = "LSM5",
708 .platform_name = "msm-lsm-client",
709 .dynamic = 1,
710 .dpcm_capture = 1,
711 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
712 SND_SOC_DPCM_TRIGGER_POST },
713 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
714 .ignore_suspend = 1,
715 .ignore_pmdown_time = 1,
716 .codec_dai_name = "snd-soc-dummy-dai",
717 .codec_name = "snd-soc-dummy",
718 .id = MSM_FRONTEND_DAI_LSM5,
719 },
720 {/* hw:x,24 */
721 .name = "MSM8X16 Compress2",
722 .stream_name = "Compress2",
723 .cpu_dai_name = "MultiMedia7",
724 .platform_name = "msm-compress-dsp",
725 .dynamic = 1,
726 .dpcm_playback = 1,
727 .codec_dai_name = "snd-soc-dummy-dai",
728 .codec_name = "snd-soc-dummy",
729 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
730 SND_SOC_DPCM_TRIGGER_POST},
731 .ignore_suspend = 1,
732 /* this dai link has playback support */
733 .ignore_pmdown_time = 1,
734 .id = MSM_FRONTEND_DAI_MULTIMEDIA7,
735 },
736 {/* hw:x,25 */
737 .name = "SLIMBUS_3 Hostless",
738 .stream_name = "SLIMBUS_3 Hostless",
739 .cpu_dai_name = "SLIMBUS3_HOSTLESS",
740 .platform_name = "msm-pcm-hostless",
741 .dynamic = 1,
742 .dpcm_capture = 1,
743 .dpcm_playback = 1,
744 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
745 SND_SOC_DPCM_TRIGGER_POST},
746 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
747 .ignore_suspend = 1,
748 .ignore_pmdown_time = 1, /* dai link has playback support */
749 .codec_dai_name = "snd-soc-dummy-dai",
750 .codec_name = "snd-soc-dummy",
751 },
752 {/* hw:x,26 */
753 .name = "SLIMBUS_4 Hostless",
754 .stream_name = "SLIMBUS_4 Hostless",
755 .cpu_dai_name = "SLIMBUS4_HOSTLESS",
756 .platform_name = "msm-pcm-hostless",
757 .dynamic = 1,
758 .dpcm_capture = 1,
759 .dpcm_playback = 1,
760 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
761 SND_SOC_DPCM_TRIGGER_POST},
762 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
763 .ignore_suspend = 1,
764 .ignore_pmdown_time = 1, /* dai link has playback support */
765 .codec_dai_name = "snd-soc-dummy-dai",
766 .codec_name = "snd-soc-dummy",
767 },
768 { /* hw:x,27 */
769 .name = "QUAT_MI2S Hostless",
770 .stream_name = "QUAT_MI2S Hostless",
771 .cpu_dai_name = "QUAT_MI2S_RX_HOSTLESS",
772 .platform_name = "msm-pcm-hostless",
773 .dynamic = 1,
774 .dpcm_playback = 1,
775 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
776 SND_SOC_DPCM_TRIGGER_POST},
777 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
778 .ignore_suspend = 1,
779 /* this dai link has playback support */
780 .ignore_pmdown_time = 1,
781 .codec_dai_name = "snd-soc-dummy-dai",
782 .codec_name = "snd-soc-dummy",
783 },
784 {/* hw:x,28 */
785 .name = "MSM8X16 Compress3",
786 .stream_name = "Compress3",
787 .cpu_dai_name = "MultiMedia10",
788 .platform_name = "msm-pcm-dsp.1",
789 .dynamic = 1,
790 .dpcm_playback = 1,
791 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
792 SND_SOC_DPCM_TRIGGER_POST},
793 .codec_dai_name = "snd-soc-dummy-dai",
794 .codec_name = "snd-soc-dummy",
795 .ignore_suspend = 1,
796 .ignore_pmdown_time = 1,
797 /* this dai link has playback support */
798 .id = MSM_FRONTEND_DAI_MULTIMEDIA10,
799 },
800 {/* hw:x,29 */
801 .name = "MSM8X16 Compress4",
802 .stream_name = "Compress4",
803 .cpu_dai_name = "MultiMedia11",
804 .platform_name = "msm-compress-dsp",
805 .dynamic = 1,
806 .dpcm_playback = 1,
807 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
808 SND_SOC_DPCM_TRIGGER_POST},
809 .codec_dai_name = "snd-soc-dummy-dai",
810 .codec_name = "snd-soc-dummy",
811 .ignore_suspend = 1,
812 .ignore_pmdown_time = 1,
813 /* this dai link has playback support */
814 .id = MSM_FRONTEND_DAI_MULTIMEDIA11,
815 },
816 {/* hw:x,30 */
817 .name = "MSM8X16 Compress5",
818 .stream_name = "Compress5",
819 .cpu_dai_name = "MultiMedia12",
820 .platform_name = "msm-compress-dsp",
821 .dynamic = 1,
822 .dpcm_playback = 1,
823 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
824 SND_SOC_DPCM_TRIGGER_POST},
825 .codec_dai_name = "snd-soc-dummy-dai",
826 .codec_name = "snd-soc-dummy",
827 .ignore_suspend = 1,
828 .ignore_pmdown_time = 1,
829 /* this dai link has playback support */
830 .id = MSM_FRONTEND_DAI_MULTIMEDIA12,
831 },
832 {/* hw:x,31 */
833 .name = "MSM8X16 Compress6",
834 .stream_name = "Compress6",
835 .cpu_dai_name = "MultiMedia13",
836 .platform_name = "msm-compress-dsp",
837 .dynamic = 1,
838 .dpcm_playback = 1,
839 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
840 SND_SOC_DPCM_TRIGGER_POST},
841 .codec_dai_name = "snd-soc-dummy-dai",
842 .codec_name = "snd-soc-dummy",
843 .ignore_suspend = 1,
844 .ignore_pmdown_time = 1,
845 /* this dai link has playback support */
846 .id = MSM_FRONTEND_DAI_MULTIMEDIA13,
847 },
848 {/* hw:x,32 */
849 .name = "MSM8X16 Compress7",
850 .stream_name = "Compress7",
851 .cpu_dai_name = "MultiMedia14",
852 .platform_name = "msm-compress-dsp",
853 .dynamic = 1,
854 .dpcm_playback = 1,
855 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
856 SND_SOC_DPCM_TRIGGER_POST},
857 .codec_dai_name = "snd-soc-dummy-dai",
858 .codec_name = "snd-soc-dummy",
859 .ignore_suspend = 1,
860 .ignore_pmdown_time = 1,
861 /* this dai link has playback support */
862 .id = MSM_FRONTEND_DAI_MULTIMEDIA14,
863 },
864 {/* hw:x,33 */
865 .name = "MSM8X16 Compress8",
866 .stream_name = "Compress8",
867 .cpu_dai_name = "MultiMedia15",
868 .platform_name = "msm-compress-dsp",
869 .dynamic = 1,
870 .dpcm_playback = 1,
871 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
872 SND_SOC_DPCM_TRIGGER_POST},
873 .codec_dai_name = "snd-soc-dummy-dai",
874 .codec_name = "snd-soc-dummy",
875 .ignore_suspend = 1,
876 .ignore_pmdown_time = 1,
877 /* this dai link has playback support */
878 .id = MSM_FRONTEND_DAI_MULTIMEDIA15,
879 },
880 {/* hw:x,34 */
881 .name = "MSM8X16 Compress9",
882 .stream_name = "Compress9",
883 .cpu_dai_name = "MultiMedia16",
884 .platform_name = "msm-pcm-dsp-noirq",
885 .dynamic = 1,
886 .dpcm_playback = 1,
887 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
888 SND_SOC_DPCM_TRIGGER_POST},
889 .codec_dai_name = "snd-soc-dummy-dai",
890 .codec_name = "snd-soc-dummy",
891 .ignore_suspend = 1,
892 .ignore_pmdown_time = 1,
893 /* this dai link has playback support */
894 .id = MSM_FRONTEND_DAI_MULTIMEDIA16,
895 },
896 {/* hw:x,35 */
897 .name = "VoiceMMode1",
898 .stream_name = "VoiceMMode1",
899 .cpu_dai_name = "VoiceMMode1",
900 .platform_name = "msm-pcm-voice",
901 .dynamic = 1,
902 .dpcm_capture = 1,
903 .dpcm_playback = 1,
904 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
905 SND_SOC_DPCM_TRIGGER_POST},
906 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
907 .ignore_suspend = 1,
908 .ignore_pmdown_time = 1,
909 .codec_dai_name = "snd-soc-dummy-dai",
910 .codec_name = "snd-soc-dummy",
911 .id = MSM_FRONTEND_DAI_VOICEMMODE1,
912 },
913 {/* hw:x,36 */
914 .name = "VoiceMMode2",
915 .stream_name = "VoiceMMode2",
916 .cpu_dai_name = "VoiceMMode2",
917 .platform_name = "msm-pcm-voice",
918 .dynamic = 1,
919 .dpcm_capture = 1,
920 .dpcm_playback = 1,
921 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
922 SND_SOC_DPCM_TRIGGER_POST},
923 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
924 .ignore_suspend = 1,
925 .ignore_pmdown_time = 1,
926 .codec_dai_name = "snd-soc-dummy-dai",
927 .codec_name = "snd-soc-dummy",
928 .id = MSM_FRONTEND_DAI_VOICEMMODE2,
929 },
930 {/* hw:x,37 */
931 .name = "MSM8X16 Compress10",
932 .stream_name = "Compress10",
933 .cpu_dai_name = "MultiMedia17",
934 .platform_name = "msm-compress-dsp",
935 .dynamic = 1,
936 .dpcm_capture = 1,
937 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
938 SND_SOC_DPCM_TRIGGER_POST},
939 .codec_dai_name = "snd-soc-dummy-dai",
940 .codec_name = "snd-soc-dummy",
941 .ignore_suspend = 1,
942 .ignore_pmdown_time = 1,
943 /* this dai link has playback support */
944 .id = MSM_FRONTEND_DAI_MULTIMEDIA17,
945 },
946 {/* hw:x,38 */
947 .name = "MSM8X16 Compress11",
948 .stream_name = "Compress11",
949 .cpu_dai_name = "MultiMedia18",
950 .platform_name = "msm-compress-dsp",
951 .dynamic = 1,
952 .dpcm_capture = 1,
953 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
954 SND_SOC_DPCM_TRIGGER_POST},
955 .codec_dai_name = "snd-soc-dummy-dai",
956 .codec_name = "snd-soc-dummy",
957 .ignore_suspend = 1,
958 .ignore_pmdown_time = 1,
959 /* this dai link has playback support */
960 .id = MSM_FRONTEND_DAI_MULTIMEDIA18,
961 },
962 {/* hw:x,39 */
963 .name = "MSM8X16 Compress12",
964 .stream_name = "Compress12",
965 .cpu_dai_name = "MultiMedia19",
966 .platform_name = "msm-compress-dsp",
967 .dynamic = 1,
968 .dpcm_capture = 1,
969 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
970 SND_SOC_DPCM_TRIGGER_POST},
971 .codec_dai_name = "snd-soc-dummy-dai",
972 .codec_name = "snd-soc-dummy",
973 .ignore_suspend = 1,
974 .ignore_pmdown_time = 1,
975 /* this dai link has playback support */
976 .id = MSM_FRONTEND_DAI_MULTIMEDIA19,
977 },
978};
979
980static struct snd_soc_dai_link msm8952_tdm_fe_dai[] = {
981 /* FE TDM DAI links */
982 {
983 .name = "Primary TDM RX 0 Hostless",
984 .stream_name = "Primary TDM RX 0 Hostless",
985 .cpu_dai_name = "PRI_TDM_RX_0_HOSTLESS",
986 .platform_name = "msm-pcm-hostless",
987 .dynamic = 1,
988 .dpcm_playback = 1,
989 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
990 SND_SOC_DPCM_TRIGGER_POST},
991 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
992 .ignore_suspend = 1,
993 .ignore_pmdown_time = 1,
994 .codec_dai_name = "snd-soc-dummy-dai",
995 .codec_name = "snd-soc-dummy",
996 },
997 {
998 .name = "Primary TDM TX 0 Hostless",
999 .stream_name = "Primary TDM TX 0 Hostless",
1000 .cpu_dai_name = "PRI_TDM_TX_0_HOSTLESS",
1001 .platform_name = "msm-pcm-hostless",
1002 .dynamic = 1,
1003 .dpcm_capture = 1,
1004 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
1005 SND_SOC_DPCM_TRIGGER_POST},
1006 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
1007 .ignore_suspend = 1,
1008 .ignore_pmdown_time = 1,
1009 .codec_dai_name = "snd-soc-dummy-dai",
1010 .codec_name = "snd-soc-dummy",
1011 },
1012 {
1013 .name = "Secondary TDM RX 0 Hostless",
1014 .stream_name = "Secondary TDM RX 0 Hostless",
1015 .cpu_dai_name = "SEC_TDM_RX_0_HOSTLESS",
1016 .platform_name = "msm-pcm-hostless",
1017 .dynamic = 1,
1018 .dpcm_playback = 1,
1019 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
1020 SND_SOC_DPCM_TRIGGER_POST},
1021 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
1022 .ignore_suspend = 1,
1023 .ignore_pmdown_time = 1,
1024 .codec_dai_name = "snd-soc-dummy-dai",
1025 .codec_name = "snd-soc-dummy",
1026 },
1027 {
1028 .name = "Secondary TDM TX 0 Hostless",
1029 .stream_name = "Secondary TDM TX 0 Hostless",
1030 .cpu_dai_name = "SEC_TDM_TX_0_HOSTLESS",
1031 .platform_name = "msm-pcm-hostless",
1032 .dynamic = 1,
1033 .dpcm_capture = 1,
1034 .trigger = {SND_SOC_DPCM_TRIGGER_POST,
1035 SND_SOC_DPCM_TRIGGER_POST},
1036 .no_host_mode = SND_SOC_DAI_LINK_NO_HOST,
1037 .ignore_suspend = 1,
1038 .ignore_pmdown_time = 1,
1039 .codec_dai_name = "snd-soc-dummy-dai",
1040 .codec_name = "snd-soc-dummy",
1041 },
1042};
1043
1044static struct snd_soc_dai_link msm8952_common_be_dai[] = {
1045 /* Backend I2S DAI Links */
1046 {
1047 .name = LPASS_BE_QUAT_MI2S_RX,
1048 .stream_name = "Quaternary MI2S Playback",
1049 .cpu_dai_name = "msm-dai-q6-mi2s.3",
1050 .platform_name = "msm-pcm-routing",
1051 .codec_dai_name = "snd-soc-dummy-dai",
1052 .codec_name = "snd-soc-dummy",
1053 .no_pcm = 1,
1054 .dpcm_playback = 1,
1055 .id = MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
1056 .be_hw_params_fixup = msm_be_hw_params_fixup,
1057 .ops = &msm8952_quat_mi2s_be_ops,
1058 .ignore_pmdown_time = 1, /* dai link has playback support */
1059 .ignore_suspend = 1,
1060 },
1061 /* Primary AUX PCM Backend DAI Links */
1062 {
1063 .name = LPASS_BE_AUXPCM_RX,
1064 .stream_name = "AUX PCM Playback",
1065 .cpu_dai_name = "msm-dai-q6-auxpcm.1",
1066 .platform_name = "msm-pcm-routing",
1067 .codec_name = "msm-stub-codec.1",
1068 .codec_dai_name = "msm-stub-rx",
1069 .no_pcm = 1,
1070 .dpcm_playback = 1,
1071 .id = MSM_BACKEND_DAI_AUXPCM_RX,
1072 .be_hw_params_fixup = msm_auxpcm_be_params_fixup,
1073 .ops = &msm_pri_auxpcm_be_ops,
1074 .ignore_pmdown_time = 1,
1075 .ignore_suspend = 1,
1076 },
1077 {
1078 .name = LPASS_BE_AUXPCM_TX,
1079 .stream_name = "AUX PCM Capture",
1080 .cpu_dai_name = "msm-dai-q6-auxpcm.1",
1081 .platform_name = "msm-pcm-routing",
1082 .codec_name = "msm-stub-codec.1",
1083 .codec_dai_name = "msm-stub-tx",
1084 .no_pcm = 1,
1085 .dpcm_capture = 1,
1086 .id = MSM_BACKEND_DAI_AUXPCM_TX,
1087 .be_hw_params_fixup = msm_auxpcm_be_params_fixup,
1088 .ops = &msm_pri_auxpcm_be_ops,
1089 .ignore_suspend = 1,
1090 },
1091 {
1092 .name = LPASS_BE_QUAT_MI2S_TX,
1093 .stream_name = "Quaternary MI2S Capture",
1094 .cpu_dai_name = "msm-dai-q6-mi2s.3",
1095 .platform_name = "msm-pcm-routing",
1096 .codec_dai_name = "snd-soc-dummy-dai",
1097 .codec_name = "snd-soc-dummy",
1098 .no_pcm = 1,
1099 .dpcm_capture = 1,
1100 .id = MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
1101 .be_hw_params_fixup = msm_be_hw_params_fixup,
1102 .ops = &msm8952_quat_mi2s_be_ops,
1103 .ignore_suspend = 1,
1104 },
1105 {
1106 .name = LPASS_BE_INT_BT_SCO_RX,
1107 .stream_name = "Internal BT-SCO Playback",
1108 .cpu_dai_name = "msm-dai-q6-dev.12288",
1109 .platform_name = "msm-pcm-routing",
1110 .codec_name = "msm-stub-codec.1",
1111 .codec_dai_name = "msm-stub-rx",
1112 .no_pcm = 1,
1113 .dpcm_playback = 1,
1114 .id = MSM_BACKEND_DAI_INT_BT_SCO_RX,
1115 .be_hw_params_fixup = msm_btsco_be_hw_params_fixup,
1116 /* this dai link has playback support */
1117 .ignore_pmdown_time = 1,
1118 .ignore_suspend = 1,
1119 },
1120 {
1121 .name = LPASS_BE_INT_BT_SCO_TX,
1122 .stream_name = "Internal BT-SCO Capture",
1123 .cpu_dai_name = "msm-dai-q6-dev.12289",
1124 .platform_name = "msm-pcm-routing",
1125 .codec_name = "msm-stub-codec.1",
1126 .codec_dai_name = "msm-stub-tx",
1127 .no_pcm = 1,
1128 .dpcm_capture = 1,
1129 .id = MSM_BACKEND_DAI_INT_BT_SCO_TX,
1130 .be_hw_params_fixup = msm_btsco_be_hw_params_fixup,
1131 .ignore_suspend = 1,
1132 },
1133 {
1134 .name = LPASS_BE_INT_FM_RX,
1135 .stream_name = "Internal FM Playback",
1136 .cpu_dai_name = "msm-dai-q6-dev.12292",
1137 .platform_name = "msm-pcm-routing",
1138 .codec_name = "msm-stub-codec.1",
1139 .codec_dai_name = "msm-stub-rx",
1140 .no_pcm = 1,
1141 .dpcm_playback = 1,
1142 .id = MSM_BACKEND_DAI_INT_FM_RX,
1143 .be_hw_params_fixup = msm_be_hw_params_fixup,
1144 /* this dai link has playback support */
1145 .ignore_pmdown_time = 1,
1146 .ignore_suspend = 1,
1147 },
1148 {
1149 .name = LPASS_BE_INT_FM_TX,
1150 .stream_name = "Internal FM Capture",
1151 .cpu_dai_name = "msm-dai-q6-dev.12293",
1152 .platform_name = "msm-pcm-routing",
1153 .codec_name = "msm-stub-codec.1",
1154 .codec_dai_name = "msm-stub-tx",
1155 .no_pcm = 1,
1156 .dpcm_capture = 1,
1157 .id = MSM_BACKEND_DAI_INT_FM_TX,
1158 .be_hw_params_fixup = msm_be_hw_params_fixup,
1159 .ignore_suspend = 1,
1160 },
1161 {
1162 .name = LPASS_BE_AFE_PCM_RX,
1163 .stream_name = "AFE Playback",
1164 .cpu_dai_name = "msm-dai-q6-dev.224",
1165 .platform_name = "msm-pcm-routing",
1166 .codec_name = "msm-stub-codec.1",
1167 .codec_dai_name = "msm-stub-rx",
1168 .no_pcm = 1,
1169 .dpcm_playback = 1,
1170 .id = MSM_BACKEND_DAI_AFE_PCM_RX,
1171 .be_hw_params_fixup = msm_proxy_rx_be_hw_params_fixup,
1172 /* this dai link has playback support */
1173 .ignore_pmdown_time = 1,
1174 .ignore_suspend = 1,
1175 },
1176 {
1177 .name = LPASS_BE_AFE_PCM_TX,
1178 .stream_name = "AFE Capture",
1179 .cpu_dai_name = "msm-dai-q6-dev.225",
1180 .platform_name = "msm-pcm-routing",
1181 .codec_name = "msm-stub-codec.1",
1182 .codec_dai_name = "msm-stub-tx",
1183 .no_pcm = 1,
1184 .dpcm_capture = 1,
1185 .id = MSM_BACKEND_DAI_AFE_PCM_TX,
1186 .be_hw_params_fixup = msm_proxy_tx_be_hw_params_fixup,
1187 .ignore_suspend = 1,
1188 },
1189 /* Incall Record Uplink BACK END DAI Link */
1190 {
1191 .name = LPASS_BE_INCALL_RECORD_TX,
1192 .stream_name = "Voice Uplink Capture",
1193 .cpu_dai_name = "msm-dai-q6-dev.32772",
1194 .platform_name = "msm-pcm-routing",
1195 .codec_name = "msm-stub-codec.1",
1196 .codec_dai_name = "msm-stub-tx",
1197 .no_pcm = 1,
1198 .dpcm_capture = 1,
1199 .id = MSM_BACKEND_DAI_INCALL_RECORD_TX,
1200 .be_hw_params_fixup = msm_be_hw_params_fixup,
1201 .ignore_suspend = 1,
1202 },
1203 /* Incall Record Downlink BACK END DAI Link */
1204 {
1205 .name = LPASS_BE_INCALL_RECORD_RX,
1206 .stream_name = "Voice Downlink Capture",
1207 .cpu_dai_name = "msm-dai-q6-dev.32771",
1208 .platform_name = "msm-pcm-routing",
1209 .codec_name = "msm-stub-codec.1",
1210 .codec_dai_name = "msm-stub-tx",
1211 .no_pcm = 1,
1212 .dpcm_capture = 1,
1213 .id = MSM_BACKEND_DAI_INCALL_RECORD_RX,
1214 .be_hw_params_fixup = msm_be_hw_params_fixup,
1215 .ignore_suspend = 1,
1216 },
1217 /* Incall Music BACK END DAI Link */
1218 {
1219 .name = LPASS_BE_VOICE_PLAYBACK_TX,
1220 .stream_name = "Voice Farend Playback",
1221 .cpu_dai_name = "msm-dai-q6-dev.32773",
1222 .platform_name = "msm-pcm-routing",
1223 .codec_name = "msm-stub-codec.1",
1224 .codec_dai_name = "msm-stub-rx",
1225 .no_pcm = 1,
1226 .dpcm_playback = 1,
1227 .id = MSM_BACKEND_DAI_VOICE_PLAYBACK_TX,
1228 .be_hw_params_fixup = msm_be_hw_params_fixup,
1229 .ignore_pmdown_time = 1,
1230 .ignore_suspend = 1,
1231 },
1232 /* Incall Music 2 BACK END DAI Link */
1233 {
1234 .name = LPASS_BE_VOICE2_PLAYBACK_TX,
1235 .stream_name = "Voice2 Farend Playback",
1236 .cpu_dai_name = "msm-dai-q6-dev.32770",
1237 .platform_name = "msm-pcm-routing",
1238 .codec_name = "msm-stub-codec.1",
1239 .codec_dai_name = "msm-stub-rx",
1240 .no_pcm = 1,
1241 .dpcm_playback = 1,
1242 .id = MSM_BACKEND_DAI_VOICE2_PLAYBACK_TX,
1243 .be_hw_params_fixup = msm_be_hw_params_fixup,
1244 .ignore_pmdown_time = 1,
1245 .ignore_suspend = 1,
1246 },
1247
1248 {
1249 .name = LPASS_BE_QUIN_MI2S_TX,
1250 .stream_name = "Quinary MI2S Capture",
1251 .cpu_dai_name = "msm-dai-q6-mi2s.5",
1252 .platform_name = "msm-pcm-routing",
1253 .codec_dai_name = "snd-soc-dummy-dai",
1254 .codec_name = "snd-soc-dummy",
1255 .no_pcm = 1,
1256 .dpcm_capture = 1,
1257 .id = MSM_BACKEND_DAI_QUINARY_MI2S_TX,
1258 .be_hw_params_fixup = msm_be_hw_params_fixup,
1259 .ops = &msm8952_quin_mi2s_be_ops,
1260 .ignore_suspend = 1,
1261 },
1262};
1263
jinjiawuea345752020-05-14 18:02:21 +08001264//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -s
Soumya Managoli9d627242018-02-24 16:13:25 +05301265static struct snd_soc_dai_link msm8952_quin_dai_link[] = {
1266 {
1267 .name = LPASS_BE_QUIN_MI2S_RX,
1268 .stream_name = "Quinary MI2S Playback",
1269 .cpu_dai_name = "msm-dai-q6-mi2s.5",
1270 .platform_name = "msm-pcm-routing",
jinjiawuea345752020-05-14 18:02:21 +08001271 .codec_dai_name = "aw8898-aif",
1272 .codec_name = "aw8898_smartpa",
1273 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS,
Soumya Managoli9d627242018-02-24 16:13:25 +05301274 .no_pcm = 1,
1275 .dpcm_playback = 1,
1276 .id = MSM_BACKEND_DAI_QUINARY_MI2S_RX,
1277 .be_hw_params_fixup = msm_quin_be_hw_params_fixup,
1278 .ops = &msm8952_quin_mi2s_be_ops,
1279 .ignore_pmdown_time = 1, /* dai link has playback support */
1280 .ignore_suspend = 1,
1281 },
1282};
jinjiawuea345752020-05-14 18:02:21 +08001283//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -e
Soumya Managoli9d627242018-02-24 16:13:25 +05301284
1285static struct snd_soc_dai_link msm8952_tdm_be_dai_link[] = {
1286 /* TDM be dai links */
1287 {
1288 .name = LPASS_BE_PRI_TDM_RX_0,
1289 .stream_name = "Primary TDM0 Playback",
1290 .cpu_dai_name = "msm-dai-q6-tdm.36864",
1291 .platform_name = "msm-pcm-routing",
1292 .codec_name = "msm-stub-codec.1",
1293 .codec_dai_name = "msm-stub-rx",
1294 .no_pcm = 1,
1295 .dpcm_playback = 1,
1296 .id = MSM_BACKEND_DAI_PRI_TDM_RX_0,
1297 .be_hw_params_fixup = msm_tdm_be_hw_params_fixup,
1298 .ops = &msm_tdm_be_ops,
1299 .ignore_pmdown_time = 1,
1300 .ignore_suspend = 1,
1301 },
1302 {
1303 .name = LPASS_BE_PRI_TDM_TX_0,
1304 .stream_name = "Primary TDM0 Capture",
1305 .cpu_dai_name = "msm-dai-q6-tdm.36865",
1306 .platform_name = "msm-pcm-routing",
1307 .codec_name = "msm-stub-codec.1",
1308 .codec_dai_name = "msm-stub-tx",
1309 .no_pcm = 1,
1310 .dpcm_capture = 1,
1311 .id = MSM_BACKEND_DAI_PRI_TDM_TX_0,
1312 .be_hw_params_fixup = msm_tdm_be_hw_params_fixup,
1313 .ops = &msm_tdm_be_ops,
1314 .ignore_suspend = 1,
1315 },
1316 {
1317 .name = LPASS_BE_SEC_TDM_RX_0,
1318 .stream_name = "Secondary TDM0 Playback",
1319 .cpu_dai_name = "msm-dai-q6-tdm.36880",
1320 .platform_name = "msm-pcm-routing",
1321 .codec_name = "msm-stub-codec.1",
1322 .codec_dai_name = "msm-stub-rx",
1323 .no_pcm = 1,
1324 .dpcm_playback = 1,
1325 .id = MSM_BACKEND_DAI_SEC_TDM_RX_0,
1326 .be_hw_params_fixup = msm_tdm_be_hw_params_fixup,
1327 .ops = &msm_tdm_be_ops,
1328 .ignore_pmdown_time = 1,
1329 .ignore_suspend = 1,
1330 },
1331 {
1332 .name = LPASS_BE_SEC_TDM_TX_0,
1333 .stream_name = "Secondary TDM0 Capture",
1334 .cpu_dai_name = "msm-dai-q6-tdm.36881",
1335 .platform_name = "msm-pcm-routing",
1336 .codec_name = "msm-stub-codec.1",
1337 .codec_dai_name = "msm-stub-tx",
1338 .no_pcm = 1,
1339 .dpcm_capture = 1,
1340 .id = MSM_BACKEND_DAI_SEC_TDM_TX_0,
1341 .be_hw_params_fixup = msm_tdm_be_hw_params_fixup,
1342 .ops = &msm_tdm_be_ops,
1343 .ignore_suspend = 1,
1344 },
1345};
1346
1347struct msm895x_wsa881x_dev_info {
1348 struct device_node *of_node;
1349 u32 index;
1350};
1351
1352static struct snd_soc_aux_dev *msm895x_aux_dev;
1353static struct snd_soc_codec_conf *msm895x_codec_conf;
1354
jinjiawuea345752020-05-14 18:02:21 +08001355//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -s
Soumya Managoli9d627242018-02-24 16:13:25 +05301356static struct snd_soc_dai_link msm8952_tasha_dai_links[
1357ARRAY_SIZE(msm8952_common_fe_dai) +
1358ARRAY_SIZE(msm8952_tasha_fe_dai) +
1359ARRAY_SIZE(msm8952_tdm_fe_dai) +
1360ARRAY_SIZE(msm8952_common_be_dai) +
1361ARRAY_SIZE(msm8952_tasha_be_dai) +
jinjiawuea345752020-05-14 18:02:21 +08001362ARRAY_SIZE(msm8952_quin_dai_link) +
Soumya Managoli9d627242018-02-24 16:13:25 +05301363ARRAY_SIZE(msm8952_tdm_be_dai_link)];
jinjiawuea345752020-05-14 18:02:21 +08001364//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -e
Soumya Managoli9d627242018-02-24 16:13:25 +05301365
1366int msm8952_init_wsa_dev(struct platform_device *pdev,
1367 struct snd_soc_card *card)
1368{
1369 struct device_node *wsa_of_node;
1370 u32 wsa_max_devs;
1371 u32 wsa_dev_cnt;
1372 char *dev_name_str = NULL;
1373 struct msm895x_wsa881x_dev_info *wsa881x_dev_info;
1374 const char *wsa_auxdev_name_prefix[1];
1375 int found = 0;
1376 int i;
1377 int ret;
1378
1379 /* Get maximum WSA device count for this platform */
1380 ret = of_property_read_u32(pdev->dev.of_node,
1381 "qcom,wsa-max-devs", &wsa_max_devs);
1382 if (ret) {
1383 dev_dbg(&pdev->dev,
1384 "%s: wsa-max-devs property missing in DT %s, ret = %d\n",
1385 __func__, pdev->dev.of_node->full_name, ret);
1386 card->num_aux_devs = 0;
1387 return 0;
1388 }
1389 if (wsa_max_devs == 0) {
1390 dev_warn(&pdev->dev,
1391 "%s: Max WSA devices is 0 for this target?\n",
1392 __func__);
1393 card->num_aux_devs = 0;
1394 return 0;
1395 }
1396
1397 /* Get count of WSA device phandles for this platform */
1398 wsa_dev_cnt = of_count_phandle_with_args(pdev->dev.of_node,
1399 "qcom,wsa-devs", NULL);
1400 if (wsa_dev_cnt == -ENOENT) {
1401 dev_warn(&pdev->dev, "%s: No wsa device defined in DT.\n",
1402 __func__);
1403 return 0;
1404 } else if (wsa_dev_cnt <= 0) {
1405 dev_err(&pdev->dev,
1406 "%s: Error reading wsa device from DT. wsa_dev_cnt = %d\n",
1407 __func__, wsa_dev_cnt);
1408 return -EINVAL;
1409 }
1410
1411 /*
1412 * Expect total phandles count to be NOT less than maximum possible
1413 * WSA count. However, if it is less, then assign same value to
1414 * max count as well.
1415 */
1416
1417 if (wsa_dev_cnt < wsa_max_devs) {
1418 dev_dbg(&pdev->dev,
1419 "%s: wsa_max_devs = %d cannot exceed wsa_dev_cnt = %d\n",
1420 __func__, wsa_max_devs, wsa_dev_cnt);
1421 wsa_max_devs = wsa_dev_cnt;
1422 }
1423
1424 /* Make sure prefix string passed for each WSA device */
1425 ret = of_property_count_strings(pdev->dev.of_node,
1426 "qcom,wsa-aux-dev-prefix");
1427 if (ret != wsa_dev_cnt) {
1428 dev_err(&pdev->dev,
1429 "%s: expecting %d wsa prefix. Defined only %d in DT\n",
1430 __func__, wsa_dev_cnt, ret);
1431 return -EINVAL;
1432 }
1433
1434 /*
1435 * Alloc mem to store phandle and index info of WSA device, if already
1436 * registered with ALSA core
1437 */
1438 wsa881x_dev_info = devm_kcalloc(&pdev->dev, wsa_max_devs,
1439 sizeof(struct msm895x_wsa881x_dev_info),
1440 GFP_KERNEL);
1441 if (!wsa881x_dev_info)
1442 return -ENOMEM;
1443
1444 /*
1445 * search and check whether all WSA devices are already
1446 * registered with ALSA core or not. If found a node, store
1447 * the node and the index in a local array of struct for later
1448 * use.
1449 */
1450 for (i = 0; i < wsa_dev_cnt; i++) {
1451 wsa_of_node = of_parse_phandle(pdev->dev.of_node,
1452 "qcom,wsa-devs", i);
1453 if (unlikely(!wsa_of_node)) {
1454 /* we should not be here */
1455 dev_err(&pdev->dev,
1456 "%s: wsa dev node is not present\n",
1457 __func__);
1458 ret = -EINVAL;
1459 goto err_free_dev_info;
1460 }
1461 if (soc_find_component(wsa_of_node, NULL)) {
1462 /* WSA device registered with ALSA core */
1463 wsa881x_dev_info[found].of_node = wsa_of_node;
1464 wsa881x_dev_info[found].index = i;
1465 found++;
1466 if (found == wsa_max_devs)
1467 break;
1468 }
1469 }
1470
1471 if (found < wsa_max_devs) {
1472 dev_dbg(&pdev->dev,
1473 "%s: failed to find %d components. Found only %d\n",
1474 __func__, wsa_max_devs, found);
1475 return -EPROBE_DEFER;
1476 }
1477 dev_info(&pdev->dev,
1478 "%s: found %d wsa881x devices registered with ALSA core\n",
1479 __func__, found);
1480
1481 card->num_aux_devs = wsa_max_devs;
1482 card->num_configs = wsa_max_devs;
1483
1484 /* Alloc array of AUX devs struct */
1485 msm895x_aux_dev = devm_kcalloc(&pdev->dev, card->num_aux_devs,
1486 sizeof(struct snd_soc_aux_dev),
1487 GFP_KERNEL);
1488 if (!msm895x_aux_dev) {
1489 ret = -ENOMEM;
1490 goto err_free_dev_info;
1491 }
1492
1493 /* Alloc array of codec conf struct */
1494 msm895x_codec_conf = devm_kcalloc(&pdev->dev, card->num_aux_devs,
1495 sizeof(struct snd_soc_codec_conf),
1496 GFP_KERNEL);
1497 if (!msm895x_codec_conf) {
1498 ret = -ENOMEM;
1499 goto err_free_aux_dev;
1500 }
1501
1502 for (i = 0; i < card->num_aux_devs; i++) {
1503 dev_name_str = devm_kzalloc(&pdev->dev, DEV_NAME_STR_LEN,
1504 GFP_KERNEL);
1505 if (!dev_name_str) {
1506 ret = -ENOMEM;
1507 goto err_free_cdc_conf;
1508 }
1509
1510 ret = of_property_read_string_index(pdev->dev.of_node,
1511 "qcom,wsa-aux-dev-prefix",
1512 wsa881x_dev_info[i].index,
1513 wsa_auxdev_name_prefix);
1514 if (ret) {
1515 dev_err(&pdev->dev,
1516 "%s: failed to read wsa aux dev prefix, ret = %d\n",
1517 __func__, ret);
1518 ret = -EINVAL;
1519 goto err_free_dev_name_str;
1520 }
1521
1522 snprintf(dev_name_str, strlen("wsa881x.%d"), "wsa881x.%d", i);
1523 msm895x_aux_dev[i].name = dev_name_str;
1524 msm895x_aux_dev[i].codec_name = NULL;
1525 msm895x_aux_dev[i].codec_of_node =
1526 wsa881x_dev_info[i].of_node;
1527 msm895x_aux_dev[i].init = msm895x_wsa881x_init;
1528 msm895x_codec_conf[i].dev_name = NULL;
1529 msm895x_codec_conf[i].name_prefix = wsa_auxdev_name_prefix[0];
1530 msm895x_codec_conf[i].of_node =
1531 wsa881x_dev_info[i].of_node;
1532 }
1533 card->codec_conf = msm895x_codec_conf;
1534 card->aux_dev = msm895x_aux_dev;
1535
1536 return 0;
1537err_free_dev_name_str:
1538 devm_kfree(&pdev->dev, dev_name_str);
1539err_free_cdc_conf:
1540 devm_kfree(&pdev->dev, msm895x_codec_conf);
1541err_free_aux_dev:
1542 devm_kfree(&pdev->dev, msm895x_aux_dev);
1543err_free_dev_info:
1544 devm_kfree(&pdev->dev, wsa881x_dev_info);
1545
1546 return ret;
1547}
1548
1549struct snd_soc_card *populate_snd_card_dailinks(struct device *dev)
1550{
1551 struct snd_soc_card *card = &snd_soc_card_msm_card;
1552 struct snd_soc_dai_link *msm8952_dai_links = NULL;
1553 int num_links, ret, len1, len2, len3, len4, len5 = 0;
1554 enum codec_variant codec_ver = 0;
1555 const char *tasha_lite[NUM_OF_TASHA_LITE_DEVICE] = {
1556 "msm8952-tashalite-snd-card",
1557 "msm8953-tashalite-snd-card"
1558 };
1559
1560 card->dev = dev;
1561 ret = snd_soc_of_parse_card_name(card, "qcom,model");
1562 if (ret) {
1563 dev_err(dev, "%s: parse card name failed, err:%d\n",
1564 __func__, ret);
1565 return NULL;
1566 }
1567 if (strnstr(card->name, "tasha", strlen(card->name))) {
1568 codec_ver = tasha_codec_ver();
1569 if (codec_ver == WCD9XXX)
1570 return NULL;
1571 if (codec_ver == WCD9326) {
1572 if (!strcmp(card->name, "msm8952-tasha-snd-card"))
1573 card->name = tasha_lite[MSM8952_TASHA_LITE];
1574 else if (!strcmp(card->name, "msm8953-tasha-snd-card"))
1575 card->name = tasha_lite[MSM8953_TASHA_LITE];
1576 }
1577
1578 len1 = ARRAY_SIZE(msm8952_common_fe_dai);
1579 len2 = len1 + ARRAY_SIZE(msm8952_tasha_fe_dai);
1580 len3 = len2 + ARRAY_SIZE(msm8952_tdm_fe_dai);
1581 len4 = len3 + ARRAY_SIZE(msm8952_common_be_dai);
1582 len5 = len4 + ARRAY_SIZE(msm8952_tasha_be_dai);
1583 snd_soc_card_msm_card.name = card->name;
1584 card = &snd_soc_card_msm_card;
1585 num_links = ARRAY_SIZE(msm8952_tasha_dai_links);
1586 memcpy(msm8952_tasha_dai_links, msm8952_common_fe_dai,
1587 sizeof(msm8952_common_fe_dai));
1588 memcpy(msm8952_tasha_dai_links + len1,
1589 msm8952_tasha_fe_dai, sizeof(msm8952_tasha_fe_dai));
1590 memcpy(msm8952_tasha_dai_links + len2,
1591 msm8952_tdm_fe_dai, sizeof(msm8952_tdm_fe_dai));
1592 memcpy(msm8952_tasha_dai_links + len3,
1593 msm8952_common_be_dai, sizeof(msm8952_common_be_dai));
1594 memcpy(msm8952_tasha_dai_links + len4,
1595 msm8952_tasha_be_dai, sizeof(msm8952_tasha_be_dai));
1596 msm8952_dai_links = msm8952_tasha_dai_links;
1597 }
1598 if (of_property_read_bool(dev->of_node, "qcom,hdmi-dba-codec-rx")) {
1599 dev_dbg(dev, "%s(): hdmi dba audio support present\n",
1600 __func__);
jinjiawuea345752020-05-14 18:02:21 +08001601//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -s
1602 /*
Soumya Managoli9d627242018-02-24 16:13:25 +05301603 memcpy(msm8952_dai_links + len5, msm8952_hdmi_dba_dai_link,
1604 sizeof(msm8952_hdmi_dba_dai_link));
1605 len5 += ARRAY_SIZE(msm8952_hdmi_dba_dai_link);
jinjiawuea345752020-05-14 18:02:21 +08001606 */
1607//[FairPhone][Audio][jinjia]=2018.11.21=smart amp porting. -e
Soumya Managoli9d627242018-02-24 16:13:25 +05301608 } else {
1609 dev_dbg(dev, "%s(): No hdmi dba present, add quin dai\n",
1610 __func__);
1611 memcpy(msm8952_dai_links + len5, msm8952_quin_dai_link,
1612 sizeof(msm8952_quin_dai_link));
1613 len5 += ARRAY_SIZE(msm8952_quin_dai_link);
1614 }
1615 if (of_property_read_bool(dev->of_node, "qcom,tdm-audio-intf")) {
1616 dev_dbg(dev, "%s(): TDM support present\n",
1617 __func__);
1618 memcpy(msm8952_dai_links + len5, msm8952_tdm_be_dai_link,
1619 sizeof(msm8952_tdm_be_dai_link));
1620 len5 += ARRAY_SIZE(msm8952_tdm_be_dai_link);
1621 }
1622 card->dai_link = msm8952_dai_links;
1623 card->num_links = len5;
1624 card->dev = dev;
1625 return card;
1626}
1627
1628void msm895x_free_auxdev_mem(struct platform_device *pdev)
1629{
1630 struct snd_soc_card *card = platform_get_drvdata(pdev);
1631 int i;
1632
1633 if (card->num_aux_devs > 0) {
1634 for (i = 0; i < card->num_aux_devs; i++) {
1635 kfree(msm895x_aux_dev[i].codec_name);
1636 kfree(msm895x_codec_conf[i].dev_name);
1637 kfree(msm895x_codec_conf[i].name_prefix);
1638 }
1639 }
1640}