drm/omap: fix setting & clearing DOUBLESTRIDE
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 29 Aug 2016 08:15:49 +0000 (11:15 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 2 Jun 2017 07:57:20 +0000 (10:57 +0300)
The code that sets and clears DOUBLESTRIDE is only ran when using NV12.
This is not correct, as we might first set the bith when using NV12, but
never clear it when using other formats.

Fix it so that when the bit is available (when the HW supports NV12) we
always either set or clear the bit.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
drivers/gpu/drm/omapdrm/dss/dispc.c

index ac8ca605e3147d56d392d93ca6d76b36543ce2a6..afefdcfdde6c0e1f2067b7832b9e0b559a3233eb 100644 (file)
@@ -1864,14 +1864,15 @@ static void dispc_ovl_set_rotation_attrs(enum omap_plane_id plane, u8 rotation,
                REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane),
                        row_repeat ? 1 : 0, 18, 18);
 
-       if (color_mode == OMAP_DSS_COLOR_NV12) {
-               bool doublestride = (rotation_type == OMAP_DSS_ROT_TILER) &&
-                                       (rotation == OMAP_DSS_ROT_0 ||
-                                       rotation == OMAP_DSS_ROT_180);
+       if (dss_feat_color_mode_supported(plane, OMAP_DSS_COLOR_NV12)) {
+               bool doublestride =
+                       color_mode == OMAP_DSS_COLOR_NV12 &&
+                       rotation_type == OMAP_DSS_ROT_TILER &&
+                       (rotation == OMAP_DSS_ROT_0 || rotation == OMAP_DSS_ROT_180);
+
                /* DOUBLESTRIDE */
                REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane), doublestride, 22, 22);
        }
-
 }
 
 static int color_mode_to_bpp(enum omap_color_mode color_mode)