drm/rockchip: dw-mipi-dsi: only request HS clock when required
authorJohn Keeping <john@metanate.com>
Fri, 24 Feb 2017 12:54:52 +0000 (12:54 +0000)
committerSean Paul <seanpaul@chromium.org>
Wed, 1 Mar 2017 19:48:52 +0000 (14:48 -0500)
Requesting the HS clock from the PHY before we initialize it causes an
invalid signal to be sent out since the input clock is not yet
configured.  The PHY databook suggests only asserting this signal when
performing HS transfers, so let's do that.

Signed-off-by: John Keeping <john@metanate.com>
Reviewed-by: Chris Zhong <zyw@rock-chips.com>
Reviewed-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20170224125506.21533-10-john@metanate.com
drivers/gpu/drm/rockchip/dw-mipi-dsi.c

index a20d669b73ee4cb43c60b76c48d019b7713ea12b..1b6fce2600f38b3b69da2cdbbae3ece08ad5cee8 100644 (file)
@@ -545,13 +545,15 @@ static int dw_mipi_dsi_host_detach(struct mipi_dsi_host *host,
 static void dw_mipi_message_config(struct dw_mipi_dsi *dsi,
                                   const struct mipi_dsi_msg *msg)
 {
+       bool lpm = msg->flags & MIPI_DSI_MSG_USE_LPM;
        u32 val = 0;
 
        if (msg->flags & MIPI_DSI_MSG_REQ_ACK)
                val |= EN_ACK_RQST;
-       if (msg->flags & MIPI_DSI_MSG_USE_LPM)
+       if (lpm)
                val |= CMD_MODE_ALL_LP;
 
+       dsi_write(dsi, DSI_LPCLK_CTRL, lpm ? 0 : PHY_TXREQUESTCLKHS);
        dsi_write(dsi, DSI_CMD_MODE_CFG, val);
 }
 
@@ -695,6 +697,7 @@ static void dw_mipi_dsi_set_mode(struct dw_mipi_dsi *dsi,
                dsi_write(dsi, DSI_PWR_UP, RESET);
                dsi_write(dsi, DSI_MODE_CFG, ENABLE_VIDEO_MODE);
                dw_mipi_dsi_video_mode_config(dsi);
+               dsi_write(dsi, DSI_LPCLK_CTRL, PHY_TXREQUESTCLKHS);
                dsi_write(dsi, DSI_PWR_UP, POWERUP);
        }
 }
@@ -712,7 +715,6 @@ static void dw_mipi_dsi_init(struct dw_mipi_dsi *dsi)
                  | PHY_RSTZ | PHY_SHUTDOWNZ);
        dsi_write(dsi, DSI_CLKMGR_CFG, TO_CLK_DIVIDSION(10) |
                  TX_ESC_CLK_DIVIDSION(7));
-       dsi_write(dsi, DSI_LPCLK_CTRL, PHY_TXREQUESTCLKHS);
 }
 
 static void dw_mipi_dsi_dpi_config(struct dw_mipi_dsi *dsi,