From 8dbb23a8f58eda049f73948cce51a532c6e898d2 Mon Sep 17 00:00:00 2001 From: Samantha Tran Date: Tue, 24 Aug 2021 13:07:06 -0700 Subject: [PATCH] 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 --- msm/dsi/dsi_drm.c | 6 ++++++ msm/sde/sde_connector.c | 9 ++++++++- msm/sde/sde_connector.h | 6 ++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/msm/dsi/dsi_drm.c b/msm/dsi/dsi_drm.c index c008947c57..1e21eadbae 100644 --- a/msm/dsi/dsi_drm.c +++ b/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", diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index 151f08d8ab..b76474f205 100644 --- a/msm/sde/sde_connector.c +++ b/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) diff --git a/msm/sde/sde_connector.h b/msm/sde/sde_connector.h index fd22ce399b..e35e5247b3 100644 --- a/msm/sde/sde_connector.h +++ b/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