Merge tag 'drm-next-2021-08-31-1' of git://anongit.freedesktop.org/drm/drm
[linux-2.6-microblaze.git] / drivers / gpu / drm / kmb / kmb_drv.c
index f54392e..1c2f479 100644 (file)
@@ -17,7 +17,6 @@
 #include <drm/drm_drv.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
-#include <drm/drm_irq.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_vblank.h>
 
@@ -413,14 +412,29 @@ static void kmb_irq_reset(struct drm_device *drm)
        kmb_write_lcd(to_kmb(drm), LCD_INT_ENABLE, 0);
 }
 
+static int kmb_irq_install(struct drm_device *drm, unsigned int irq)
+{
+       if (irq == IRQ_NOTCONNECTED)
+               return -ENOTCONN;
+
+       kmb_irq_reset(drm);
+
+       return request_irq(irq, kmb_isr, 0, drm->driver->name, drm);
+}
+
+static void kmb_irq_uninstall(struct drm_device *drm)
+{
+       struct kmb_drm_private *kmb = to_kmb(drm);
+
+       kmb_irq_reset(drm);
+       free_irq(kmb->irq_lcd, drm);
+}
+
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
 static const struct drm_driver kmb_driver = {
        .driver_features = DRIVER_GEM |
            DRIVER_MODESET | DRIVER_ATOMIC,
-       .irq_handler = kmb_isr,
-       .irq_preinstall = kmb_irq_reset,
-       .irq_uninstall = kmb_irq_reset,
        /* GEM Operations */
        .fops = &fops,
        DRM_GEM_CMA_DRIVER_OPS_VMAP,
@@ -442,7 +456,7 @@ static int kmb_remove(struct platform_device *pdev)
        of_node_put(kmb->crtc.port);
        kmb->crtc.port = NULL;
        pm_runtime_get_sync(drm->dev);
-       drm_irq_uninstall(drm);
+       kmb_irq_uninstall(drm);
        pm_runtime_put_sync(drm->dev);
        pm_runtime_disable(drm->dev);
 
@@ -532,7 +546,7 @@ static int kmb_probe(struct platform_device *pdev)
        if (ret)
                goto err_free;
 
-       ret = drm_irq_install(&kmb->drm, kmb->irq_lcd);
+       ret = kmb_irq_install(&kmb->drm, kmb->irq_lcd);
        if (ret < 0) {
                drm_err(&kmb->drm, "failed to install IRQ handler\n");
                goto err_irq;