This is a note to let you know that I've just added the patch titled Subject: PM: make wakeup flags available whenever CONFIG_PM is set to my gregkh-2.6 tree. Its filename is pm-make-wakeup-flags-available-whenever-config_pm-is-set.patch This tree can be found at http://www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/patches/ >From rjw@xxxxxxx Thu Mar 13 13:46:04 2008 From: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> Date: Wed, 12 Mar 2008 01:01:47 +0100 Subject: PM: make wakeup flags available whenever CONFIG_PM is set To: Greg KH <greg@xxxxxxxxx> Cc: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, David Brownell <david-b@xxxxxxxxxxx>, LKML <linux-kernel@xxxxxxxxxxxxxxx>, Pavel Machek <pavel@xxxxxx>, pm list <linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx> Message-ID: <200803120101.48805.rjw@xxxxxxx> Content-Disposition: inline From: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> The various wakeup flags and their accessor macros in struct dev_pm_info should be available whenever CONFIG_PM is enabled, not just when CONFIG_PM_SLEEP is on. Otherwise remote wakeup won't always be configurable for runtime power management. This patch (as1056) fixes the oversight. [rjw: rebased the patch on top of the previous two.] Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> CC: David Brownell <david-b@xxxxxxxxxxx> Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> Acked-by: Pavel Machek <pavel@xxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx> --- drivers/base/power/main.c | 2 - drivers/base/power/sysfs.c | 2 + include/linux/pm.h | 64 +++++++++++++++++++++++++-------------------- 3 files changed, 38 insertions(+), 30 deletions(-) --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -57,8 +57,6 @@ static DEFINE_MUTEX(dpm_list_mtx); /* 'true' if all devices have been suspended, protected by dpm_list_mtx */ static bool all_sleeping; -int (*platform_enable_wakeup)(struct device *dev, int is_on); - /** * device_pm_add - add a device to the list of active devices * @dev: Device to be added to the list --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c @@ -6,6 +6,8 @@ #include <linux/string.h> #include "power.h" +int (*platform_enable_wakeup)(struct device *dev, int is_on); + /* * wakeup - Report/change current wakeup option for device --- a/include/linux/pm.h +++ b/include/linux/pm.h @@ -183,9 +183,9 @@ typedef struct pm_message { struct dev_pm_info { pm_message_t power_state; unsigned can_wakeup:1; + unsigned should_wakeup:1; bool sleeping:1; /* Owned by the PM core */ #ifdef CONFIG_PM_SLEEP - unsigned should_wakeup:1; struct list_head entry; #endif }; @@ -198,11 +198,6 @@ extern void device_resume(void); extern int device_suspend(pm_message_t state); extern int device_prepare_suspend(pm_message_t state); -#define device_set_wakeup_enable(dev,val) \ - ((dev)->power.should_wakeup = !!(val)) -#define device_may_wakeup(dev) \ - (device_can_wakeup(dev) && (dev)->power.should_wakeup) - extern void __suspend_report_result(const char *function, void *fn, int ret); #define suspend_report_result(fn, ret) \ @@ -210,6 +205,35 @@ extern void __suspend_report_result(cons __suspend_report_result(__FUNCTION__, fn, ret); \ } while (0) +#else /* !CONFIG_PM_SLEEP */ + +static inline int device_suspend(pm_message_t state) +{ + return 0; +} + +#define suspend_report_result(fn, ret) do {} while (0) + +#endif /* !CONFIG_PM_SLEEP */ + +#ifdef CONFIG_PM + +/* changes to device_may_wakeup take effect on the next pm state change. + * by default, devices should wakeup if they can. + */ +#define device_can_wakeup(dev) \ + ((dev)->power.can_wakeup) +#define device_init_wakeup(dev,val) \ + do { \ + device_can_wakeup(dev) = !!(val); \ + device_set_wakeup_enable(dev,val); \ + } while(0) + +#define device_set_wakeup_enable(dev,val) \ + ((dev)->power.should_wakeup = !!(val)) +#define device_may_wakeup(dev) \ + (device_can_wakeup(dev) && (dev)->power.should_wakeup) + /* * Platform hook to activate device wakeup capability, if that's not already * handled by enable_irq_wake() etc. @@ -224,35 +248,19 @@ static inline int call_platform_enable_w return 0; } -#else /* !CONFIG_PM_SLEEP */ - -static inline int device_suspend(pm_message_t state) -{ - return 0; -} - -#define device_set_wakeup_enable(dev,val) do{}while(0) -#define device_may_wakeup(dev) (0) +#else /* !CONFIG_PM */ -#define suspend_report_result(fn, ret) do { } while (0) +#define device_can_wakeup(dev) 0 +#define device_init_wakeup(dev,val) do {} while (0) +#define device_set_wakeup_enable(dev,val) do {} while (0) +#define device_may_wakeup(dev) 0 static inline int call_platform_enable_wakeup(struct device *dev, int is_on) { return 0; } -#endif /* !CONFIG_PM_SLEEP */ - -/* changes to device_may_wakeup take effect on the next pm state change. - * by default, devices should wakeup if they can. - */ -#define device_can_wakeup(dev) \ - ((dev)->power.can_wakeup) -#define device_init_wakeup(dev,val) \ - do { \ - device_can_wakeup(dev) = !!(val); \ - device_set_wakeup_enable(dev,val); \ - } while(0) +#endif /* !CONFIG_PM */ /* * Global Power Management flags Patches currently in gregkh-2.6 which might be from stern@xxxxxxxxxxxxxxxxxxx are usb/usb-convert-usb.h-struct-usb_device-to-kernel-doc.patch usb/usb-make-usb_storage_onetouch-available-with-pm.patch usb/usb-usb-ohci-sm501-driver-use-the-conventional-convention-for-suspend-and-resume.patch usb/usb-reorganize-code-in-hub.c.patch usb/usb-ehci-carry-out-port-handover-during-each-root-hub-resume.patch usb/usb-new-quirk-flag-to-avoid-set-interface.patch usb/drivers-usb-core-devio.c-suppress-warning-with-64k-page_size.patch usb/usb-make-usb-persist-work-after-every-system-sleep.patch usb/usb-remove-config_usb_persist-setting.patch usb/usb-check-serial-number-string-after-device-reset.patch usb/usb-enable-usb-persist-by-default.patch usb/usb-remove-dev-power.power_state.patch driver-core/pm-handle-device-registrations-during-suspend-resume.patch driver-core/pm-make-wakeup-flags-available-whenever-config_pm-is-set.patch driver-core/driver-core-call-device_pm_add-after-bus_add_device-in-device_add.patch _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm