diff options
| author | Li Youhong <liyouhong@kylinos.cn> | 2026-08-31 17:45:53 +0800 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2026-09-09 14:26:16 +0100 |
| commit | c595dcbce20f55c98cd9b0003c26db3787e0ddee (patch) | |
| tree | 40c4c4d3168d39a149dcb1e04cce24b457fee1a7 | |
| parent | b34afbedb11c417598eeab9e326d8010bdcc423c (diff) | |
| download | linux-next-c595dcbce20f55c98cd9b0003c26db3787e0ddee.tar.gz linux-next-c595dcbce20f55c98cd9b0003c26db3787e0ddee.zip | |
spi: amlogic-spisg: check clk_prepare_enable() return value
The driver ignored clk_prepare_enable() failures for sclk during
probe and for core/sclk during runtime resume. Propagate the errors
and, on resume, disable core if enabling sclk fails, so probe/resume
do not continue with clocks disabled or report success falsely.
Fixes: cef9991e04ae ("spi: Add Amlogic SPISG driver")
Signed-off-by: Li Youhong <liyouhong@kylinos.cn>
Link: https://patch.msgid.link/20260831094553.2247003-1-dayou5941@163.com
Signed-off-by: Mark Brown <broonie@kernel.org>
| -rw-r--r-- | drivers/spi/spi-amlogic-spisg.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/spi/spi-amlogic-spisg.c b/drivers/spi/spi-amlogic-spisg.c index 5ace2c927da0..1b00f34e9e93 100644 --- a/drivers/spi/spi-amlogic-spisg.c +++ b/drivers/spi/spi-amlogic-spisg.c @@ -754,7 +754,9 @@ static int aml_spisg_clk_init(struct spisg_device *spisg, void __iomem *base) return PTR_ERR(spisg->sclk); } - clk_prepare_enable(spisg->sclk); + ret = clk_prepare_enable(spisg->sclk); + if (ret) + return ret; return 0; } @@ -901,9 +903,18 @@ static int spisg_suspend_runtime(struct device *dev) static int spisg_resume_runtime(struct device *dev) { struct spisg_device *spisg = dev_get_drvdata(dev); + int ret; + + ret = clk_prepare_enable(spisg->core); + if (ret) + return ret; + + ret = clk_prepare_enable(spisg->sclk); + if (ret) { + clk_disable_unprepare(spisg->core); + return ret; + } - clk_prepare_enable(spisg->core); - clk_prepare_enable(spisg->sclk); pinctrl_pm_select_default_state(&spisg->pdev->dev); return 0; |
