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

Commit 82bc9a42 authored by Patrik Jakobsson's avatar Patrik Jakobsson
Browse files

drm/gma500/psb: Actually use VBT mode when it is found

With LVDS we were incorrectly picking the pre-programmed mode instead of
the prefered mode provided by VBT. Make sure we pick the VBT mode if
one is provided. It is likely that the mode read-out code is still wrong
but this patch fixes the immediate problem on most machines.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=78562


Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarPatrik Jakobsson <patrik.r.jakobsson@gmail.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170418114332.12183-1-patrik.r.jakobsson@gmail.com
parent f9285434
Loading
Loading
Loading
Loading
+11 −7
Original line number Original line Diff line number Diff line
@@ -759,20 +759,23 @@ void psb_intel_lvds_init(struct drm_device *dev,
		if (scan->type & DRM_MODE_TYPE_PREFERRED) {
		if (scan->type & DRM_MODE_TYPE_PREFERRED) {
			mode_dev->panel_fixed_mode =
			mode_dev->panel_fixed_mode =
			    drm_mode_duplicate(dev, scan);
			    drm_mode_duplicate(dev, scan);
			DRM_DEBUG_KMS("Using mode from DDC\n");
			goto out;	/* FIXME: check for quirks */
			goto out;	/* FIXME: check for quirks */
		}
		}
	}
	}


	/* Failed to get EDID, what about VBT? do we need this? */
	/* Failed to get EDID, what about VBT? do we need this? */
	if (mode_dev->vbt_mode)
	if (dev_priv->lfp_lvds_vbt_mode) {
		mode_dev->panel_fixed_mode =
		mode_dev->panel_fixed_mode =
		    drm_mode_duplicate(dev, mode_dev->vbt_mode);
			drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);


	if (!mode_dev->panel_fixed_mode)
		if (mode_dev->panel_fixed_mode) {
		if (dev_priv->lfp_lvds_vbt_mode)
			mode_dev->panel_fixed_mode->type |=
			mode_dev->panel_fixed_mode =
				DRM_MODE_TYPE_PREFERRED;
				drm_mode_duplicate(dev,
			DRM_DEBUG_KMS("Using mode from VBT\n");
					dev_priv->lfp_lvds_vbt_mode);
			goto out;
		}
	}


	/*
	/*
	 * If we didn't get EDID, try checking if the panel is already turned
	 * If we didn't get EDID, try checking if the panel is already turned
@@ -789,6 +792,7 @@ void psb_intel_lvds_init(struct drm_device *dev,
		if (mode_dev->panel_fixed_mode) {
		if (mode_dev->panel_fixed_mode) {
			mode_dev->panel_fixed_mode->type |=
			mode_dev->panel_fixed_mode->type |=
			    DRM_MODE_TYPE_PREFERRED;
			    DRM_MODE_TYPE_PREFERRED;
			DRM_DEBUG_KMS("Using pre-programmed mode\n");
			goto out;	/* FIXME: check for quirks */
			goto out;	/* FIXME: check for quirks */
		}
		}
	}
	}