Lines Matching +full:i2c +full:- +full:topology
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright(c) 2019-2020 Intel Corporation.
8 #include <linux/i2c.h>
21 #include <sound/soc-acpi.h>
25 #include "../common/soc-intel-quirks.h"
83 sof_rt5682_quirk = (unsigned long)id->driver_data; in sof_rt5682_quirk_cb()
100 DMI_MATCH(DMI_PRODUCT_NAME, "UP-CHT01"),
156 DMI_MATCH(DMI_OEM_STRING, "AUDIO-MAX98373_ALC5682I_I2S_UP4"),
170 DMI_MATCH(DMI_OEM_STRING, "AUDIO-ADL_MAX98373_ALC5682I_I2S"),
184 struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); in sof_hdmi_init()
188 pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL); in sof_hdmi_init()
190 return -ENOMEM; in sof_hdmi_init()
193 pcm->device = rtd->dai_link->id; in sof_hdmi_init()
194 pcm->codec_dai = dai; in sof_hdmi_init()
196 list_add_tail(&pcm->head, &ctx->hdmi_pcm_list); in sof_hdmi_init()
203 struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); in sof_rt5682_codec_init()
204 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in sof_rt5682_codec_init()
227 ret = clk_prepare_enable(ctx->mclk); in sof_rt5682_codec_init()
229 clk_disable_unprepare(ctx->mclk); in sof_rt5682_codec_init()
231 ret = clk_set_rate(ctx->mclk, 19200000); in sof_rt5682_codec_init()
234 dev_err(rtd->dev, "unable to set MCLK rate\n"); in sof_rt5682_codec_init()
241 ret = snd_soc_card_jack_new(rtd->card, "Headset Jack", in sof_rt5682_codec_init()
245 &ctx->sof_headset, NULL, 0); in sof_rt5682_codec_init()
247 dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); in sof_rt5682_codec_init()
251 jack = &ctx->sof_headset; in sof_rt5682_codec_init()
253 snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); in sof_rt5682_codec_init()
254 snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); in sof_rt5682_codec_init()
255 snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); in sof_rt5682_codec_init()
256 snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); in sof_rt5682_codec_init()
260 dev_err(rtd->dev, "Headset Jack call-back failed: %d\n", ret); in sof_rt5682_codec_init()
269 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in sof_rt5682_codec_exit()
278 struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); in sof_rt5682_hw_params()
284 ret = clk_prepare_enable(ctx->mclk); in sof_rt5682_hw_params()
286 dev_err(rtd->dev, in sof_rt5682_hw_params()
300 dev_warn(rtd->dev, "configure wrong mclk in tplg, please use 24MHz.\n"); in sof_rt5682_hw_params()
303 /* use default mclk if not specified correct in topology */ in sof_rt5682_hw_params()
317 dev_err(rtd->dev, "snd_soc_dai_set_pll err = %d\n", ret); in sof_rt5682_hw_params()
323 dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret); in sof_rt5682_hw_params()
332 dev_err(rtd->dev, "set TDM slot err:%d\n", ret); in sof_rt5682_hw_params()
347 struct snd_soc_card *card = rtd->card; in sof_rt1015_hw_params()
351 if (!snd_soc_card_get_codec_dai(card, "rt1015-aif")) in sof_rt1015_hw_params()
364 dev_err(card->dev, "failed to set pll\n"); in sof_rt1015_hw_params()
372 dev_err(card->dev, "failed to set sysclk\n"); in sof_rt1015_hw_params()
377 if (!strcmp(codec_dai->component->name, "i2c-10EC1015:00")) { in sof_rt1015_hw_params()
381 dev_err(card->dev, "failed to set tdm slot\n"); in sof_rt1015_hw_params()
386 if (!strcmp(codec_dai->component->name, "i2c-10EC1015:01")) { in sof_rt1015_hw_params()
390 dev_err(card->dev, "failed to set tdm slot\n"); in sof_rt1015_hw_params()
415 struct snd_soc_dapm_context *dapm = &card->dapm; in sof_card_late_probe()
425 if (list_empty(&ctx->hdmi_pcm_list)) in sof_card_late_probe()
426 return -EINVAL; in sof_card_late_probe()
428 if (ctx->common_hdmi_codec_drv) { in sof_card_late_probe()
429 pcm = list_first_entry(&ctx->hdmi_pcm_list, struct sof_hdmi_pcm, in sof_card_late_probe()
431 component = pcm->codec_dai->component; in sof_card_late_probe()
435 list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { in sof_card_late_probe()
436 component = pcm->codec_dai->component; in sof_card_late_probe()
438 "HDMI/DP, pcm=%d Jack", pcm->device); in sof_card_late_probe()
446 err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, in sof_card_late_probe()
462 return hdac_hdmi_jack_port_init(component, &card->dapm); in sof_card_late_probe()
485 /* HP jack connectors - unknown if we have jack detection */
505 return snd_soc_dapm_add_routes(&rtd->card->dapm, speaker_map_lr, in speaker_codec_init_lr()
511 struct snd_soc_card *card = rtd->card; in dmic_init()
514 ret = snd_soc_dapm_new_controls(&card->dapm, dmic_widgets, in dmic_init()
517 dev_err(card->dev, "DMic widget addition failed: %d\n", ret); in dmic_init()
522 ret = snd_soc_dapm_add_routes(&card->dapm, dmic_map, in dmic_init()
526 dev_err(card->dev, "DMic map addition failed: %d\n", ret); in dmic_init()
533 .dlc = COMP_CODEC_CONF("i2c-10EC1015:00"),
537 .dlc = COMP_CODEC_CONF("i2c-10EC1015:01"),
544 .name = "rt5682", /* the sof- prefix is added by the core */
558 .name = "i2c-10EC5682:00",
559 .dai_name = "rt5682-aif1",
565 .name = "dmic-codec",
566 .dai_name = "dmic-hifi",
572 .name = "i2c-10EC1015:00",
573 .dai_name = "rt1015-aif",
576 .name = "i2c-10EC1015:01",
577 .dai_name = "rt1015-aif",
583 .name = "snd-soc-dummy",
584 .dai_name = "snd-soc-dummy-dai",
608 "SSP%d-Codec", ssp_codec); in sof_card_dai_links_create()
626 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
627 "ssp%d-port", in sof_card_dai_links_create()
629 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
642 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
645 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
655 links[id].cpus->dai_name = "DMIC01 Pin"; in sof_card_dai_links_create()
661 links[id + 1].cpus->dai_name = "DMIC16k Pin"; in sof_card_dai_links_create()
696 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
698 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
701 idisp_components[i - 1].name = "ehdaudio0D2"; in sof_card_dai_links_create()
702 idisp_components[i - 1].dai_name = devm_kasprintf(dev, in sof_card_dai_links_create()
704 "intel-hdmi-hifi%d", in sof_card_dai_links_create()
706 if (!idisp_components[i - 1].dai_name) in sof_card_dai_links_create()
709 links[id].codecs = &idisp_components[i - 1]; in sof_card_dai_links_create()
722 "SSP%d-Codec", ssp_amp); in sof_card_dai_links_create()
758 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
759 "ssp%d-port", in sof_card_dai_links_create()
761 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
765 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
768 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
781 links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_card_dai_links_create()
783 if (!links[id].cpus->dai_name) in sof_card_dai_links_create()
785 links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port); in sof_card_dai_links_create()
811 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in sof_audio_probe()
813 return -ENOMEM; in sof_audio_probe()
815 if (pdev->id_entry && pdev->id_entry->driver_data) in sof_audio_probe()
816 sof_rt5682_quirk = (unsigned long)pdev->id_entry->driver_data; in sof_audio_probe()
820 mach = pdev->dev.platform_data; in sof_audio_probe()
825 if ((sof_rt5682_quirk & SOF_SPEAKER_AMP_PRESENT) && !mach->quirk_data) in sof_audio_probe()
847 ctx->mclk = devm_clk_get(&pdev->dev, "pmc_plt_clk_3"); in sof_audio_probe()
848 if (IS_ERR(ctx->mclk)) { in sof_audio_probe()
849 ret = PTR_ERR(ctx->mclk); in sof_audio_probe()
851 dev_err(&pdev->dev, in sof_audio_probe()
857 ret = clk_prepare_enable(ctx->mclk); in sof_audio_probe()
859 dev_err(&pdev->dev, in sof_audio_probe()
865 dev_dbg(&pdev->dev, "sof_rt5682_quirk = %lx\n", sof_rt5682_quirk); in sof_audio_probe()
888 dai_links = sof_card_dai_links_create(&pdev->dev, ssp_codec, ssp_amp, in sof_audio_probe()
891 return -ENOMEM; in sof_audio_probe()
900 INIT_LIST_HEAD(&ctx->hdmi_pcm_list); in sof_audio_probe()
902 sof_audio_card_rt5682.dev = &pdev->dev; in sof_audio_probe()
906 mach->mach_params.platform); in sof_audio_probe()
910 ctx->common_hdmi_codec_drv = mach->mach_params.common_hdmi_codec_drv; in sof_audio_probe()
914 return devm_snd_soc_register_card(&pdev->dev, in sof_audio_probe()