From f48af4ff1f4b67c172833c68ccf1bba12075d89c Mon Sep 17 00:00:00 2001 From: Xiaoyu Ye Date: Fri, 1 Sep 2017 14:57:51 -0700 Subject: [PATCH] ASoC: sdm845: add support to update TDM CLK frequency at runtime TDM CLK frequency needs to be updated at runtime to use the correct CLK setup. Change-Id: Ib42fedca3cbf41b85ca121ca04cc994bf8ad4d39 Signed-off-by: Xiaoyu Ye --- asoc/sdm845.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/asoc/sdm845.c b/asoc/sdm845.c index a3654d8ecdb2..2d26aac09a4a 100644 --- a/asoc/sdm845.c +++ b/asoc/sdm845.c @@ -4492,7 +4492,7 @@ static int sdm845_tdm_snd_hw_params(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai = rtd->cpu_dai; int ret = 0; int channels, slot_width, slots; - unsigned int slot_mask; + unsigned int slot_mask, rate, clk_freq; unsigned int slot_offset[8] = {0, 4, 8, 12, 16, 20, 24, 28}; pr_debug("%s: dai id = 0x%x\n", __func__, cpu_dai->id); @@ -4524,8 +4524,16 @@ static int sdm845_tdm_snd_hw_params(struct snd_pcm_substream *substream, } else { pr_err("%s: invalid use case, err:%d\n", __func__, ret); + goto end; } + rate = params_rate(params); + clk_freq = rate * slot_width * slots; + ret = snd_soc_dai_set_sysclk(cpu_dai, 0, clk_freq, SND_SOC_CLOCK_OUT); + if (ret < 0) + pr_err("%s: failed to set tdm clk, err:%d\n", + __func__, ret); + end: return ret; }