Skip to content

Commit

Permalink
drm/i915: Ignore LVDS EDID when it is unavailabe or invalid
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Zhao Yakui authored and Eric Anholt committed Apr 10, 2010
1 parent 9875557 commit bfac4d6
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 4 deletions.
2 changes: 2 additions & 0 deletions drivers/gpu/drm/i915/i915_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
13 changes: 9 additions & 4 deletions drivers/gpu/drm/i915/intel_lvds.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit bfac4d6

Please sign in to comment.