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>

authored by

Zhao Yakui and committed by
Eric Anholt
bfac4d67 9875557e

+11 -4
+2
drivers/gpu/drm/i915/i915_drv.h
··· 611 611 /* Reclocking support */ 612 612 bool render_reclock_avail; 613 613 bool lvds_downclock_avail; 614 + /* indicate whether the LVDS EDID is OK */ 615 + bool lvds_edid_good; 614 616 /* indicates the reduced downclock for LVDS*/ 615 617 int lvds_downclock; 616 618 struct work_struct idle_work;
+9 -4
drivers/gpu/drm/i915/intel_lvds.c
··· 638 638 struct drm_i915_private *dev_priv = dev->dev_private; 639 639 int ret = 0; 640 640 641 - ret = intel_ddc_get_modes(intel_encoder); 641 + if (dev_priv->lvds_edid_good) { 642 + ret = intel_ddc_get_modes(intel_encoder); 642 643 643 - if (ret) 644 - return ret; 644 + if (ret) 645 + return ret; 646 + } 645 647 646 648 /* Didn't get an EDID, so 647 649 * Set wide sync ranges so we get all modes ··· 1064 1062 * Attempt to get the fixed panel mode from DDC. Assume that the 1065 1063 * preferred mode is the right one. 1066 1064 */ 1067 - intel_ddc_get_modes(intel_encoder); 1065 + dev_priv->lvds_edid_good = true; 1066 + 1067 + if (!intel_ddc_get_modes(intel_encoder)) 1068 + dev_priv->lvds_edid_good = false; 1068 1069 1069 1070 list_for_each_entry(scan, &connector->probed_modes, head) { 1070 1071 mutex_lock(&dev->mode_config.mutex);