Blame view
include/linux/pm_runtime.h
7 KB
5e928f77a PM: Introduce cor... |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * pm_runtime.h - Device run-time power management helper functions. * * Copyright (C) 2009 Rafael J. Wysocki <rjw@sisk.pl> * * This file is released under the GPLv2. */ #ifndef _LINUX_PM_RUNTIME_H #define _LINUX_PM_RUNTIME_H #include <linux/device.h> #include <linux/pm.h> |
15bcb91d7 PM / Runtime: Imp... |
14 |
#include <linux/jiffies.h> |
3f9af0513 PM / Runtime: Rep... |
15 16 17 18 |
/* Runtime PM flag argument bits */ #define RPM_ASYNC 0x01 /* Request is asynchronous */ #define RPM_NOWAIT 0x02 /* Don't wait for concurrent state change */ |
140a6c945 PM / Runtime: Com... |
19 20 |
#define RPM_GET_PUT 0x04 /* Increment/decrement the usage_count */ |
15bcb91d7 PM / Runtime: Imp... |
21 |
#define RPM_AUTO 0x08 /* Use autosuspend_delay */ |
3f9af0513 PM / Runtime: Rep... |
22 |
|
5e928f77a PM: Introduce cor... |
23 24 25 |
#ifdef CONFIG_PM_RUNTIME extern struct workqueue_struct *pm_wq; |
140a6c945 PM / Runtime: Com... |
26 27 28 |
extern int __pm_runtime_idle(struct device *dev, int rpmflags); extern int __pm_runtime_suspend(struct device *dev, int rpmflags); extern int __pm_runtime_resume(struct device *dev, int rpmflags); |
5e928f77a PM: Introduce cor... |
29 |
extern int pm_schedule_suspend(struct device *dev, unsigned int delay); |
5e928f77a PM: Introduce cor... |
30 31 32 33 |
extern int __pm_runtime_set_status(struct device *dev, unsigned int status); extern int pm_runtime_barrier(struct device *dev); extern void pm_runtime_enable(struct device *dev); extern void __pm_runtime_disable(struct device *dev, bool check_resume); |
538236391 PM / Runtime: Add... |
34 35 |
extern void pm_runtime_allow(struct device *dev); extern void pm_runtime_forbid(struct device *dev); |
2f60ba706 i2c: Fix bus-leve... |
36 37 38 |
extern int pm_generic_runtime_idle(struct device *dev); extern int pm_generic_runtime_suspend(struct device *dev); extern int pm_generic_runtime_resume(struct device *dev); |
7490e4423 PM / Runtime: Add... |
39 |
extern void pm_runtime_no_callbacks(struct device *dev); |
c7b61de5b PM / Runtime: Add... |
40 |
extern void pm_runtime_irq_safe(struct device *dev); |
15bcb91d7 PM / Runtime: Imp... |
41 42 43 |
extern void __pm_runtime_use_autosuspend(struct device *dev, bool use); extern void pm_runtime_set_autosuspend_delay(struct device *dev, int delay); extern unsigned long pm_runtime_autosuspend_expiration(struct device *dev); |
5e928f77a PM: Introduce cor... |
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
static inline bool pm_children_suspended(struct device *dev) { return dev->power.ignore_children || !atomic_read(&dev->power.child_count); } static inline void pm_suspend_ignore_children(struct device *dev, bool enable) { dev->power.ignore_children = enable; } static inline void pm_runtime_get_noresume(struct device *dev) { atomic_inc(&dev->power.usage_count); } static inline void pm_runtime_put_noidle(struct device *dev) { atomic_add_unless(&dev->power.usage_count, -1, 0); } |
7a1a8eb58 PM: Add flag for ... |
65 66 67 68 69 70 71 72 73 |
static inline bool device_run_wake(struct device *dev) { return dev->power.run_wake; } static inline void device_set_run_wake(struct device *dev, bool enable) { dev->power.run_wake = enable; } |
d690b2cd2 PM: Provide gener... |
74 75 |
static inline bool pm_runtime_suspended(struct device *dev) { |
f08f5a0ad PM / Runtime: Fix... |
76 77 |
return dev->power.runtime_status == RPM_SUSPENDED && !dev->power.disable_depth; |
d690b2cd2 PM: Provide gener... |
78 |
} |
4b31db8a1 PM / Runtime: Gen... |
79 80 81 82 |
static inline bool pm_runtime_enabled(struct device *dev) { return !dev->power.disable_depth; } |
15bcb91d7 PM / Runtime: Imp... |
83 84 85 86 |
static inline void pm_runtime_mark_last_busy(struct device *dev) { ACCESS_ONCE(dev->power.last_busy) = jiffies; } |
5e928f77a PM: Introduce cor... |
87 |
#else /* !CONFIG_PM_RUNTIME */ |
140a6c945 PM / Runtime: Com... |
88 89 90 91 92 93 94 95 96 97 98 99 |
static inline int __pm_runtime_idle(struct device *dev, int rpmflags) { return -ENOSYS; } static inline int __pm_runtime_suspend(struct device *dev, int rpmflags) { return -ENOSYS; } static inline int __pm_runtime_resume(struct device *dev, int rpmflags) { return 1; } |
5e928f77a PM: Introduce cor... |
100 101 102 103 |
static inline int pm_schedule_suspend(struct device *dev, unsigned int delay) { return -ENOSYS; } |
5e928f77a PM: Introduce cor... |
104 105 106 107 108 |
static inline int __pm_runtime_set_status(struct device *dev, unsigned int status) { return 0; } static inline int pm_runtime_barrier(struct device *dev) { return 0; } static inline void pm_runtime_enable(struct device *dev) {} static inline void __pm_runtime_disable(struct device *dev, bool c) {} |
538236391 PM / Runtime: Add... |
109 110 |
static inline void pm_runtime_allow(struct device *dev) {} static inline void pm_runtime_forbid(struct device *dev) {} |
5e928f77a PM: Introduce cor... |
111 112 113 114 115 |
static inline bool pm_children_suspended(struct device *dev) { return false; } static inline void pm_suspend_ignore_children(struct device *dev, bool en) {} static inline void pm_runtime_get_noresume(struct device *dev) {} static inline void pm_runtime_put_noidle(struct device *dev) {} |
7a1a8eb58 PM: Add flag for ... |
116 117 |
static inline bool device_run_wake(struct device *dev) { return false; } static inline void device_set_run_wake(struct device *dev, bool enable) {} |
d690b2cd2 PM: Provide gener... |
118 |
static inline bool pm_runtime_suspended(struct device *dev) { return false; } |
4b31db8a1 PM / Runtime: Gen... |
119 |
static inline bool pm_runtime_enabled(struct device *dev) { return false; } |
5e928f77a PM: Introduce cor... |
120 |
|
2f60ba706 i2c: Fix bus-leve... |
121 122 123 |
static inline int pm_generic_runtime_idle(struct device *dev) { return 0; } static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } |
7490e4423 PM / Runtime: Add... |
124 |
static inline void pm_runtime_no_callbacks(struct device *dev) {} |
c7b61de5b PM / Runtime: Add... |
125 |
static inline void pm_runtime_irq_safe(struct device *dev) {} |
2f60ba706 i2c: Fix bus-leve... |
126 |
|
15bcb91d7 PM / Runtime: Imp... |
127 128 129 130 131 132 133 |
static inline void pm_runtime_mark_last_busy(struct device *dev) {} static inline void __pm_runtime_use_autosuspend(struct device *dev, bool use) {} static inline void pm_runtime_set_autosuspend_delay(struct device *dev, int delay) {} static inline unsigned long pm_runtime_autosuspend_expiration( struct device *dev) { return 0; } |
5e928f77a PM: Introduce cor... |
134 |
#endif /* !CONFIG_PM_RUNTIME */ |
140a6c945 PM / Runtime: Com... |
135 136 137 138 139 140 141 142 143 |
static inline int pm_runtime_idle(struct device *dev) { return __pm_runtime_idle(dev, 0); } static inline int pm_runtime_suspend(struct device *dev) { return __pm_runtime_suspend(dev, 0); } |
15bcb91d7 PM / Runtime: Imp... |
144 145 146 147 |
static inline int pm_runtime_autosuspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_AUTO); } |
140a6c945 PM / Runtime: Com... |
148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
static inline int pm_runtime_resume(struct device *dev) { return __pm_runtime_resume(dev, 0); } static inline int pm_request_idle(struct device *dev) { return __pm_runtime_idle(dev, RPM_ASYNC); } static inline int pm_request_resume(struct device *dev) { return __pm_runtime_resume(dev, RPM_ASYNC); } |
5fc62aad4 PM: runtime: add ... |
162 163 164 165 |
static inline int pm_request_autosuspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_ASYNC | RPM_AUTO); } |
5e928f77a PM: Introduce cor... |
166 167 |
static inline int pm_runtime_get(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
168 |
return __pm_runtime_resume(dev, RPM_GET_PUT | RPM_ASYNC); |
5e928f77a PM: Introduce cor... |
169 170 171 172 |
} static inline int pm_runtime_get_sync(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
173 |
return __pm_runtime_resume(dev, RPM_GET_PUT); |
5e928f77a PM: Introduce cor... |
174 175 176 177 |
} static inline int pm_runtime_put(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
178 |
return __pm_runtime_idle(dev, RPM_GET_PUT | RPM_ASYNC); |
5e928f77a PM: Introduce cor... |
179 |
} |
15bcb91d7 PM / Runtime: Imp... |
180 181 182 183 184 |
static inline int pm_runtime_put_autosuspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_GET_PUT | RPM_ASYNC | RPM_AUTO); } |
5e928f77a PM: Introduce cor... |
185 186 |
static inline int pm_runtime_put_sync(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
187 |
return __pm_runtime_idle(dev, RPM_GET_PUT); |
5e928f77a PM: Introduce cor... |
188 |
} |
c7b61de5b PM / Runtime: Add... |
189 190 191 192 |
static inline int pm_runtime_put_sync_suspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_GET_PUT); } |
15bcb91d7 PM / Runtime: Imp... |
193 194 195 196 |
static inline int pm_runtime_put_sync_autosuspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_GET_PUT | RPM_AUTO); } |
5e928f77a PM: Introduce cor... |
197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
static inline int pm_runtime_set_active(struct device *dev) { return __pm_runtime_set_status(dev, RPM_ACTIVE); } static inline void pm_runtime_set_suspended(struct device *dev) { __pm_runtime_set_status(dev, RPM_SUSPENDED); } static inline void pm_runtime_disable(struct device *dev) { __pm_runtime_disable(dev, true); } |
15bcb91d7 PM / Runtime: Imp... |
211 212 213 214 215 216 217 218 219 |
static inline void pm_runtime_use_autosuspend(struct device *dev) { __pm_runtime_use_autosuspend(dev, true); } static inline void pm_runtime_dont_use_autosuspend(struct device *dev) { __pm_runtime_use_autosuspend(dev, false); } |
5e928f77a PM: Introduce cor... |
220 |
#endif |