From ef34d0100e0f2f137ad0e6af333aad4e0d5c3319 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Thu, 2 May 2024 12:03:58 +0100 Subject: [PATCH 1271/1350] 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 @@ -818,6 +818,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 | @@ -828,14 +835,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);