diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 5434bf8337..daa0c20a9a 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -801,7 +801,7 @@ int dsi_display_check_status(struct drm_connector *connector, void *display, struct dsi_display *dsi_display = display; struct dsi_panel *panel; u32 status_mode; - int rc = 0x1; + int rc = 0x1, ret; u32 mask; if (!dsi_display || !dsi_display->panel) @@ -839,8 +839,10 @@ int dsi_display_check_status(struct drm_connector *connector, void *display, goto exit; } - dsi_display_clk_ctrl(dsi_display->dsi_clk_handle, + ret = dsi_display_clk_ctrl(dsi_display->dsi_clk_handle, DSI_ALL_CLKS, DSI_CLK_ON); + if (ret) + goto release_panel_lock; /* Mask error interrupts before attempting ESD read */ mask = BIT(DSI_FIFO_OVERFLOW) | BIT(DSI_FIFO_UNDERFLOW); diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index 92e63651ed..240381582e 100644 --- a/msm/sde/sde_connector.c +++ b/msm/sde/sde_connector.c @@ -2167,6 +2167,7 @@ static void sde_connector_check_status_work(struct work_struct *work) { struct sde_connector *conn; int rc = 0; + struct device *dev; conn = container_of(to_delayed_work(work), struct sde_connector, status_work); @@ -2176,7 +2177,9 @@ static void sde_connector_check_status_work(struct work_struct *work) } mutex_lock(&conn->lock); - if (!conn->ops.check_status || + dev = conn->base.dev->dev; + + if (!conn->ops.check_status || dev->power.is_suspended || (conn->dpms_mode != DRM_MODE_DPMS_ON)) { SDE_DEBUG("dpms mode: %d\n", conn->dpms_mode); mutex_unlock(&conn->lock);