twa_device_extension_count--;
 } /* End twa_remove() */
 
-#ifdef CONFIG_PM
 /* This function is called on PCI suspend */
-static int twa_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused twa_suspend(struct device *dev)
 {
+       struct pci_dev *pdev = to_pci_dev(dev);
        struct Scsi_Host *host = pci_get_drvdata(pdev);
        TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata;
 
        }
        TW_CLEAR_ALL_INTERRUPTS(tw_dev);
 
-       pci_save_state(pdev);
-       pci_disable_device(pdev);
-       pci_set_power_state(pdev, pci_choose_state(pdev, state));
-
        return 0;
 } /* End twa_suspend() */
 
 /* This function is called on PCI resume */
-static int twa_resume(struct pci_dev *pdev)
+static int __maybe_unused twa_resume(struct device *dev)
 {
        int retval = 0;
+       struct pci_dev *pdev = to_pci_dev(dev);
        struct Scsi_Host *host = pci_get_drvdata(pdev);
        TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata;
 
        printk(KERN_WARNING "3w-9xxx: Resuming host %d.\n", tw_dev->host->host_no);
-       pci_set_power_state(pdev, PCI_D0);
-       pci_restore_state(pdev);
 
-       retval = pci_enable_device(pdev);
-       if (retval) {
-               TW_PRINTK(tw_dev->host, TW_DRIVER, 0x39, "Enable device failed during resume");
-               return retval;
-       }
-
-       pci_set_master(pdev);
        pci_try_set_mwi(pdev);
 
        retval = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
 
 out_disable_device:
        scsi_remove_host(host);
-       pci_disable_device(pdev);
 
        return retval;
 } /* End twa_resume() */
-#endif
 
 /* PCI Devices supported by this driver */
 static struct pci_device_id twa_pci_tbl[] = {
 };
 MODULE_DEVICE_TABLE(pci, twa_pci_tbl);
 
+static SIMPLE_DEV_PM_OPS(twa_pm_ops, twa_suspend, twa_resume);
+
 /* pci_driver initializer */
 static struct pci_driver twa_driver = {
        .name           = "3w-9xxx",
        .id_table       = twa_pci_tbl,
        .probe          = twa_probe,
        .remove         = twa_remove,
-#ifdef CONFIG_PM
-       .suspend        = twa_suspend,
-       .resume         = twa_resume,
-#endif
+       .driver.pm      = &twa_pm_ops,
        .shutdown       = twa_shutdown
 };