From fc4eaf19ee49beb2641da707673707256c513b03 Mon Sep 17 00:00:00 2001 From: Bang Nguyen Date: Wed, 31 Jul 2019 08:11:13 -0500 Subject: [PATCH] disp: msm: dsi: Trigger ESD event if display isn't on Check display turns on during the display resume. If it doesn't, then trigger the ESD to restart the panel, instead waiting until the ESD thread starts, detects, and perform ESD recovery. Port from: 17e936d Change-Id: I040b35c7ff27d35db15eedcbf94df80e6185da19 Signed-off-by: Bang Nguyen Reviewed-on: https://gerrit.mot.com/1697288 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Shuo Yan Reviewed-by: Guobin Zhang Submit-Approved: Jira Key --- msm/dsi/dsi_panel.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index 15ebe5f90559..6fc1b4e56031 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -18,6 +18,8 @@ #include "sde_dbg.h" #include "sde_dsc_helper.h" #include "sde_vdc_helper.h" +#include "dsi_display.h" + /** * topology is currently defined by a set of following 3 values: @@ -3606,6 +3608,22 @@ end: } +static int dsi_panel_trigger_panel_dead_event(struct dsi_panel *panel) +{ + bool panel_dead; + struct drm_event event; + struct dsi_display *dsi_display = container_of(panel->host, struct dsi_display, host); + struct drm_connector *drm_conn = dsi_display->drm_conn; + + panel_dead = true; + event.type = DRM_EVENT_PANEL_DEAD; + event.length = sizeof(u32); + msm_mode_object_event_notify(&drm_conn->base, + drm_conn->dev, &event, (u8 *)&panel_dead); + + return 0; +} + struct dsi_panel *dsi_panel_get(struct device *parent, struct device_node *of_node, struct device_node *parser_node, @@ -4838,6 +4856,7 @@ int dsi_panel_enable(struct dsi_panel *panel) if (pwr_mode != panel->disp_on_chk_val) { DSI_ERR("%s: Read Pwr_mode=0%x is not matched with expected value =0x%x\n", __func__, pwr_mode, panel->disp_on_chk_val); + dsi_panel_trigger_panel_dead_event(panel); } else DSI_INFO("-. Pwr_mode(0x0A) = 0x%x\n", pwr_mode); } else