drm/exynos/decon5433: signal vblank only on odd fields
authorAndrzej Hajda <a.hajda@samsung.com>
Fri, 9 Dec 2016 09:45:20 +0000 (10:45 +0100)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Wed, 14 Dec 2016 04:54:32 +0000 (13:54 +0900)
In case of interlace mode irq is generated for odd and even fields, but
vblank should be signaled only for the last emitted field.

Change-Id: Icfae5a6729a0168b4f565e79825083b39cce5ca3
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
drivers/gpu/drm/exynos/exynos5433_drm_decon.c
include/video/exynos5433_decon.h

index e3a27949d5d8c2396dd4657f969b71309aaba09b..b0f696f12f8b8d562a27698bcbff65e94a2a4e07 100644 (file)
@@ -756,6 +756,13 @@ static irqreturn_t decon_irq_handler(int irq, void *dev_id)
        val &= ctx->i80_if ? VIDINTCON1_INTFRMDONEPEND : VIDINTCON1_INTFRMPEND;
        if (val) {
                writel(val, ctx->addr + DECON_VIDINTCON1);
+               if (!ctx->i80_if) {
+                       val = readl(ctx->addr + DECON_VIDOUTCON0);
+                       val &= VIDOUT_INTERLACE_EN_F | VIDOUT_INTERLACE_FIELD_F;
+                       if (val ==
+                           (VIDOUT_INTERLACE_EN_F | VIDOUT_INTERLACE_FIELD_F))
+                               return IRQ_HANDLED;
+               }
                drm_handle_vblank(ctx->drm_dev, ctx->pipe);
                exynos_drm_crtc_finish_pageflip(ctx->drm_dev, ctx->pipe);
        }
index a67759a946a81c484d33c9d4e1381ab3d47e8551..a3360c406f5068e0d30da6e24bd4439fa867443d 100644 (file)
@@ -90,6 +90,7 @@
 #define VIDCON0_SWRESET                        (1 << 28)
 
 /* VIDOUTCON0 */
+#define VIDOUT_INTERLACE_FIELD_F       (1 << 29)
 #define VIDOUT_INTERLACE_EN_F          (1 << 28)
 #define VIDOUT_LCD_ON                  (1 << 24)
 #define VIDOUT_IF_F_MASK               (0x3 << 20)