public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915: Detect if MIPI panel based on VBT and initialize only if present
@ 2014-05-23 16:09 Shobhit Kumar
  2014-05-27 11:32 ` Damien Lespiau
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Shobhit Kumar @ 2014-05-23 16:09 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Daniel Vetter

It seems by default the VBT has MIPI configuration block as well. The
Generic driver will assume always MIPI if MIPI configuration block is found.
This is causing probelm when actually there is eDP. Fix this by looking
into general definition block which will have device configurations. From here
we can figure out what is the LFP type and initialize MIPI only if MIPI
is found.

Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h      |  2 ++
 drivers/gpu/drm/i915/intel_bios.c    | 20 +++++++++++++++++++-
 drivers/gpu/drm/i915/intel_display.c |  4 +++-
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 8e78703..5a5225b 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1229,7 +1229,9 @@ struct intel_vbt_data {
 	} backlight;
 
 	/* MIPI DSI */
+	int is_mipi;
 	struct {
+		u16 port;
 		u16 panel_id;
 		struct mipi_config *config;
 		struct mipi_pps_data *pps;
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 6b65096..b825c80 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1059,6 +1059,20 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 			/* skip the device block if device type is invalid */
 			continue;
 		}
+
+#define MIPI_PORT_A	0x15
+#define MIPI_PORT_B	0x16
+#define MIPI_PORT_C	0x17
+#define MIPI_PORT_D	0x18
+		if (p_child->common.dvo_port >= MIPI_PORT_A && p_child->common.dvo_port <= MIPI_PORT_D) {
+			/* check the device type and confirm its MIPI */
+			if (p_child->common.device_type & DEVICE_TYPE_MIPI_OUTPUT) {
+				DRM_DEBUG_KMS("Found MIPI as LFP\n");
+				dev_priv->vbt.is_mipi = 1;
+				dev_priv->vbt.dsi.port = p_child->common.dvo_port;
+			}
+		}
+
 		child_dev_ptr = dev_priv->vbt.child_dev + count;
 		count++;
 		memcpy((void *)child_dev_ptr, (void *)p_child,
@@ -1230,7 +1244,11 @@ intel_parse_bios(struct drm_device *dev)
 	parse_device_mapping(dev_priv, bdb);
 	parse_driver_features(dev_priv, bdb);
 	parse_edp(dev_priv, bdb);
-	parse_mipi(dev_priv, bdb);
+
+	/* parse MIPI blocks only if LFP type is MIPI */
+	if (dev_priv->vbt.is_mipi)
+		parse_mipi(dev_priv, bdb);
+
 	parse_ddi_ports(dev_priv, bdb);
 
 	if (bios)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3da73ef..a55fa41 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11151,7 +11151,9 @@ static void intel_setup_outputs(struct drm_device *dev)
 			}
 		}
 
-		intel_dsi_init(dev);
+		/* There is no detection method for MIPI so rely on VBT */
+		if (dev_priv->vbt.is_mipi)
+			intel_dsi_init(dev);
 	} else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) {
 		bool found = false;
 
-- 
1.8.3.2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-05-27 17:10 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-23 16:09 [PATCH] drm/i915: Detect if MIPI panel based on VBT and initialize only if present Shobhit Kumar
2014-05-27 11:32 ` Damien Lespiau
2014-05-27 12:10   ` Kumar, Shobhit
2014-05-27 12:27     ` Damien Lespiau
2014-05-27 11:40 ` Daniel Vetter
2014-05-27 11:43   ` Kumar, Shobhit
2014-05-27 12:56 ` [v2] " Shobhit Kumar
2014-05-27 13:18   ` Damien Lespiau
2014-05-27 14:03   ` [v3] " Shobhit Kumar
2014-05-27 14:17     ` Damien Lespiau
2014-05-27 14:31       ` Ville Syrjälä
2014-05-27 14:35         ` Damien Lespiau
2014-05-27 17:05           ` Daniel Vetter
2014-05-27 14:31       ` Kumar, Shobhit
2014-05-27 17:10     ` Daniel Vetter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox