drm/i915: Ignore LVDS EDID when it is unavailabe or invalid

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Saturday, April 17, 2010 - 6:59 pm

Gitweb:     http://git.kernel.org/linus/bfac4d6725baacbfc085c38e231b8582a1b8f62b
Commit:     bfac4d6725baacbfc085c38e231b8582a1b8f62b
Parent:     9875557ee8247c3f7390d378c027b45c7535a224
Author:     Zhao Yakui <yakui.zhao@intel.com>
AuthorDate: Wed Apr 7 17:11:22 2010 +0800
Committer:  Eric Anholt <eric@anholt.net>
CommitDate: Fri Apr 9 21:24:18 2010 -0700

    drm/i915: Ignore LVDS EDID when it is unavailabe or invalid
    
    This trys to shut up complains about invalid LVDS EDID during
    mode probe, but uses fixed panel mode directly for panels with
    broken EDID.
    
    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@intel.com>
    Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com>
    Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
    Signed-off-by: Eric Anholt <eric@anholt.net>
---
 drivers/gpu/drm/i915/i915_drv.h   |    2 ++
 drivers/gpu/drm/i915/intel_lvds.c |   13 +++++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index b7cb4aa..6960849 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -611,6 +611,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_good;
 	/* 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 8238b40..527cfa2 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -638,10 +638,12 @@ 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_encoder);
+	if (dev_priv->lvds_edid_good) {
+		ret = intel_ddc_get_modes(intel_encoder);
 
-	if (ret)
-		return ret;
+		if (ret)
+			return ret;
+	}
 
 	/* Didn't get an EDID, so
 	 * Set wide sync ranges so we get all modes
@@ -1062,7 +1064,10 @@ 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_encoder);
+	dev_priv->lvds_edid_good = true;
+
+	if (!intel_ddc_get_modes(intel_encoder))
+		dev_priv->lvds_edid_good = false;
 
 	list_for_each_entry(scan, &connector->probed_modes, head) {
 		mutex_lock(&dev->mode_config.mutex);
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
drm/i915: Ignore LVDS EDID when it is unavailabe or invalid, Linux Kernel Mailing ..., (Sat Apr 17, 6:59 pm)