From nobody Fri Feb 13 11:02:09 2026 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 1BD54E81817 for ; Tue, 26 Sep 2023 04:09:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233516AbjIZEJZ (ORCPT ); Tue, 26 Sep 2023 00:09:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36528 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233201AbjIZEJT (ORCPT ); Tue, 26 Sep 2023 00:09:19 -0400 Received: from mail-qk1-x729.google.com (mail-qk1-x729.google.com [IPv6:2607:f8b0:4864:20::729]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BFEEBF for ; Mon, 25 Sep 2023 21:09:13 -0700 (PDT) Received: by mail-qk1-x729.google.com with SMTP id af79cd13be357-774141bb415so399518985a.3 for ; Mon, 25 Sep 2023 21:09:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=huaqin-corp-partner-google-com.20230601.gappssmtp.com; s=20230601; t=1695701352; x=1696306152; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=AnkYs5/BG/9GOQBaCWwWyOfl1fNQBQrw4AiO+6MYmI8=; b=i8Tlhn5z/DXIrbZRAgIMzuHz4sjEf5BhfBL3AfDhFve3498UMrFNyaBPK8AefdQ6tY OPIT59aYeeXe2uqlqH+x9fzaHuF9uZUhHbiG/QhApu8gMLXQzOH+LsRJ9Di0QayPJOSw +/0xfgsA3/RY5o5aa6kZe+w+tiEY9si3jAVOq6TqRNOEWMhzSeGab6qX17iK6GrsYmK7 Ic+nJmngtyS/aEgwsmAs8GiRLsApOwh+Ji+/B96yX/udtnLMT+OpUJPG7x5eTfxpb28i M+CHgxHC56i1gamEsQUlE6re1nANAI/gTChyR4csSu3GLPFhMqPB1BCzD+iW2HCzP4pz QZ/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695701352; x=1696306152; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AnkYs5/BG/9GOQBaCWwWyOfl1fNQBQrw4AiO+6MYmI8=; b=hVpV0IaLfxi3A7JYEkqBySI31pyTtroic9nKjPPqT0APLivoDPflPnh92oYSoixB0n ugS9otRg8ttY6B3zhtGEcVxPCtrZ5gWRDM6PbGaBwfMzDraWxKQ8/JVwJ+udSwNBqIn1 ZxgEmPUnIXUi/wrEg7SPdl8AgFU8KJdNbq5b2TjE3Z8qB31jRgEfq0BO4UqTnnpJrtQp YUGHLDdKKpEJMJMFSAWGvJLZUx80//fWXPf7jOYDv5mQYlv33QKdB6w7VaNu7s9buyuC Kr3oP6oxhKtxxaUmtLw5nSH7rLedb7fLke3TFM96BWyN5PuhwBUR9+pb9BFzZn+gc2ij uEqw== X-Gm-Message-State: AOJu0Yz9TIkH7IbcrFlg83OYD+c5Q7OGDejMZg8fwKx2hKJK1Buonn+i xS1ZAFEJzoPd1tgr/ZMAx8HEvg== X-Google-Smtp-Source: AGHT+IEGk8Eh0HkJJqF00QSQdnOkthXsg5tTDBAC/R5jcwbJQegRrx9uaFUuouljq8+bvVSWeshFcA== X-Received: by 2002:a05:620a:f13:b0:773:a229:5a4a with SMTP id v19-20020a05620a0f1300b00773a2295a4amr8412741qkl.25.1695701352202; Mon, 25 Sep 2023 21:09:12 -0700 (PDT) Received: from ubuntu.huaqin.com ([101.78.151.205]) by smtp.gmail.com with ESMTPSA id z22-20020aa791d6000000b00682669dc19bsm8824907pfa.201.2023.09.25.21.09.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 21:09:11 -0700 (PDT) From: xiazhengqiao To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, matthias.bgg@gmail.com, perex@perex.cz, trevor.wu@mediatek.com Cc: alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, xiazhengqiao Subject: [v2 1/2] ASoC: dt-bindings: mediatek,mt8188-mt6359: add RT5682S support Date: Tue, 26 Sep 2023 12:09:00 +0800 Message-Id: <20230926040901.20338-2-xiazhengqiao@huaqin.corp-partner.google.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230926040901.20338-1-xiazhengqiao@huaqin.corp-partner.google.com> References: <20230926040901.20338-1-xiazhengqiao@huaqin.corp-partner.google.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add compatible string "mediatek,mt8188-rt5682s" to support new board with rt5682s codec. Signed-off-by: xiazhengqiao Acked-by: Rob Herring --- .../devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359= .yaml b/Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml index 43b3b67bdf3b..4c8c95057ef7 100644 --- a/Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml +++ b/Documentation/devicetree/bindings/sound/mediatek,mt8188-mt6359.yaml @@ -17,6 +17,7 @@ properties: enum: - mediatek,mt8188-mt6359-evb - mediatek,mt8188-nau8825 + - mediatek,mt8188-rt5682s =20 audio-routing: description: --=20 2.17.1 From nobody Fri Feb 13 11:02:09 2026 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 6F9BACE7A8E for ; Tue, 26 Sep 2023 04:09:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233588AbjIZEJd (ORCPT ); Tue, 26 Sep 2023 00:09:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233467AbjIZEJY (ORCPT ); Tue, 26 Sep 2023 00:09:24 -0400 Received: from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com [IPv6:2607:f8b0:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 824D3BF for ; Mon, 25 Sep 2023 21:09:16 -0700 (PDT) Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-692c02adeefso3453370b3a.3 for ; Mon, 25 Sep 2023 21:09:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=huaqin-corp-partner-google-com.20230601.gappssmtp.com; s=20230601; t=1695701356; x=1696306156; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=+mumr9qKcy8V2EHEbh7jPzXIzkQceK2hSsX0uJr1H94=; b=jr6sVxSx5e3woLclAsbIm7FbEYHIr12N0pQW9AwBfhCAW2XZisdzkZPp/Q/coHh3Tj w1iJI6Z3mtITiO1KKQnYlVLG+4MFjuvLt1pbnEfmsHfgnTmyo1W/OSoqlfaZ2ui/66uX CgRgsmJGNHoPC31QWR10J4pA1G/39BnRAXkLPkmkiZTSD8Mxqu48OA67zHp/Tu1v0YJT GAawewdFlHa5oWeSDkytO/D1aGfENklfnpzQ3EbP5ztZIejBtJK8uqGK6zDKv5+44vKy HdzuEzXBiVcPznWj0UxdAX2xVhme2OATTtzZwkyIJUP6cJeTrpypQO7W1YUhE9eA44B+ R1AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695701356; x=1696306156; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+mumr9qKcy8V2EHEbh7jPzXIzkQceK2hSsX0uJr1H94=; b=dI4l7pDlifkHK5DtKGtEPr3YnJBXJ2dYHbQial3t1uJypoflAoVr7ZMInKYqJg5AB+ hilRwbHXg3oqGMnf+dzypDX1ZnBSdosHFRnf7D1Yi0k2ItS5qAo2muUksrrT39tw3ZSn 8+fYXv4kxys/3RSjNVBglWagbXflv/jXVF0n4UMdY7HG8jFMMj9lLTbxMYK3Mhc/2NzX t05BHfyxeBmuEDqg6g2XLf6i0xN7Qw3V+87EkIKeQi6av7lQqxqksTgqdPFAPMwTjDEo SLa+MyLJ1Kpii3ZGKW/90Q+EwDQmE/ILbtYaRdng1LgayW0D/d/TRxMvE1AEqzx1BqVb A48A== X-Gm-Message-State: AOJu0YzchfKVKicL/kbsUwYnLwBcndkUnq0FdaS0GLtDQ1gubRoRVP8F UKfVOs2ETujSTZeUSwAwyBtT9Q== X-Google-Smtp-Source: AGHT+IEnnPxbhpCk8BbolkG5iR/iMrKGgPFOu8mDfheNUSi6BG0XzOUguhmEJNLduPQpBurzRZpTlg== X-Received: by 2002:a05:6a00:2191:b0:68e:2822:fb36 with SMTP id h17-20020a056a00219100b0068e2822fb36mr7171187pfi.8.1695701355782; Mon, 25 Sep 2023 21:09:15 -0700 (PDT) Received: from ubuntu.huaqin.com ([101.78.151.205]) by smtp.gmail.com with ESMTPSA id z22-20020aa791d6000000b00682669dc19bsm8824907pfa.201.2023.09.25.21.09.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 21:09:15 -0700 (PDT) From: xiazhengqiao To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, matthias.bgg@gmail.com, perex@perex.cz, trevor.wu@mediatek.com Cc: alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, xiazhengqiao Subject: [v2 2/2] ASoC: mediatek: mt8188-mt6359: add rt5682s support Date: Tue, 26 Sep 2023 12:09:01 +0800 Message-Id: <20230926040901.20338-3-xiazhengqiao@huaqin.corp-partner.google.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230926040901.20338-1-xiazhengqiao@huaqin.corp-partner.google.com> References: <20230926040901.20338-1-xiazhengqiao@huaqin.corp-partner.google.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" To use RT5682S as the codec and MAX98390 as the amp, add a new sound card named mt8188_rt5682s. Signed-off-by: xiazhengqiao --- sound/soc/mediatek/Kconfig | 1 + sound/soc/mediatek/mt8188/mt8188-mt6359.c | 141 +++++++++++++++++++++- 2 files changed, 140 insertions(+), 2 deletions(-) diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig index 8d1bc8814486..43c8fea00439 100644 --- a/sound/soc/mediatek/Kconfig +++ b/sound/soc/mediatek/Kconfig @@ -250,6 +250,7 @@ config SND_SOC_MT8188_MT6359 select SND_SOC_MAX98390 select SND_SOC_NAU8315 select SND_SOC_NAU8825 + select SND_SOC_RT5682S help This adds support for ASoC machine driver for MediaTek MT8188 boards with the MT6359 and other I2S audio codecs. diff --git a/sound/soc/mediatek/mt8188/mt8188-mt6359.c b/sound/soc/mediatek= /mt8188/mt8188-mt6359.c index e2416b981e1f..ec5681d291ff 100644 --- a/sound/soc/mediatek/mt8188/mt8188-mt6359.c +++ b/sound/soc/mediatek/mt8188/mt8188-mt6359.c @@ -17,6 +17,7 @@ #include "mt8188-afe-common.h" #include "../../codecs/nau8825.h" #include "../../codecs/mt6359.h" +#include "../../codecs/rt5682.h" #include "../common/mtk-afe-platform-driver.h" #include "../common/mtk-soundcard-driver.h" #include "../common/mtk-dsp-sof-common.h" @@ -32,7 +33,7 @@ #define TEST_MISO_DONE_2 BIT(29) =20 #define NAU8825_HS_PRESENT BIT(0) - +#define RT5682S_HS_PRESENT BIT(1) /* * Maxim MAX98390 */ @@ -52,6 +53,8 @@ #define SOF_DMA_UL4 "SOF_DMA_UL4" #define SOF_DMA_UL5 "SOF_DMA_UL5" =20 +#define RT5682S_CODEC_DAI "rt5682s-aif1" + /* FE */ SND_SOC_DAILINK_DEFS(playback2, DAILINK_COMP_ARRAY(COMP_CPU("DL2")), @@ -258,6 +261,17 @@ static struct snd_soc_jack_pin nau8825_jack_pins[] =3D= { }, }; =20 +static struct snd_soc_jack_pin rt5682s_jack_pins[] =3D { + { + .pin =3D "Headphone Jack", + .mask =3D SND_JACK_HEADPHONE, + }, + { + .pin =3D "Headset Mic", + .mask =3D SND_JACK_MICROPHONE, + }, +}; + struct mt8188_card_data { const char *name; unsigned long quirk; @@ -316,10 +330,18 @@ static const struct snd_soc_dapm_widget mt8188_nau882= 5_widgets[] =3D { SND_SOC_DAPM_HP("Headphone Jack", NULL), }; =20 +static const struct snd_soc_dapm_widget mt8188_rt5682s_widgets[] =3D { + SND_SOC_DAPM_HP("Headphone Jack", NULL), +}; + static const struct snd_kcontrol_new mt8188_nau8825_controls[] =3D { SOC_DAPM_PIN_SWITCH("Headphone Jack"), }; =20 +static const struct snd_kcontrol_new mt8188_rt5682s_controls[] =3D { + SOC_DAPM_PIN_SWITCH("Headphone Jack"), +}; + static const struct snd_soc_dapm_route mt8188_mt6359_routes[] =3D { /* SOF Uplink */ {SOF_DMA_UL4, NULL, "O034"}, @@ -772,6 +794,55 @@ static int mt8188_nau8825_codec_init(struct snd_soc_pc= m_runtime *rtd) return 0; }; =20 +static int mt8188_rt5682s_codec_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_card *card =3D rtd->card; + struct mtk_soc_card_data *soc_card_data =3D snd_soc_card_get_drvdata(card= ); + struct mt8188_mt6359_priv *priv =3D soc_card_data->mach_priv; + struct snd_soc_component *component =3D asoc_rtd_to_codec(rtd, 0)->compon= ent; + struct snd_soc_jack *jack =3D &priv->headset_jack; + int ret; + + ret =3D snd_soc_dapm_new_controls(&card->dapm, mt8188_rt5682s_widgets, + ARRAY_SIZE(mt8188_rt5682s_widgets)); + if (ret) { + dev_err(rtd->dev, "unable to add rt5682s card widget, ret %d\n", ret); + return ret; + } + + ret =3D snd_soc_add_card_controls(card, mt8188_rt5682s_controls, + ARRAY_SIZE(mt8188_rt5682s_controls)); + if (ret) { + dev_err(rtd->dev, "unable to add rt5682s card controls, ret %d\n", ret); + return ret; + } + + ret =3D snd_soc_card_jack_new_pins(rtd->card, "Headset Jack", + SND_JACK_HEADSET | SND_JACK_BTN_0 | + SND_JACK_BTN_1 | SND_JACK_BTN_2 | + SND_JACK_BTN_3, + jack, + rt5682s_jack_pins, + ARRAY_SIZE(rt5682s_jack_pins)); + if (ret) { + dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); + return ret; + } + + snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); + snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); + snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); + snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); + ret =3D snd_soc_component_set_jack(component, jack, NULL); + + if (ret) { + dev_err(rtd->dev, "Headset Jack call-back failed: %d\n", ret); + return ret; + } + + return 0; +}; + static void mt8188_nau8825_codec_exit(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_component *component =3D asoc_rtd_to_codec(rtd, 0)->compon= ent; @@ -779,6 +850,13 @@ static void mt8188_nau8825_codec_exit(struct snd_soc_p= cm_runtime *rtd) snd_soc_component_set_jack(component, NULL, NULL); } =20 +static void mt8188_rt5682s_codec_exit(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_component *component =3D asoc_rtd_to_codec(rtd, 0)->compon= ent; + + snd_soc_component_set_jack(component, NULL, NULL); +} + static int mt8188_nau8825_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { @@ -813,6 +891,51 @@ static const struct snd_soc_ops mt8188_nau8825_ops =3D= { .hw_params =3D mt8188_nau8825_hw_params, }; =20 +static int mt8186_rt5682s_i2s_hw_params(struct snd_pcm_substream *substrea= m, + struct snd_pcm_hw_params *params) +{ + struct snd_soc_pcm_runtime *rtd =3D substream->private_data; + struct snd_soc_card *card =3D rtd->card; + struct snd_soc_dai *cpu_dai =3D asoc_rtd_to_cpu(rtd, 0); + struct snd_soc_dai *codec_dai =3D asoc_rtd_to_codec(rtd, 0); + unsigned int rate =3D params_rate(params); + int bitwidth; + int ret; + + bitwidth =3D snd_pcm_format_width(params_format(params)); + if (bitwidth < 0) { + dev_err(card->dev, "invalid bit width: %d\n", bitwidth); + return bitwidth; + } + + ret =3D snd_soc_dai_set_tdm_slot(codec_dai, 0x00, 0x0, 0x2, bitwidth); + if (ret) { + dev_err(card->dev, "failed to set tdm slot\n"); + return ret; + } + + ret =3D snd_soc_dai_set_pll(codec_dai, RT5682_PLL1, RT5682_PLL1_S_BCLK1, + rate * 32, rate * 512); + if (ret) { + dev_err(card->dev, "failed to set pll\n"); + return ret; + } + + ret =3D snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1, + rate * 512, SND_SOC_CLOCK_IN); + if (ret) { + dev_err(card->dev, "failed to set sysclk\n"); + return ret; + } + + return snd_soc_dai_set_sysclk(cpu_dai, 0, rate * 128, + SND_SOC_CLOCK_OUT); +} + +static const struct snd_soc_ops mt8188_rt5682s_i2s_ops =3D { + .hw_params =3D mt8186_rt5682s_i2s_hw_params, +}; + static int mt8188_sof_be_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { @@ -1148,7 +1271,7 @@ static void mt8188_fixup_controls(struct snd_soc_card= *card) struct mt8188_card_data *card_data =3D (struct mt8188_card_data *)priv->p= rivate_data; struct snd_kcontrol *kctl; =20 - if (card_data->quirk & NAU8825_HS_PRESENT) { + if (card_data->quirk & (NAU8825_HS_PRESENT | RT5682S_HS_PRESENT)) { struct snd_soc_dapm_widget *w, *next_w; =20 for_each_card_widgets_safe(card, w, next_w) { @@ -1190,6 +1313,7 @@ static int mt8188_mt6359_dev_probe(struct platform_de= vice *pdev) struct snd_soc_dai_link *dai_link; bool init_mt6359 =3D false; bool init_nau8825 =3D false; + bool init_rt5682s =3D false; bool init_max98390 =3D false; bool init_dumb =3D false; int ret, i; @@ -1306,6 +1430,13 @@ static int mt8188_mt6359_dev_probe(struct platform_d= evice *pdev) dai_link->exit =3D mt8188_nau8825_codec_exit; init_nau8825 =3D true; } + } else if (!strcmp(dai_link->codecs->dai_name, RT5682S_CODEC_DAI)) { + dai_link->ops =3D &mt8188_rt5682s_i2s_ops; + if (!init_rt5682s) { + dai_link->init =3D mt8188_rt5682s_codec_init; + dai_link->exit =3D mt8188_rt5682s_codec_exit; + init_rt5682s =3D true; + } } else { if (strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai")) { if (!init_dumb) { @@ -1343,9 +1474,15 @@ static struct mt8188_card_data mt8188_nau8825_card = =3D { .quirk =3D NAU8825_HS_PRESENT, }; =20 +static struct mt8188_card_data mt8188_rt5682s_card =3D { + .name =3D "mt8188_rt5682s", + .quirk =3D RT5682S_HS_PRESENT, +}; + static const struct of_device_id mt8188_mt6359_dt_match[] =3D { { .compatible =3D "mediatek,mt8188-mt6359-evb", .data =3D &mt8188_evb_car= d, }, { .compatible =3D "mediatek,mt8188-nau8825", .data =3D &mt8188_nau8825_ca= rd, }, + { .compatible =3D "mediatek,mt8188-rt5682s", .data =3D &mt8188_rt5682s_ca= rd, }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, mt8188_mt6359_dt_match); --=20 2.17.1