diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index 6fc1b4e56031..b2c471d4d798 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -4829,6 +4829,7 @@ int dsi_panel_enable(struct dsi_panel *panel) { int rc = 0; u8 pwr_mode; + static int panel_recovery_retry; if (!panel) { DSI_ERR("Invalid params\n"); @@ -4856,9 +4857,19 @@ 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); + + if (panel_recovery_retry++ > 5) { + DSI_ERR("%s: panel recovery failed for all retries", + __func__); + + BUG(); + } + dsi_panel_trigger_panel_dead_event(panel); - } else + } else { DSI_INFO("-. Pwr_mode(0x0A) = 0x%x\n", pwr_mode); + panel_recovery_retry = 0; + } } else DSI_INFO("-: no_panel_on_read_support is set\n");