drm/exynos: use irq_flags instead of triggering
authorJoonyoung Shim <jy0922.shim@samsung.com>
Mon, 17 Nov 2014 13:00:14 +0000 (22:00 +0900)
committerInki Dae <inki.dae@samsung.com>
Mon, 24 Nov 2014 09:02:54 +0000 (18:02 +0900)
The drm_handle_vblank should be called whenever be vsync, te interrupt
means vsync on i80 interface.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos_drm_fimd.c

index e488b80bef5e23f017f85c77c2786f1ac931c8dc..a8ab3ecb202e494bd27e7d7077b082d5dfb4ab68 100644 (file)
@@ -1014,7 +1014,7 @@ static void fimd_te_handler(struct exynos_drm_manager *mgr)
                wake_up(&ctx->wait_vsync_queue);
        }
 
-       if (!atomic_read(&ctx->triggering))
+       if (test_bit(0, &ctx->irq_flags))
                drm_handle_vblank(ctx->drm_dev, ctx->pipe);
 }
 
@@ -1052,13 +1052,15 @@ static irqreturn_t fimd_irq_handler(int irq, void *dev_id)
        if (ctx->pipe < 0 || !ctx->drm_dev)
                goto out;
 
-       drm_handle_vblank(ctx->drm_dev, ctx->pipe);
-       exynos_drm_crtc_finish_pageflip(ctx->drm_dev, ctx->pipe);
-
        if (ctx->i80_if) {
+               exynos_drm_crtc_finish_pageflip(ctx->drm_dev, ctx->pipe);
+
                /* Exits triggering mode */
                atomic_set(&ctx->triggering, 0);
        } else {
+               drm_handle_vblank(ctx->drm_dev, ctx->pipe);
+               exynos_drm_crtc_finish_pageflip(ctx->drm_dev, ctx->pipe);
+
                /* set wait vsync event to zero and wake up queue. */
                if (atomic_read(&ctx->wait_vsync_event)) {
                        atomic_set(&ctx->wait_vsync_event, 0);