|
@@ -6196,12 +6196,22 @@ void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void ata_pci_device_do_resume(struct pci_dev *pdev)
|
|
|
+int ata_pci_device_do_resume(struct pci_dev *pdev)
|
|
|
{
|
|
|
+ int rc;
|
|
|
+
|
|
|
pci_set_power_state(pdev, PCI_D0);
|
|
|
pci_restore_state(pdev);
|
|
|
- pci_enable_device(pdev);
|
|
|
+
|
|
|
+ rc = pci_enable_device(pdev);
|
|
|
+ if (rc) {
|
|
|
+ dev_printk(KERN_ERR, &pdev->dev,
|
|
|
+ "failed to enable device after resume (%d)\n", rc);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+
|
|
|
pci_set_master(pdev);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
|
@@ -6221,10 +6231,12 @@ int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
|
|
int ata_pci_device_resume(struct pci_dev *pdev)
|
|
|
{
|
|
|
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
|
|
+ int rc;
|
|
|
|
|
|
- ata_pci_device_do_resume(pdev);
|
|
|
- ata_host_resume(host);
|
|
|
- return 0;
|
|
|
+ rc = ata_pci_device_do_resume(pdev);
|
|
|
+ if (rc == 0)
|
|
|
+ ata_host_resume(host);
|
|
|
+ return rc;
|
|
|
}
|
|
|
#endif /* CONFIG_PCI */
|
|
|
|