[Intel-gfx] [PATCH 3/3] drm/i915: Ignore LVDS EDID when it is unavailabe or invalid

Zhenyu Wang zhenyuw at linux.intel.com
Thu Mar 4 09:17:31 CET 2010


From: Zhao Yakui <yakui.zhao at intel.com>

In course of probing the display mode for LVDS, we will firstly try to
check the EDID for LVDS panel. But on some laptops the EDID is invalid for
the LVDS panel. In such case it will complain the invalida EDID warning
message and print the EDID raw data every time when probing the LVDS mode.

https://bugs.freedesktop.org/show_bug.cgi?id=23099
https://bugs.freedesktop.org/show_bug.cgi?id=26395

Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
Tested-by: Sitsofe Wheeler <sitsofe at yahoo.com>
Signed-off-by: Zhenyu Wang <zhenyuw at linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h   |    2 ++
 drivers/gpu/drm/i915/intel_lvds.c |   14 ++++++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f975926..d8dd7b2 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -610,6 +610,8 @@ typedef struct drm_i915_private {
 	/* Reclocking support */
 	bool render_reclock_avail;
 	bool lvds_downclock_avail;
+	/* indicate whether the LVDS EDID is OK */
+	bool	lvds_edid_ok;
 	/* indicates the reduced downclock for LVDS*/
 	int lvds_downclock;
 	struct work_struct idle_work;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index caf0306..87c75bc 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -702,10 +702,14 @@ static int intel_lvds_get_modes(struct drm_connector *connector)
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	int ret = 0;
 
-	ret = intel_ddc_get_modes(intel_connector);
+	if (dev_priv->lvds_edid_ok) {
+		ret = intel_ddc_get_modes(intel_connector);
 
-	if (ret)
-		return ret;
+		if (ret)
+			return ret;
+
+		dev_priv->lvds_edid_ok = false;
+	}
 
 	/* Didn't get an EDID, so
 	 * Set wide sync ranges so we get all modes
@@ -1124,7 +1128,9 @@ void intel_lvds_init(struct drm_device *dev)
 	 * Attempt to get the fixed panel mode from DDC.  Assume that the
 	 * preferred mode is the right one.
 	 */
-	intel_ddc_get_modes(intel_connector);
+	dev_priv->lvds_edid_ok = true;
+	if (!intel_ddc_get_modes(intel_connector))
+		dev_priv->lvds_edid_ok = false;
 
 	list_for_each_entry(scan, &connector->probed_modes, head) {
 		mutex_lock(&dev->mode_config.mutex);
-- 
1.6.3.3




More information about the Intel-gfx mailing list