{
        struct drm_psb_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
+       unsigned int i;
 
        spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags);
 
        PSB_WVDC32(dev_priv->vdc_irq_mask, PSB_INT_ENABLE_R);
        PSB_WVDC32(0xFFFFFFFF, PSB_HWSTAM);
 
-       if (dev->vblank[0].enabled)
-               psb_enable_pipestat(dev_priv, 0, PIPE_VBLANK_INTERRUPT_ENABLE);
-       else
-               psb_disable_pipestat(dev_priv, 0, PIPE_VBLANK_INTERRUPT_ENABLE);
-
-       if (dev->vblank[1].enabled)
-               psb_enable_pipestat(dev_priv, 1, PIPE_VBLANK_INTERRUPT_ENABLE);
-       else
-               psb_disable_pipestat(dev_priv, 1, PIPE_VBLANK_INTERRUPT_ENABLE);
-
-       if (dev->vblank[2].enabled)
-               psb_enable_pipestat(dev_priv, 2, PIPE_VBLANK_INTERRUPT_ENABLE);
-       else
-               psb_disable_pipestat(dev_priv, 2, PIPE_VBLANK_INTERRUPT_ENABLE);
+       for (i = 0; i < dev->num_crtcs; ++i) {
+               if (dev->vblank[i].enabled)
+                       psb_enable_pipestat(dev_priv, i, PIPE_VBLANK_INTERRUPT_ENABLE);
+               else
+                       psb_disable_pipestat(dev_priv, i, PIPE_VBLANK_INTERRUPT_ENABLE);
+       }
 
        if (dev_priv->ops->hotplug_enable)
                dev_priv->ops->hotplug_enable(dev, true);
 {
        struct drm_psb_private *dev_priv = dev->dev_private;
        unsigned long irqflags;
+       unsigned int i;
 
        spin_lock_irqsave(&dev_priv->irqmask_lock, irqflags);
 
 
        PSB_WVDC32(0xFFFFFFFF, PSB_HWSTAM);
 
-       if (dev->vblank[0].enabled)
-               psb_disable_pipestat(dev_priv, 0, PIPE_VBLANK_INTERRUPT_ENABLE);
-
-       if (dev->vblank[1].enabled)
-               psb_disable_pipestat(dev_priv, 1, PIPE_VBLANK_INTERRUPT_ENABLE);
-
-       if (dev->vblank[2].enabled)
-               psb_disable_pipestat(dev_priv, 2, PIPE_VBLANK_INTERRUPT_ENABLE);
+       for (i = 0; i < dev->num_crtcs; ++i) {
+               if (dev->vblank[i].enabled)
+                       psb_disable_pipestat(dev_priv, i, PIPE_VBLANK_INTERRUPT_ENABLE);
+       }
 
        dev_priv->vdc_irq_mask &= _PSB_IRQ_SGX_FLAG |
                                  _PSB_IRQ_MSVDX_FLAG |