Przeglądaj źródła

drm/i915: Send DPI command explicitely in LP mode

Though HS mode also should work.

v2: Change parameter as "bool hs" as suggested by Jani

Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Shobhit Kumar 11 lat temu
rodzic
commit
e1047028e2

+ 3 - 2
drivers/gpu/drm/i915/intel_dsi.c

@@ -147,7 +147,7 @@ static void intel_dsi_enable(struct intel_encoder *encoder)
 		I915_WRITE(MIPI_MAX_RETURN_PKT_SIZE(pipe), 8 * 4);
 		I915_WRITE(MIPI_MAX_RETURN_PKT_SIZE(pipe), 8 * 4);
 	else {
 	else {
 		msleep(20); /* XXX */
 		msleep(20); /* XXX */
-		dpi_send_cmd(intel_dsi, TURN_ON);
+		dpi_send_cmd(intel_dsi, TURN_ON, DPI_LP_MODE_EN);
 		msleep(100);
 		msleep(100);
 
 
 		if (intel_dsi->dev.dev_ops->enable)
 		if (intel_dsi->dev.dev_ops->enable)
@@ -218,7 +218,8 @@ static void intel_dsi_disable(struct intel_encoder *encoder)
 	DRM_DEBUG_KMS("\n");
 	DRM_DEBUG_KMS("\n");
 
 
 	if (is_vid_mode(intel_dsi)) {
 	if (is_vid_mode(intel_dsi)) {
-		dpi_send_cmd(intel_dsi, SHUTDOWN);
+		/* Send Shutdown command to the panel in LP mode */
+		dpi_send_cmd(intel_dsi, SHUTDOWN, DPI_LP_MODE_EN);
 		msleep(10);
 		msleep(10);
 
 
 		/* de-assert ip_tg_enable signal */
 		/* de-assert ip_tg_enable signal */

+ 2 - 2
drivers/gpu/drm/i915/intel_dsi_cmd.c

@@ -389,7 +389,7 @@ int dsi_vc_generic_read(struct intel_dsi *intel_dsi, int channel,
  *
  *
  * XXX: commands with data in MIPI_DPI_DATA?
  * XXX: commands with data in MIPI_DPI_DATA?
  */
  */
-int dpi_send_cmd(struct intel_dsi *intel_dsi, u32 cmd)
+int dpi_send_cmd(struct intel_dsi *intel_dsi, u32 cmd, bool hs)
 {
 {
 	struct drm_encoder *encoder = &intel_dsi->base.base;
 	struct drm_encoder *encoder = &intel_dsi->base.base;
 	struct drm_device *dev = encoder->dev;
 	struct drm_device *dev = encoder->dev;
@@ -399,7 +399,7 @@ int dpi_send_cmd(struct intel_dsi *intel_dsi, u32 cmd)
 	u32 mask;
 	u32 mask;
 
 
 	/* XXX: pipe, hs */
 	/* XXX: pipe, hs */
-	if (intel_dsi->hs)
+	if (hs)
 		cmd &= ~DPI_LP_MODE;
 		cmd &= ~DPI_LP_MODE;
 	else
 	else
 		cmd |= DPI_LP_MODE;
 		cmd |= DPI_LP_MODE;

+ 4 - 1
drivers/gpu/drm/i915/intel_dsi_cmd.h

@@ -33,6 +33,9 @@
 #include "intel_drv.h"
 #include "intel_drv.h"
 #include "intel_dsi.h"
 #include "intel_dsi.h"
 
 
+#define DPI_LP_MODE_EN	false
+#define DPI_HS_MODE_EN	true
+
 void dsi_hs_mode_enable(struct intel_dsi *intel_dsi, bool enable);
 void dsi_hs_mode_enable(struct intel_dsi *intel_dsi, bool enable);
 
 
 int dsi_vc_dcs_write(struct intel_dsi *intel_dsi, int channel,
 int dsi_vc_dcs_write(struct intel_dsi *intel_dsi, int channel,
@@ -47,7 +50,7 @@ int dsi_vc_dcs_read(struct intel_dsi *intel_dsi, int channel, u8 dcs_cmd,
 int dsi_vc_generic_read(struct intel_dsi *intel_dsi, int channel,
 int dsi_vc_generic_read(struct intel_dsi *intel_dsi, int channel,
 			u8 *reqdata, int reqlen, u8 *buf, int buflen);
 			u8 *reqdata, int reqlen, u8 *buf, int buflen);
 
 
-int dpi_send_cmd(struct intel_dsi *intel_dsi, u32 cmd);
+int dpi_send_cmd(struct intel_dsi *intel_dsi, u32 cmd, bool hs);
 
 
 /* XXX: questionable write helpers */
 /* XXX: questionable write helpers */
 static inline int dsi_vc_dcs_write_0(struct intel_dsi *intel_dsi,
 static inline int dsi_vc_dcs_write_0(struct intel_dsi *intel_dsi,