• Home
  • Raw
  • Download

Lines Matching +full:dai +full:- +full:links

1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
19 #include <sound/soc-dapm.h>
29 #include "acp-mach.h"
35 #define NAU8821_CODEC_DAI "nau8821-hifi"
38 #define MAX98388_CODEC_DAI "max98388-aif1"
44 /* Google skyrim proto-0 */
77 clk_set_rate(drvdata->wclk, srate); in acp_clk_enable()
78 clk_set_rate(drvdata->bclk, srate * bclk_ratio); in acp_clk_enable()
80 return clk_prepare_enable(drvdata->wclk); in acp_clk_enable()
85 DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC5682:00", "rt5682-aif1")));
118 struct snd_soc_card *card = rtd->card; in acp_card_rt5682_init()
119 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_rt5682_init()
121 struct snd_soc_component *component = codec_dai->component; in acp_card_rt5682_init()
124 dev_info(rtd->dev, "codec dai name = %s\n", codec_dai->name); in acp_card_rt5682_init()
126 if (drvdata->hs_codec_id != RT5682) in acp_card_rt5682_init()
127 return -EINVAL; in acp_card_rt5682_init()
129 drvdata->wclk = clk_get(component->dev, "rt5682-dai-wclk"); in acp_card_rt5682_init()
130 drvdata->bclk = clk_get(component->dev, "rt5682-dai-bclk"); in acp_card_rt5682_init()
132 ret = snd_soc_dapm_new_controls(&card->dapm, rt5682_widgets, in acp_card_rt5682_init()
135 dev_err(rtd->dev, "unable to add widget dapm controls, ret %d\n", ret); in acp_card_rt5682_init()
142 dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret); in acp_card_rt5682_init()
154 dev_err(card->dev, "HP jack creation failed %d\n", ret); in acp_card_rt5682_init()
165 dev_err(rtd->dev, "Headset Jack call-back failed: %d\n", ret); in acp_card_rt5682_init()
169 return snd_soc_dapm_add_routes(&rtd->card->dapm, rt5682_map, ARRAY_SIZE(rt5682_map)); in acp_card_rt5682_init()
174 struct snd_pcm_runtime *runtime = substream->runtime; in acp_card_hs_startup()
176 struct snd_soc_card *card = rtd->card; in acp_card_hs_startup()
177 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_hs_startup()
182 if (drvdata->tdm_mode) in acp_card_hs_startup()
187 if (drvdata->soc_mclk) in acp_card_hs_startup()
194 dev_err(rtd->card->dev, "Failed to set dai fmt: %d\n", ret); in acp_card_hs_startup()
198 runtime->hw.channels_max = DUAL_CHANNEL; in acp_card_hs_startup()
210 struct snd_soc_card *card = rtd->card; in acp_card_shutdown()
211 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_shutdown()
213 if (!drvdata->soc_mclk) in acp_card_shutdown()
214 clk_disable_unprepare(drvdata->wclk); in acp_card_shutdown()
220 struct snd_soc_pcm_runtime *rtd = substream->private_data; in acp_card_rt5682_hw_params()
221 struct snd_soc_card *card = rtd->card; in acp_card_rt5682_hw_params()
222 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_rt5682_hw_params()
232 if (drvdata->tdm_mode) in acp_card_rt5682_hw_params()
237 if (drvdata->soc_mclk) in acp_card_rt5682_hw_params()
243 if (ret && ret != -ENOTSUPP) { in acp_card_rt5682_hw_params()
244 dev_err(rtd->dev, "Failed to set dai fmt: %d\n", ret); in acp_card_rt5682_hw_params()
250 dev_err(rtd->card->dev, "Failed to set dai fmt: %d\n", ret); in acp_card_rt5682_hw_params()
254 if (drvdata->tdm_mode) { in acp_card_rt5682_hw_params()
259 if (ret && ret != -ENOTSUPP) { in acp_card_rt5682_hw_params()
260 dev_err(rtd->dev, "set TDM slot err: %d\n", ret); in acp_card_rt5682_hw_params()
266 dev_warn(rtd->dev, "set TDM slot err:%d\n", ret); in acp_card_rt5682_hw_params()
274 dev_err(rtd->dev, "Failed to set codec PLL: %d\n", ret); in acp_card_rt5682_hw_params()
281 dev_err(rtd->dev, "Failed to set codec SYSCLK: %d\n", ret); in acp_card_rt5682_hw_params()
288 dev_err(rtd->dev, "Failed to set rt5682 tdm bclk ratio: %d\n", ret); in acp_card_rt5682_hw_params()
292 if (!drvdata->soc_mclk) { in acp_card_rt5682_hw_params()
295 dev_err(rtd->card->dev, "Failed to enable HS clk: %d\n", ret); in acp_card_rt5682_hw_params()
311 DAILINK_COMP_ARRAY(COMP_CODEC("i2c-RTL5682:00", "rt5682s-aif1")));
343 struct snd_soc_card *card = rtd->card; in acp_card_rt5682s_init()
344 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_rt5682s_init()
346 struct snd_soc_component *component = codec_dai->component; in acp_card_rt5682s_init()
349 dev_info(rtd->dev, "codec dai name = %s\n", codec_dai->name); in acp_card_rt5682s_init()
351 if (drvdata->hs_codec_id != RT5682S) in acp_card_rt5682s_init()
352 return -EINVAL; in acp_card_rt5682s_init()
354 if (!drvdata->soc_mclk) { in acp_card_rt5682s_init()
355 drvdata->wclk = clk_get(component->dev, "rt5682-dai-wclk"); in acp_card_rt5682s_init()
356 drvdata->bclk = clk_get(component->dev, "rt5682-dai-bclk"); in acp_card_rt5682s_init()
359 ret = snd_soc_dapm_new_controls(&card->dapm, rt5682s_widgets, in acp_card_rt5682s_init()
362 dev_err(rtd->dev, "unable to add widget dapm controls, ret %d\n", ret); in acp_card_rt5682s_init()
369 dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret); in acp_card_rt5682s_init()
381 dev_err(card->dev, "HP jack creation failed %d\n", ret); in acp_card_rt5682s_init()
392 dev_err(rtd->dev, "Headset Jack call-back failed: %d\n", ret); in acp_card_rt5682s_init()
396 return snd_soc_dapm_add_routes(&rtd->card->dapm, rt5682s_map, ARRAY_SIZE(rt5682s_map)); in acp_card_rt5682s_init()
402 struct snd_soc_pcm_runtime *rtd = substream->private_data; in acp_card_rt5682s_hw_params()
403 struct snd_soc_card *card = rtd->card; in acp_card_rt5682s_hw_params()
404 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_rt5682s_hw_params()
414 if (drvdata->tdm_mode) in acp_card_rt5682s_hw_params()
419 if (drvdata->soc_mclk) in acp_card_rt5682s_hw_params()
425 if (ret && ret != -ENOTSUPP) { in acp_card_rt5682s_hw_params()
426 dev_err(rtd->dev, "Failed to set dai fmt: %d\n", ret); in acp_card_rt5682s_hw_params()
432 dev_err(rtd->card->dev, "Failed to set dai fmt: %d\n", ret); in acp_card_rt5682s_hw_params()
436 if (drvdata->tdm_mode) { in acp_card_rt5682s_hw_params()
441 if (ret && ret != -ENOTSUPP) { in acp_card_rt5682s_hw_params()
442 dev_err(rtd->dev, "set TDM slot err: %d\n", ret); in acp_card_rt5682s_hw_params()
448 dev_warn(rtd->dev, "set TDM slot err:%d\n", ret); in acp_card_rt5682s_hw_params()
456 dev_err(rtd->dev, "Failed to set codec PLL: %d\n", ret); in acp_card_rt5682s_hw_params()
463 dev_err(rtd->dev, "Failed to set codec SYSCLK: %d\n", ret); in acp_card_rt5682s_hw_params()
470 dev_err(rtd->dev, "Failed to set rt5682 tdm bclk ratio: %d\n", ret); in acp_card_rt5682s_hw_params()
474 clk_set_rate(drvdata->wclk, srate); in acp_card_rt5682s_hw_params()
475 clk_set_rate(drvdata->bclk, srate * ch * format); in acp_card_rt5682s_hw_params()
497 struct snd_pcm_runtime *runtime = substream->runtime; in acp_card_dmic_startup()
513 DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC1019:00", "rt1019-aif"),
514 COMP_CODEC("i2c-10EC1019:01", "rt1019-aif")));
533 .dlc = COMP_CODEC_CONF("i2c-10EC1019:01"),
537 .dlc = COMP_CODEC_CONF("i2c-10EC1019:00"),
544 struct snd_soc_card *card = rtd->card; in acp_card_rt1019_init()
545 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_rt1019_init()
548 if (drvdata->amp_codec_id != RT1019) in acp_card_rt1019_init()
549 return -EINVAL; in acp_card_rt1019_init()
551 ret = snd_soc_dapm_new_controls(&card->dapm, rt1019_widgets, in acp_card_rt1019_init()
554 dev_err(rtd->dev, "unable to add widget dapm controls, ret %d\n", ret); in acp_card_rt1019_init()
561 dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret); in acp_card_rt1019_init()
565 return snd_soc_dapm_add_routes(&rtd->card->dapm, rt1019_map_lr, in acp_card_rt1019_init()
572 struct snd_soc_pcm_runtime *rtd = substream->private_data; in acp_card_rt1019_hw_params()
573 struct snd_soc_card *card = rtd->card; in acp_card_rt1019_hw_params()
574 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_rt1019_hw_params()
584 if (drvdata->amp_codec_id != RT1019) in acp_card_rt1019_hw_params()
585 return -EINVAL; in acp_card_rt1019_hw_params()
587 if (drvdata->tdm_mode) in acp_card_rt1019_hw_params()
592 if (drvdata->soc_mclk) in acp_card_rt1019_hw_params()
598 if (ret && ret != -ENOTSUPP) { in acp_card_rt1019_hw_params()
599 dev_err(rtd->dev, "Failed to set dai fmt: %d\n", ret); in acp_card_rt1019_hw_params()
603 if (drvdata->tdm_mode) { in acp_card_rt1019_hw_params()
608 if (ret && ret != -ENOTSUPP) { in acp_card_rt1019_hw_params()
609 dev_err(rtd->dev, "set TDM slot err: %d\n", ret); in acp_card_rt1019_hw_params()
615 if (strcmp(codec_dai->name, "rt1019-aif")) in acp_card_rt1019_hw_params()
618 if (drvdata->tdm_mode) in acp_card_rt1019_hw_params()
633 if (drvdata->tdm_mode) { in acp_card_rt1019_hw_params()
637 dev_err(rtd->card->dev, "Failed to set dai fmt: %d\n", ret); in acp_card_rt1019_hw_params()
644 if (!strcmp(codec_dai->component->name, "i2c-10EC1019:00")) { in acp_card_rt1019_hw_params()
653 if (!strcmp(codec_dai->component->name, "i2c-10EC1019:01")) { in acp_card_rt1019_hw_params()
661 if (!drvdata->soc_mclk) { in acp_card_rt1019_hw_params()
664 dev_err(rtd->card->dev, "Failed to enable AMP clk: %d\n", ret); in acp_card_rt1019_hw_params()
674 struct snd_pcm_runtime *runtime = substream->runtime; in acp_card_amp_startup()
676 runtime->hw.channels_max = DUAL_CHANNEL; in acp_card_amp_startup()
709 struct snd_soc_card *card = rtd->card; in acp_card_maxim_init()
710 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_maxim_init()
713 if (drvdata->amp_codec_id != MAX98360A) in acp_card_maxim_init()
714 return -EINVAL; in acp_card_maxim_init()
716 ret = snd_soc_dapm_new_controls(&card->dapm, max98360a_widgets, in acp_card_maxim_init()
719 dev_err(rtd->dev, "unable to add widget dapm controls, ret %d\n", ret); in acp_card_maxim_init()
726 dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret); in acp_card_maxim_init()
730 return snd_soc_dapm_add_routes(&rtd->card->dapm, max98360a_map, in acp_card_maxim_init()
737 struct snd_soc_pcm_runtime *rtd = substream->private_data; in acp_card_maxim_hw_params()
738 struct snd_soc_card *card = rtd->card; in acp_card_maxim_hw_params()
739 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_maxim_hw_params()
748 if (drvdata->tdm_mode) in acp_card_maxim_hw_params()
753 if (drvdata->soc_mclk) in acp_card_maxim_hw_params()
759 if (ret && ret != -ENOTSUPP) { in acp_card_maxim_hw_params()
760 dev_err(rtd->dev, "Failed to set dai fmt: %d\n", ret); in acp_card_maxim_hw_params()
764 if (drvdata->tdm_mode) { in acp_card_maxim_hw_params()
769 if (ret && ret != -ENOTSUPP) { in acp_card_maxim_hw_params()
770 dev_err(rtd->dev, "set TDM slot err: %d\n", ret); in acp_card_maxim_hw_params()
775 if (!drvdata->soc_mclk) { in acp_card_maxim_hw_params()
778 dev_err(rtd->card->dev, "Failed to enable AMP clk: %d\n", ret); in acp_card_maxim_hw_params()
792 DAILINK_COMP_ARRAY(COMP_CODEC("i2c-ADS8388:00", "max98388-aif1"),
793 COMP_CODEC("i2c-ADS8388:01", "max98388-aif1")));
812 .dlc = COMP_CODEC_CONF("i2c-ADS8388:00"),
816 .dlc = COMP_CODEC_CONF("i2c-ADS8388:01"),
830 struct snd_pcm_runtime *runtime = substream->runtime; in acp_card_max98388_startup()
832 runtime->hw.channels_max = DUAL_CHANNEL; in acp_card_max98388_startup()
845 struct snd_soc_card *card = rtd->card; in acp_card_max98388_init()
846 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_max98388_init()
849 if (drvdata->amp_codec_id != MAX98388) in acp_card_max98388_init()
850 return -EINVAL; in acp_card_max98388_init()
852 ret = snd_soc_dapm_new_controls(&card->dapm, max98388_widgets, in acp_card_max98388_init()
856 dev_err(rtd->dev, "unable to add widget dapm controls, ret %d\n", ret); in acp_card_max98388_init()
864 dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret); in acp_card_max98388_init()
868 return snd_soc_dapm_add_routes(&rtd->card->dapm, max98388_map, in acp_card_max98388_init()
875 struct snd_soc_pcm_runtime *rtd = substream->private_data; in acp_max98388_hw_params()
876 struct snd_soc_card *card = rtd->card; in acp_max98388_hw_params()
898 DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10508825:00", "nau8825-hifi")));
929 struct snd_soc_card *card = rtd->card; in acp_card_nau8825_init()
930 struct acp_card_drvdata *drvdata = card->drvdata; in acp_card_nau8825_init()
932 struct snd_soc_component *component = codec_dai->component; in acp_card_nau8825_init()
935 dev_info(rtd->dev, "codec dai name = %s\n", codec_dai->name); in acp_card_nau8825_init()
937 if (drvdata->hs_codec_id != NAU8825) in acp_card_nau8825_init()
938 return -EINVAL; in acp_card_nau8825_init()
940 ret = snd_soc_dapm_new_controls(&card->dapm, nau8825_widgets, in acp_card_nau8825_init()
943 dev_err(rtd->dev, "unable to add widget dapm controls, ret %d\n", ret); in acp_card_nau8825_init()
950 dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret); in acp_card_nau8825_init()
962 dev_err(card->dev, "HP jack creation failed %d\n", ret); in acp_card_nau8825_init()
973 dev_err(rtd->dev, "Headset Jack call-back failed: %d\n", ret); in acp_card_nau8825_init()
977 return snd_soc_dapm_add_routes(&rtd->card->dapm, nau8825_map, ARRAY_SIZE(nau8825_map)); in acp_card_nau8825_init()
984 struct snd_soc_card *card = rtd->card; in acp_nau8825_hw_params()
985 struct acp_card_drvdata *drvdata = card->drvdata; in acp_nau8825_hw_params()
994 dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret); in acp_nau8825_hw_params()
999 dev_err(rtd->dev, "can't set FLL: %d\n", ret); in acp_nau8825_hw_params()
1003 if (drvdata->tdm_mode) in acp_nau8825_hw_params()
1008 if (drvdata->soc_mclk) in acp_nau8825_hw_params()
1014 if (ret && ret != -ENOTSUPP) { in acp_nau8825_hw_params()
1015 dev_err(rtd->dev, "Failed to set dai fmt: %d\n", ret); in acp_nau8825_hw_params()
1021 dev_err(rtd->card->dev, "Failed to set dai fmt: %d\n", ret); in acp_nau8825_hw_params()
1025 if (drvdata->tdm_mode) { in acp_nau8825_hw_params()
1030 if (ret && ret != -ENOTSUPP) { in acp_nau8825_hw_params()
1031 dev_err(rtd->dev, "set TDM slot err: %d\n", ret); in acp_nau8825_hw_params()
1037 dev_warn(rtd->dev, "set TDM slot err:%d\n", ret); in acp_nau8825_hw_params()
1046 struct snd_pcm_runtime *runtime = substream->runtime; in acp_nau8825_startup()
1048 runtime->hw.channels_max = 2; in acp_nau8825_startup()
1052 runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE; in acp_nau8825_startup()
1066 struct snd_soc_dapm_context *dapm = w->dapm; in platform_clock_control()
1067 struct snd_soc_card *card = dapm->card; in platform_clock_control()
1073 dev_err(card->dev, "Codec dai not found\n"); in platform_clock_control()
1074 return -EIO; in platform_clock_control()
1081 dev_err(card->dev, "set sysclk err = %d\n", ret); in platform_clock_control()
1082 return -EIO; in platform_clock_control()
1088 dev_err(codec_dai->dev, "can't set FS clock %d\n", ret); in platform_clock_control()
1092 dev_err(codec_dai->dev, "can't set FLL: %d\n", ret); in platform_clock_control()
1124 /* HP jack connectors - unknown if we have jack detection */
1144 struct snd_soc_card *card = rtd->card; in acp_8821_init()
1146 struct snd_soc_component *component = codec_dai->component; in acp_8821_init()
1149 dev_info(rtd->dev, "codec dai name = %s\n", codec_dai->name); in acp_8821_init()
1151 ret = snd_soc_dapm_new_controls(&card->dapm, nau8821_widgets, in acp_8821_init()
1154 dev_err(rtd->dev, "unable to add widget dapm controls, ret %d\n", ret); in acp_8821_init()
1162 dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret); in acp_8821_init()
1174 dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret); in acp_8821_init()
1185 return snd_soc_dapm_add_routes(&rtd->card->dapm, nau8821_audio_route, in acp_8821_init()
1191 struct snd_pcm_runtime *runtime = substream->runtime; in acp_8821_startup()
1193 runtime->hw.channels_max = DUAL_CHANNEL; in acp_8821_startup()
1198 snd_pcm_hw_constraint_list(substream->runtime, 0, in acp_8821_startup()
1208 struct snd_soc_card *card = rtd->card; in acp_nau8821_hw_params()
1209 struct acp_card_drvdata *drvdata = card->drvdata; in acp_nau8821_hw_params()
1214 if (drvdata->soc_mclk) in acp_nau8821_hw_params()
1221 dev_err(rtd->card->dev, "Failed to set dai fmt: %d\n", ret); in acp_nau8821_hw_params()
1228 dev_err(card->dev, "can't set FS clock %d\n", ret); in acp_nau8821_hw_params()
1232 dev_err(card->dev, "can't set FLL: %d\n", ret); in acp_nau8821_hw_params()
1243 DAILINK_COMP_ARRAY(COMP_CODEC("i2c-NVTN2020:00",
1244 "nau8821-hifi")));
1248 DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
1270 DAILINK_COMP_ARRAY(COMP_CPU("acp-i2s-sp")));
1272 DAILINK_COMP_ARRAY(COMP_CPU("acp-i2s-hs")));
1274 DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-sp")));
1276 DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-sp-virtual")));
1278 DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-hs")));
1280 DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-hs-virtual")));
1282 DAILINK_COMP_ARRAY(COMP_CPU("acp-sof-dmic")));
1284 DAILINK_COMP_ARRAY(COMP_CPU("acp-pdm-dmic")));
1290 struct snd_soc_component *component = dapm->component; in acp_rtk_set_bias_level()
1291 struct acp_card_drvdata *drvdata = card->drvdata; in acp_rtk_set_bias_level()
1297 if (strncmp(component->name, "i2c-RTL5682", 11) && in acp_rtk_set_bias_level()
1298 strncmp(component->name, "i2c-10EC1019", 12)) in acp_rtk_set_bias_level()
1312 ret = clk_prepare_enable(drvdata->bclk); in acp_rtk_set_bias_level()
1314 dev_err(component->dev, "Failed to enable bclk %d\n", ret); in acp_rtk_set_bias_level()
1320 clk_disable_unprepare(drvdata->bclk); in acp_rtk_set_bias_level()
1332 struct snd_soc_dai_link *links; in acp_sofdsp_dai_links_create() local
1333 struct device *dev = card->dev; in acp_sofdsp_dai_links_create()
1334 struct acp_card_drvdata *drv_data = card->drvdata; in acp_sofdsp_dai_links_create()
1337 if (drv_data->hs_cpu_id) in acp_sofdsp_dai_links_create()
1339 if (drv_data->amp_cpu_id) in acp_sofdsp_dai_links_create()
1341 if (drv_data->dmic_cpu_id) in acp_sofdsp_dai_links_create()
1344 links = devm_kcalloc(dev, num_links, sizeof(struct snd_soc_dai_link), GFP_KERNEL); in acp_sofdsp_dai_links_create()
1345 if (!links) in acp_sofdsp_dai_links_create()
1346 return -ENOMEM; in acp_sofdsp_dai_links_create()
1348 if (drv_data->hs_cpu_id == I2S_SP) { in acp_sofdsp_dai_links_create()
1349 links[i].name = "acp-headset-codec"; in acp_sofdsp_dai_links_create()
1350 links[i].id = HEADSET_BE_ID; in acp_sofdsp_dai_links_create()
1351 links[i].cpus = sof_sp; in acp_sofdsp_dai_links_create()
1352 links[i].num_cpus = ARRAY_SIZE(sof_sp); in acp_sofdsp_dai_links_create()
1353 links[i].platforms = sof_component; in acp_sofdsp_dai_links_create()
1354 links[i].num_platforms = ARRAY_SIZE(sof_component); in acp_sofdsp_dai_links_create()
1355 links[i].dpcm_playback = 1; in acp_sofdsp_dai_links_create()
1356 links[i].dpcm_capture = 1; in acp_sofdsp_dai_links_create()
1357 links[i].nonatomic = true; in acp_sofdsp_dai_links_create()
1358 links[i].no_pcm = 1; in acp_sofdsp_dai_links_create()
1359 if (!drv_data->hs_codec_id) { in acp_sofdsp_dai_links_create()
1361 links[i].codecs = &asoc_dummy_dlc; in acp_sofdsp_dai_links_create()
1362 links[i].num_codecs = 1; in acp_sofdsp_dai_links_create()
1364 if (drv_data->hs_codec_id == RT5682) { in acp_sofdsp_dai_links_create()
1365 links[i].codecs = rt5682; in acp_sofdsp_dai_links_create()
1366 links[i].num_codecs = ARRAY_SIZE(rt5682); in acp_sofdsp_dai_links_create()
1367 links[i].init = acp_card_rt5682_init; in acp_sofdsp_dai_links_create()
1368 links[i].ops = &acp_card_rt5682_ops; in acp_sofdsp_dai_links_create()
1370 if (drv_data->hs_codec_id == RT5682S) { in acp_sofdsp_dai_links_create()
1371 links[i].codecs = rt5682s; in acp_sofdsp_dai_links_create()
1372 links[i].num_codecs = ARRAY_SIZE(rt5682s); in acp_sofdsp_dai_links_create()
1373 links[i].init = acp_card_rt5682s_init; in acp_sofdsp_dai_links_create()
1374 links[i].ops = &acp_card_rt5682s_ops; in acp_sofdsp_dai_links_create()
1376 if (drv_data->hs_codec_id == NAU8821) { in acp_sofdsp_dai_links_create()
1377 links[i].codecs = nau8821; in acp_sofdsp_dai_links_create()
1378 links[i].num_codecs = ARRAY_SIZE(nau8821); in acp_sofdsp_dai_links_create()
1379 links[i].init = acp_8821_init; in acp_sofdsp_dai_links_create()
1380 links[i].ops = &acp_8821_ops; in acp_sofdsp_dai_links_create()
1385 if (drv_data->hs_cpu_id == I2S_HS) { in acp_sofdsp_dai_links_create()
1386 links[i].name = "acp-headset-codec"; in acp_sofdsp_dai_links_create()
1387 links[i].id = HEADSET_BE_ID; in acp_sofdsp_dai_links_create()
1388 links[i].cpus = sof_hs; in acp_sofdsp_dai_links_create()
1389 links[i].num_cpus = ARRAY_SIZE(sof_hs); in acp_sofdsp_dai_links_create()
1390 links[i].platforms = sof_component; in acp_sofdsp_dai_links_create()
1391 links[i].num_platforms = ARRAY_SIZE(sof_component); in acp_sofdsp_dai_links_create()
1392 links[i].dpcm_playback = 1; in acp_sofdsp_dai_links_create()
1393 links[i].dpcm_capture = 1; in acp_sofdsp_dai_links_create()
1394 links[i].nonatomic = true; in acp_sofdsp_dai_links_create()
1395 links[i].no_pcm = 1; in acp_sofdsp_dai_links_create()
1396 if (!drv_data->hs_codec_id) { in acp_sofdsp_dai_links_create()
1398 links[i].codecs = &asoc_dummy_dlc; in acp_sofdsp_dai_links_create()
1399 links[i].num_codecs = 1; in acp_sofdsp_dai_links_create()
1401 if (drv_data->hs_codec_id == NAU8825) { in acp_sofdsp_dai_links_create()
1402 links[i].codecs = nau8825; in acp_sofdsp_dai_links_create()
1403 links[i].num_codecs = ARRAY_SIZE(nau8825); in acp_sofdsp_dai_links_create()
1404 links[i].init = acp_card_nau8825_init; in acp_sofdsp_dai_links_create()
1405 links[i].ops = &acp_card_nau8825_ops; in acp_sofdsp_dai_links_create()
1407 if (drv_data->hs_codec_id == RT5682S) { in acp_sofdsp_dai_links_create()
1408 links[i].codecs = rt5682s; in acp_sofdsp_dai_links_create()
1409 links[i].num_codecs = ARRAY_SIZE(rt5682s); in acp_sofdsp_dai_links_create()
1410 links[i].init = acp_card_rt5682s_init; in acp_sofdsp_dai_links_create()
1411 links[i].ops = &acp_card_rt5682s_ops; in acp_sofdsp_dai_links_create()
1416 if (drv_data->amp_cpu_id == I2S_SP) { in acp_sofdsp_dai_links_create()
1417 links[i].name = "acp-amp-codec"; in acp_sofdsp_dai_links_create()
1418 links[i].id = AMP_BE_ID; in acp_sofdsp_dai_links_create()
1419 if (drv_data->platform == RENOIR) { in acp_sofdsp_dai_links_create()
1420 links[i].cpus = sof_sp; in acp_sofdsp_dai_links_create()
1421 links[i].num_cpus = ARRAY_SIZE(sof_sp); in acp_sofdsp_dai_links_create()
1423 links[i].cpus = sof_sp_virtual; in acp_sofdsp_dai_links_create()
1424 links[i].num_cpus = ARRAY_SIZE(sof_sp_virtual); in acp_sofdsp_dai_links_create()
1426 links[i].platforms = sof_component; in acp_sofdsp_dai_links_create()
1427 links[i].num_platforms = ARRAY_SIZE(sof_component); in acp_sofdsp_dai_links_create()
1428 links[i].dpcm_playback = 1; in acp_sofdsp_dai_links_create()
1429 links[i].nonatomic = true; in acp_sofdsp_dai_links_create()
1430 links[i].no_pcm = 1; in acp_sofdsp_dai_links_create()
1431 if (!drv_data->amp_codec_id) { in acp_sofdsp_dai_links_create()
1433 links[i].codecs = &asoc_dummy_dlc; in acp_sofdsp_dai_links_create()
1434 links[i].num_codecs = 1; in acp_sofdsp_dai_links_create()
1436 if (drv_data->amp_codec_id == RT1019) { in acp_sofdsp_dai_links_create()
1437 links[i].codecs = rt1019; in acp_sofdsp_dai_links_create()
1438 links[i].num_codecs = ARRAY_SIZE(rt1019); in acp_sofdsp_dai_links_create()
1439 links[i].ops = &acp_card_rt1019_ops; in acp_sofdsp_dai_links_create()
1440 links[i].init = acp_card_rt1019_init; in acp_sofdsp_dai_links_create()
1441 card->codec_conf = rt1019_conf; in acp_sofdsp_dai_links_create()
1442 card->num_configs = ARRAY_SIZE(rt1019_conf); in acp_sofdsp_dai_links_create()
1444 if (drv_data->amp_codec_id == MAX98360A) { in acp_sofdsp_dai_links_create()
1445 links[i].codecs = max98360a; in acp_sofdsp_dai_links_create()
1446 links[i].num_codecs = ARRAY_SIZE(max98360a); in acp_sofdsp_dai_links_create()
1447 links[i].ops = &acp_card_maxim_ops; in acp_sofdsp_dai_links_create()
1448 links[i].init = acp_card_maxim_init; in acp_sofdsp_dai_links_create()
1453 if (drv_data->amp_cpu_id == I2S_HS) { in acp_sofdsp_dai_links_create()
1454 links[i].name = "acp-amp-codec"; in acp_sofdsp_dai_links_create()
1455 links[i].id = AMP_BE_ID; in acp_sofdsp_dai_links_create()
1456 links[i].cpus = sof_hs_virtual; in acp_sofdsp_dai_links_create()
1457 links[i].num_cpus = ARRAY_SIZE(sof_hs_virtual); in acp_sofdsp_dai_links_create()
1458 links[i].platforms = sof_component; in acp_sofdsp_dai_links_create()
1459 links[i].num_platforms = ARRAY_SIZE(sof_component); in acp_sofdsp_dai_links_create()
1460 links[i].dpcm_playback = 1; in acp_sofdsp_dai_links_create()
1461 links[i].nonatomic = true; in acp_sofdsp_dai_links_create()
1462 links[i].no_pcm = 1; in acp_sofdsp_dai_links_create()
1463 if (!drv_data->amp_codec_id) { in acp_sofdsp_dai_links_create()
1465 links[i].codecs = &asoc_dummy_dlc; in acp_sofdsp_dai_links_create()
1466 links[i].num_codecs = 1; in acp_sofdsp_dai_links_create()
1468 if (drv_data->amp_codec_id == MAX98360A) { in acp_sofdsp_dai_links_create()
1469 links[i].codecs = max98360a; in acp_sofdsp_dai_links_create()
1470 links[i].num_codecs = ARRAY_SIZE(max98360a); in acp_sofdsp_dai_links_create()
1471 links[i].ops = &acp_card_maxim_ops; in acp_sofdsp_dai_links_create()
1472 links[i].init = acp_card_maxim_init; in acp_sofdsp_dai_links_create()
1474 if (drv_data->amp_codec_id == MAX98388) { in acp_sofdsp_dai_links_create()
1475 links[i].codecs = max98388; in acp_sofdsp_dai_links_create()
1476 links[i].num_codecs = ARRAY_SIZE(max98388); in acp_sofdsp_dai_links_create()
1477 links[i].ops = &acp_max98388_ops; in acp_sofdsp_dai_links_create()
1478 links[i].init = acp_card_max98388_init; in acp_sofdsp_dai_links_create()
1479 card->codec_conf = max98388_conf; in acp_sofdsp_dai_links_create()
1480 card->num_configs = ARRAY_SIZE(max98388_conf); in acp_sofdsp_dai_links_create()
1482 if (drv_data->amp_codec_id == RT1019) { in acp_sofdsp_dai_links_create()
1483 links[i].codecs = rt1019; in acp_sofdsp_dai_links_create()
1484 links[i].num_codecs = ARRAY_SIZE(rt1019); in acp_sofdsp_dai_links_create()
1485 links[i].ops = &acp_card_rt1019_ops; in acp_sofdsp_dai_links_create()
1486 links[i].init = acp_card_rt1019_init; in acp_sofdsp_dai_links_create()
1487 card->codec_conf = rt1019_conf; in acp_sofdsp_dai_links_create()
1488 card->num_configs = ARRAY_SIZE(rt1019_conf); in acp_sofdsp_dai_links_create()
1493 if (drv_data->dmic_cpu_id == DMIC) { in acp_sofdsp_dai_links_create()
1494 links[i].name = "acp-dmic-codec"; in acp_sofdsp_dai_links_create()
1495 links[i].id = DMIC_BE_ID; in acp_sofdsp_dai_links_create()
1496 links[i].codecs = dmic_codec; in acp_sofdsp_dai_links_create()
1497 links[i].num_codecs = ARRAY_SIZE(dmic_codec); in acp_sofdsp_dai_links_create()
1498 links[i].cpus = sof_dmic; in acp_sofdsp_dai_links_create()
1499 links[i].num_cpus = ARRAY_SIZE(sof_dmic); in acp_sofdsp_dai_links_create()
1500 links[i].platforms = sof_component; in acp_sofdsp_dai_links_create()
1501 links[i].num_platforms = ARRAY_SIZE(sof_component); in acp_sofdsp_dai_links_create()
1502 links[i].dpcm_capture = 1; in acp_sofdsp_dai_links_create()
1503 links[i].nonatomic = true; in acp_sofdsp_dai_links_create()
1504 links[i].no_pcm = 1; in acp_sofdsp_dai_links_create()
1507 card->dai_link = links; in acp_sofdsp_dai_links_create()
1508 card->num_links = num_links; in acp_sofdsp_dai_links_create()
1509 card->set_bias_level = acp_rtk_set_bias_level; in acp_sofdsp_dai_links_create()
1517 struct snd_soc_dai_link *links; in acp_legacy_dai_links_create() local
1518 struct device *dev = card->dev; in acp_legacy_dai_links_create()
1519 struct acp_card_drvdata *drv_data = card->drvdata; in acp_legacy_dai_links_create()
1522 if (drv_data->hs_cpu_id) in acp_legacy_dai_links_create()
1524 if (drv_data->amp_cpu_id) in acp_legacy_dai_links_create()
1526 if (drv_data->dmic_cpu_id) in acp_legacy_dai_links_create()
1529 links = devm_kcalloc(dev, num_links, sizeof(struct snd_soc_dai_link), GFP_KERNEL); in acp_legacy_dai_links_create()
1530 if (!links) in acp_legacy_dai_links_create()
1531 return -ENOMEM; in acp_legacy_dai_links_create()
1533 if (drv_data->hs_cpu_id == I2S_SP) { in acp_legacy_dai_links_create()
1534 links[i].name = "acp-headset-codec"; in acp_legacy_dai_links_create()
1535 links[i].id = HEADSET_BE_ID; in acp_legacy_dai_links_create()
1536 links[i].cpus = i2s_sp; in acp_legacy_dai_links_create()
1537 links[i].num_cpus = ARRAY_SIZE(i2s_sp); in acp_legacy_dai_links_create()
1538 links[i].platforms = platform_component; in acp_legacy_dai_links_create()
1539 links[i].num_platforms = ARRAY_SIZE(platform_component); in acp_legacy_dai_links_create()
1540 links[i].dpcm_playback = 1; in acp_legacy_dai_links_create()
1541 links[i].dpcm_capture = 1; in acp_legacy_dai_links_create()
1542 if (!drv_data->hs_codec_id) { in acp_legacy_dai_links_create()
1544 links[i].codecs = &asoc_dummy_dlc; in acp_legacy_dai_links_create()
1545 links[i].num_codecs = 1; in acp_legacy_dai_links_create()
1547 if (drv_data->hs_codec_id == RT5682) { in acp_legacy_dai_links_create()
1548 links[i].codecs = rt5682; in acp_legacy_dai_links_create()
1549 links[i].num_codecs = ARRAY_SIZE(rt5682); in acp_legacy_dai_links_create()
1550 links[i].init = acp_card_rt5682_init; in acp_legacy_dai_links_create()
1551 links[i].ops = &acp_card_rt5682_ops; in acp_legacy_dai_links_create()
1553 if (drv_data->hs_codec_id == RT5682S) { in acp_legacy_dai_links_create()
1554 links[i].codecs = rt5682s; in acp_legacy_dai_links_create()
1555 links[i].num_codecs = ARRAY_SIZE(rt5682s); in acp_legacy_dai_links_create()
1556 links[i].init = acp_card_rt5682s_init; in acp_legacy_dai_links_create()
1557 links[i].ops = &acp_card_rt5682s_ops; in acp_legacy_dai_links_create()
1562 if (drv_data->hs_cpu_id == I2S_HS) { in acp_legacy_dai_links_create()
1563 links[i].name = "acp-headset-codec"; in acp_legacy_dai_links_create()
1564 links[i].id = HEADSET_BE_ID; in acp_legacy_dai_links_create()
1565 links[i].cpus = i2s_hs; in acp_legacy_dai_links_create()
1566 links[i].num_cpus = ARRAY_SIZE(i2s_hs); in acp_legacy_dai_links_create()
1567 if (drv_data->platform == REMBRANDT) { in acp_legacy_dai_links_create()
1568 links[i].platforms = platform_rmb_component; in acp_legacy_dai_links_create()
1569 links[i].num_platforms = ARRAY_SIZE(platform_rmb_component); in acp_legacy_dai_links_create()
1571 links[i].platforms = platform_component; in acp_legacy_dai_links_create()
1572 links[i].num_platforms = ARRAY_SIZE(platform_component); in acp_legacy_dai_links_create()
1574 links[i].dpcm_playback = 1; in acp_legacy_dai_links_create()
1575 links[i].dpcm_capture = 1; in acp_legacy_dai_links_create()
1576 if (!drv_data->hs_codec_id) { in acp_legacy_dai_links_create()
1578 links[i].codecs = &asoc_dummy_dlc; in acp_legacy_dai_links_create()
1579 links[i].num_codecs = 1; in acp_legacy_dai_links_create()
1581 if (drv_data->hs_codec_id == NAU8825) { in acp_legacy_dai_links_create()
1582 links[i].codecs = nau8825; in acp_legacy_dai_links_create()
1583 links[i].num_codecs = ARRAY_SIZE(nau8825); in acp_legacy_dai_links_create()
1584 links[i].init = acp_card_nau8825_init; in acp_legacy_dai_links_create()
1585 links[i].ops = &acp_card_nau8825_ops; in acp_legacy_dai_links_create()
1587 if (drv_data->hs_codec_id == RT5682S) { in acp_legacy_dai_links_create()
1588 links[i].codecs = rt5682s; in acp_legacy_dai_links_create()
1589 links[i].num_codecs = ARRAY_SIZE(rt5682s); in acp_legacy_dai_links_create()
1590 links[i].init = acp_card_rt5682s_init; in acp_legacy_dai_links_create()
1591 links[i].ops = &acp_card_rt5682s_ops; in acp_legacy_dai_links_create()
1596 if (drv_data->amp_cpu_id == I2S_SP) { in acp_legacy_dai_links_create()
1597 links[i].name = "acp-amp-codec"; in acp_legacy_dai_links_create()
1598 links[i].id = AMP_BE_ID; in acp_legacy_dai_links_create()
1599 links[i].cpus = i2s_sp; in acp_legacy_dai_links_create()
1600 links[i].num_cpus = ARRAY_SIZE(i2s_sp); in acp_legacy_dai_links_create()
1601 links[i].platforms = platform_component; in acp_legacy_dai_links_create()
1602 links[i].num_platforms = ARRAY_SIZE(platform_component); in acp_legacy_dai_links_create()
1603 links[i].dpcm_playback = 1; in acp_legacy_dai_links_create()
1604 if (!drv_data->amp_codec_id) { in acp_legacy_dai_links_create()
1606 links[i].codecs = &asoc_dummy_dlc; in acp_legacy_dai_links_create()
1607 links[i].num_codecs = 1; in acp_legacy_dai_links_create()
1609 if (drv_data->amp_codec_id == RT1019) { in acp_legacy_dai_links_create()
1610 links[i].codecs = rt1019; in acp_legacy_dai_links_create()
1611 links[i].num_codecs = ARRAY_SIZE(rt1019); in acp_legacy_dai_links_create()
1612 links[i].ops = &acp_card_rt1019_ops; in acp_legacy_dai_links_create()
1613 links[i].init = acp_card_rt1019_init; in acp_legacy_dai_links_create()
1614 card->codec_conf = rt1019_conf; in acp_legacy_dai_links_create()
1615 card->num_configs = ARRAY_SIZE(rt1019_conf); in acp_legacy_dai_links_create()
1617 if (drv_data->amp_codec_id == MAX98360A) { in acp_legacy_dai_links_create()
1618 links[i].codecs = max98360a; in acp_legacy_dai_links_create()
1619 links[i].num_codecs = ARRAY_SIZE(max98360a); in acp_legacy_dai_links_create()
1620 links[i].ops = &acp_card_maxim_ops; in acp_legacy_dai_links_create()
1621 links[i].init = acp_card_maxim_init; in acp_legacy_dai_links_create()
1626 if (drv_data->amp_cpu_id == I2S_HS) { in acp_legacy_dai_links_create()
1627 links[i].name = "acp-amp-codec"; in acp_legacy_dai_links_create()
1628 links[i].id = AMP_BE_ID; in acp_legacy_dai_links_create()
1629 links[i].cpus = i2s_hs; in acp_legacy_dai_links_create()
1630 links[i].num_cpus = ARRAY_SIZE(i2s_hs); in acp_legacy_dai_links_create()
1631 if (drv_data->platform == REMBRANDT) { in acp_legacy_dai_links_create()
1632 links[i].platforms = platform_rmb_component; in acp_legacy_dai_links_create()
1633 links[i].num_platforms = ARRAY_SIZE(platform_rmb_component); in acp_legacy_dai_links_create()
1635 links[i].platforms = platform_component; in acp_legacy_dai_links_create()
1636 links[i].num_platforms = ARRAY_SIZE(platform_component); in acp_legacy_dai_links_create()
1638 links[i].dpcm_playback = 1; in acp_legacy_dai_links_create()
1639 if (!drv_data->amp_codec_id) { in acp_legacy_dai_links_create()
1641 links[i].codecs = &asoc_dummy_dlc; in acp_legacy_dai_links_create()
1642 links[i].num_codecs = 1; in acp_legacy_dai_links_create()
1644 if (drv_data->amp_codec_id == MAX98360A) { in acp_legacy_dai_links_create()
1645 links[i].codecs = max98360a; in acp_legacy_dai_links_create()
1646 links[i].num_codecs = ARRAY_SIZE(max98360a); in acp_legacy_dai_links_create()
1647 links[i].ops = &acp_card_maxim_ops; in acp_legacy_dai_links_create()
1648 links[i].init = acp_card_maxim_init; in acp_legacy_dai_links_create()
1650 if (drv_data->amp_codec_id == RT1019) { in acp_legacy_dai_links_create()
1651 links[i].codecs = rt1019; in acp_legacy_dai_links_create()
1652 links[i].num_codecs = ARRAY_SIZE(rt1019); in acp_legacy_dai_links_create()
1653 links[i].ops = &acp_card_rt1019_ops; in acp_legacy_dai_links_create()
1654 links[i].init = acp_card_rt1019_init; in acp_legacy_dai_links_create()
1655 card->codec_conf = rt1019_conf; in acp_legacy_dai_links_create()
1656 card->num_configs = ARRAY_SIZE(rt1019_conf); in acp_legacy_dai_links_create()
1661 if (drv_data->dmic_cpu_id == DMIC) { in acp_legacy_dai_links_create()
1662 links[i].name = "acp-dmic-codec"; in acp_legacy_dai_links_create()
1663 links[i].id = DMIC_BE_ID; in acp_legacy_dai_links_create()
1664 if (drv_data->dmic_codec_id == DMIC) { in acp_legacy_dai_links_create()
1665 links[i].codecs = dmic_codec; in acp_legacy_dai_links_create()
1666 links[i].num_codecs = ARRAY_SIZE(dmic_codec); in acp_legacy_dai_links_create()
1669 links[i].codecs = &asoc_dummy_dlc; in acp_legacy_dai_links_create()
1670 links[i].num_codecs = 1; in acp_legacy_dai_links_create()
1672 links[i].cpus = pdm_dmic; in acp_legacy_dai_links_create()
1673 links[i].num_cpus = ARRAY_SIZE(pdm_dmic); in acp_legacy_dai_links_create()
1674 if (drv_data->platform == REMBRANDT) { in acp_legacy_dai_links_create()
1675 links[i].platforms = platform_rmb_component; in acp_legacy_dai_links_create()
1676 links[i].num_platforms = ARRAY_SIZE(platform_rmb_component); in acp_legacy_dai_links_create()
1678 links[i].platforms = platform_component; in acp_legacy_dai_links_create()
1679 links[i].num_platforms = ARRAY_SIZE(platform_component); in acp_legacy_dai_links_create()
1681 links[i].ops = &acp_card_dmic_ops; in acp_legacy_dai_links_create()
1682 links[i].dpcm_capture = 1; in acp_legacy_dai_links_create()
1685 card->dai_link = links; in acp_legacy_dai_links_create()
1686 card->num_links = num_links; in acp_legacy_dai_links_create()
1687 card->set_bias_level = acp_rtk_set_bias_level; in acp_legacy_dai_links_create()