Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f8ff0e7 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Fix LVDS fixed-mode regression from 219adae1



Commit 219adae1 cached the EDID found during LVDS init, but in the
process prevented the init routine from discovering the preferred
fixed-mode for the panel. This was causing us to guess the correct mode,
which sometimes is wide of the mark.

Reported-and-tested-by: default avatarJon Masters <jonathan@jonmasters.org>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 08deebf9
Loading
Loading
Loading
Loading
+11 −5
Original line number Original line Diff line number Diff line
@@ -481,11 +481,8 @@ static int intel_lvds_get_modes(struct drm_connector *connector)
	struct drm_device *dev = connector->dev;
	struct drm_device *dev = connector->dev;
	struct drm_display_mode *mode;
	struct drm_display_mode *mode;


	if (intel_lvds->edid) {
	if (intel_lvds->edid)
		drm_mode_connector_update_edid_property(connector,
							intel_lvds->edid);
		return drm_add_edid_modes(connector, intel_lvds->edid);
		return drm_add_edid_modes(connector, intel_lvds->edid);
	}


	mode = drm_mode_duplicate(dev, intel_lvds->fixed_mode);
	mode = drm_mode_duplicate(dev, intel_lvds->fixed_mode);
	if (mode == 0)
	if (mode == 0)
@@ -939,7 +936,16 @@ void intel_lvds_init(struct drm_device *dev)
	 */
	 */
	intel_lvds->edid = drm_get_edid(connector,
	intel_lvds->edid = drm_get_edid(connector,
					&dev_priv->gmbus[pin].adapter);
					&dev_priv->gmbus[pin].adapter);

	if (intel_lvds->edid) {
		if (drm_add_edid_modes(connector,
				       intel_lvds->edid)) {
			drm_mode_connector_update_edid_property(connector,
								intel_lvds->edid);
		} else {
			kfree(intel_lvds->edid);
			intel_lvds->edid = NULL;
		}
	}
	if (!intel_lvds->edid) {
	if (!intel_lvds->edid) {
		/* Didn't get an EDID, so
		/* Didn't get an EDID, so
		 * Set wide sync ranges so we get all modes
		 * Set wide sync ranges so we get all modes