drm/imx: only enable vblank IRQs when needed
authorLucas Stach <l.stach@pengutronix.de>
Tue, 9 Feb 2016 10:43:08 +0000 (11:43 +0100)
committerPhilipp Zabel <p.zabel@pengutronix.de>
Tue, 1 Mar 2016 07:33:41 +0000 (08:33 +0100)
The vblank IRQ is only needed to trigger page flip work, so we
might as well disable it when there is no work to do.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
drivers/gpu/drm/imx/ipuv3-crtc.c

index e6ae0176b7c32b9fde4ca5f8d72017feccf0f27a..4bea0ddb3f3e3be88eb8b8be6f3e69cf8663836b 100644 (file)
@@ -379,11 +379,18 @@ static const struct drm_crtc_helper_funcs ipu_helper_funcs = {
 
 static int ipu_enable_vblank(struct drm_crtc *crtc)
 {
+       struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc);
+
+       enable_irq(ipu_crtc->irq);
+
        return 0;
 }
 
 static void ipu_disable_vblank(struct drm_crtc *crtc)
 {
+       struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc);
+
+       disable_irq_nosync(ipu_crtc->irq);
 }
 
 static int ipu_set_interface_pix_fmt(struct drm_crtc *crtc,
@@ -494,6 +501,8 @@ static int ipu_crtc_init(struct ipu_crtc *ipu_crtc,
                dev_err(ipu_crtc->dev, "irq request failed with %d.\n", ret);
                goto err_put_plane_res;
        }
+       /* Only enable IRQ when we actually need it to trigger work. */
+       disable_irq(ipu_crtc->irq);
 
        ipu_crtc->flip_queue = create_singlethread_workqueue("ipu-crtc-flip");