drm/omap: fix WBDELAYCOUNT with interlace
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 26 Oct 2017 11:40:12 +0000 (14:40 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 1 Mar 2018 07:18:18 +0000 (09:18 +0200)
Vertical blanking needs to be halved on interlace modes. WBDELAYCOUNT
was calculated without such halving, resulting in WBUNCOMPLETE errors.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Benoit Parrot <bparrot@ti.com>
drivers/gpu/drm/omapdrm/dss/dispc.c

index 7398039..000a3d4 100644 (file)
@@ -2814,14 +2814,18 @@ int dispc_wb_setup(struct dispc_device *dispc,
                /* WBDELAYCOUNT */
                REG_FLD_MOD(dispc, DISPC_OVL_ATTRIBUTES2(plane), 0, 7, 0);
        } else {
-               int wbdelay;
+               u32 wbdelay;
 
                if (channel_in == DSS_WB_TV_MGR)
-                       wbdelay = min(vm->vsync_len + vm->vback_porch,
-                               (u32)255);
+                       wbdelay = vm->vsync_len + vm->vback_porch;
                else
-                       wbdelay = min(vm->vfront_porch +
-                               vm->vsync_len + vm->vback_porch, (u32)255);
+                       wbdelay = vm->vfront_porch + vm->vsync_len +
+                               vm->vback_porch;
+
+               if (vm->flags & DISPLAY_FLAGS_INTERLACED)
+                       wbdelay /= 2;
+
+               wbdelay = min(wbdelay, 255u);
 
                /* WBDELAYCOUNT */
                REG_FLD_MOD(dispc, DISPC_OVL_ATTRIBUTES2(plane), wbdelay, 7, 0);