On Wednesday 19 March 2008, Rafael J. Wysocki wrote: > 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 (as1056b) > fixes the oversight. More accurately, fixes the "regression" ... as noted sometime last summer, after 296699de6bdc717189a331ab6bbe90e05c94db06 introduced CONFIG_SUSPEND. But that didn't make the regression list for that kernel, ergo the delay in fixing it. - Dave > [rjw: rebased] > > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> > --- > drivers/base/power/main.c | 2 -- > drivers/base/power/sysfs.c | 2 ++ > include/linux/pm.h | 36 +++++++++++++++++++++--------------- > 3 files changed, 23 insertions(+), 17 deletions(-) > > Index: linux-2.6/include/linux/pm.h > =================================================================== > --- linux-2.6.orig/include/linux/pm.h > +++ linux-2.6/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,24 @@ 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 > + > +#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,24 +237,17 @@ static inline int call_platform_enable_w > return 0; > } > > -#else /* !CONFIG_PM_SLEEP */ > - > -static inline int device_suspend(pm_message_t state) > -{ > - return 0; > -} > +#else /* !CONFIG_PM */ > > #define device_set_wakeup_enable(dev,val) do{}while(0) > #define device_may_wakeup(dev) (0) > > -#define suspend_report_result(fn, ret) do { } while (0) > - > static inline int call_platform_enable_wakeup(struct device *dev, int is_on) > { > return 0; > } > > -#endif /* !CONFIG_PM_SLEEP */ > +#endif /* !CONFIG_PM */ > > /* changes to device_may_wakeup take effect on the next pm state change. > * by default, devices should wakeup if they can. > Index: linux-2.6/drivers/base/power/main.c > =================================================================== > --- linux-2.6.orig/drivers/base/power/main.c > +++ linux-2.6/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 > Index: linux-2.6/drivers/base/power/sysfs.c > =================================================================== > --- linux-2.6.orig/drivers/base/power/sysfs.c > +++ linux-2.6/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 > > _______________________________________________ > linux-pm mailing list > linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx > https://lists.linux-foundation.org/mailman/listinfo/linux-pm > _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm