Lines Matching +full:audio +full:- +full:tx

1 // SPDX-License-Identifier: GPL-2.0-only
20 #include <sound/soc-acpi.h>
24 #include <linux/clk-provider.h>
27 #define KBL_REALTEK_CODEC_DAI "rt5663-aif"
28 #define KBL_MAXIM_CODEC_DAI "max98927-aif1"
29 #define DMIC_CH(p) p->list[p->count-1]
30 #define MAXIM_DEV0_NAME "i2c-MX98927:00"
31 #define MAXIM_DEV1_NAME "i2c-MX98927:01"
72 struct snd_soc_dapm_context *dapm = w->dapm; in platform_clock_control()
73 struct snd_soc_card *card = dapm->card; in platform_clock_control()
85 ret = clk_set_rate(priv->mclk, 24000000); in platform_clock_control()
87 dev_err(card->dev, "Can't set rate for mclk, err: %d\n", in platform_clock_control()
92 ret = clk_prepare_enable(priv->mclk); in platform_clock_control()
94 dev_err(card->dev, "Can't enable mclk, err: %d\n", ret); in platform_clock_control()
99 ret = clk_set_rate(priv->sclk, 3072000); in platform_clock_control()
101 dev_err(card->dev, "Can't set rate for sclk, err: %d\n", in platform_clock_control()
103 clk_disable_unprepare(priv->mclk); in platform_clock_control()
107 ret = clk_prepare_enable(priv->sclk); in platform_clock_control()
109 dev_err(card->dev, "Can't enable sclk, err: %d\n", ret); in platform_clock_control()
110 clk_disable_unprepare(priv->mclk); in platform_clock_control()
114 clk_disable_unprepare(priv->mclk); in platform_clock_control()
115 clk_disable_unprepare(priv->sclk); in platform_clock_control()
139 /* HP jack connectors - unknown if we have jack detection */
154 {"HDMI1", NULL, "hif5-0 Output"},
155 {"HDMI2", NULL, "hif6-0 Output"},
156 {"HDMI3", NULL, "hif7-0 Output"},
159 { "Left HiFi Playback", NULL, "ssp0 Tx" },
160 { "Right HiFi Playback", NULL, "ssp0 Tx" },
161 { "ssp0 Tx", NULL, "spk_out" },
163 { "AIF Playback", NULL, "ssp1 Tx" },
164 { "ssp1 Tx", NULL, "codec1_out" },
178 { "hifi3", NULL, "iDisp3 Tx"},
179 { "iDisp3 Tx", NULL, "iDisp3_out"},
180 { "hifi2", NULL, "iDisp2 Tx"},
181 { "iDisp2 Tx", NULL, "iDisp2_out"},
182 { "hifi1", NULL, "iDisp1 Tx"},
183 { "iDisp1 Tx", NULL, "iDisp1_out"},
230 {"HDMI1", NULL, "hif5-0 Output"},
231 {"HDMI2", NULL, "hif6-0 Output"},
232 {"HDMI3", NULL, "hif7-0 Output"},
235 { "AIF Playback", NULL, "ssp1 Tx" },
236 { "ssp1 Tx", NULL, "codec1_out" },
241 { "hifi2", NULL, "iDisp2 Tx"},
242 { "iDisp2 Tx", NULL, "iDisp2_out"},
243 { "hifi1", NULL, "iDisp1 Tx"},
244 { "iDisp1 Tx", NULL, "iDisp1_out"},
262 struct snd_soc_component *component = asoc_rtd_to_cpu(rtd, 0)->component; in kabylake_rt5663_fe_init()
267 dev_err(rtd->dev, "Ref Cap ignore suspend failed %d\n", ret); in kabylake_rt5663_fe_init()
277 struct kbl_rt5663_private *ctx = snd_soc_card_get_drvdata(rtd->card); in kabylake_rt5663_codec_init()
278 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in kabylake_rt5663_codec_init()
288 &ctx->kabylake_headset, in kabylake_rt5663_codec_init()
292 dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret); in kabylake_rt5663_codec_init()
296 jack = &ctx->kabylake_headset; in kabylake_rt5663_codec_init()
297 snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); in kabylake_rt5663_codec_init()
298 snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); in kabylake_rt5663_codec_init()
299 snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); in kabylake_rt5663_codec_init()
300 snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); in kabylake_rt5663_codec_init()
302 snd_soc_component_set_jack(component, &ctx->kabylake_headset, NULL); in kabylake_rt5663_codec_init()
315 ret = snd_soc_dapm_ignore_suspend(&rtd->card->dapm, "SoC DMIC"); in kabylake_rt5663_max98927_codec_init()
317 dev_err(rtd->dev, "SoC DMIC ignore suspend failed %d\n", ret); in kabylake_rt5663_max98927_codec_init()
326 struct kbl_rt5663_private *ctx = snd_soc_card_get_drvdata(rtd->card); in kabylake_hdmi_init()
330 pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL); in kabylake_hdmi_init()
332 return -ENOMEM; in kabylake_hdmi_init()
334 pcm->device = device; in kabylake_hdmi_init()
335 pcm->codec_dai = dai; in kabylake_hdmi_init()
337 list_add_tail(&pcm->head, &ctx->hdmi_pcm_list); in kabylake_hdmi_init()
389 struct snd_pcm_runtime *runtime = substream->runtime; in kbl_fe_startup()
395 * 16 bit audio in kbl_fe_startup()
398 runtime->hw.channels_max = 2; in kbl_fe_startup()
402 runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE; in kbl_fe_startup()
444 return -EINVAL; in kabylake_ssp_fixup()
454 if (!strcmp(rtd_dpcm->fe->dai_link->name, "Kbl Audio Port") || in kabylake_ssp_fixup()
455 !strcmp(rtd_dpcm->fe->dai_link->name, "Kbl Audio Headset Playback") || in kabylake_ssp_fixup()
456 !strcmp(rtd_dpcm->fe->dai_link->name, "Kbl Audio Capture Port")) { in kabylake_ssp_fixup()
457 rate->min = rate->max = 48000; in kabylake_ssp_fixup()
458 chan->min = chan->max = 2; in kabylake_ssp_fixup()
466 if (!strcmp(rtd_dpcm->be->dai_link->name, "SSP0-Codec")) in kabylake_ssp_fixup()
480 rt5663_sel_asrc_clk_src(codec_dai->component, in kabylake_rt5663_hw_params()
487 dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret); in kabylake_rt5663_hw_params()
503 chan->min = chan->max = 2; in kabylake_dmic_fixup()
505 chan->min = chan->max = 4; in kabylake_dmic_fixup()
518 if (!strcmp(codec_dai->component->name, MAXIM_DEV0_NAME)) { in kabylake_ssp0_hw_params()
524 dev_err(rtd->dev, "set TDM slot err:%d\n", ret); in kabylake_ssp0_hw_params()
528 if (!strcmp(codec_dai->component->name, MAXIM_DEV1_NAME)) { in kabylake_ssp0_hw_params()
534 dev_err(rtd->dev, "set TDM slot err:%d\n", ret); in kabylake_ssp0_hw_params()
568 struct snd_pcm_runtime *runtime = substream->runtime; in kabylake_dmic_startup()
570 runtime->hw.channels_max = DMIC_CH(dmic_constraints); in kabylake_dmic_startup()
574 return snd_pcm_hw_constraint_list(substream->runtime, 0, in kabylake_dmic_startup()
602 substream->runtime->hw.channels_max = 1; in kabylake_refcap_startup()
603 snd_pcm_hw_constraint_list(substream->runtime, 0, in kabylake_refcap_startup()
607 return snd_pcm_hw_constraint_list(substream->runtime, 0, in kabylake_refcap_startup()
653 DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC5663:00",
659 DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
664 DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
669 DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
674 DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
679 /* kabylake digital audio interface glue - connects codec <--> CPU */
683 .name = "Kbl Audio Port",
684 .stream_name = "Audio",
695 .name = "Kbl Audio Capture Port",
696 .stream_name = "Audio Record",
706 .name = "Kbl Audio Headset Playback",
707 .stream_name = "Headset Audio",
714 .name = "Kbl Audio Echo Reference cap",
722 .name = "Kbl Audio Reference cap",
732 .name = "Kbl Audio DMIC cap",
777 /* SSP0 - Codec */
778 .name = "SSP0-Codec",
791 /* SSP1 - Codec */
792 .name = "SSP1-Codec",
843 .name = "Kbl Audio Port",
844 .stream_name = "Audio",
854 .name = "Kbl Audio Capture Port",
855 .stream_name = "Audio Record",
889 /* SSP1 - Codec */
890 .name = "SSP1-Codec",
930 list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { in kabylake_card_late_probe()
931 component = pcm->codec_dai->component; in kabylake_card_late_probe()
933 "HDMI/DP, pcm=%d Jack", pcm->device); in kabylake_card_late_probe()
940 err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, in kabylake_card_late_probe()
949 return -EINVAL; in kabylake_card_late_probe()
951 return hdac_hdmi_jack_port_init(component, &card->dapm); in kabylake_card_late_probe()
954 /* kabylake audio machine driver for SPT + RT5663 */
973 /* kabylake audio machine driver for RT5663 */
996 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in kabylake_audio_probe()
998 return -ENOMEM; in kabylake_audio_probe()
1000 INIT_LIST_HEAD(&ctx->hdmi_pcm_list); in kabylake_audio_probe()
1003 (struct snd_soc_card *)pdev->id_entry->driver_data; in kabylake_audio_probe()
1005 kabylake_audio_card->dev = &pdev->dev; in kabylake_audio_probe()
1008 mach = pdev->dev.platform_data; in kabylake_audio_probe()
1010 dmic_constraints = mach->mach_params.dmic_num == 2 ? in kabylake_audio_probe()
1013 ctx->mclk = devm_clk_get(&pdev->dev, "ssp1_mclk"); in kabylake_audio_probe()
1014 if (IS_ERR(ctx->mclk)) { in kabylake_audio_probe()
1015 ret = PTR_ERR(ctx->mclk); in kabylake_audio_probe()
1016 if (ret == -ENOENT) { in kabylake_audio_probe()
1017 dev_info(&pdev->dev, in kabylake_audio_probe()
1019 return -EPROBE_DEFER; in kabylake_audio_probe()
1022 dev_err(&pdev->dev, "Failed to get ssp1_mclk with err:%d\n", in kabylake_audio_probe()
1027 ctx->sclk = devm_clk_get(&pdev->dev, "ssp1_sclk"); in kabylake_audio_probe()
1028 if (IS_ERR(ctx->sclk)) { in kabylake_audio_probe()
1029 ret = PTR_ERR(ctx->sclk); in kabylake_audio_probe()
1030 if (ret == -ENOENT) { in kabylake_audio_probe()
1031 dev_info(&pdev->dev, in kabylake_audio_probe()
1033 return -EPROBE_DEFER; in kabylake_audio_probe()
1036 dev_err(&pdev->dev, "Failed to get ssp1_sclk with err:%d\n", in kabylake_audio_probe()
1041 return devm_snd_soc_register_card(&pdev->dev, kabylake_audio_card); in kabylake_audio_probe()
1070 MODULE_DESCRIPTION("Audio Machine driver-RT5663 & MAX98927 in I2S mode");