Lines Matching +full:mt8188 +full:- +full:topckgen
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 "../common/mtk-afe-platform-driver.h"
21 #include "../common/mtk-soundcard-driver.h"
37 #define MAX98390_CODEC_DAI "max98390-aif1"
38 #define MAX98390_DEV0_NAME "max98390.0-0038" /* rear right */
39 #define MAX98390_DEV1_NAME "max98390.0-0039" /* rear left */
40 #define MAX98390_DEV2_NAME "max98390.0-003a" /* front right */
41 #define MAX98390_DEV3_NAME "max98390.0-003b" /* front left */
46 #define NAU8825_CODEC_DAI "nau8825-hifi"
132 DAILINK_COMP_ARRAY(COMP_CODEC("mt6359-sound",
133 "mt6359-snd-codec-aif1")),
173 DAILINK_COMP_ARRAY(COMP_CODEC("mt6359-sound",
174 "mt6359-snd-codec-aif1")),
272 asoc_rtd_to_codec(rtd, 0)->component; in mt8188_mt6359_mtkaif_calibration()
291 return -EINVAL; in mt8188_mt6359_mtkaif_calibration()
294 afe_priv = afe->platform_priv; in mt8188_mt6359_mtkaif_calibration()
295 param = &afe_priv->mtkaif_params; in mt8188_mt6359_mtkaif_calibration()
297 dev_dbg(afe->dev, "%s(), start\n", __func__); in mt8188_mt6359_mtkaif_calibration()
299 param->mtkaif_calibration_ok = false; in mt8188_mt6359_mtkaif_calibration()
301 param->mtkaif_chosen_phase[i] = -1; in mt8188_mt6359_mtkaif_calibration()
302 param->mtkaif_phase_cycle[i] = 0; in mt8188_mt6359_mtkaif_calibration()
303 mtkaif_chosen_phase[i] = -1; in mt8188_mt6359_mtkaif_calibration()
307 if (IS_ERR(afe_priv->topckgen)) { in mt8188_mt6359_mtkaif_calibration()
308 dev_info(afe->dev, "%s() Cannot find topckgen controller\n", in mt8188_mt6359_mtkaif_calibration()
313 for_each_card_widgets(rtd->card, w) { in mt8188_mt6359_mtkaif_calibration()
314 if (!strcmp(w->name, "MTKAIF_PIN")) { in mt8188_mt6359_mtkaif_calibration()
323 dev_dbg(afe->dev, "%s(), no pinmux widget, please check if default on\n", __func__); in mt8188_mt6359_mtkaif_calibration()
325 pm_runtime_get_sync(afe->dev); in mt8188_mt6359_mtkaif_calibration()
329 regmap_write(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, RG_TEST_TYPE); in mt8188_mt6359_mtkaif_calibration()
339 regmap_set_bits(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, RG_TEST_ON); in mt8188_mt6359_mtkaif_calibration()
344 cycle_1 = -1; in mt8188_mt6359_mtkaif_calibration()
345 cycle_2 = -1; in mt8188_mt6359_mtkaif_calibration()
349 regmap_read(afe_priv->topckgen, in mt8188_mt6359_mtkaif_calibration()
362 dev_err(afe->dev, "%s(), test fail, cycle_1 %d, cycle_2 %d, monitor 0x%x\n", in mt8188_mt6359_mtkaif_calibration()
376 mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] = phase - 1; in mt8188_mt6359_mtkaif_calibration()
382 mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] = phase - 1; in mt8188_mt6359_mtkaif_calibration()
386 regmap_clear_bits(afe_priv->topckgen, CKSYS_AUD_TOP_CFG, RG_TEST_ON); in mt8188_mt6359_mtkaif_calibration()
413 pm_runtime_put(afe->dev); in mt8188_mt6359_mtkaif_calibration()
415 param->mtkaif_calibration_ok = mtkaif_calibration_ok; in mt8188_mt6359_mtkaif_calibration()
416 param->mtkaif_chosen_phase[MT8188_MTKAIF_MISO_0] = chosen_phase_1; in mt8188_mt6359_mtkaif_calibration()
417 param->mtkaif_chosen_phase[MT8188_MTKAIF_MISO_1] = chosen_phase_2; in mt8188_mt6359_mtkaif_calibration()
420 param->mtkaif_phase_cycle[i] = mtkaif_phase_cycle[i]; in mt8188_mt6359_mtkaif_calibration()
425 dev_dbg(afe->dev, "%s(), end, calibration ok %d\n", in mt8188_mt6359_mtkaif_calibration()
426 __func__, param->mtkaif_calibration_ok); in mt8188_mt6359_mtkaif_calibration()
434 asoc_rtd_to_codec(rtd, 0)->component; in mt8188_mt6359_init()
477 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8188_dptx_hw_params()
504 struct mt8188_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card); in mt8188_hdmi_codec_init()
505 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in mt8188_hdmi_codec_init()
508 ret = snd_soc_card_jack_new_pins(rtd->card, "HDMI Jack", in mt8188_hdmi_codec_init()
509 SND_JACK_LINEOUT, &priv->hdmi_jack, in mt8188_hdmi_codec_init()
513 dev_err(rtd->dev, "%s, new jack failed: %d\n", __func__, ret); in mt8188_hdmi_codec_init()
517 ret = snd_soc_component_set_jack(component, &priv->hdmi_jack, NULL); in mt8188_hdmi_codec_init()
519 dev_err(rtd->dev, "%s, set jack failed on %s (ret=%d)\n", in mt8188_hdmi_codec_init()
520 __func__, component->name, ret); in mt8188_hdmi_codec_init()
529 struct mt8188_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card); in mt8188_dptx_codec_init()
530 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in mt8188_dptx_codec_init()
533 ret = snd_soc_card_jack_new_pins(rtd->card, "DP Jack", SND_JACK_LINEOUT, in mt8188_dptx_codec_init()
534 &priv->dp_jack, mt8188_dp_jack_pins, in mt8188_dptx_codec_init()
537 dev_err(rtd->dev, "%s, new jack failed: %d\n", __func__, ret); in mt8188_dptx_codec_init()
541 ret = snd_soc_component_set_jack(component, &priv->dp_jack, NULL); in mt8188_dptx_codec_init()
543 dev_err(rtd->dev, "%s, set jack failed on %s (ret=%d)\n", in mt8188_dptx_codec_init()
544 __func__, component->name, ret); in mt8188_dptx_codec_init()
553 struct snd_soc_card *card = rtd->card; in mt8188_dumb_amp_init()
556 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_dumb_spk_widgets, in mt8188_dumb_amp_init()
559 dev_err(rtd->dev, "unable to add Dumb Speaker dapm, ret %d\n", ret); in mt8188_dumb_amp_init()
566 dev_err(rtd->dev, "unable to add Dumb card controls, ret %d\n", ret); in mt8188_dumb_amp_init()
576 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8188_max98390_hw_params()
585 if (!strcmp(codec_dai->component->name, MAX98390_DEV0_NAME)) in mt8188_max98390_hw_params()
588 if (!strcmp(codec_dai->component->name, MAX98390_DEV1_NAME)) in mt8188_max98390_hw_params()
591 if (!strcmp(codec_dai->component->name, MAX98390_DEV2_NAME)) in mt8188_max98390_hw_params()
594 if (!strcmp(codec_dai->component->name, MAX98390_DEV3_NAME)) in mt8188_max98390_hw_params()
606 struct snd_soc_card *card = rtd->card; in mt8188_max98390_codec_init()
610 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_dual_spk_widgets, in mt8188_max98390_codec_init()
613 dev_err(rtd->dev, "unable to add Left/Right Speaker widget, ret %d\n", ret); in mt8188_max98390_codec_init()
620 dev_err(rtd->dev, "unable to add Left/Right card controls, ret %d\n", ret); in mt8188_max98390_codec_init()
624 if (rtd->dai_link->num_codecs <= 2) in mt8188_max98390_codec_init()
628 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_rear_spk_widgets, in mt8188_max98390_codec_init()
631 dev_err(rtd->dev, "unable to add Rear Speaker widget, ret %d\n", ret); in mt8188_max98390_codec_init()
639 dev_err(rtd->dev, "unable to add Rear card controls, ret %d\n", ret); in mt8188_max98390_codec_init()
648 struct snd_soc_card *card = rtd->card; in mt8188_nau8825_codec_init()
650 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in mt8188_nau8825_codec_init()
651 struct snd_soc_jack *jack = &priv->headset_jack; in mt8188_nau8825_codec_init()
654 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_nau8825_widgets, in mt8188_nau8825_codec_init()
657 dev_err(rtd->dev, "unable to add nau8825 card widget, ret %d\n", ret); in mt8188_nau8825_codec_init()
664 dev_err(rtd->dev, "unable to add nau8825 card controls, ret %d\n", ret); in mt8188_nau8825_codec_init()
668 ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack", in mt8188_nau8825_codec_init()
676 dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); in mt8188_nau8825_codec_init()
680 snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); in mt8188_nau8825_codec_init()
681 snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); in mt8188_nau8825_codec_init()
682 snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); in mt8188_nau8825_codec_init()
683 snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); in mt8188_nau8825_codec_init()
687 dev_err(rtd->dev, "Headset Jack call-back failed: %d\n", ret); in mt8188_nau8825_codec_init()
696 struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; in mt8188_nau8825_codec_exit()
716 dev_err(codec_dai->dev, "can't set BCLK clock %d\n", ret); in mt8188_nau8825_hw_params()
724 dev_err(codec_dai->dev, "can't set BCLK: %d\n", ret); in mt8188_nau8825_hw_params()
1009 struct mt8188_card_data *card_data = (struct mt8188_card_data *)priv->private_data; in mt8188_fixup_controls()
1012 if (card_data->quirk & NAU8825_HS_PRESENT) { in mt8188_fixup_controls()
1016 if (strcmp(w->name, "Headphone")) in mt8188_fixup_controls()
1022 kctl = snd_ctl_find_id_mixer(card->snd_card, "Headphone Switch"); in mt8188_fixup_controls()
1024 snd_ctl_remove(card->snd_card, kctl); in mt8188_fixup_controls()
1026 dev_warn(card->dev, "Cannot find ctl : Headphone Switch\n"); in mt8188_fixup_controls()
1054 card_data = (struct mt8188_card_data *)of_device_get_match_data(&pdev->dev); in mt8188_mt6359_dev_probe()
1055 card->dev = &pdev->dev; in mt8188_mt6359_dev_probe()
1059 return dev_err_probe(&pdev->dev, ret, "%s new card name parsing error\n", in mt8188_mt6359_dev_probe()
1062 if (!card->name) in mt8188_mt6359_dev_probe()
1063 card->name = card_data->name; in mt8188_mt6359_dev_probe()
1065 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in mt8188_mt6359_dev_probe()
1067 return -ENOMEM; in mt8188_mt6359_dev_probe()
1069 if (of_property_read_bool(pdev->dev.of_node, "audio-routing")) { in mt8188_mt6359_dev_probe()
1070 ret = snd_soc_of_parse_audio_routing(card, "audio-routing"); in mt8188_mt6359_dev_probe()
1075 platform_node = of_parse_phandle(pdev->dev.of_node, in mt8188_mt6359_dev_probe()
1078 ret = -EINVAL; in mt8188_mt6359_dev_probe()
1079 return dev_err_probe(&pdev->dev, ret, "Property 'platform' missing or invalid\n"); in mt8188_mt6359_dev_probe()
1087 if (!dai_link->platforms->name) in mt8188_mt6359_dev_probe()
1088 dai_link->platforms->of_node = platform_node; in mt8188_mt6359_dev_probe()
1090 if (strcmp(dai_link->name, "DPTX_BE") == 0) { in mt8188_mt6359_dev_probe()
1091 if (strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai")) in mt8188_mt6359_dev_probe()
1092 dai_link->init = mt8188_dptx_codec_init; in mt8188_mt6359_dev_probe()
1093 } else if (strcmp(dai_link->name, "ETDM3_OUT_BE") == 0) { in mt8188_mt6359_dev_probe()
1094 if (strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai")) in mt8188_mt6359_dev_probe()
1095 dai_link->init = mt8188_hdmi_codec_init; in mt8188_mt6359_dev_probe()
1096 } else if (strcmp(dai_link->name, "DL_SRC_BE") == 0 || in mt8188_mt6359_dev_probe()
1097 strcmp(dai_link->name, "UL_SRC_BE") == 0) { in mt8188_mt6359_dev_probe()
1099 dai_link->init = mt8188_mt6359_init; in mt8188_mt6359_dev_probe()
1102 } else if (strcmp(dai_link->name, "ETDM1_OUT_BE") == 0 || in mt8188_mt6359_dev_probe()
1103 strcmp(dai_link->name, "ETDM2_OUT_BE") == 0 || in mt8188_mt6359_dev_probe()
1104 strcmp(dai_link->name, "ETDM1_IN_BE") == 0 || in mt8188_mt6359_dev_probe()
1105 strcmp(dai_link->name, "ETDM2_IN_BE") == 0) { in mt8188_mt6359_dev_probe()
1106 if (!strcmp(dai_link->codecs->dai_name, MAX98390_CODEC_DAI)) { in mt8188_mt6359_dev_probe()
1107 dai_link->ops = &mt8188_max98390_ops; in mt8188_mt6359_dev_probe()
1109 dai_link->init = mt8188_max98390_codec_init; in mt8188_mt6359_dev_probe()
1112 } else if (!strcmp(dai_link->codecs->dai_name, NAU8825_CODEC_DAI)) { in mt8188_mt6359_dev_probe()
1113 dai_link->ops = &mt8188_nau8825_ops; in mt8188_mt6359_dev_probe()
1115 dai_link->init = mt8188_nau8825_codec_init; in mt8188_mt6359_dev_probe()
1116 dai_link->exit = mt8188_nau8825_codec_exit; in mt8188_mt6359_dev_probe()
1120 if (strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai")) { in mt8188_mt6359_dev_probe()
1122 dai_link->init = mt8188_dumb_amp_init; in mt8188_mt6359_dev_probe()
1130 priv->private_data = card_data; in mt8188_mt6359_dev_probe()
1133 ret = devm_snd_soc_register_card(&pdev->dev, card); in mt8188_mt6359_dev_probe()
1135 dev_err_probe(&pdev->dev, ret, "%s snd_soc_register_card fail\n", in mt8188_mt6359_dev_probe()
1153 { .compatible = "mediatek,mt8188-mt6359-evb", .data = &mt8188_evb_card, },
1154 { .compatible = "mediatek,mt8188-nau8825", .data = &mt8188_nau8825_card, },
1171 MODULE_DESCRIPTION("MT8188-MT6359 ALSA SoC machine driver");
1174 MODULE_ALIAS("mt8188 mt6359 soc card");