[PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Tue Dec 15 01:06:05 CET 2020
We need to care clock accessibility,
because we might can't use clock for some reasons.
It sets clk_rate for each clocks when enabled.
This means it doesn't have clk_rate if we can't use.
We can avoid to call clk_disable_unprepare() in such case.
Reported-by: Geert Uytterhoeven <geert at linux-m68k.org>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
---
Hi Geert.
Thank you for your reporting.
I have never seen this kind of error, but it possible to happen.
Unfortunately, I can't reproduce this but I hope this patch can solve it.
Could you please check this ?
I added [RFC] on this patch Subject.
sound/soc/sh/rcar/adg.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c
index b9aacf3d3b29..b870e834aa0a 100644
--- a/sound/soc/sh/rcar/adg.c
+++ b/sound/soc/sh/rcar/adg.c
@@ -366,25 +366,25 @@ void rsnd_adg_clk_control(struct rsnd_priv *priv, int enable)
struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
struct device *dev = rsnd_priv_to_dev(priv);
struct clk *clk;
- int i, ret;
+ int i;
for_each_rsnd_clk(clk, adg, i) {
- ret = 0;
if (enable) {
- ret = clk_prepare_enable(clk);
+ int ret = clk_prepare_enable(clk);
/*
* We shouldn't use clk_get_rate() under
* atomic context. Let's keep it when
* rsnd_adg_clk_enable() was called
*/
- adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
+ if (ret < 0)
+ dev_warn(dev, "can't use clk %d\n", i);
+ else
+ adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
} else {
- clk_disable_unprepare(clk);
+ if (adg->clk_rate[i])
+ clk_disable_unprepare(clk);
}
-
- if (ret < 0)
- dev_warn(dev, "can't use clk %d\n", i);
}
}
--
2.25.1
More information about the Alsa-devel
mailing list