drm/i915/lvds: Disable panel-fitter on gen4 for 1:1 scale factors
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 29 Nov 2010 16:19:24 +0000 (16:19 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 1 Dec 2010 10:26:35 +0000 (10:26 +0000)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/intel_lvds.c

index 4324a326f98ee28f4d67936b7a4789556344c4fb..5b88e145ee79566f90791e4af3e513f11d8da09b 100644 (file)
@@ -269,14 +269,13 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
                        u32 scaled_width = adjusted_mode->hdisplay * mode->vdisplay;
                        u32 scaled_height = mode->hdisplay * adjusted_mode->vdisplay;
 
-                       pfit_control |= PFIT_ENABLE;
                        /* 965+ is easy, it does everything in hw */
                        if (scaled_width > scaled_height)
-                               pfit_control |= PFIT_SCALING_PILLAR;
+                               pfit_control |= PFIT_ENABLE | PFIT_SCALING_PILLAR;
                        else if (scaled_width < scaled_height)
-                               pfit_control |= PFIT_SCALING_LETTER;
-                       else
-                               pfit_control |= PFIT_SCALING_AUTO;
+                               pfit_control |= PFIT_ENABLE | PFIT_SCALING_LETTER;
+                       else if (adjusted_mode->hdisplay != mode->hdisplay)
+                               pfit_control |= PFIT_ENABLE | PFIT_SCALING_AUTO;
                } else {
                        u32 scaled_width = adjusted_mode->hdisplay * mode->vdisplay;
                        u32 scaled_height = mode->hdisplay * adjusted_mode->vdisplay;
@@ -323,13 +322,17 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
                 * Full scaling, even if it changes the aspect ratio.
                 * Fortunately this is all done for us in hw.
                 */
-               pfit_control |= PFIT_ENABLE;
-               if (INTEL_INFO(dev)->gen >= 4)
-                       pfit_control |= PFIT_SCALING_AUTO;
-               else
-                       pfit_control |= (VERT_AUTO_SCALE | HORIZ_AUTO_SCALE |
-                                        VERT_INTERP_BILINEAR |
-                                        HORIZ_INTERP_BILINEAR);
+               if (mode->vdisplay != adjusted_mode->vdisplay ||
+                   mode->hdisplay != adjusted_mode->hdisplay) {
+                       pfit_control |= PFIT_ENABLE;
+                       if (INTEL_INFO(dev)->gen >= 4)
+                               pfit_control |= PFIT_SCALING_AUTO;
+                       else
+                               pfit_control |= (VERT_AUTO_SCALE |
+                                                VERT_INTERP_BILINEAR |
+                                                HORIZ_AUTO_SCALE |
+                                                HORIZ_INTERP_BILINEAR);
+               }
                break;
 
        default: