@@ -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;
@@ -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);