Browse Source

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 <[email protected]>
Signed-off-by: Yuan Zhao <[email protected]>
Yuan Zhao 6 years ago
parent
commit
f2873cd69f
3 changed files with 16 additions and 2 deletions
  1. 14 2
      msm/dsi/dsi_display.c
  2. 1 0
      msm/dsi/dsi_panel.c
  3. 1 0
      msm/dsi/dsi_panel.h

+ 14 - 2
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;
 }
 

+ 1 - 0
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;

+ 1 - 0
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)