return 0;
 }
 
+static void vsp1_mask_all_interrupts(struct vsp1_device *vsp1)
+{
+       unsigned int i;
+
+       for (i = 0; i < vsp1->info->lif_count; ++i)
+               vsp1_write(vsp1, VI6_DISP_IRQ_ENB(i), 0);
+       for (i = 0; i < vsp1->info->wpf_count; ++i)
+               vsp1_write(vsp1, VI6_WPF_IRQ_ENB(i), 0);
+}
+
 /*
  * vsp1_device_get - Acquire the VSP1 device
  *
        if (irq < 0)
                return irq;
 
-       ret = devm_request_irq(&pdev->dev, irq, vsp1_irq_handler,
-                              IRQF_SHARED, dev_name(&pdev->dev), vsp1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to request IRQ\n");
-               return ret;
-       }
-
        /* FCP (optional). */
        fcp_node = of_parse_phandle(pdev->dev.of_node, "renesas,fcp", 0);
        if (fcp_node) {
                goto done;
 
        vsp1->version = vsp1_read(vsp1, VI6_IP_VERSION);
-       vsp1_device_put(vsp1);
 
        for (i = 0; i < ARRAY_SIZE(vsp1_device_infos); ++i) {
                if ((vsp1->version & VI6_IP_VERSION_MODEL_MASK) ==
        if (!vsp1->info) {
                dev_err(&pdev->dev, "unsupported IP version 0x%08x\n",
                        vsp1->version);
+               vsp1_device_put(vsp1);
                ret = -ENXIO;
                goto done;
        }
 
        dev_dbg(&pdev->dev, "IP version 0x%08x\n", vsp1->version);
 
+       /*
+        * Previous use of the hardware (e.g. by the bootloader) could leave
+        * some interrupts enabled and pending.
+        *
+        * TODO: Investigate if this shouldn't be better handled by using the
+        * device reset provided by the CPG.
+        */
+       vsp1_mask_all_interrupts(vsp1);
+
+       vsp1_device_put(vsp1);
+
+       ret = devm_request_irq(&pdev->dev, irq, vsp1_irq_handler,
+                              IRQF_SHARED, dev_name(&pdev->dev), vsp1);
+       if (ret < 0) {
+               dev_err(&pdev->dev, "failed to request IRQ\n");
+               goto done;
+       }
+
        /* Instantiate entities. */
        ret = vsp1_create_entities(vsp1);
        if (ret < 0) {