ASoC: Intel: kbl: Enabling ASRC for RT5663 codec on kabylake platform
authorHarsha Priya N <harshapriya.n@intel.com>
Wed, 16 Aug 2017 10:49:55 +0000 (16:19 +0530)
committerMark Brown <broonie@kernel.org>
Thu, 17 Aug 2017 17:05:04 +0000 (18:05 +0100)
Patch fixes cracking noise in rt5663 headphones for kbl platform by
calling rt5663_sel_asrc_clk_src() for RT5663_AD_STEREO_FILTER to set
ASRC.

The ASRC function is for asynchronous MCLK and LRCLK. For RT5663 ASRC
should be enabled to support pcm format with 100fs.
ASRC function will track i2s clock and generate corresponding
system clock for codec. Calling this func helps select clock source
for both RT5663_AD_STEREO_FILTER and RT5663_DA_STEREO_FILTER filters
which fixes the crackling sound.

Signed-off-by: Harsha Priya <harshapriya.n@intel.com>
Signed-off-by: Shruthi Sudhakar <shruthi.sudhakar@intel.com>
Signed-off-by: Naveen M <naveen.m@intel.com>
Acked-By: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/kbl_rt5663_max98927.c

index 8bdd6131c6ad1e80bb2eec41239db3a1ef463262..c1442147d138dc08e852c2c5332c17c4cd916dfc 100644 (file)
@@ -356,11 +356,13 @@ static int kabylake_rt5663_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *codec_dai = rtd->codec_dai;
        int ret;
 
-       ret = snd_soc_dai_set_sysclk(codec_dai,
-                       RT5663_SCLK_S_MCLK, 24576000, SND_SOC_CLOCK_IN);
        /* use ASRC for internal clocks, as PLL rate isn't multiple of BCLK */
-       rt5663_sel_asrc_clk_src(codec_dai->codec, RT5663_DA_STEREO_FILTER, 1);
+       rt5663_sel_asrc_clk_src(codec_dai->codec,
+                       RT5663_DA_STEREO_FILTER | RT5663_AD_STEREO_FILTER,
+                       RT5663_CLK_SEL_I2S1_ASRC);
 
+       ret = snd_soc_dai_set_sysclk(codec_dai,
+                       RT5663_SCLK_S_MCLK, 24576000, SND_SOC_CLOCK_IN);
        if (ret < 0)
                dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret);