Unverified Commit 425c5fce authored by lvzhaoxiong's avatar lvzhaoxiong Committed by Mark Brown
Browse files

ASoC: qcom: Add support for ALC5682I-VS codec



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: default avatarlvzhaoxiong <lvzhaoxiong@huaqin.corp-partner.google.com>
Link: https://lore.kernel.org/r/20211123024329.21998-1-lvzhaoxiong@huaqin.corp-partner.google.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent fd03cf7f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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.
+19 −5
Original line number Diff line number Diff line
@@ -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",