Bladeren bron

disp: msm: reset connector panel_dead during dsi bridge post disable

This change resets panel_dead property at the end of dsi bridge post disable.
Currently as part of the ESD recvoery sequence, dsi_bridge_enable resets this
property, but WD vsync source is selected before this point based on the older
panel_dead status. With this change, panel_dead will be in a proper state and
the correct vsync source will be selected during recovery.

Change-Id: I6d614113cfb0ae8a857974bb4d4f8ceb5988a0c8
Signed-off-by: Samantha Tran <[email protected]>
Samantha Tran 3 jaren geleden
bovenliggende
commit
8dbb23a8f5
3 gewijzigde bestanden met toevoegingen van 20 en 1 verwijderingen
  1. 6 0
      msm/dsi/dsi_drm.c
  2. 8 1
      msm/sde/sde_connector.c
  3. 6 0
      msm/sde/sde_connector.h

+ 6 - 0
msm/dsi/dsi_drm.c

@@ -310,6 +310,7 @@ static void dsi_bridge_disable(struct drm_bridge *bridge)
 static void dsi_bridge_post_disable(struct drm_bridge *bridge)
 {
 	int rc = 0;
+	struct dsi_display *display;
 	struct dsi_bridge *c_bridge = to_dsi_bridge(bridge);
 
 	if (!bridge) {
@@ -317,6 +318,8 @@ static void dsi_bridge_post_disable(struct drm_bridge *bridge)
 		return;
 	}
 
+	display = c_bridge->display;
+
 	SDE_ATRACE_BEGIN("dsi_bridge_post_disable");
 	SDE_ATRACE_BEGIN("dsi_display_disable");
 	rc = dsi_display_disable(c_bridge->display);
@@ -328,6 +331,9 @@ static void dsi_bridge_post_disable(struct drm_bridge *bridge)
 	}
 	SDE_ATRACE_END("dsi_display_disable");
 
+	if (display && display->drm_conn)
+		sde_connector_helper_bridge_post_disable(display->drm_conn);
+
 	rc = dsi_display_unprepare(c_bridge->display);
 	if (rc) {
 		DSI_ERR("[%d] DSI display unprepare failed, rc=%d\n",

+ 8 - 1
msm/sde/sde_connector.c

@@ -1054,6 +1054,14 @@ void sde_connector_helper_bridge_disable(struct drm_connector *connector)
 	c_conn->allow_bl_update = false;
 }
 
+void sde_connector_helper_bridge_post_disable(struct drm_connector *connector)
+{
+	struct sde_connector *c_conn = NULL;
+	c_conn = to_sde_connector(connector);
+
+	c_conn->panel_dead = false;
+}
+
 void sde_connector_helper_bridge_enable(struct drm_connector *connector)
 {
 	struct sde_connector *c_conn = NULL;
@@ -1086,7 +1094,6 @@ void sde_connector_helper_bridge_enable(struct drm_connector *connector)
 		c_conn->bl_device->props.state &= ~BL_CORE_FBBLANK;
 		backlight_update_status(c_conn->bl_device);
 	}
-	c_conn->panel_dead = false;
 }
 
 int sde_connector_clk_ctrl(struct drm_connector *connector, bool enable)

+ 6 - 0
msm/sde/sde_connector.h

@@ -1160,6 +1160,12 @@ void sde_conn_timeline_status(struct drm_connector *conn);
  */
 void sde_connector_helper_bridge_disable(struct drm_connector *connector);
 
+/**
+ * sde_connector_helper_bridge_post_disable - helper function for drm bridge post disable
+ * @connector: Pointer to DRM connector object
+ */
+void sde_connector_helper_bridge_post_disable(struct drm_connector *connector);
+
 /**
  * sde_connector_destroy - destroy drm connector object
  * @connector: Pointer to DRM connector object