Skip to content

Commit 6ec6c36

Browse files
V Sujith Kumar Reddybroonie
authored andcommitted
ASoC: qcom: lpass-cpu: Fix clock disable failure
Disable MI2S bit clock from PAUSE/STOP/SUSPEND usecase instead of shutdown time. Acheive this by invoking clk_disable API from cpu daiops trigger instead of cpu daiops shutdown. Change non-atomic API "clk_prepare_enable" to atomic API "clk_enable" in trigger, as trigger is being called from atomic context. Fixes: 7e6799d ("ASoC: qcom: lpass-cpu: Enable MI2S BCLK and LRCLK together") Signed-off-by: V Sujith Kumar Reddy <vsujithk@codeaurora.org> Signed-off-by: Srinivasa Rao Mandadapu <srivasam@codeaurora.org> Link: https://lore.kernel.org/r/1603098363-9251-1-git-send-email-srivasam@codeaurora.org Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent cf9d219 commit 6ec6c36

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

sound/soc/qcom/lpass-cpu.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ static int lpass_cpu_daiops_startup(struct snd_pcm_substream *substream,
8080
dev_err(dai->dev, "error in enabling mi2s osr clk: %d\n", ret);
8181
return ret;
8282
}
83+
ret = clk_prepare(drvdata->mi2s_bit_clk[dai->driver->id]);
84+
if (ret) {
85+
dev_err(dai->dev, "error in enabling mi2s bit clk: %d\n", ret);
86+
clk_disable_unprepare(drvdata->mi2s_osr_clk[dai->driver->id]);
87+
return ret;
88+
}
8389
return 0;
8490
}
8591

@@ -88,9 +94,8 @@ static void lpass_cpu_daiops_shutdown(struct snd_pcm_substream *substream,
8894
{
8995
struct lpass_data *drvdata = snd_soc_dai_get_drvdata(dai);
9096

91-
clk_disable_unprepare(drvdata->mi2s_bit_clk[dai->driver->id]);
92-
9397
clk_disable_unprepare(drvdata->mi2s_osr_clk[dai->driver->id]);
98+
clk_unprepare(drvdata->mi2s_bit_clk[dai->driver->id]);
9499
}
95100

96101
static int lpass_cpu_daiops_hw_params(struct snd_pcm_substream *substream,
@@ -303,10 +308,10 @@ static int lpass_cpu_daiops_trigger(struct snd_pcm_substream *substream,
303308
dev_err(dai->dev, "error writing to i2sctl reg: %d\n",
304309
ret);
305310

306-
ret = clk_prepare_enable(drvdata->mi2s_bit_clk[id]);
311+
ret = clk_enable(drvdata->mi2s_bit_clk[id]);
307312
if (ret) {
308313
dev_err(dai->dev, "error in enabling mi2s bit clk: %d\n", ret);
309-
clk_disable_unprepare(drvdata->mi2s_osr_clk[id]);
314+
clk_disable(drvdata->mi2s_osr_clk[id]);
310315
return ret;
311316
}
312317

@@ -324,6 +329,7 @@ static int lpass_cpu_daiops_trigger(struct snd_pcm_substream *substream,
324329
if (ret)
325330
dev_err(dai->dev, "error writing to i2sctl reg: %d\n",
326331
ret);
332+
clk_disable(drvdata->mi2s_bit_clk[dai->driver->id]);
327333
break;
328334
}
329335

0 commit comments

Comments
 (0)