]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ASoC: qcom: Add support for ALC5682I-VS codec
authorlvzhaoxiong <lvzhaoxiong@huaqin.corp-partner.google.com>
Tue, 23 Nov 2021 02:43:29 +0000 (10:43 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 29 Nov 2021 12:19:48 +0000 (12:19 +0000)
Qcom machine driver adds rt5682s support in this patch.
Card name can be specified from dts by model property, and driver makes
use of the name to distinguish which headset codec is on the board.

Signed-off-by: lvzhaoxiong <lvzhaoxiong@huaqin.corp-partner.google.com>
Link: https://lore.kernel.org/r/20211123024329.21998-1-lvzhaoxiong@huaqin.corp-partner.google.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/qcom/Kconfig
sound/soc/qcom/sc7180.c

index b2173847dc476b04e2c06ca98b02c6140e0c0b2e..cf3e151bb635006fc84ad98f11966c9a8bef6130 100644 (file)
@@ -169,6 +169,7 @@ config SND_SOC_SC7180
        select SND_SOC_LPASS_SC7180
        select SND_SOC_MAX98357A
        select SND_SOC_RT5682_I2C
+       select SND_SOC_RT5682S
        select SND_SOC_ADAU7002
        help
          To add support for audio on Qualcomm Technologies Inc.
index 768566bb57a5f32b8dcea1a5688a3e2bac5df7a1..2fff764a00a72069782218767fe00265ba60b637 100644 (file)
@@ -17,6 +17,7 @@
 #include <uapi/linux/input-event-codes.h>
 
 #include "../codecs/rt5682.h"
+#include "../codecs/rt5682s.h"
 #include "common.h"
 #include "lpass.h"
 
@@ -128,7 +129,21 @@ static int sc7180_snd_startup(struct snd_pcm_substream *substream)
        struct sc7180_snd_data *data = snd_soc_card_get_drvdata(card);
        struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
-       int ret;
+       int pll_id, pll_source, pll_in, pll_out, clk_id, ret;
+
+       if (!(strcmp(card->name, "sc7180-rt5682-max98357a-1mic"))) {
+               pll_source = RT5682_PLL1_S_MCLK;
+               pll_id = 0;
+               clk_id = RT5682_SCLK_S_PLL1;
+               pll_out = RT5682_PLL1_FREQ;
+               pll_in = DEFAULT_MCLK_RATE;
+       } else if (!(strcmp(card->name, "sc7180-rt5682s-max98357a-1mic"))) {
+               pll_source = RT5682S_PLL_S_MCLK;
+               pll_id = RT5682S_PLL2;
+               clk_id = RT5682S_SCLK_S_PLL2;
+               pll_out = RT5682_PLL1_FREQ;
+               pll_in = DEFAULT_MCLK_RATE;
+       }
 
        switch (cpu_dai->id) {
        case MI2S_PRIMARY:
@@ -145,16 +160,15 @@ static int sc7180_snd_startup(struct snd_pcm_substream *substream)
                                    SND_SOC_DAIFMT_I2S);
 
                /* Configure PLL1 for codec */
-               ret = snd_soc_dai_set_pll(codec_dai, 0, RT5682_PLL1_S_MCLK,
-                                         DEFAULT_MCLK_RATE, RT5682_PLL1_FREQ);
+               ret = snd_soc_dai_set_pll(codec_dai, pll_id, pll_source,
+                                         pll_in, pll_out);
                if (ret) {
                        dev_err(rtd->dev, "can't set codec pll: %d\n", ret);
                        return ret;
                }
 
                /* Configure sysclk for codec */
-               ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1,
-                                            RT5682_PLL1_FREQ,
+               ret = snd_soc_dai_set_sysclk(codec_dai, clk_id, pll_out,
                                             SND_SOC_CLOCK_IN);
                if (ret)
                        dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n",