ASoC: amd: acp: Set bclk as source to set pll for rt5682s codec
authorVenkata Prasad Potturu <venkataprasad.potturu@amd.com>
Wed, 6 Dec 2023 11:06:18 +0000 (16:36 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 6 Dec 2023 22:28:55 +0000 (22:28 +0000)
Some platforms doesn't have reference mclk pin to codec,
so set bclk as a clk source for rt5682s codec pll in tdm mode.

Signed-off-by: Venkata Prasad Potturu <venkataprasad.potturu@amd.com>
Link: https://lore.kernel.org/r/20231206110620.1695591-7-venkataprasad.potturu@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/amd/acp/acp-mach-common.c

index 74e83c2dae53a3df349c71a30262a861e7ddcdf8..f7bcf210f0fd0a34df6e04b67e648599202fe444 100644 (file)
@@ -282,6 +282,22 @@ static int acp_card_rt5682_hw_params(struct snd_pcm_substream *substream,
                return ret;
        }
 
+       if (drvdata->tdm_mode) {
+               ret = snd_soc_dai_set_pll(codec_dai, RT5682S_PLL1, RT5682S_PLL_S_BCLK1,
+                                         6144000, 49152000);
+               if (ret < 0) {
+                       dev_err(rtd->dev, "Failed to set codec PLL: %d\n", ret);
+                       return ret;
+               }
+
+               ret = snd_soc_dai_set_sysclk(codec_dai, RT5682S_SCLK_S_PLL1,
+                                            49152000, SND_SOC_CLOCK_IN);
+               if (ret < 0) {
+                       dev_err(rtd->dev, "Failed to set codec SYSCLK: %d\n", ret);
+                       return ret;
+               }
+       }
+
        /* Set tdm/i2s1 master bclk ratio */
        ret = snd_soc_dai_set_bclk_ratio(codec_dai, ch * format);
        if (ret < 0) {