From nobody Thu Nov 14 10:18:55 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 246BCC433FE for ; Fri, 8 Apr 2022 06:06:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235167AbiDHGI0 (ORCPT ); Fri, 8 Apr 2022 02:08:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43664 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235122AbiDHGIK (ORCPT ); Fri, 8 Apr 2022 02:08:10 -0400 Received: from mailgw01.mediatek.com (unknown [60.244.123.138]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 198668C7D3; Thu, 7 Apr 2022 23:06:04 -0700 (PDT) X-UUID: 0355e8d64c1c4371ae8907707ce275af-20220408 X-UUID: 0355e8d64c1c4371ae8907707ce275af-20220408 Received: from mtkcas11.mediatek.inc [(172.21.101.40)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1557240117; Fri, 08 Apr 2022 14:06:00 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.3; Fri, 8 Apr 2022 14:05:59 +0800 Received: from localhost.localdomain (10.17.3.154) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 8 Apr 2022 14:05:58 +0800 From: Jiaxin Yu To: , , , CC: , , , , , , , , , , , Jiaxin Yu , Tzung-Bi Shih Subject: [v10 4/4] ASoC: mediatek: mt8192: support rt1015p_rt5682s Date: Fri, 8 Apr 2022 14:05:52 +0800 Message-ID: <20220408060552.26607-5-jiaxin.yu@mediatek.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220408060552.26607-1-jiaxin.yu@mediatek.com> References: <20220408060552.26607-1-jiaxin.yu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support for using the rt5682s codec together with rt1015p on mt8192-mt6359 machines. All configurations are shared with the rt5682 codec variant, so simply select the SND_SOC_RT5682S config to ensure the codec is present and set the correct card name. The codec will be linked to by pointing to it in the headset-codec property in the devicetree. While at it, also create macros for the names of the different codec variants supported by this driver, as well as rename occurrences of rt1015p_rt5682 to rt1015p_rt5682x, since they are shared between rt5682 and rt5682s. Signed-off-by: Jiaxin Yu Reviewed-by: Tzung-Bi Shih Reviewed-by: N=C3=ADcolas F. R. A. Prado Tested-by: N=C3=ADcolas F. R. A. Prado Reviewed-by: AngeloGioacchino Del Regno --- sound/soc/mediatek/Kconfig | 1 + .../mt8192/mt8192-mt6359-rt1015-rt5682.c | 61 ++++++++++++------- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig index ae838bbc7933..9e5ce1a82639 100644 --- a/sound/soc/mediatek/Kconfig +++ b/sound/soc/mediatek/Kconfig @@ -179,6 +179,7 @@ config SND_SOC_MT8192_MT6359_RT1015_RT5682 select SND_SOC_RT1015 select SND_SOC_RT1015P select SND_SOC_RT5682_I2C + select SND_SOC_RT5682S select SND_SOC_DMIC help This adds ASoC driver for Mediatek MT8192 boards diff --git a/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c b/soun= d/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c index 4a11f687d416..2c71bd8a2db8 100644 --- a/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c +++ b/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c @@ -28,6 +28,14 @@ #define RT1015_DEV0_NAME "rt1015.1-0028" #define RT1015_DEV1_NAME "rt1015.1-0029" =20 +#define RT1015_RT5682_CARD_NAME "mt8192_mt6359_rt1015_rt5682" +#define RT1015P_RT5682_CARD_NAME "mt8192_mt6359_rt1015p_rt5682" +#define RT1015P_RT5682S_CARD_NAME "mt8192_mt6359_rt1015p_rt5682s" + +#define RT1015_RT5682_OF_NAME "mediatek,mt8192_mt6359_rt1015_rt5682" +#define RT1015P_RT5682_OF_NAME "mediatek,mt8192_mt6359_rt1015p_rt5682" +#define RT1015P_RT5682S_OF_NAME "mediatek,mt8192_mt6359_rt1015p_rt5682s" + struct mt8192_mt6359_priv { struct snd_soc_jack headset_jack; struct snd_soc_jack hdmi_jack; @@ -68,8 +76,8 @@ static int mt8192_rt1015_i2s_hw_params(struct snd_pcm_sub= stream *substream, return snd_soc_dai_set_sysclk(cpu_dai, 0, mclk_fs, SND_SOC_CLOCK_OUT); } =20 -static int mt8192_rt5682_i2s_hw_params(struct snd_pcm_substream *substream, - struct snd_pcm_hw_params *params) +static int mt8192_rt5682x_i2s_hw_params(struct snd_pcm_substream *substrea= m, + struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd =3D asoc_substream_to_rtd(substream); struct snd_soc_card *card =3D rtd->card; @@ -118,8 +126,8 @@ static const struct snd_soc_ops mt8192_rt1015_i2s_ops = =3D { .hw_params =3D mt8192_rt1015_i2s_hw_params, }; =20 -static const struct snd_soc_ops mt8192_rt5682_i2s_ops =3D { - .hw_params =3D mt8192_rt5682_i2s_hw_params, +static const struct snd_soc_ops mt8192_rt5682x_i2s_ops =3D { + .hw_params =3D mt8192_rt5682x_i2s_hw_params, }; =20 static int mt8192_mt6359_mtkaif_calibration(struct snd_soc_pcm_runtime *rt= d) @@ -950,7 +958,7 @@ static struct snd_soc_dai_link mt8192_mt6359_dai_links[= ] =3D { .init =3D mt8192_rt5682_init, .be_hw_params_fixup =3D mt8192_i2s_hw_params_fixup, SND_SOC_DAILINK_REG(i2s8), - .ops =3D &mt8192_rt5682_i2s_ops, + .ops =3D &mt8192_rt5682x_i2s_ops, }, { .name =3D "I2S9", @@ -959,7 +967,7 @@ static struct snd_soc_dai_link mt8192_mt6359_dai_links[= ] =3D { .ignore_suspend =3D 1, .be_hw_params_fixup =3D mt8192_i2s_hw_params_fixup, SND_SOC_DAILINK_REG(i2s9), - .ops =3D &mt8192_rt5682_i2s_ops, + .ops =3D &mt8192_rt5682x_i2s_ops, }, { .name =3D "CONNSYS_I2S", @@ -1039,7 +1047,7 @@ static struct snd_soc_codec_conf rt1015_amp_conf[] = =3D { }; =20 static struct snd_soc_card mt8192_mt6359_rt1015_rt5682_card =3D { - .name =3D "mt8192_mt6359_rt1015_rt5682", + .name =3D RT1015_RT5682_CARD_NAME, .owner =3D THIS_MODULE, .dai_link =3D mt8192_mt6359_dai_links, .num_links =3D ARRAY_SIZE(mt8192_mt6359_dai_links), @@ -1053,14 +1061,13 @@ static struct snd_soc_card mt8192_mt6359_rt1015_rt5= 682_card =3D { .num_configs =3D ARRAY_SIZE(rt1015_amp_conf), }; =20 -static const struct snd_soc_dapm_widget -mt8192_mt6359_rt1015p_rt5682_widgets[] =3D { +static const struct snd_soc_dapm_widget mt8192_mt6359_rt1015p_rt5682x_widg= ets[] =3D { SND_SOC_DAPM_SPK("Speakers", NULL), SND_SOC_DAPM_HP("Headphone Jack", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), }; =20 -static const struct snd_soc_dapm_route mt8192_mt6359_rt1015p_rt5682_routes= [] =3D { +static const struct snd_soc_dapm_route mt8192_mt6359_rt1015p_rt5682x_route= s[] =3D { /* speaker */ { "Speakers", NULL, "Speaker" }, /* headset */ @@ -1069,23 +1076,22 @@ static const struct snd_soc_dapm_route mt8192_mt635= 9_rt1015p_rt5682_routes[] =3D { { "IN1P", NULL, "Headset Mic" }, }; =20 -static const struct snd_kcontrol_new mt8192_mt6359_rt1015p_rt5682_controls= [] =3D { +static const struct snd_kcontrol_new mt8192_mt6359_rt1015p_rt5682x_control= s[] =3D { SOC_DAPM_PIN_SWITCH("Speakers"), SOC_DAPM_PIN_SWITCH("Headphone Jack"), SOC_DAPM_PIN_SWITCH("Headset Mic"), }; =20 -static struct snd_soc_card mt8192_mt6359_rt1015p_rt5682_card =3D { - .name =3D "mt8192_mt6359_rt1015p_rt5682", +static struct snd_soc_card mt8192_mt6359_rt1015p_rt5682x_card =3D { .owner =3D THIS_MODULE, .dai_link =3D mt8192_mt6359_dai_links, .num_links =3D ARRAY_SIZE(mt8192_mt6359_dai_links), - .controls =3D mt8192_mt6359_rt1015p_rt5682_controls, - .num_controls =3D ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682_controls), - .dapm_widgets =3D mt8192_mt6359_rt1015p_rt5682_widgets, - .num_dapm_widgets =3D ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682_widgets), - .dapm_routes =3D mt8192_mt6359_rt1015p_rt5682_routes, - .num_dapm_routes =3D ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682_routes), + .controls =3D mt8192_mt6359_rt1015p_rt5682x_controls, + .num_controls =3D ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682x_controls), + .dapm_widgets =3D mt8192_mt6359_rt1015p_rt5682x_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682x_widgets), + .dapm_routes =3D mt8192_mt6359_rt1015p_rt5682x_routes, + .num_dapm_routes =3D ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682x_routes), }; =20 static int mt8192_mt6359_card_set_be_link(struct snd_soc_card *card, @@ -1119,6 +1125,13 @@ static int mt8192_mt6359_dev_probe(struct platform_d= evice *pdev) return -EINVAL; card->dev =3D &pdev->dev; =20 + if (of_device_is_compatible(pdev->dev.of_node, RT1015P_RT5682_OF_NAME)) + card->name =3D RT1015P_RT5682_CARD_NAME; + else if (of_device_is_compatible(pdev->dev.of_node, RT1015P_RT5682S_OF_NA= ME)) + card->name =3D RT1015P_RT5682S_CARD_NAME; + else + dev_dbg(&pdev->dev, "No need to set card name\n"); + hdmi_codec =3D of_parse_phandle(pdev->dev.of_node, "mediatek,hdmi-codec",= 0); if (!hdmi_codec) dev_dbg(&pdev->dev, "The machine has no hdmi-codec\n"); @@ -1209,12 +1222,16 @@ static int mt8192_mt6359_dev_probe(struct platform_= device *pdev) #ifdef CONFIG_OF static const struct of_device_id mt8192_mt6359_dt_match[] =3D { { - .compatible =3D "mediatek,mt8192_mt6359_rt1015_rt5682", + .compatible =3D RT1015_RT5682_OF_NAME, .data =3D &mt8192_mt6359_rt1015_rt5682_card, }, { - .compatible =3D "mediatek,mt8192_mt6359_rt1015p_rt5682", - .data =3D &mt8192_mt6359_rt1015p_rt5682_card, + .compatible =3D RT1015P_RT5682_OF_NAME, + .data =3D &mt8192_mt6359_rt1015p_rt5682x_card, + }, + { + .compatible =3D RT1015P_RT5682S_OF_NAME, + .data =3D &mt8192_mt6359_rt1015p_rt5682x_card, }, {} }; --=20 2.25.1