Skip to content

Commit 83ae132

Browse files
xubilvrkhuangtao
authored andcommitted
drm/rockchip: dw-mipi-dsi: organize dw_mipi_dsi_encoder_disable function
Change-Id: I4c5ba54748bd1965a9f2cdea924efa6d449677a1 Signed-off-by: xubilv <xbl@rock-chips.com>
1 parent 5e338ed commit 83ae132

1 file changed

Lines changed: 27 additions & 21 deletions

File tree

drivers/gpu/drm/rockchip/dw-mipi-dsi.c

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -719,12 +719,6 @@ static void dw_mipi_dsi_set_mode(struct dw_mipi_dsi *dsi,
719719
}
720720
}
721721

722-
static void dw_mipi_dsi_disable(struct dw_mipi_dsi *dsi)
723-
{
724-
dsi_write(dsi, DSI_PWR_UP, RESET);
725-
dsi_write(dsi, DSI_PHY_RSTZ, PHY_RSTZ);
726-
}
727-
728722
static void dw_mipi_dsi_init(struct dw_mipi_dsi *dsi)
729723
{
730724
dsi_write(dsi, DSI_PWR_UP, RESET);
@@ -868,34 +862,46 @@ static void dw_mipi_dsi_encoder_mode_set(struct drm_encoder *encoder,
868862
drm_mode_copy(&dsi->mode, adjusted_mode);
869863
}
870864

871-
static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder)
865+
static void rockchip_dsi_pre_disable(struct dw_mipi_dsi *dsi)
872866
{
873-
struct dw_mipi_dsi *dsi = encoder_to_dsi(encoder);
874-
875-
drm_panel_disable(dsi->panel);
876-
877867
if (clk_prepare_enable(dsi->pclk)) {
878868
dev_err(dsi->dev, "%s: Failed to enable pclk\n", __func__);
879869
return;
880870
}
881871

882872
dw_mipi_dsi_set_mode(dsi, DW_MIPI_DSI_CMD_MODE);
883-
drm_panel_unprepare(dsi->panel);
884-
dw_mipi_dsi_set_mode(dsi, DW_MIPI_DSI_VID_MODE);
873+
}
885874

886-
/*
887-
* This is necessary to make sure the peripheral will be driven
888-
* normally when the display is enabled again later.
889-
*/
890-
msleep(120);
875+
static void rockchip_dsi_disable(struct dw_mipi_dsi *dsi)
876+
{
877+
/* host */
878+
dsi_write(dsi, DSI_LPCLK_CTRL, 0);
879+
dsi_write(dsi, DSI_PWR_UP, RESET);
880+
881+
/* phy */
882+
dsi_write(dsi, DSI_PHY_RSTZ, PHY_RSTZ);
883+
if (dsi->phy)
884+
phy_power_off(dsi->phy);
891885

892-
dw_mipi_dsi_set_mode(dsi, DW_MIPI_DSI_CMD_MODE);
893-
dw_mipi_dsi_disable(dsi);
894-
phy_power_off(dsi->phy);
895886
pm_runtime_put(dsi->dev);
896887
clk_disable_unprepare(dsi->pclk);
897888
}
898889

890+
static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder)
891+
{
892+
struct dw_mipi_dsi *dsi = encoder_to_dsi(encoder);
893+
894+
if (dsi->panel)
895+
drm_panel_disable(dsi->panel);
896+
897+
rockchip_dsi_pre_disable(dsi);
898+
899+
if (dsi->panel)
900+
drm_panel_unprepare(dsi->panel);
901+
902+
rockchip_dsi_disable(dsi);
903+
}
904+
899905
static bool dw_mipi_dsi_encoder_mode_fixup(struct drm_encoder *encoder,
900906
const struct drm_display_mode *mode,
901907
struct drm_display_mode *adjusted_mode)

0 commit comments

Comments
 (0)