From 313564d9310ed00273f5dbcc9bb9700cdc0dbeee Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Fri, 29 Dec 2017 08:47:24 +0800 Subject: [PATCH] drm/rockchip: dsi: support non-continuous clock behavior This bit enables the automatic mechanism to stop providing clock in the clock lane when time allows. Change-Id: Ia3d85589f54adcf6206ee7ded32624b8e92936af Signed-off-by: Wyon Bi --- drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c index f726dd42c538..ead453330cd0 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c @@ -709,10 +709,12 @@ static void rockchip_set_transfer_mode(struct dw_mipi_dsi *dsi, int flags) { if (flags & MIPI_DSI_MSG_USE_LPM) { regmap_write(dsi->regmap, DSI_CMD_MODE_CFG, CMD_MODE_ALL_LP); - regmap_write(dsi->regmap, DSI_LPCLK_CTRL, 0); + regmap_update_bits(dsi->regmap, DSI_LPCLK_CTRL, + PHY_TXREQUESTCLKHS, 0); } else { regmap_write(dsi->regmap, DSI_CMD_MODE_CFG, 0); - regmap_write(dsi->regmap, DSI_LPCLK_CTRL, PHY_TXREQUESTCLKHS); + regmap_update_bits(dsi->regmap, DSI_LPCLK_CTRL, + PHY_TXREQUESTCLKHS, PHY_TXREQUESTCLKHS); } } @@ -863,6 +865,10 @@ static void dw_mipi_dsi_video_mode_config(struct dw_mipi_dsi *dsi) val |= VID_MODE_TYPE_BURST_SYNC_EVENTS; regmap_write(dsi->regmap, DSI_VID_MODE_CFG, val); + + if (dsi->mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS) + regmap_update_bits(dsi->regmap, DSI_LPCLK_CTRL, + AUTO_CLKLANE_CTRL, AUTO_CLKLANE_CTRL); } static void dw_mipi_dsi_set_mode(struct dw_mipi_dsi *dsi, @@ -872,7 +878,8 @@ static void dw_mipi_dsi_set_mode(struct dw_mipi_dsi *dsi, regmap_write(dsi->regmap, DSI_MODE_CFG, ENABLE_CMD_MODE); } else { regmap_write(dsi->regmap, DSI_PWR_UP, RESET); - regmap_write(dsi->regmap, DSI_LPCLK_CTRL, PHY_TXREQUESTCLKHS); + regmap_update_bits(dsi->regmap, DSI_LPCLK_CTRL, + PHY_TXREQUESTCLKHS, PHY_TXREQUESTCLKHS); regmap_write(dsi->regmap, DSI_MODE_CFG, ENABLE_VIDEO_MODE); regmap_write(dsi->regmap, DSI_PWR_UP, POWERUP); }