{
        ddb_irq_disable(dev);
        if (dev->msi == 2)
-               free_irq(dev->pdev->irq + 1, dev);
-       free_irq(dev->pdev->irq, dev);
+               free_irq(pci_irq_vector(dev->pdev, 1), dev);
+       free_irq(pci_irq_vector(dev->pdev, 0), dev);
 }
 
 static void ddb_remove(struct pci_dev *pdev)
        int stat;
 
        if (msi && pci_msi_enabled()) {
-               stat = pci_alloc_irq_vectors(dev->pdev, 1, nr, PCI_IRQ_MSI);
+               stat = pci_alloc_irq_vectors(dev->pdev, 1, nr,
+                                            PCI_IRQ_MSI | PCI_IRQ_MSIX);
                if (stat >= 1) {
                        dev->msi = stat;
                        dev_info(dev->dev, "using %d MSI interrupt(s)\n",
        if (dev->msi)
                irq_flag = 0;
        if (dev->msi == 2) {
-               stat = request_irq(dev->pdev->irq, ddb_irq_handler0,
-                                  irq_flag, "ddbridge", (void *)dev);
+               stat = request_irq(pci_irq_vector(dev->pdev, 0),
+                                  ddb_irq_handler0, irq_flag, "ddbridge",
+                                  (void *)dev);
                if (stat < 0)
                        return stat;
-               stat = request_irq(dev->pdev->irq + 1, ddb_irq_handler1,
-                                  irq_flag, "ddbridge", (void *)dev);
+               stat = request_irq(pci_irq_vector(dev->pdev, 1),
+                                  ddb_irq_handler1, irq_flag, "ddbridge",
+                                  (void *)dev);
                if (stat < 0) {
-                       free_irq(dev->pdev->irq, dev);
+                       free_irq(pci_irq_vector(dev->pdev, 0), dev);
                        return stat;
                }
        } else
 #endif
        {
-               stat = request_irq(dev->pdev->irq, ddb_irq_handler,
-                                  irq_flag, "ddbridge", (void *)dev);
+               stat = request_irq(pci_irq_vector(dev->pdev, 0),
+                                  ddb_irq_handler, irq_flag, "ddbridge",
+                                  (void *)dev);
                if (stat < 0)
                        return stat;
        }