From a1e099fb78b4e90a330647917fa6076fb6f6607a Mon Sep 17 00:00:00 2001 From: Guochun Huang Date: Wed, 8 Sep 2021 17:49:43 +0800 Subject: [PATCH] drm/bridge: dw-mipi-dsi: dual-channel-dsi: power off dual phy during sleep Change-Id: Ic3abc81d7a6ffb8016d884ea29b3cb48e983f5f8 Signed-off-by: Guochun Huang --- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c index 5e7e2fb73598..094601f09b89 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c @@ -594,8 +594,14 @@ static void dw_mipi_dsi_set_mode(struct dw_mipi_dsi *dsi, static void dw_mipi_dsi_disable(struct dw_mipi_dsi *dsi) { + const struct dw_mipi_dsi_phy_ops *phy_ops = dsi->plat_data->phy_ops; + + if (phy_ops->power_off) + phy_ops->power_off(dsi->plat_data->priv_data); + dsi_write(dsi, DSI_PWR_UP, RESET); dsi_write(dsi, DSI_PHY_RSTZ, PHY_RSTZ); + pm_runtime_put(dsi->dev); } static void dw_mipi_dsi_init(struct dw_mipi_dsi *dsi) @@ -852,7 +858,6 @@ static void dw_mipi_dsi_clear_err(struct dw_mipi_dsi *dsi) static void dw_mipi_dsi_bridge_post_disable(struct drm_bridge *bridge) { struct dw_mipi_dsi *dsi = bridge_to_dsi(bridge); - const struct dw_mipi_dsi_phy_ops *phy_ops = dsi->plat_data->phy_ops; /* * Switch to command mode before panel-bridge post_disable & @@ -861,6 +866,8 @@ static void dw_mipi_dsi_bridge_post_disable(struct drm_bridge *bridge) * before by the drm framework. */ dw_mipi_dsi_set_mode(dsi, 0); + if (dsi->slave) + dw_mipi_dsi_set_mode(dsi->slave, 0); /* * TODO Only way found to call panel-bridge post_disable & @@ -871,16 +878,10 @@ static void dw_mipi_dsi_bridge_post_disable(struct drm_bridge *bridge) if (dsi->panel_bridge->funcs->post_disable) dsi->panel_bridge->funcs->post_disable(dsi->panel_bridge); - if (phy_ops->power_off) - phy_ops->power_off(dsi->plat_data->priv_data); - - if (dsi->slave) { + if (dsi->slave) dw_mipi_dsi_disable(dsi->slave); - pm_runtime_put(dsi->slave->dev); - } - dw_mipi_dsi_disable(dsi); - pm_runtime_put(dsi->dev); + dw_mipi_dsi_disable(dsi); } static unsigned int dw_mipi_dsi_get_lanes(struct dw_mipi_dsi *dsi)