mvumi_flush_cache(mhba);
 }
 
-static int __maybe_unused mvumi_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused mvumi_suspend(struct device *dev)
 {
-       struct mvumi_hba *mhba = NULL;
+       struct pci_dev *pdev = to_pci_dev(dev);
+       struct mvumi_hba *mhba = pci_get_drvdata(pdev);
 
-       mhba = pci_get_drvdata(pdev);
        mvumi_flush_cache(mhba);
 
-       pci_set_drvdata(pdev, mhba);
        mhba->instancet->disable_intr(mhba);
-       free_irq(mhba->pdev->irq, mhba);
        mvumi_unmap_pci_addr(pdev, mhba->base_addr);
-       pci_release_regions(pdev);
-       pci_save_state(pdev);
-       pci_disable_device(pdev);
-       pci_set_power_state(pdev, pci_choose_state(pdev, state));
 
        return 0;
 }
 
-static int __maybe_unused mvumi_resume(struct pci_dev *pdev)
+static int __maybe_unused mvumi_resume(struct device *dev)
 {
        int ret;
-       struct mvumi_hba *mhba = NULL;
-
-       mhba = pci_get_drvdata(pdev);
-
-       pci_set_power_state(pdev, PCI_D0);
-       pci_restore_state(pdev);
-
-       ret = pci_enable_device(pdev);
-       if (ret) {
-               dev_err(&pdev->dev, "enable device failed\n");
-               return ret;
-       }
+       struct pci_dev *pdev = to_pci_dev(dev);
+       struct mvumi_hba *mhba = pci_get_drvdata(pdev);
 
-       ret = mvumi_pci_set_master(pdev);
        ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-       if (ret)
-               goto fail;
-       ret = pci_request_regions(mhba->pdev, MV_DRIVER_NAME);
        if (ret)
                goto fail;
        ret = mvumi_map_pci_addr(mhba->pdev, mhba->base_addr);
                goto unmap_pci_addr;
        }
 
-       ret = request_irq(mhba->pdev->irq, mvumi_isr_handler, IRQF_SHARED,
-                               "mvumi", mhba);
-       if (ret) {
-               dev_err(&pdev->dev, "failed to register IRQ\n");
-               goto unmap_pci_addr;
-       }
        mhba->instancet->enable_intr(mhba);
 
        return 0;
 release_regions:
        pci_release_regions(pdev);
 fail:
-       pci_disable_device(pdev);
 
        return ret;
 }
 
+static SIMPLE_DEV_PM_OPS(mvumi_pm_ops, mvumi_suspend, mvumi_resume);
+
 static struct pci_driver mvumi_pci_driver = {
 
        .name = MV_DRIVER_NAME,
        .probe = mvumi_probe_one,
        .remove = mvumi_detach_one,
        .shutdown = mvumi_shutdown,
-#ifdef CONFIG_PM
-       .suspend = mvumi_suspend,
-       .resume = mvumi_resume,
-#endif
+       .driver.pm = &mvumi_pm_ops,
 };
 
 module_pci_driver(mvumi_pci_driver);