drm/i915: Validate the mode for eDP by using fixed panel size
authorZhao Yakui <yakui.zhao@intel.com>
Mon, 19 Jul 2010 08:43:14 +0000 (09:43 +0100)
committerEric Anholt <eric@anholt.net>
Mon, 2 Aug 2010 02:40:38 +0000 (19:40 -0700)
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: stable@kernel.org
Signed-off-by: Eric Anholt <eric@anholt.net>
drivers/gpu/drm/i915/intel_dp.c

index 233e6fd89328633232e5cde1844cb4e4812ebc2f..40be1fa65be18fa730347b3da0f248a2b35b19e6 100644 (file)
@@ -150,9 +150,21 @@ intel_dp_mode_valid(struct drm_connector *connector,
 {
        struct drm_encoder *encoder = intel_attached_encoder(connector);
        struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);
+       struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;
+       struct drm_device *dev = connector->dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
        int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_encoder));
        int max_lanes = intel_dp_max_lane_count(intel_encoder);
 
+       if ((IS_eDP(intel_encoder) || IS_PCH_eDP(dp_priv)) &&
+           dev_priv->panel_fixed_mode) {
+               if (mode->hdisplay > dev_priv->panel_fixed_mode->hdisplay)
+                       return MODE_PANEL;
+
+               if (mode->vdisplay > dev_priv->panel_fixed_mode->vdisplay)
+                       return MODE_PANEL;
+       }
+
        /* only refuse the mode on non eDP since we have seen some wierd eDP panels
           which are outside spec tolerances but somehow work by magic */
        if (!IS_eDP(intel_encoder) &&