PM: Make ACPI wakeup from S5 work again if CONFIG_PM_SLEEP is unset
Subsystems (4)
PATCH 1/1 PM: Make ACPI wakeup from S5 work again if CONFIG_PM_SLEEP is unset
From: Rafael J. Wysocki <[email protected]>
Commit 074037e (PM / Wakeup: Introduce wakeup source objects and event statistics (v3)) caused ACPI wakeup to only work if CONFIG_PM_SLEEP is set, but it also worked for CONFIG_PM_SLEEP unset before. This can be fixed by making device_set_wakeup_enable(), device_init_wakeup() and device_may_wakeup() work in the same way as before commit 074037e when CONFIG_PM_SLEEP is unset.
Reported-and-tested-by Justin Maggard <[email protected]>
Signed-off-by Rafael J. Wysocki <[email protected]>
--- include/linux/pm.h | 2 ++ include/linux/pm_wakeup.h | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-)
include/linux/pm.h +2 -0
@@ -431,6 +431,8 @@ struct dev_pm_info {struct list_head entry;struct completion completion;struct wakeup_source *wakeup; +#else + unsigned int should_wakeup:1;#endif #ifdef CONFIG_PM_RUNTIME struct timer_list suspend_timer;
include/linux/pm_wakeup.h +13 -10
@@ -103,11 +103,6 @@ static inline bool device_can_wakeup(strreturn dev->power.can_wakeup; } -static inline bool device_may_wakeup (struct device *dev) -{ -return false; -} -static inline struct wakeup_source *wakeup_source_create (const char *name) {return NULL ;
@@ -128,24 +123,32 @@ static inline void wakeup_source_unregisstatic inline int device_wakeup_enable (struct device *dev) { -return -EINVAL ; + dev->power.should_wakeup = true; +return 0 ; }static inline int device_wakeup_disable (struct device *dev) { + dev->power.should_wakeup = false; +return 0 ; +} + +static inline int device_set_wakeup_enable (struct device *dev,bool enable) +{ + dev->power.should_wakeup = enable;return 0 ; }static inline int device_init_wakeup (struct device *dev,bool val) {device_set_wakeup_capable (dev, val); -return val ? -EINVAL :0 ; +device_set_wakeup_enable (dev, val); +return 0 ; } - -static inline int device_set_wakeup_enable (struct device *dev,bool enable) +static inline bool device_may_wakeup (struct device *dev) { -return -EINVAL ; +return dev->power.can_wakeup && dev->power.should_wakeup; }static inline void __pm_stay_awake (struct wakeup_source *ws) {}