drm/bridge: cdns-dsi: Fix phy de-init and flag it so
commit fd2611c13f69cbbc6b81d9fc7502abf4f7031d21 upstream.
The driver code doesn't have a Phy de-initialization path as yet, and so
it does not clear the phy_initialized flag while suspending. This is a
problem because after resume the driver looks at this flag to determine
if a Phy re-initialization is required or not. It is in fact required
because the hardware is resuming from a suspend, but the driver does not
carry out any re-initialization causing the D-Phy to not work at all.
Call the counterparts of phy_init() and phy_power_on(), that are
phy_exit() and phy_power_off(), from _bridge_post_disable(), and clear
the flags so that the Phy can be initialized again when required.
Fixes: fced5a364d
("drm/bridge: cdns: Convert to phy framework")
Cc: stable@vger.kernel.org
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Aradhya Bhatia <a-bhatia1@ti.com>
Signed-off-by: Aradhya Bhatia <aradhya.bhatia@linux.dev>
Link: https://lore.kernel.org/r/20250329113925.68204-3-aradhya.bhatia@linux.dev
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2565ff3ac3
commit
f9b819c39d
@@ -681,6 +681,11 @@ static void cdns_dsi_bridge_post_disable(struct drm_bridge *bridge)
|
|||||||
struct cdns_dsi_input *input = bridge_to_cdns_dsi_input(bridge);
|
struct cdns_dsi_input *input = bridge_to_cdns_dsi_input(bridge);
|
||||||
struct cdns_dsi *dsi = input_to_dsi(input);
|
struct cdns_dsi *dsi = input_to_dsi(input);
|
||||||
|
|
||||||
|
dsi->phy_initialized = false;
|
||||||
|
dsi->link_initialized = false;
|
||||||
|
phy_power_off(dsi->dphy);
|
||||||
|
phy_exit(dsi->dphy);
|
||||||
|
|
||||||
pm_runtime_put(dsi->base.dev);
|
pm_runtime_put(dsi->base.dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1153,7 +1158,6 @@ static int __maybe_unused cdns_dsi_suspend(struct device *dev)
|
|||||||
clk_disable_unprepare(dsi->dsi_sys_clk);
|
clk_disable_unprepare(dsi->dsi_sys_clk);
|
||||||
clk_disable_unprepare(dsi->dsi_p_clk);
|
clk_disable_unprepare(dsi->dsi_p_clk);
|
||||||
reset_control_assert(dsi->dsi_p_rst);
|
reset_control_assert(dsi->dsi_p_rst);
|
||||||
dsi->link_initialized = false;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user