From d48dad2dbadc52056f0bfea42f552e272f2525fa Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Thu, 2 May 2024 12:03:58 +0100 Subject: [PATCH] drm/vc4: dsi: Don't reset the host until post_disable Some DSI peripheral drivers wish to send commands in the post_disable or panel unprepare callback. These are called after the DSI host's disable call, but before the host's post_disable if pre_enable_prev_first is set. Don't reset the block until post_disable to allow these commands to be sent. Signed-off-by: Dave Stevenson --- drivers/gpu/drm/vc4/vc4_dsi.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) --- a/drivers/gpu/drm/vc4/vc4_dsi.c +++ b/drivers/gpu/drm/vc4/vc4_dsi.c @@ -823,6 +823,13 @@ static void vc4_dsi_bridge_disable(struc disp0_ctrl = DSI_PORT_READ(DISP0_CTRL); disp0_ctrl &= ~DSI_DISP0_ENABLE; DSI_PORT_WRITE(DISP0_CTRL, disp0_ctrl); +} + +static void vc4_dsi_bridge_post_disable(struct drm_bridge *bridge, + struct drm_bridge_state *state) +{ + struct vc4_dsi *dsi = bridge_to_vc4_dsi(bridge); + struct device *dev = &dsi->pdev->dev; /* Reset the DSI and all its fifos. */ DSI_PORT_WRITE(CTRL, DSI_CTRL_SOFT_RESET_CFG | @@ -833,14 +840,6 @@ static void vc4_dsi_bridge_disable(struc DSI_PORT_BIT(PHY_AFEC0_PD) | DSI_PORT_BIT(AFEC0_PD_ALL_LANES)); -} - -static void vc4_dsi_bridge_post_disable(struct drm_bridge *bridge, - struct drm_bridge_state *state) -{ - struct vc4_dsi *dsi = bridge_to_vc4_dsi(bridge); - struct device *dev = &dsi->pdev->dev; - clk_disable_unprepare(dsi->pll_phy_clock); clk_disable_unprepare(dsi->escape_clock); clk_disable_unprepare(dsi->pixel_clock);