diff options
author | David Brownell <david-b@pacbell.net> | 2007-04-26 03:12:06 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-04-27 13:57:33 -0400 |
commit | 075c1771526c85849ed22298d048bc07e400aee5 (patch) | |
tree | a1579e93b450b0e870a7a65698f9a07bddbfd899 /include/linux | |
parent | 057f6c019fff9ee290641d50647359bb8898918e (diff) |
define platform wakeup hook, use in pci_enable_wake()
This defines a platform hook to enable/disable a device as a wakeup event
source. It's initially for use with ACPI, but more generally it could be used
whenever enable_irq_wake()/disable_irq_wake() don't suffice.
The hook is called -- if available -- inside pci_enable_wake(); and the
semantics of that call are enhanced so that support for PCI PME# is no longer
needed. It can now work for devices with "legacy PCI PM", when platform
support allows it. (That support would use some board-specific signal for for
the same purpose as PME#.)
[akpm@linux-foundation.org: Make it compile with CONFIG_PM=n]
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Cc: Len Brown <lenb@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/pm.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/pm.h b/include/linux/pm.h index 21db05ac7c0b..b0ab623adbf5 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -273,6 +273,20 @@ extern void __suspend_report_result(const char *function, void *fn, int ret); | |||
273 | __suspend_report_result(__FUNCTION__, fn, ret); \ | 273 | __suspend_report_result(__FUNCTION__, fn, ret); \ |
274 | } while (0) | 274 | } while (0) |
275 | 275 | ||
276 | /* | ||
277 | * Platform hook to activate device wakeup capability, if that's not already | ||
278 | * handled by enable_irq_wake() etc. | ||
279 | * Returns zero on success, else negative errno | ||
280 | */ | ||
281 | extern int (*platform_enable_wakeup)(struct device *dev, int is_on); | ||
282 | |||
283 | static inline int call_platform_enable_wakeup(struct device *dev, int is_on) | ||
284 | { | ||
285 | if (platform_enable_wakeup) | ||
286 | return (*platform_enable_wakeup)(dev, is_on); | ||
287 | return 0; | ||
288 | } | ||
289 | |||
276 | #else /* !CONFIG_PM */ | 290 | #else /* !CONFIG_PM */ |
277 | 291 | ||
278 | static inline int device_suspend(pm_message_t state) | 292 | static inline int device_suspend(pm_message_t state) |
@@ -294,6 +308,11 @@ static inline void dpm_runtime_resume(struct device * dev) | |||
294 | 308 | ||
295 | #define suspend_report_result(fn, ret) do { } while (0) | 309 | #define suspend_report_result(fn, ret) do { } while (0) |
296 | 310 | ||
311 | static inline int call_platform_enable_wakeup(struct device *dev, int is_on) | ||
312 | { | ||
313 | return -EIO; | ||
314 | } | ||
315 | |||
297 | #endif | 316 | #endif |
298 | 317 | ||
299 | /* changes to device_may_wakeup take effect on the next pm state change. | 318 | /* changes to device_may_wakeup take effect on the next pm state change. |