aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/pci-driver.c')
-rw-r--r--drivers/pci/pci-driver.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 3f8e3dbcaa7c..d04c5adafc16 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -582,7 +582,7 @@ static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
582 WARN_ONCE(pci_dev->current_state != prev, 582 WARN_ONCE(pci_dev->current_state != prev,
583 "PCI PM: Device state not saved by %pF\n", 583 "PCI PM: Device state not saved by %pF\n",
584 drv->suspend_late); 584 drv->suspend_late);
585 return 0; 585 goto Fixup;
586 } 586 }
587 } 587 }
588 588
@@ -591,6 +591,9 @@ static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
591 591
592 pci_pm_set_unknown_state(pci_dev); 592 pci_pm_set_unknown_state(pci_dev);
593 593
594Fixup:
595 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
596
594 return 0; 597 return 0;
595} 598}
596 599
@@ -734,7 +737,7 @@ static int pci_pm_suspend_noirq(struct device *dev)
734 737
735 if (!pm) { 738 if (!pm) {
736 pci_save_state(pci_dev); 739 pci_save_state(pci_dev);
737 return 0; 740 goto Fixup;
738 } 741 }
739 742
740 if (pm->suspend_noirq) { 743 if (pm->suspend_noirq) {
@@ -751,7 +754,7 @@ static int pci_pm_suspend_noirq(struct device *dev)
751 WARN_ONCE(pci_dev->current_state != prev, 754 WARN_ONCE(pci_dev->current_state != prev,
752 "PCI PM: State of device not saved by %pF\n", 755 "PCI PM: State of device not saved by %pF\n",
753 pm->suspend_noirq); 756 pm->suspend_noirq);
754 return 0; 757 goto Fixup;
755 } 758 }
756 } 759 }
757 760
@@ -775,6 +778,9 @@ static int pci_pm_suspend_noirq(struct device *dev)
775 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI) 778 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
776 pci_write_config_word(pci_dev, PCI_COMMAND, 0); 779 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
777 780
781Fixup:
782 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
783
778 return 0; 784 return 0;
779} 785}
780 786
@@ -999,8 +1005,10 @@ static int pci_pm_poweroff_noirq(struct device *dev)
999 if (pci_has_legacy_pm_support(to_pci_dev(dev))) 1005 if (pci_has_legacy_pm_support(to_pci_dev(dev)))
1000 return pci_legacy_suspend_late(dev, PMSG_HIBERNATE); 1006 return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
1001 1007
1002 if (!drv || !drv->pm) 1008 if (!drv || !drv->pm) {
1009 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
1003 return 0; 1010 return 0;
1011 }
1004 1012
1005 if (drv->pm->poweroff_noirq) { 1013 if (drv->pm->poweroff_noirq) {
1006 int error; 1014 int error;
@@ -1021,6 +1029,8 @@ static int pci_pm_poweroff_noirq(struct device *dev)
1021 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI) 1029 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
1022 pci_write_config_word(pci_dev, PCI_COMMAND, 0); 1030 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
1023 1031
1032 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
1033
1024 if (pcibios_pm_ops.poweroff_noirq) 1034 if (pcibios_pm_ops.poweroff_noirq)
1025 return pcibios_pm_ops.poweroff_noirq(dev); 1035 return pcibios_pm_ops.poweroff_noirq(dev);
1026 1036