aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/pci-acpi.c')
-rw-r--r--drivers/pci/pci-acpi.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 3542150fc8a3..489063987325 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -501,12 +501,29 @@ static int acpi_pci_run_wake(struct pci_dev *dev, bool enable)
501 return 0; 501 return 0;
502} 502}
503 503
504static bool acpi_pci_need_resume(struct pci_dev *dev)
505{
506 struct acpi_device *adev = ACPI_COMPANION(&dev->dev);
507
508 if (!adev || !acpi_device_power_manageable(adev))
509 return false;
510
511 if (device_may_wakeup(&dev->dev) != !!adev->wakeup.prepare_count)
512 return true;
513
514 if (acpi_target_system_state() == ACPI_STATE_S0)
515 return false;
516
517 return !!adev->power.flags.dsw_present;
518}
519
504static struct pci_platform_pm_ops acpi_pci_platform_pm = { 520static struct pci_platform_pm_ops acpi_pci_platform_pm = {
505 .is_manageable = acpi_pci_power_manageable, 521 .is_manageable = acpi_pci_power_manageable,
506 .set_state = acpi_pci_set_power_state, 522 .set_state = acpi_pci_set_power_state,
507 .choose_state = acpi_pci_choose_state, 523 .choose_state = acpi_pci_choose_state,
508 .sleep_wake = acpi_pci_sleep_wake, 524 .sleep_wake = acpi_pci_sleep_wake,
509 .run_wake = acpi_pci_run_wake, 525 .run_wake = acpi_pci_run_wake,
526 .need_resume = acpi_pci_need_resume,
510}; 527};
511 528
512void acpi_pci_add_bus(struct pci_bus *bus) 529void acpi_pci_add_bus(struct pci_bus *bus)