aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
authorbui duc phuc <phucduc.bui@gmail.com>2026-06-09 18:38:36 +0700
committerMark Brown <broonie@kernel.org>2026-06-10 00:33:53 +0100
commit26deeee42f4f1ab8da7e45808c3050438c577e53 (patch)
treeb598ee699441c054c811be3674463473033fe912 /sound
parent05e1ebfeb7264e31a463c11deca66b7d55f7024f (diff)
downloadath-26deeee42f4f1ab8da7e45808c3050438c577e53.tar.gz
ASoC: renesas: fsi: Add SPU clock control in hw_startup/shutdown
Enable and disable the SPU clock in fsi_hw_startup() and fsi_hw_shutdown() to ensure the clock is active while the driver accesses hardware registers. Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Suggested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: bui duc phuc <phucduc.bui@gmail.com> Link: https://patch.msgid.link/20260609113836.45079-12-phucduc.bui@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/renesas/fsi.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/sound/soc/renesas/fsi.c b/sound/soc/renesas/fsi.c
index e26f39dfe0598..b72396b5de7dc 100644
--- a/sound/soc/renesas/fsi.c
+++ b/sound/soc/renesas/fsi.c
@@ -1560,6 +1560,11 @@ static int fsi_hw_startup(struct fsi_priv *fsi,
struct device *dev)
{
u32 data = 0;
+ int ret;
+ /* enable spu bus bridge clock */
+ ret = clk_enable(fsi->master->clk_spu);
+ if (ret)
+ return ret;
/* clock setting */
if (fsi_is_clk_master(fsi))
@@ -1605,8 +1610,13 @@ static int fsi_hw_startup(struct fsi_priv *fsi,
fsi_fifo_init(fsi, io, dev);
/* start master clock */
- if (fsi_is_clk_master(fsi))
- return fsi_clk_enable(dev, fsi);
+ if (fsi_is_clk_master(fsi)) {
+ ret = fsi_clk_enable(dev, fsi);
+ if (ret) {
+ clk_disable(fsi->master->clk_spu);
+ return ret;
+ }
+ }
return 0;
}
@@ -1614,9 +1624,15 @@ static int fsi_hw_startup(struct fsi_priv *fsi,
static int fsi_hw_shutdown(struct fsi_priv *fsi,
struct device *dev)
{
+ int ret;
/* stop master clock */
- if (fsi_is_clk_master(fsi))
- return fsi_clk_disable(dev, fsi);
+ if (fsi_is_clk_master(fsi)) {
+ ret = fsi_clk_disable(dev, fsi);
+ if (ret)
+ return ret;
+ }
+ /* stop spu bus bridge clock */
+ clk_disable(fsi->master->clk_spu);
return 0;
}