[RFC PATCH] drm/bridge: cdns-dsi: Propagate resume reset and clock failures
From: Pengpeng Hou
Date: Wed Jun 24 2026 - 02:02:25 EST
cdns_dsi_resume() ignores reset_control_deassert() and
clk_prepare_enable() failures for resources that probe treats as
required. The host can then appear resumed even though the DSI reset or
clock transitions failed.
Propagate resume failures and unwind transitions that already succeeded.
Signed-off-by: Pengpeng Hou <pengpeng@xxxxxxxxxxx>
---
.../gpu/drm/bridge/cadence/cdns-dsi-core.c | 21 ++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c
index 0dd85e26248c..0cbb8528350c 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c
@@ -1233,12 +1233,27 @@ static const struct mipi_dsi_host_ops cdns_dsi_ops = {
static int __maybe_unused cdns_dsi_resume(struct device *dev)
{
struct cdns_dsi *dsi = dev_get_drvdata(dev);
+ int ret;
+
+ ret = reset_control_deassert(dsi->dsi_p_rst);
+ if (ret)
+ return ret;
+
+ ret = clk_prepare_enable(dsi->dsi_p_clk);
+ if (ret)
+ goto err_assert_reset;
- reset_control_deassert(dsi->dsi_p_rst);
- clk_prepare_enable(dsi->dsi_p_clk);
- clk_prepare_enable(dsi->dsi_sys_clk);
+ ret = clk_prepare_enable(dsi->dsi_sys_clk);
+ if (ret)
+ goto err_disable_p_clk;
return 0;
+
+err_disable_p_clk:
+ clk_disable_unprepare(dsi->dsi_p_clk);
+err_assert_reset:
+ reset_control_assert(dsi->dsi_p_rst);
+ return ret;
}
static int __maybe_unused cdns_dsi_suspend(struct device *dev)
--
2.50.1 (Apple Git-155)