drm/i915: Reject 'Center' scaling mode for eDP/DSI on GMCH platforms
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 12 Apr 2016 19:14:38 +0000 (22:14 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 15 Apr 2016 13:25:27 +0000 (16:25 +0300)
We don't have a LVDS_BORDER_ENABLE type of bit for either eDP or DSI,
and just trying to frob the display timings to include borders results
in a corrupted picture. So reject the 'Center' scaling mode on GMCH
platforms for eDP and DSI.

TODO: Should really filter out the unsupported modes from the prop,
but that would be fairly invasive since the prop is now created and
stored by drm core. So leave it for a rainy day.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1460488478-18311-6-git-send-email-ville.syrjala@linux.intel.com
Tested-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/intel_dp.c
drivers/gpu/drm/i915/intel_dsi.c

index 7523558190d17887d99c0ffa82de5e202c0bfadc..61ee22664ee79b114bc89a9f4d8a47c6615028d3 100644 (file)
@@ -4821,6 +4821,11 @@ intel_dp_set_property(struct drm_connector *connector,
                        DRM_DEBUG_KMS("no scaling not supported\n");
                        return -EINVAL;
                }
+               if (HAS_GMCH_DISPLAY(dev_priv) &&
+                   val == DRM_MODE_SCALE_CENTER) {
+                       DRM_DEBUG_KMS("centering not supported\n");
+                       return -EINVAL;
+               }
 
                if (intel_connector->panel.fitting_mode == val) {
                        /* the eDP scaling property is not changed */
index d94193aa6ffc8902886263651a6dc153737ec641..a3cb89ee7fd089992300045a5e9394e212584756 100644 (file)
@@ -1205,6 +1205,11 @@ static int intel_dsi_set_property(struct drm_connector *connector,
                        DRM_DEBUG_KMS("no scaling not supported\n");
                        return -EINVAL;
                }
+               if (HAS_GMCH_DISPLAY(dev) &&
+                   val == DRM_MODE_SCALE_CENTER) {
+                       DRM_DEBUG_KMS("centering not supported\n");
+                       return -EINVAL;
+               }
 
                if (intel_connector->panel.fitting_mode == val)
                        return 0;