summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCan Peng <pengcan@kylinos.cn>2026-07-22 16:49:09 +0800
committerDaniel Lezcano <daniel.lezcano@kernel.org>2026-07-27 16:38:43 +0200
commitbcc6d886e5006a4656901d2d7fb6a215c96068a0 (patch)
tree9660a8d05cb69ffcad998a1bc5b6baf9e969f326
parent0c569e22020f53ddfac0099b0aa193907bfbcd6f (diff)
downloadlinux-stable-bcc6d886e5006a4656901d2d7fb6a215c96068a0.tar.gz
linux-stable-bcc6d886e5006a4656901d2d7fb6a215c96068a0.zip
thermal/drivers/imx: Disable clock on runtime resume failure
imx_thermal_runtime_resume() enables the thermal clock before powering up the sensor and enabling measurements. If either regmap_write() fails, the function returns with the clock still enabled. This leaves the clock enable count unbalanced after a failed runtime resume. Disable the clock on those failure paths before returning the error. Fixes: 4cf2ddf16e17 ("thermal/drivers/imx: Implement runtime PM support") Cc: stable@vger.kernel.org Signed-off-by: Can Peng <pengcan@kylinos.cn> Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260722084909.463437-1-pengcan@kylinos.cn
-rw-r--r--drivers/thermal/imx_thermal.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
index 5aaacbc53478..b0e88b6a9352 100644
--- a/drivers/thermal/imx_thermal.c
+++ b/drivers/thermal/imx_thermal.c
@@ -832,12 +832,12 @@ static int imx_thermal_runtime_resume(struct device *dev)
ret = regmap_write(map, socdata->sensor_ctrl + REG_CLR,
socdata->power_down_mask);
if (ret)
- return ret;
+ goto disable_clk;
ret = regmap_write(map, socdata->sensor_ctrl + REG_SET,
socdata->measure_temp_mask);
if (ret)
- return ret;
+ goto disable_clk;
/*
* According to the temp sensor designers, it may require up to ~17us
@@ -846,6 +846,11 @@ static int imx_thermal_runtime_resume(struct device *dev)
usleep_range(20, 50);
return 0;
+
+disable_clk:
+ clk_disable_unprepare(data->thermal_clk);
+
+ return ret;
}
static const struct dev_pm_ops imx_thermal_pm_ops = {