Selaa lähdekoodia

disp: msm: dsi: move backlight operations to post kickoff

This change moves the backlight update operation from
drm bridge enable to connector post kickoff.

When timing engine is enabled with programmable fetch
enabled, the timing engine will start counting from
the prog_fetch_start point (which is somewhere in VFP).
It’s a grey area from that point to the actual panel
vsync and SW should not trigger DMA command during that
time.

During display resume, sometimes the INTF timing engine
do not get enabled completely at the first vblank irq.
The backlight update cmd transfer trigger as part of the
drm bridge enable can also take place at the same time,
that may cause DSI cmd transfer failure.

Change-Id: I2722d3c23012ef0e7bcc7f728ec5658318ce4e60
Signed-off-by: Rajeev Nandan <[email protected]>
Rajeev Nandan 4 vuotta sitten
vanhempi
sitoutus
e60959b052
3 muutettua tiedostoa jossa 20 lisäystä ja 1 poistoa
  1. 3 0
      msm/dsi/dsi_drm.c
  2. 11 1
      msm/sde/sde_connector.c
  3. 6 0
      msm/sde/sde_connector.h

+ 3 - 0
msm/dsi/dsi_drm.c

@@ -1094,6 +1094,9 @@ int dsi_conn_post_kickoff(struct drm_connector *connector,
 			dsi_ctrl_setup_avr(display->ctrl[i].ctrl, enable);
 	}
 
+	if (display->drm_conn)
+		sde_connector_helper_post_kickoff(display->drm_conn);
+
 	return 0;
 }
 

+ 11 - 1
msm/sde/sde_connector.c

@@ -945,6 +945,17 @@ void sde_connector_helper_bridge_disable(struct drm_connector *connector)
 }
 
 void sde_connector_helper_bridge_enable(struct drm_connector *connector)
+{
+	struct sde_connector *c_conn = NULL;
+
+	if (!connector)
+		return;
+
+	c_conn = to_sde_connector(connector);
+	c_conn->panel_dead = false;
+}
+
+void sde_connector_helper_post_kickoff(struct drm_connector *connector)
 {
 	struct sde_connector *c_conn = NULL;
 	struct dsi_display *display;
@@ -976,7 +987,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)

+ 6 - 0
msm/sde/sde_connector.h

@@ -1086,4 +1086,10 @@ int sde_connector_get_panel_vfp(struct drm_connector *connector,
  */
 int sde_connector_esd_status(struct drm_connector *connector);
 
+/**
+ * sde_connector_helper_post_kickoff - helper function for drm connector post kickoff
+ * @connector: Pointer to DRM connector object
+ */
+void sde_connector_helper_post_kickoff(struct drm_connector *connector);
+
 #endif /* _SDE_CONNECTOR_H_ */