Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170418114332.12183-1-patrik.r.jakobsson@gmail.com

+11 -7
+11 -7
drivers/gpu/drm/gma500/psb_intel_lvds.c
··· 759 759 if (scan->type & DRM_MODE_TYPE_PREFERRED) { 760 760 mode_dev->panel_fixed_mode = 761 761 drm_mode_duplicate(dev, scan); 762 + DRM_DEBUG_KMS("Using mode from DDC\n"); 762 763 goto out; /* FIXME: check for quirks */ 763 764 } 764 765 } 765 766 766 767 /* Failed to get EDID, what about VBT? do we need this? */ 767 - if (mode_dev->vbt_mode) 768 + if (dev_priv->lfp_lvds_vbt_mode) { 768 769 mode_dev->panel_fixed_mode = 769 - drm_mode_duplicate(dev, mode_dev->vbt_mode); 770 + drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode); 770 771 771 - if (!mode_dev->panel_fixed_mode) 772 - if (dev_priv->lfp_lvds_vbt_mode) 773 - mode_dev->panel_fixed_mode = 774 - drm_mode_duplicate(dev, 775 - dev_priv->lfp_lvds_vbt_mode); 772 + if (mode_dev->panel_fixed_mode) { 773 + mode_dev->panel_fixed_mode->type |= 774 + DRM_MODE_TYPE_PREFERRED; 775 + DRM_DEBUG_KMS("Using mode from VBT\n"); 776 + goto out; 777 + } 778 + } 776 779 777 780 /* 778 781 * If we didn't get EDID, try checking if the panel is already turned ··· 792 789 if (mode_dev->panel_fixed_mode) { 793 790 mode_dev->panel_fixed_mode->type |= 794 791 DRM_MODE_TYPE_PREFERRED; 792 + DRM_DEBUG_KMS("Using pre-programmed mode\n"); 795 793 goto out; /* FIXME: check for quirks */ 796 794 } 797 795 }