spin_unlock_irqrestore(&tidss->wait_lock, flags);
 }
 
-static void tidss_irq_preinstall(struct drm_device *ddev)
-{
-       struct tidss_device *tidss = to_tidss(ddev);
-
-       spin_lock_init(&tidss->wait_lock);
-
-       tidss_runtime_get(tidss);
-
-       dispc_set_irqenable(tidss->dispc, 0);
-       dispc_read_and_clear_irqstatus(tidss->dispc);
-
-       tidss_runtime_put(tidss);
-}
-
-static void tidss_irq_postinstall(struct drm_device *ddev)
+int tidss_irq_install(struct drm_device *ddev, unsigned int irq)
 {
        struct tidss_device *tidss = to_tidss(ddev);
-       unsigned long flags;
-       unsigned int i;
+       int ret;
 
-       tidss_runtime_get(tidss);
+       if (irq == IRQ_NOTCONNECTED)
+               return -ENOTCONN;
 
-       spin_lock_irqsave(&tidss->wait_lock, flags);
+       ret = request_irq(irq, tidss_irq_handler, 0, ddev->driver->name, ddev);
+       if (ret)
+               return ret;
 
        tidss->irq_mask = DSS_IRQ_DEVICE_OCP_ERR;
 
-       for (i = 0; i < tidss->num_crtcs; ++i) {
+       for (unsigned int i = 0; i < tidss->num_crtcs; ++i) {
                struct tidss_crtc *tcrtc = to_tidss_crtc(tidss->crtcs[i]);
 
                tidss->irq_mask |= DSS_IRQ_VP_SYNC_LOST(tcrtc->hw_videoport);
                tidss->irq_mask |= DSS_IRQ_VP_FRAME_DONE(tcrtc->hw_videoport);
        }
 
-       tidss_irq_update(tidss);
-
-       spin_unlock_irqrestore(&tidss->wait_lock, flags);
-
-       tidss_runtime_put(tidss);
-}
-
-int tidss_irq_install(struct drm_device *ddev, unsigned int irq)
-{
-       int ret;
-
-       if (irq == IRQ_NOTCONNECTED)
-               return -ENOTCONN;
-
-       tidss_irq_preinstall(ddev);
-
-       ret = request_irq(irq, tidss_irq_handler, 0, ddev->driver->name, ddev);
-       if (ret)
-               return ret;
-
-       tidss_irq_postinstall(ddev);
-
        return 0;
 }
 
 {
        struct tidss_device *tidss = to_tidss(ddev);
 
-       tidss_runtime_get(tidss);
-       dispc_set_irqenable(tidss->dispc, 0);
-       tidss_runtime_put(tidss);
-
        free_irq(tidss->irq, ddev);
 }