diff options
| author | bui duc phuc <phucduc.bui@gmail.com> | 2026-06-09 18:38:36 +0700 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2026-06-10 00:33:53 +0100 |
| commit | 26deeee42f4f1ab8da7e45808c3050438c577e53 (patch) | |
| tree | b598ee699441c054c811be3674463473033fe912 /sound | |
| parent | 05e1ebfeb7264e31a463c11deca66b7d55f7024f (diff) | |
| download | ath-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.c | 24 |
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; } |
