diff options
-rw-r--r-- | drivers/acpi/sleep.c | 16 | ||||
-rw-r--r-- | include/acpi/acpi_bus.h | 12 |
2 files changed, 18 insertions, 10 deletions
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index 4754ff6e70e6..e807f4196f89 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c | |||
@@ -27,6 +27,8 @@ | |||
27 | 27 | ||
28 | u8 sleep_states[ACPI_S_STATE_COUNT]; | 28 | u8 sleep_states[ACPI_S_STATE_COUNT]; |
29 | 29 | ||
30 | static u32 acpi_target_sleep_state = ACPI_STATE_S0; | ||
31 | |||
30 | static void acpi_sleep_tts_switch(u32 acpi_state) | 32 | static void acpi_sleep_tts_switch(u32 acpi_state) |
31 | { | 33 | { |
32 | union acpi_object in_arg = { ACPI_TYPE_INTEGER }; | 34 | union acpi_object in_arg = { ACPI_TYPE_INTEGER }; |
@@ -79,8 +81,6 @@ static int acpi_sleep_prepare(u32 acpi_state) | |||
79 | } | 81 | } |
80 | 82 | ||
81 | #ifdef CONFIG_ACPI_SLEEP | 83 | #ifdef CONFIG_ACPI_SLEEP |
82 | static u32 acpi_target_sleep_state = ACPI_STATE_S0; | ||
83 | |||
84 | /* | 84 | /* |
85 | * The ACPI specification wants us to save NVS memory regions during hibernation | 85 | * The ACPI specification wants us to save NVS memory regions during hibernation |
86 | * and to restore them during the subsequent resume. Windows does that also for | 86 | * and to restore them during the subsequent resume. Windows does that also for |
@@ -562,7 +562,7 @@ int acpi_suspend(u32 acpi_state) | |||
562 | return -EINVAL; | 562 | return -EINVAL; |
563 | } | 563 | } |
564 | 564 | ||
565 | #ifdef CONFIG_PM_SLEEP | 565 | #ifdef CONFIG_PM_OPS |
566 | /** | 566 | /** |
567 | * acpi_pm_device_sleep_state - return preferred power state of ACPI device | 567 | * acpi_pm_device_sleep_state - return preferred power state of ACPI device |
568 | * in the system sleep state given by %acpi_target_sleep_state | 568 | * in the system sleep state given by %acpi_target_sleep_state |
@@ -624,7 +624,7 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p) | |||
624 | * can wake the system. _S0W may be valid, too. | 624 | * can wake the system. _S0W may be valid, too. |
625 | */ | 625 | */ |
626 | if (acpi_target_sleep_state == ACPI_STATE_S0 || | 626 | if (acpi_target_sleep_state == ACPI_STATE_S0 || |
627 | (device_may_wakeup(dev) && adev->wakeup.state.enabled && | 627 | (device_may_wakeup(dev) && |
628 | adev->wakeup.sleep_state <= acpi_target_sleep_state)) { | 628 | adev->wakeup.sleep_state <= acpi_target_sleep_state)) { |
629 | acpi_status status; | 629 | acpi_status status; |
630 | 630 | ||
@@ -632,7 +632,9 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p) | |||
632 | status = acpi_evaluate_integer(handle, acpi_method, NULL, | 632 | status = acpi_evaluate_integer(handle, acpi_method, NULL, |
633 | &d_max); | 633 | &d_max); |
634 | if (ACPI_FAILURE(status)) { | 634 | if (ACPI_FAILURE(status)) { |
635 | d_max = d_min; | 635 | if (acpi_target_sleep_state != ACPI_STATE_S0 || |
636 | status != AE_NOT_FOUND) | ||
637 | d_max = d_min; | ||
636 | } else if (d_max < d_min) { | 638 | } else if (d_max < d_min) { |
637 | /* Warn the user of the broken DSDT */ | 639 | /* Warn the user of the broken DSDT */ |
638 | printk(KERN_WARNING "ACPI: Wrong value from %s\n", | 640 | printk(KERN_WARNING "ACPI: Wrong value from %s\n", |
@@ -646,7 +648,9 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p) | |||
646 | *d_min_p = d_min; | 648 | *d_min_p = d_min; |
647 | return d_max; | 649 | return d_max; |
648 | } | 650 | } |
651 | #endif /* CONFIG_PM_OPS */ | ||
649 | 652 | ||
653 | #ifdef CONFIG_PM_SLEEP | ||
650 | /** | 654 | /** |
651 | * acpi_pm_device_sleep_wake - enable or disable the system wake-up | 655 | * acpi_pm_device_sleep_wake - enable or disable the system wake-up |
652 | * capability of given device | 656 | * capability of given device |
@@ -677,7 +681,7 @@ int acpi_pm_device_sleep_wake(struct device *dev, bool enable) | |||
677 | 681 | ||
678 | return error; | 682 | return error; |
679 | } | 683 | } |
680 | #endif | 684 | #endif /* CONFIG_PM_SLEEP */ |
681 | 685 | ||
682 | static void acpi_power_off_prepare(void) | 686 | static void acpi_power_off_prepare(void) |
683 | { | 687 | { |
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index a47bb908ddcd..359ef11725a6 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -389,21 +389,25 @@ struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle); | |||
389 | int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state); | 389 | int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state); |
390 | int acpi_disable_wakeup_device_power(struct acpi_device *dev); | 390 | int acpi_disable_wakeup_device_power(struct acpi_device *dev); |
391 | 391 | ||
392 | #ifdef CONFIG_PM_SLEEP | 392 | #ifdef CONFIG_PM_OPS |
393 | int acpi_pm_device_sleep_state(struct device *, int *); | 393 | int acpi_pm_device_sleep_state(struct device *, int *); |
394 | int acpi_pm_device_sleep_wake(struct device *, bool); | 394 | #else |
395 | #else /* !CONFIG_PM_SLEEP */ | ||
396 | static inline int acpi_pm_device_sleep_state(struct device *d, int *p) | 395 | static inline int acpi_pm_device_sleep_state(struct device *d, int *p) |
397 | { | 396 | { |
398 | if (p) | 397 | if (p) |
399 | *p = ACPI_STATE_D0; | 398 | *p = ACPI_STATE_D0; |
400 | return ACPI_STATE_D3; | 399 | return ACPI_STATE_D3; |
401 | } | 400 | } |
401 | #endif | ||
402 | |||
403 | #ifdef CONFIG_PM_SLEEP | ||
404 | int acpi_pm_device_sleep_wake(struct device *, bool); | ||
405 | #else | ||
402 | static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable) | 406 | static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable) |
403 | { | 407 | { |
404 | return -ENODEV; | 408 | return -ENODEV; |
405 | } | 409 | } |
406 | #endif /* !CONFIG_PM_SLEEP */ | 410 | #endif |
407 | 411 | ||
408 | #endif /* CONFIG_ACPI */ | 412 | #endif /* CONFIG_ACPI */ |
409 | 413 | ||