From nobody Sun Sep 22 05:30:06 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 AB205C433F5 for ; Fri, 8 Apr 2022 06:06:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235113AbiDHGIW (ORCPT ); Fri, 8 Apr 2022 02:08:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235124AbiDHGIK (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 193AB78060; Thu, 7 Apr 2022 23:06:01 -0700 (PDT) X-UUID: 3f9f06ffd33c420a8f17e2ced917d64d-20220408 X-UUID: 3f9f06ffd33c420a8f17e2ced917d64d-20220408 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 93902839; Fri, 08 Apr 2022 14:05:57 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 Apr 2022 14:05:55 +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:54 +0800 From: Jiaxin Yu To: , , , CC: , , , , , , , , , , , Jiaxin Yu , Rob Herring Subject: [v10 1/4] ASoC: dt-bindings: mt8192-mt6359: add new compatible and new properties Date: Fri, 8 Apr 2022 14:05:49 +0800 Message-ID: <20220408060552.26607-2-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 1. Adds new compatible string "mt8192_mt6359_rt1015p_rt5682s" for machines with rt1015p and rt5682s. 2. Adds new property "headset-codec" for getting headset codec. 3. Adds new property "speaker-codecs" for getting speaker codecs. Signed-off-by: Jiaxin Yu Reviewed-by: Rob Herring Reviewed-by: N=C3=ADcolas F. R. A. Prado Tested-by: N=C3=ADcolas F. R. A. Prado Reviewed-by: AngeloGioacchino Del Regno --- .../sound/mt8192-mt6359-rt1015-rt5682.yaml | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/mt8192-mt6359-rt1015-r= t5682.yaml b/Documentation/devicetree/bindings/sound/mt8192-mt6359-rt1015-r= t5682.yaml index 5a5b765b859a..4fa179909c62 100644 --- a/Documentation/devicetree/bindings/sound/mt8192-mt6359-rt1015-rt5682.y= aml +++ b/Documentation/devicetree/bindings/sound/mt8192-mt6359-rt1015-rt5682.y= aml @@ -18,6 +18,7 @@ properties: enum: - mediatek,mt8192_mt6359_rt1015_rt5682 - mediatek,mt8192_mt6359_rt1015p_rt5682 + - mediatek,mt8192_mt6359_rt1015p_rt5682s =20 mediatek,platform: $ref: "/schemas/types.yaml#/definitions/phandle" @@ -27,11 +28,33 @@ properties: $ref: "/schemas/types.yaml#/definitions/phandle" description: The phandle of HDMI codec. =20 + headset-codec: + type: object + properties: + sound-dai: + $ref: /schemas/types.yaml#/definitions/phandle + required: + - sound-dai + + speaker-codecs: + type: object + properties: + sound-dai: + minItems: 1 + maxItems: 2 + items: + maxItems: 1 + $ref: /schemas/types.yaml#/definitions/phandle-array + required: + - sound-dai + additionalProperties: false =20 required: - compatible - mediatek,platform + - headset-codec + - speaker-codecs =20 examples: - | @@ -44,6 +67,15 @@ examples: "aud_clk_mosi_on"; pinctrl-0 =3D <&aud_clk_mosi_off>; pinctrl-1 =3D <&aud_clk_mosi_on>; + + headset-codec { + sound-dai =3D <&rt5682>; + }; + + speaker-codecs { + sound-dai =3D <&rt1015_l>, + <&rt1015_r>; + }; }; =20 ... --=20 2.25.1 From nobody Sun Sep 22 05:30:06 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 B8B18C433F5 for ; Fri, 8 Apr 2022 06:06:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235155AbiDHGIT (ORCPT ); Fri, 8 Apr 2022 02:08:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43672 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235125AbiDHGIK (ORCPT ); Fri, 8 Apr 2022 02:08:10 -0400 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 283178D6AD; Thu, 7 Apr 2022 23:06:04 -0700 (PDT) X-UUID: 0f9f5a4019804071ac9bddff7d58a880-20220408 X-UUID: 0f9f5a4019804071ac9bddff7d58a880-20220408 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1791129877; Fri, 08 Apr 2022 14:05:58 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 Apr 2022 14:05:56 +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:56 +0800 From: Jiaxin Yu To: , , , CC: , , , , , , , , , , , Jiaxin Yu , Tzung-Bi Shih Subject: [v10 2/4] ASoC: mediatek: mt8192: refactor for I2S3 DAI link of speaker Date: Fri, 8 Apr 2022 14:05:50 +0800 Message-ID: <20220408060552.26607-3-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 As part of the refactoring to allow the same machine driver to be used for the rt1015(p) and rt5682(s) codecs on the MT8192 platform, parse the rt1015(p) codecs from the speaker-codecs property in the devicetree and wire them to the I2S3 backend, instead of hardcoding the links and selecting through the compatible. 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 --- .../mt8192/mt8192-mt6359-rt1015-rt5682.c | 108 +++++++++--------- 1 file changed, 57 insertions(+), 51 deletions(-) diff --git a/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c b/soun= d/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c index ee91569c0911..15711448d259 100644 --- a/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c +++ b/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c @@ -604,17 +604,9 @@ SND_SOC_DAILINK_DEFS(i2s2, DAILINK_COMP_ARRAY(COMP_DUMMY()), DAILINK_COMP_ARRAY(COMP_EMPTY())); =20 -SND_SOC_DAILINK_DEFS(i2s3_rt1015, +SND_SOC_DAILINK_DEFS(i2s3, DAILINK_COMP_ARRAY(COMP_CPU("I2S3")), - DAILINK_COMP_ARRAY(COMP_CODEC(RT1015_DEV0_NAME, - RT1015_CODEC_DAI), - COMP_CODEC(RT1015_DEV1_NAME, - RT1015_CODEC_DAI)), - DAILINK_COMP_ARRAY(COMP_EMPTY())); - -SND_SOC_DAILINK_DEFS(i2s3_rt1015p, - DAILINK_COMP_ARRAY(COMP_CPU("I2S3")), - DAILINK_COMP_ARRAY(COMP_CODEC("rt1015p", "HiFi")), + DAILINK_COMP_ARRAY(COMP_EMPTY()), DAILINK_COMP_ARRAY(COMP_EMPTY())); =20 SND_SOC_DAILINK_DEFS(i2s5, @@ -929,6 +921,7 @@ static struct snd_soc_dai_link mt8192_mt6359_dai_links[= ] =3D { .dpcm_playback =3D 1, .ignore_suspend =3D 1, .be_hw_params_fixup =3D mt8192_i2s_hw_params_fixup, + SND_SOC_DAILINK_REG(i2s3), }, { .name =3D "I2S5", @@ -1100,55 +1093,61 @@ static struct snd_soc_card mt8192_mt6359_rt1015p_rt= 5682_card =3D { .num_dapm_routes =3D ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682_routes), }; =20 +static int mt8192_mt6359_card_set_be_link(struct snd_soc_card *card, + struct snd_soc_dai_link *link, + struct device_node *node, + char *link_name) +{ + int ret; + + if (node && strcmp(link->name, link_name) =3D=3D 0) { + ret =3D snd_soc_of_get_dai_link_codecs(card->dev, node, link); + if (ret < 0) { + dev_err_probe(card->dev, ret, "get dai link codecs fail\n"); + return ret; + } + } + + return 0; +} + static int mt8192_mt6359_dev_probe(struct platform_device *pdev) { struct snd_soc_card *card; - struct device_node *platform_node, *hdmi_codec; + struct device_node *platform_node, *hdmi_codec, *speaker_codec; int ret, i; struct snd_soc_dai_link *dai_link; struct mt8192_mt6359_priv *priv; =20 - platform_node =3D of_parse_phandle(pdev->dev.of_node, - "mediatek,platform", 0); - if (!platform_node) { - dev_err(&pdev->dev, "Property 'platform' missing or invalid\n"); + card =3D (struct snd_soc_card *)of_device_get_match_data(&pdev->dev); + if (!card) return -EINVAL; - } + card->dev =3D &pdev->dev; =20 - card =3D (struct snd_soc_card *)of_device_get_match_data(&pdev->dev); - if (!card) { + 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"); + + platform_node =3D of_parse_phandle(pdev->dev.of_node, "mediatek,platform"= , 0); + if (!platform_node) { ret =3D -EINVAL; - goto put_platform_node; + dev_err_probe(&pdev->dev, ret, "Property 'platform' missing or invalid\n= "); + goto err_platform_node; } - card->dev =3D &pdev->dev; =20 - hdmi_codec =3D of_parse_phandle(pdev->dev.of_node, - "mediatek,hdmi-codec", 0); + speaker_codec =3D of_get_child_by_name(pdev->dev.of_node, "speaker-codecs= "); + if (!speaker_codec) { + ret =3D -EINVAL; + dev_err_probe(&pdev->dev, ret, "Property 'speaker-codecs' missing or inv= alid\n"); + goto err_speaker_codec; + } =20 for_each_card_prelinks(card, i, dai_link) { - if (strcmp(dai_link->name, "I2S3") =3D=3D 0) { - if (card =3D=3D &mt8192_mt6359_rt1015_rt5682_card) { - dai_link->ops =3D &mt8192_rt1015_i2s_ops; - dai_link->cpus =3D i2s3_rt1015_cpus; - dai_link->num_cpus =3D - ARRAY_SIZE(i2s3_rt1015_cpus); - dai_link->codecs =3D i2s3_rt1015_codecs; - dai_link->num_codecs =3D - ARRAY_SIZE(i2s3_rt1015_codecs); - dai_link->platforms =3D i2s3_rt1015_platforms; - dai_link->num_platforms =3D - ARRAY_SIZE(i2s3_rt1015_platforms); - } else if (card =3D=3D &mt8192_mt6359_rt1015p_rt5682_card) { - dai_link->cpus =3D i2s3_rt1015p_cpus; - dai_link->num_cpus =3D - ARRAY_SIZE(i2s3_rt1015p_cpus); - dai_link->codecs =3D i2s3_rt1015p_codecs; - dai_link->num_codecs =3D - ARRAY_SIZE(i2s3_rt1015p_codecs); - dai_link->platforms =3D i2s3_rt1015p_platforms; - dai_link->num_platforms =3D - ARRAY_SIZE(i2s3_rt1015p_platforms); - } + ret =3D mt8192_mt6359_card_set_be_link(card, dai_link, speaker_codec, "I= 2S3"); + if (ret) { + dev_err_probe(&pdev->dev, ret, "%s set speaker_codec fail\n", + dai_link->name); + goto err_probe; } =20 if (hdmi_codec && strcmp(dai_link->name, "TDM") =3D=3D 0) { @@ -1156,6 +1155,9 @@ static int mt8192_mt6359_dev_probe(struct platform_de= vice *pdev) dai_link->ignore =3D 0; } =20 + if (strcmp(dai_link->codecs[0].dai_name, RT1015_CODEC_DAI) =3D=3D 0) + dai_link->ops =3D &mt8192_rt1015_i2s_ops; + if (!dai_link->platforms->name) dai_link->platforms->of_node =3D platform_node; } @@ -1163,22 +1165,26 @@ static int mt8192_mt6359_dev_probe(struct platform_= device *pdev) priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) { ret =3D -ENOMEM; - goto put_hdmi_codec; + goto err_probe; } snd_soc_card_set_drvdata(card, priv); =20 ret =3D mt8192_afe_gpio_init(&pdev->dev); if (ret) { - dev_err(&pdev->dev, "init gpio error %d\n", ret); - goto put_hdmi_codec; + dev_err_probe(&pdev->dev, ret, "%s init gpio error\n", __func__); + goto err_probe; } =20 ret =3D devm_snd_soc_register_card(&pdev->dev, card); + if (ret) + dev_err_probe(&pdev->dev, ret, "%s snd_soc_register_card fail\n", __func= __); =20 -put_hdmi_codec: - of_node_put(hdmi_codec); -put_platform_node: +err_probe: + of_node_put(speaker_codec); +err_speaker_codec: of_node_put(platform_node); +err_platform_node: + of_node_put(hdmi_codec); return ret; } =20 --=20 2.25.1 From nobody Sun Sep 22 05:30:06 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 3160FC433F5 for ; Fri, 8 Apr 2022 06:06:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235145AbiDHGIP (ORCPT ); Fri, 8 Apr 2022 02:08:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43660 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235123AbiDHGIK (ORCPT ); Fri, 8 Apr 2022 02:08:10 -0400 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B1CFE76657; Thu, 7 Apr 2022 23:06:04 -0700 (PDT) X-UUID: bfbcc3fa30bd43429af1d8dd72a6b18a-20220408 X-UUID: bfbcc3fa30bd43429af1d8dd72a6b18a-20220408 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 297700657; Fri, 08 Apr 2022 14:05:58 +0800 Received: from mtkexhb02.mediatek.inc (172.21.101.103) 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:58 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkexhb02.mediatek.inc (172.21.101.103) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 Apr 2022 14:05:58 +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:57 +0800 From: Jiaxin Yu To: , , , CC: , , , , , , , , , , , Jiaxin Yu , Tzung-Bi Shih Subject: [v10 3/4] ASoC: mediatek: mt8192: refactor for I2S8/I2S9 DAI links of headset Date: Fri, 8 Apr 2022 14:05:51 +0800 Message-ID: <20220408060552.26607-4-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 As part of the refactoring to allow the same machine driver to be used for the rt1015(p) and rt5682(s) codecs on the MT8192 platform, parse the rt5682(s) codec from the headset-codec property in the devicetree and wire it to the I2S8 and I2S9 backends. 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 --- .../mt8192/mt8192-mt6359-rt1015-rt5682.c | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c b/soun= d/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c index 15711448d259..4a11f687d416 100644 --- a/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c +++ b/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c @@ -28,9 +28,6 @@ #define RT1015_DEV0_NAME "rt1015.1-0028" #define RT1015_DEV1_NAME "rt1015.1-0029" =20 -#define RT5682_CODEC_DAI "rt5682-aif1" -#define RT5682_DEV0_NAME "rt5682.1-001a" - struct mt8192_mt6359_priv { struct snd_soc_jack headset_jack; struct snd_soc_jack hdmi_jack; @@ -626,14 +623,12 @@ SND_SOC_DAILINK_DEFS(i2s7, =20 SND_SOC_DAILINK_DEFS(i2s8, DAILINK_COMP_ARRAY(COMP_CPU("I2S8")), - DAILINK_COMP_ARRAY(COMP_CODEC(RT5682_DEV0_NAME, - RT5682_CODEC_DAI)), + DAILINK_COMP_ARRAY(COMP_EMPTY()), DAILINK_COMP_ARRAY(COMP_EMPTY())); =20 SND_SOC_DAILINK_DEFS(i2s9, DAILINK_COMP_ARRAY(COMP_CPU("I2S9")), - DAILINK_COMP_ARRAY(COMP_CODEC(RT5682_DEV0_NAME, - RT5682_CODEC_DAI)), + DAILINK_COMP_ARRAY(COMP_EMPTY()), DAILINK_COMP_ARRAY(COMP_EMPTY())); =20 SND_SOC_DAILINK_DEFS(connsys_i2s, @@ -1114,7 +1109,7 @@ static int mt8192_mt6359_card_set_be_link(struct snd_= soc_card *card, static int mt8192_mt6359_dev_probe(struct platform_device *pdev) { struct snd_soc_card *card; - struct device_node *platform_node, *hdmi_codec, *speaker_codec; + struct device_node *platform_node, *hdmi_codec, *headset_codec, *speaker_= codec; int ret, i; struct snd_soc_dai_link *dai_link; struct mt8192_mt6359_priv *priv; @@ -1142,6 +1137,13 @@ static int mt8192_mt6359_dev_probe(struct platform_d= evice *pdev) goto err_speaker_codec; } =20 + headset_codec =3D of_get_child_by_name(pdev->dev.of_node, "headset-codec"= ); + if (!headset_codec) { + ret =3D -EINVAL; + dev_err_probe(&pdev->dev, ret, "Property 'headset-codec' missing or inva= lid\n"); + goto err_headset_codec; + } + for_each_card_prelinks(card, i, dai_link) { ret =3D mt8192_mt6359_card_set_be_link(card, dai_link, speaker_codec, "I= 2S3"); if (ret) { @@ -1150,6 +1152,20 @@ static int mt8192_mt6359_dev_probe(struct platform_d= evice *pdev) goto err_probe; } =20 + ret =3D mt8192_mt6359_card_set_be_link(card, dai_link, headset_codec, "I= 2S8"); + if (ret) { + dev_err_probe(&pdev->dev, ret, "%s set headset_codec fail\n", + dai_link->name); + goto err_probe; + } + + ret =3D mt8192_mt6359_card_set_be_link(card, dai_link, headset_codec, "I= 2S9"); + if (ret) { + dev_err_probe(&pdev->dev, ret, "%s set headset_codec fail\n", + dai_link->name); + goto err_probe; + } + if (hdmi_codec && strcmp(dai_link->name, "TDM") =3D=3D 0) { dai_link->codecs->of_node =3D hdmi_codec; dai_link->ignore =3D 0; @@ -1180,6 +1196,8 @@ static int mt8192_mt6359_dev_probe(struct platform_de= vice *pdev) dev_err_probe(&pdev->dev, ret, "%s snd_soc_register_card fail\n", __func= __); =20 err_probe: + of_node_put(headset_codec); +err_headset_codec: of_node_put(speaker_codec); err_speaker_codec: of_node_put(platform_node); --=20 2.25.1 From nobody Sun Sep 22 05:30:06 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