diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/pci/pci-driver.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index e39a67c8ef39..fd4b9c48fd2a 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
| @@ -684,8 +684,19 @@ static int pci_pm_prepare(struct device *dev) | |||
| 684 | 684 | ||
| 685 | static void pci_pm_complete(struct device *dev) | 685 | static void pci_pm_complete(struct device *dev) |
| 686 | { | 686 | { |
| 687 | pci_dev_complete_resume(to_pci_dev(dev)); | 687 | struct pci_dev *pci_dev = to_pci_dev(dev); |
| 688 | pm_complete_with_resume_check(dev); | 688 | |
| 689 | pci_dev_complete_resume(pci_dev); | ||
| 690 | pm_generic_complete(dev); | ||
| 691 | |||
| 692 | /* Resume device if platform firmware has put it in reset-power-on */ | ||
| 693 | if (dev->power.direct_complete && pm_resume_via_firmware()) { | ||
| 694 | pci_power_t pre_sleep_state = pci_dev->current_state; | ||
| 695 | |||
| 696 | pci_update_current_state(pci_dev, pci_dev->current_state); | ||
| 697 | if (pci_dev->current_state < pre_sleep_state) | ||
| 698 | pm_request_resume(dev); | ||
| 699 | } | ||
| 689 | } | 700 | } |
| 690 | 701 | ||
| 691 | #else /* !CONFIG_PM_SLEEP */ | 702 | #else /* !CONFIG_PM_SLEEP */ |
