drm/i915: Only use VBT panel mode on eDP if no EDID is found
authorKeith Packard <keithp@keithp.com>
Mon, 19 Sep 2011 21:33:26 +0000 (14:33 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 30 Sep 2011 23:23:44 +0000 (16:23 -0700)
We're going to assume that EDID is more reliable than the VBT tables
for eDP panels, which is notably true on MacBook machines where the
VBT contains completely bogus data.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_dp.c

index 44fef5e1c4906d49547d79fc42296163eea71905..3717fa699f562896a78dcc1881bde9806b017f7c 100644 (file)
@@ -1755,7 +1755,16 @@ static int intel_dp_get_modes(struct drm_connector *connector)
 
        /* if eDP has no EDID, try to use fixed panel mode from VBT */
        if (is_edp(intel_dp)) {
-               if (dev_priv->panel_fixed_mode != NULL) {
+               /* initialize panel mode from VBT if available for eDP */
+               if (dev_priv->panel_fixed_mode == NULL && dev_priv->lfp_lvds_vbt_mode != NULL) {
+                       dev_priv->panel_fixed_mode =
+                               drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
+                       if (dev_priv->panel_fixed_mode) {
+                               dev_priv->panel_fixed_mode->type |=
+                                       DRM_MODE_TYPE_PREFERRED;
+                       }
+               }
+               if (dev_priv->panel_fixed_mode) {
                        struct drm_display_mode *mode;
                        mode = drm_mode_duplicate(dev, dev_priv->panel_fixed_mode);
                        drm_mode_probed_add(connector, mode);
@@ -2068,15 +2077,6 @@ intel_dp_init(struct drm_device *dev, int output_reg)
        intel_encoder->hot_plug = intel_dp_hot_plug;
 
        if (is_edp(intel_dp)) {
-               /* initialize panel mode from VBT if available for eDP */
-               if (dev_priv->lfp_lvds_vbt_mode) {
-                       dev_priv->panel_fixed_mode =
-                               drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
-                       if (dev_priv->panel_fixed_mode) {
-                               dev_priv->panel_fixed_mode->type |=
-                                       DRM_MODE_TYPE_PREFERRED;
-                       }
-               }
                dev_priv->int_edp_connector = connector;
                intel_panel_setup_backlight(dev);
        }