From f2873cd69f5a6ecb8957ae31581711976a5c2ffc Mon Sep 17 00:00:00 2001 From: Yuan Zhao Date: Wed, 15 May 2019 16:36:24 +0800 Subject: [PATCH] disp: msm: only set nolp command when panel in LP1/LP2 mode DSI driver sends nolp commands when DSI connector power modes is set SDE_MODE_DPMS_ON or SDE_MODE_DPMS_OFF. This is invalid panel configuration. It should only send nolp commmand to panel when it is in LP1/LP2 mode. Change-Id: Ie94eaef6899d292fd20f42c1b7ef2c7a99178d13 Signed-off-by: Wenjun Zhang Signed-off-by: Yuan Zhao --- msm/dsi/dsi_display.c | 16 ++++++++++++++-- msm/dsi/dsi_panel.c | 1 + msm/dsi/dsi_panel.h | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 97826d3f1f..8f7b97042d 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -1060,10 +1060,22 @@ int dsi_display_set_power(struct drm_connector *connector, case SDE_MODE_DPMS_LP2: rc = dsi_panel_set_lp2(display->panel); break; - default: - rc = dsi_panel_set_nolp(display->panel); + case SDE_MODE_DPMS_ON: + if ((display->panel->power_mode == SDE_MODE_DPMS_LP1) || + (display->panel->power_mode == SDE_MODE_DPMS_LP2)) + rc = dsi_panel_set_nolp(display->panel); break; + case SDE_MODE_DPMS_OFF: + default: + return rc; } + + DSI_DEBUG("Power mode transition from %d to %d %s", + display->panel->power_mode, power_mode, + rc ? "failed" : "successful"); + if (!rc) + display->panel->power_mode = power_mode; + return rc; } diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index f2e3c72392..b19894f5bc 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -3306,6 +3306,7 @@ struct dsi_panel *dsi_panel_get(struct device *parent, if (rc) DSI_DEBUG("failed to parse esd config, rc=%d\n", rc); + panel->power_mode = SDE_MODE_DPMS_OFF; drm_panel_init(&panel->drm_panel); panel->drm_panel.dev = &panel->mipi_device.dev; panel->mipi_device.dev.of_node = of_node; diff --git a/msm/dsi/dsi_panel.h b/msm/dsi/dsi_panel.h index 40052b896d..2c1d62ece4 100644 --- a/msm/dsi/dsi_panel.h +++ b/msm/dsi/dsi_panel.h @@ -198,6 +198,7 @@ struct dsi_panel { bool sync_broadcast_en; int panel_test_gpio; + int power_mode; }; static inline bool dsi_panel_ulps_feature_enabled(struct dsi_panel *panel)