blob: 76aca48722aeb116556b36d478e1e114834c8446 [file] [log] [blame]
Alan Stern9a3df1f2008-03-19 22:39:13 +01001/*
2 * pm_wakeup.h - Power management wakeup interface
3 *
4 * Copyright (C) 2008 Alan Stern
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#ifndef _LINUX_PM_WAKEUP_H
22#define _LINUX_PM_WAKEUP_H
23
24#ifndef _DEVICE_H_
25# error "please don't include this file directly"
26#endif
27
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010028#include <linux/types.h>
29
Alan Stern9a3df1f2008-03-19 22:39:13 +010030#ifdef CONFIG_PM
31
Alan Stern2430d122010-06-13 00:36:52 +020032/* Changes to device_may_wakeup take effect on the next pm state change.
33 *
34 * By default, most devices should leave wakeup disabled. The exceptions
35 * are devices that everyone expects to be wakeup sources: keyboards,
36 * power buttons, possibly network interfaces, etc.
Alan Stern9a3df1f2008-03-19 22:39:13 +010037 */
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010038static inline void device_init_wakeup(struct device *dev, bool val)
Alan Stern9a3df1f2008-03-19 22:39:13 +010039{
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010040 dev->power.can_wakeup = dev->power.should_wakeup = val;
Alan Stern9a3df1f2008-03-19 22:39:13 +010041}
42
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010043static inline void device_set_wakeup_capable(struct device *dev, bool capable)
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +020044{
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010045 dev->power.can_wakeup = capable;
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +020046}
47
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010048static inline bool device_can_wakeup(struct device *dev)
Alan Stern9a3df1f2008-03-19 22:39:13 +010049{
50 return dev->power.can_wakeup;
51}
52
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010053static inline void device_set_wakeup_enable(struct device *dev, bool enable)
Alan Stern9a3df1f2008-03-19 22:39:13 +010054{
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010055 dev->power.should_wakeup = enable;
Alan Stern9a3df1f2008-03-19 22:39:13 +010056}
57
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010058static inline bool device_may_wakeup(struct device *dev)
Alan Stern9a3df1f2008-03-19 22:39:13 +010059{
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +020060 return dev->power.can_wakeup && dev->power.should_wakeup;
Alan Stern9a3df1f2008-03-19 22:39:13 +010061}
62
63#else /* !CONFIG_PM */
64
Alan Stern2430d122010-06-13 00:36:52 +020065/* For some reason the following routines work even without CONFIG_PM */
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010066static inline void device_init_wakeup(struct device *dev, bool val)
Alan Stern9a3df1f2008-03-19 22:39:13 +010067{
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010068 dev->power.can_wakeup = val;
Alan Stern9a3df1f2008-03-19 22:39:13 +010069}
70
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010071static inline void device_set_wakeup_capable(struct device *dev, bool capable)
72{
Alan Stern2430d122010-06-13 00:36:52 +020073 dev->power.can_wakeup = capable;
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010074}
Stephen Rothwellc300bd2fb2008-07-10 02:16:44 +020075
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010076static inline bool device_can_wakeup(struct device *dev)
Alan Stern9a3df1f2008-03-19 22:39:13 +010077{
78 return dev->power.can_wakeup;
79}
80
Dmitry Torokhov228c54e2010-03-15 21:44:41 +010081static inline void device_set_wakeup_enable(struct device *dev, bool enable)
82{
83}
84
85static inline bool device_may_wakeup(struct device *dev)
86{
87 return false;
88}
Alan Stern9a3df1f2008-03-19 22:39:13 +010089
Alan Stern9a3df1f2008-03-19 22:39:13 +010090#endif /* !CONFIG_PM */
91
92#endif /* _LINUX_PM_WAKEUP_H */