Lines Matching +full:dmic01 +full:- +full:state

1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright(c) 2019-2020 Intel Corporation.
22 #include <sound/soc-acpi.h>
27 #include "../common/soc-intel-quirks.h"
94 sof_rt5682_quirk = (unsigned long)id->driver_data; in sof_rt5682_quirk_cb()
111 DMI_MATCH(DMI_PRODUCT_NAME, "UP-CHT01"),
166 DMI_MATCH(DMI_OEM_STRING, "AUDIO-MAX98373_ALC5682I_I2S_UP4"),
180 DMI_MATCH(DMI_OEM_STRING, "AUDIO-ADL_MAX98373_ALC5682I_I2S"),
193 DMI_MATCH(DMI_OEM_STRING, "AUDIO-MAX98390_ALC5682I_I2S"),
206 DMI_MATCH(DMI_OEM_STRING, "AUDIO-MAX98360_ALC5682I_I2S_AMP_SSP2"),
219 DMI_MATCH(DMI_OEM_STRING, "AUDIO-MAX98360_ALC5682I_I2S"),
235 DMI_MATCH(DMI_OEM_STRING, "AUDIO-ALC1019_ALC5682I_I2S"),
264 struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); in sof_hdmi_init()
268 pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL); in sof_hdmi_init()
270 return -ENOMEM; in sof_hdmi_init()
273 pcm->device = rtd->dai_link->id; in sof_hdmi_init()
274 pcm->codec_dai = dai; in sof_hdmi_init()
276 list_add_tail(&pcm->head, &ctx->hdmi_pcm_list); in sof_hdmi_init()
294 struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); in sof_rt5682_codec_init()
295 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in sof_rt5682_codec_init()
335 ret = clk_prepare_enable(ctx->mclk); in sof_rt5682_codec_init()
337 clk_disable_unprepare(ctx->mclk); in sof_rt5682_codec_init()
339 ret = clk_set_rate(ctx->mclk, 19200000); in sof_rt5682_codec_init()
342 dev_err(rtd->dev, "unable to set MCLK rate\n"); in sof_rt5682_codec_init()
349 ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack", in sof_rt5682_codec_init()
353 &ctx->sof_headset, in sof_rt5682_codec_init()
357 dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); in sof_rt5682_codec_init()
361 jack = &ctx->sof_headset; in sof_rt5682_codec_init()
363 snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); in sof_rt5682_codec_init()
364 snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); in sof_rt5682_codec_init()
365 snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); in sof_rt5682_codec_init()
366 snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); in sof_rt5682_codec_init()
375 dev_err(rtd->dev, "Headset Jack call-back failed: %d\n", ret); in sof_rt5682_codec_init()
384 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in sof_rt5682_codec_exit()
393 struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); in sof_rt5682_hw_params()
399 ret = clk_prepare_enable(ctx->mclk); in sof_rt5682_hw_params()
401 dev_err(rtd->dev, in sof_rt5682_hw_params()
402 "could not configure MCLK state"); in sof_rt5682_hw_params()
420 dev_warn(rtd->dev, "configure wrong mclk in tplg, please use 24MHz.\n"); in sof_rt5682_hw_params()
460 dev_err(rtd->dev, "snd_soc_dai_set_pll err = %d\n", ret); in sof_rt5682_hw_params()
467 dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret); in sof_rt5682_hw_params()
476 dev_err(rtd->dev, "set TDM slot err:%d\n", ret); in sof_rt5682_hw_params()
498 struct snd_soc_dapm_context *dapm = &card->dapm; in sof_card_late_probe()
513 if (is_legacy_cpu || !ctx->idisp_codec) in sof_card_late_probe()
516 if (list_empty(&ctx->hdmi_pcm_list)) in sof_card_late_probe()
517 return -EINVAL; in sof_card_late_probe()
519 if (ctx->common_hdmi_codec_drv) { in sof_card_late_probe()
520 pcm = list_first_entry(&ctx->hdmi_pcm_list, struct sof_hdmi_pcm, in sof_card_late_probe()
522 component = pcm->codec_dai->component; in sof_card_late_probe()
526 list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { in sof_card_late_probe()
527 component = pcm->codec_dai->component; in sof_card_late_probe()
529 "HDMI/DP, pcm=%d Jack", pcm->device); in sof_card_late_probe()
531 SND_JACK_AVOUT, &pcm->hdmi_jack); in sof_card_late_probe()
536 err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, in sof_card_late_probe()
537 &pcm->hdmi_jack); in sof_card_late_probe()
542 return hdac_hdmi_jack_port_init(component, &card->dapm); in sof_card_late_probe()
565 /* HP jack connectors - unknown if we have jack detection */
586 struct snd_soc_card *card = rtd->card; in rt5650_spk_init()
589 ret = snd_soc_dapm_add_routes(&card->dapm, rt5650_spk_dapm_routes, in rt5650_spk_init()
592 dev_err(rtd->dev, "fail to add dapm routes, ret=%d\n", ret); in rt5650_spk_init()
599 struct snd_soc_card *card = rtd->card; in dmic_init()
602 ret = snd_soc_dapm_new_controls(&card->dapm, dmic_widgets, in dmic_init()
605 dev_err(card->dev, "DMic widget addition failed: %d\n", ret); in dmic_init()
610 ret = snd_soc_dapm_add_routes(&card->dapm, dmic_map, in dmic_init()
614 dev_err(card->dev, "DMic map addition failed: %d\n", ret); in dmic_init()
621 .name = "rt5682", /* the sof- prefix is added by the core */
635 .name = "i2c-10EC5682:00",
636 .dai_name = "rt5682-aif1",
642 .name = "i2c-RTL5682:00",
643 .dai_name = "rt5682s-aif1",
649 .name = "i2c-10EC5650:00",
650 .dai_name = "rt5645-aif1",
653 .name = "i2c-10EC5650:00",
654 .dai_name = "rt5645-aif2",
660 .name = "dmic-codec",
661 .dai_name = "dmic-hifi",
689 "SSP%d-Codec", ssp_codec); in sof_card_dai_links_create()
715 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
716 "ssp%d-port", in sof_card_dai_links_create()
718 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
731 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
734 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
741 /* at least we have dmic01 */ in sof_card_dai_links_create()
742 links[id].name = "dmic01"; in sof_card_dai_links_create()
744 links[id].cpus->dai_name = "DMIC01 Pin"; in sof_card_dai_links_create()
750 links[id + 1].cpus->dai_name = "DMIC16k Pin"; in sof_card_dai_links_create()
786 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
788 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
792 idisp_components[i - 1].name = "ehdaudio0D2"; in sof_card_dai_links_create()
793 idisp_components[i - 1].dai_name = devm_kasprintf(dev, in sof_card_dai_links_create()
795 "intel-hdmi-hifi%d", in sof_card_dai_links_create()
797 if (!idisp_components[i - 1].dai_name) in sof_card_dai_links_create()
800 idisp_components[i - 1] = asoc_dummy_dlc; in sof_card_dai_links_create()
803 links[id].codecs = &idisp_components[i - 1]; in sof_card_dai_links_create()
816 "SSP%d-Codec", ssp_amp); in sof_card_dai_links_create()
853 /* feedback stream or firmware-generated echo reference */ in sof_card_dai_links_create()
860 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
861 "ssp%d-port", in sof_card_dai_links_create()
863 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
867 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
870 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
883 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
885 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
887 links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port); in sof_card_dai_links_create()
900 /* HDMI-In SSP */ in sof_card_dai_links_create()
909 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
911 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
913 links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-HDMI", port); in sof_card_dai_links_create()
941 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in sof_audio_probe()
943 return -ENOMEM; in sof_audio_probe()
945 if (pdev->id_entry && pdev->id_entry->driver_data) in sof_audio_probe()
946 sof_rt5682_quirk = (unsigned long)pdev->id_entry->driver_data; in sof_audio_probe()
950 mach = pdev->dev.platform_data; in sof_audio_probe()
955 if ((sof_rt5682_quirk & SOF_SPEAKER_AMP_PRESENT) && !mach->quirk_data) in sof_audio_probe()
959 if (acpi_dev_present("RTL5682", NULL, -1)) in sof_audio_probe()
961 else if (acpi_dev_present("10EC5650", NULL, -1)) { in sof_audio_probe()
964 sof_audio_card_rt5682.name = devm_kstrdup(&pdev->dev, "rt5650", in sof_audio_probe()
984 if (mach->mach_params.codec_mask & IDISP_CODEC_MASK) in sof_audio_probe()
985 ctx->idisp_codec = true; in sof_audio_probe()
990 ctx->mclk = devm_clk_get(&pdev->dev, "pmc_plt_clk_3"); in sof_audio_probe()
991 if (IS_ERR(ctx->mclk)) { in sof_audio_probe()
992 ret = PTR_ERR(ctx->mclk); in sof_audio_probe()
994 dev_err(&pdev->dev, in sof_audio_probe()
1000 ret = clk_prepare_enable(ctx->mclk); in sof_audio_probe()
1002 dev_err(&pdev->dev, in sof_audio_probe()
1003 "could not configure MCLK state"); in sof_audio_probe()
1008 dev_dbg(&pdev->dev, "sof_rt5682_quirk = %lx\n", sof_rt5682_quirk); in sof_audio_probe()
1028 max_98390_set_codec_conf(&pdev->dev, &sof_audio_card_rt5682); in sof_audio_probe()
1039 dai_links = sof_card_dai_links_create(&pdev->dev, ssp_codec, ssp_amp, in sof_audio_probe()
1040 dmic_be_num, hdmi_num, ctx->idisp_codec); in sof_audio_probe()
1042 return -ENOMEM; in sof_audio_probe()
1049 INIT_LIST_HEAD(&ctx->hdmi_pcm_list); in sof_audio_probe()
1051 sof_audio_card_rt5682.dev = &pdev->dev; in sof_audio_probe()
1055 mach->mach_params.platform); in sof_audio_probe()
1059 ctx->common_hdmi_codec_drv = mach->mach_params.common_hdmi_codec_drv; in sof_audio_probe()
1063 return devm_snd_soc_register_card(&pdev->dev, in sof_audio_probe()