Lines Matching +full:rt5682 +full:- +full:dai +full:- +full:bclk
1 // SPDX-License-Identifier: GPL-2.0
3 * mt8188-mt6359.c -- MT8188-MT6359 ALSA SoC machine driver
17 #include "mt8188-afe-common.h"
20 #include "../../codecs/mt6359-accdet.h"
21 #include "../../codecs/rt5682.h"
22 #include "../common/mtk-afe-platform-driver.h"
23 #include "../common/mtk-soundcard-driver.h"
24 #include "../common/mtk-dsp-sof-common.h"
25 #include "../common/mtk-soc-card.h"
43 #define MAX98390_CODEC_DAI "max98390-aif1"
44 #define MAX98390_DEV0_NAME "max98390.0-0038" /* rear right */
45 #define MAX98390_DEV1_NAME "max98390.0-0039" /* rear left */
46 #define MAX98390_DEV2_NAME "max98390.0-003a" /* front right */
47 #define MAX98390_DEV3_NAME "max98390.0-003b" /* front left */
52 #define NAU8825_CODEC_DAI "nau8825-hifi"
64 #define RT5682S_CODEC_DAI "rt5682s-aif1"
150 DAILINK_COMP_ARRAY(COMP_CODEC("mt6359-sound",
151 "mt6359-snd-codec-aif1")),
196 DAILINK_COMP_ARRAY(COMP_CODEC("mt6359-sound",
197 "mt6359-snd-codec-aif1")),
362 snd_soc_rtd_to_codec(rtd, 0)->component;
381 return -EINVAL;
384 afe_priv = afe->platform_priv;
385 param = &afe_priv->mtkaif_params;
387 dev_dbg(afe->dev, "%s(), start\n", __func__);
389 param->mtkaif_calibration_ok = false;
391 param->mtkaif_chosen_phase[i] = -1;
392 param->mtkaif_phase_cycle[i] = 0;
393 mtkaif_chosen_phase[i] = -1;
397 if (IS_ERR(afe_priv->topckgen)) {
398 dev_info(afe->dev, "%s() Cannot find topckgen controller\n",
403 for_each_card_widgets(rtd->card, w) {
404 if (!strcmp(w->name, "MTKAIF_PIN")) {
413 dev_dbg(afe->dev, "%s(), no pinmux widget, please check if default on\n", __func__);
415 pm_runtime_get_sync(afe->dev);
419 regmap_write(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, RG_TEST_TYPE);
429 regmap_set_bits(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, RG_TEST_ON);
434 cycle_1 = -1;
435 cycle_2 = -1;
439 regmap_read(afe_priv->topckgen,
452 dev_err(afe->dev, "%s(), test fail, cycle_1 %d, cycle_2 %d, monitor 0x%x\n",
466 mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] = phase - 1;
472 mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] = phase - 1;
476 regmap_clear_bits(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, RG_TEST_ON);
503 pm_runtime_put(afe->dev);
505 param->mtkaif_calibration_ok = mtkaif_calibration_ok;
506 param->mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] = chosen_phase_1;
507 param->mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] = chosen_phase_2;
510 param->mtkaif_phase_cycle[i] = mtkaif_phase_cycle[i];
515 dev_dbg(afe->dev, "%s(), end, calibration ok %d\n",
516 __func__, param->mtkaif_calibration_ok);
523 struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
524 struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_HEADSET];
527 if (!soc_card_data->accdet)
530 ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
537 dev_err(rtd->dev, "Headset Jack create failed: %d\n", ret);
541 ret = mt6359_accdet_enable_jack_detect(soc_card_data->accdet, jack);
543 dev_err(rtd->dev, "Headset Jack enable failed: %d\n", ret);
553 snd_soc_rtd_to_codec(rtd, 0)->component;
612 struct snd_soc_dai *dai = snd_soc_rtd_to_cpu(rtd, 0);
614 return snd_soc_dai_set_sysclk(dai, 0, mclk_fs, SND_SOC_CLOCK_OUT);
635 struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
636 struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_HDMI];
637 struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
640 ret = snd_soc_card_jack_new_pins(rtd->card, "HDMI Jack",
645 dev_err(rtd->dev, "%s, new jack failed: %d\n", __func__, ret);
651 dev_err(rtd->dev, "%s, set jack failed on %s (ret=%d)\n",
652 __func__, component->name, ret);
661 struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
662 struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_DP];
663 struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
666 ret = snd_soc_card_jack_new_pins(rtd->card, "DP Jack", SND_JACK_LINEOUT,
670 dev_err(rtd->dev, "%s, new jack failed: %d\n", __func__, ret);
676 dev_err(rtd->dev, "%s, set jack failed on %s (ret=%d)\n",
677 __func__, component->name, ret);
686 struct snd_soc_card *card = rtd->card;
689 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_dumb_spk_widgets,
692 dev_err(rtd->dev, "unable to add Dumb Speaker dapm, ret %d\n", ret);
699 dev_err(rtd->dev, "unable to add Dumb card controls, ret %d\n", ret);
718 if (!strcmp(codec_dai->component->name, MAX98390_DEV0_NAME))
721 if (!strcmp(codec_dai->component->name, MAX98390_DEV1_NAME))
724 if (!strcmp(codec_dai->component->name, MAX98390_DEV2_NAME))
727 if (!strcmp(codec_dai->component->name, MAX98390_DEV3_NAME))
739 struct snd_soc_card *card = rtd->card;
743 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_dual_spk_widgets,
746 dev_err(rtd->dev, "unable to add Left/Right Speaker widget, ret %d\n", ret);
753 dev_err(rtd->dev, "unable to add Left/Right card controls, ret %d\n", ret);
757 if (rtd->dai_link->num_codecs <= 2)
761 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_rear_spk_widgets,
764 dev_err(rtd->dev, "unable to add Rear Speaker widget, ret %d\n", ret);
772 dev_err(rtd->dev, "unable to add Rear card controls, ret %d\n", ret);
781 struct snd_soc_card *card = rtd->card;
782 struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
783 struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_HEADSET];
784 struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
785 struct mtk_platform_card_data *card_data = soc_card_data->card_data;
788 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_nau8825_widgets,
791 dev_err(rtd->dev, "unable to add nau8825 card widget, ret %d\n", ret);
798 dev_err(rtd->dev, "unable to add nau8825 card controls, ret %d\n", ret);
802 ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
810 dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
814 if (card_data->flags & ES8326_HS_PRESENT) {
815 snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE);
816 snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOLUMEUP);
817 snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEDOWN);
818 snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOICECOMMAND);
820 snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE);
821 snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND);
822 snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP);
823 snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN);
829 dev_err(rtd->dev, "Headset Jack call-back failed: %d\n", ret);
838 struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
859 dev_err(codec_dai->dev, "can't set BCLK clock %d\n", ret);
867 dev_err(codec_dai->dev, "can't set BCLK: %d\n", ret);
882 struct snd_soc_card *card = rtd->card;
891 dev_err(card->dev, "invalid bit width: %d\n", bitwidth);
897 dev_err(card->dev, "failed to set tdm slot\n");
904 dev_err(card->dev, "failed to set pll\n");
911 dev_err(card->dev, "failed to set sysclk\n");
931 for_each_card_rtds(rtd->card, runtime) {
937 if (cmpnt_afe && !pm_runtime_active(cmpnt_afe->dev)) {
938 dev_err(rtd->dev, "afe pm runtime is not active!!\n");
939 return -EINVAL;
961 dev_err(codec_dai->dev, "can't set MCLK %d\n", ret);
1283 struct mtk_platform_card_data *card_data = soc_card_data->card_data;
1286 if (card_data->flags & (NAU8825_HS_PRESENT | RT5682S_HS_PRESENT | ES8326_HS_PRESENT)) {
1290 if (strcmp(w->name, "Headphone"))
1296 kctl = snd_ctl_find_id_mixer(card->snd_card, "Headphone Switch");
1298 snd_ctl_remove(card->snd_card, kctl);
1300 dev_warn(card->dev, "Cannot find ctl : Headphone Switch\n");
1319 struct mtk_platform_card_data *card_data = soc_card_data->card_data;
1320 struct snd_soc_card *card = soc_card_data->card_data->card;
1331 return -EINVAL;
1334 if (strcmp(dai_link->name, "DPTX_BE") == 0) {
1335 if (dai_link->num_codecs &&
1336 strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai"))
1337 dai_link->init = mt8188_dptx_codec_init;
1338 } else if (strcmp(dai_link->name, "ETDM3_OUT_BE") == 0) {
1339 if (dai_link->num_codecs &&
1340 strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai"))
1341 dai_link->init = mt8188_hdmi_codec_init;
1342 } else if (strcmp(dai_link->name, "DL_SRC_BE") == 0 ||
1343 strcmp(dai_link->name, "UL_SRC_BE") == 0) {
1345 dai_link->init = mt8188_mt6359_init;
1348 } else if (strcmp(dai_link->name, "ETDM1_OUT_BE") == 0 ||
1349 strcmp(dai_link->name, "ETDM2_OUT_BE") == 0 ||
1350 strcmp(dai_link->name, "ETDM1_IN_BE") == 0 ||
1351 strcmp(dai_link->name, "ETDM2_IN_BE") == 0) {
1352 if (!dai_link->num_codecs)
1355 if (!strcmp(dai_link->codecs->dai_name, MAX98390_CODEC_DAI)) {
1361 if (!(card_data->flags & MAX98390_TWO_AMP)) {
1362 dai_link->ops = &mt8188_max98390_ops;
1365 dai_link->init = mt8188_max98390_codec_init;
1368 } else if (!strcmp(dai_link->codecs->dai_name, NAU8825_CODEC_DAI)) {
1369 dai_link->ops = &mt8188_nau8825_ops;
1371 dai_link->init = mt8188_headset_codec_init;
1372 dai_link->exit = mt8188_headset_codec_exit;
1375 } else if (!strcmp(dai_link->codecs->dai_name, RT5682S_CODEC_DAI)) {
1376 dai_link->ops = &mt8188_rt5682s_i2s_ops;
1378 dai_link->init = mt8188_headset_codec_init;
1379 dai_link->exit = mt8188_headset_codec_exit;
1382 } else if (!strcmp(dai_link->codecs->dai_name, ES8326_CODEC_DAI)) {
1383 dai_link->ops = &mt8188_es8326_ops;
1385 dai_link->init = mt8188_headset_codec_init;
1386 dai_link->exit = mt8188_headset_codec_exit;
1390 if (strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai")) {
1392 dai_link->init = mt8188_dumb_amp_init;
1452 { .compatible = "mediatek,mt8188-mt6359-evb", .data = &mt8188_evb_card, },
1453 { .compatible = "mediatek,mt8188-nau8825", .data = &mt8188_nau8825_card, },
1454 { .compatible = "mediatek,mt8188-rt5682s", .data = &mt8188_rt5682s_card, },
1455 { .compatible = "mediatek,mt8188-es8326", .data = &mt8188_es8326_card, },
1472 MODULE_DESCRIPTION("MT8188-MT6359 ALSA SoC machine driver");