Blame view
include/linux/pm_runtime.h
7.85 KB
5e928f77a PM: Introduce cor... |
1 2 3 4 5 6 7 8 9 10 11 12 |
/* * 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> |
246359d37 pm_runtime.h: exp... |
13 |
#include <linux/notifier.h> |
5e928f77a PM: Introduce cor... |
14 |
#include <linux/pm.h> |
15bcb91d7 PM / Runtime: Imp... |
15 |
#include <linux/jiffies.h> |
3f9af0513 PM / Runtime: Rep... |
16 17 18 19 |
/* 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... |
20 21 |
#define RPM_GET_PUT 0x04 /* Increment/decrement the usage_count */ |
15bcb91d7 PM / Runtime: Imp... |
22 |
#define RPM_AUTO 0x08 /* Use autosuspend_delay */ |
3f9af0513 PM / Runtime: Rep... |
23 |
|
717e5d458 PM / Runtime: Imp... |
24 25 26 |
#ifdef CONFIG_PM extern int pm_generic_runtime_suspend(struct device *dev); extern int pm_generic_runtime_resume(struct device *dev); |
37f204164 PM: Add pm_runtim... |
27 28 |
extern int pm_runtime_force_suspend(struct device *dev); extern int pm_runtime_force_resume(struct device *dev); |
717e5d458 PM / Runtime: Imp... |
29 30 31 |
#else static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } |
37f204164 PM: Add pm_runtim... |
32 33 |
static inline int pm_runtime_force_suspend(struct device *dev) { return 0; } static inline int pm_runtime_force_resume(struct device *dev) { return 0; } |
717e5d458 PM / Runtime: Imp... |
34 |
#endif |
5e928f77a PM: Introduce cor... |
35 36 37 |
#ifdef CONFIG_PM_RUNTIME extern struct workqueue_struct *pm_wq; |
140a6c945 PM / Runtime: Com... |
38 39 40 |
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... |
41 |
extern int pm_schedule_suspend(struct device *dev, unsigned int delay); |
5e928f77a PM: Introduce cor... |
42 43 44 45 |
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... |
46 47 |
extern void pm_runtime_allow(struct device *dev); extern void pm_runtime_forbid(struct device *dev); |
7490e4423 PM / Runtime: Add... |
48 |
extern void pm_runtime_no_callbacks(struct device *dev); |
c7b61de5b PM / Runtime: Add... |
49 |
extern void pm_runtime_irq_safe(struct device *dev); |
15bcb91d7 PM / Runtime: Imp... |
50 51 52 |
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); |
00dc9ad18 PM / Runtime: Use... |
53 54 |
extern void pm_runtime_update_max_time_suspended(struct device *dev, s64 delta_ns); |
e823407f7 pm / runtime: int... |
55 |
extern void pm_runtime_set_memalloc_noio(struct device *dev, bool enable); |
5e928f77a PM: Introduce cor... |
56 57 58 59 60 61 |
static inline bool pm_children_suspended(struct device *dev) { return dev->power.ignore_children || !atomic_read(&dev->power.child_count); } |
5e928f77a PM: Introduce cor... |
62 63 64 65 66 67 68 69 70 |
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 ... |
71 72 73 74 75 76 77 78 79 |
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... |
80 81 |
static inline bool pm_runtime_suspended(struct device *dev) { |
f08f5a0ad PM / Runtime: Fix... |
82 83 |
return dev->power.runtime_status == RPM_SUSPENDED && !dev->power.disable_depth; |
d690b2cd2 PM: Provide gener... |
84 |
} |
fbadc58dd PM / Runtime: Add... |
85 86 87 88 89 |
static inline bool pm_runtime_active(struct device *dev) { return dev->power.runtime_status == RPM_ACTIVE || dev->power.disable_depth; } |
f3393b62f PM / Runtime: Add... |
90 91 92 93 |
static inline bool pm_runtime_status_suspended(struct device *dev) { return dev->power.runtime_status == RPM_SUSPENDED; } |
4b31db8a1 PM / Runtime: Gen... |
94 95 96 97 |
static inline bool pm_runtime_enabled(struct device *dev) { return !dev->power.disable_depth; } |
cb8f51bda PM: Do not create... |
98 99 100 101 |
static inline bool pm_runtime_callbacks_present(struct device *dev) { return !dev->power.no_callbacks; } |
15bcb91d7 PM / Runtime: Imp... |
102 103 104 105 |
static inline void pm_runtime_mark_last_busy(struct device *dev) { ACCESS_ONCE(dev->power.last_busy) = jiffies; } |
5e928f77a PM: Introduce cor... |
106 |
#else /* !CONFIG_PM_RUNTIME */ |
140a6c945 PM / Runtime: Com... |
107 108 109 110 111 112 113 114 115 116 117 118 |
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... |
119 120 121 122 |
static inline int pm_schedule_suspend(struct device *dev, unsigned int delay) { return -ENOSYS; } |
5e928f77a PM: Introduce cor... |
123 124 125 126 127 |
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... |
128 129 |
static inline void pm_runtime_allow(struct device *dev) {} static inline void pm_runtime_forbid(struct device *dev) {} |
5e928f77a PM: Introduce cor... |
130 131 |
static inline bool pm_children_suspended(struct device *dev) { return false; } |
5e928f77a PM: Introduce cor... |
132 133 |
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 ... |
134 135 |
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... |
136 |
static inline bool pm_runtime_suspended(struct device *dev) { return false; } |
fbadc58dd PM / Runtime: Add... |
137 |
static inline bool pm_runtime_active(struct device *dev) { return true; } |
f3393b62f PM / Runtime: Add... |
138 |
static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } |
4b31db8a1 PM / Runtime: Gen... |
139 |
static inline bool pm_runtime_enabled(struct device *dev) { return false; } |
5e928f77a PM: Introduce cor... |
140 |
|
7490e4423 PM / Runtime: Add... |
141 |
static inline void pm_runtime_no_callbacks(struct device *dev) {} |
c7b61de5b PM / Runtime: Add... |
142 |
static inline void pm_runtime_irq_safe(struct device *dev) {} |
2f60ba706 i2c: Fix bus-leve... |
143 |
|
cb8f51bda PM: Do not create... |
144 |
static inline bool pm_runtime_callbacks_present(struct device *dev) { return false; } |
15bcb91d7 PM / Runtime: Imp... |
145 146 147 148 149 150 151 |
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; } |
e823407f7 pm / runtime: int... |
152 153 |
static inline void pm_runtime_set_memalloc_noio(struct device *dev, bool enable){} |
15bcb91d7 PM / Runtime: Imp... |
154 |
|
5e928f77a PM: Introduce cor... |
155 |
#endif /* !CONFIG_PM_RUNTIME */ |
140a6c945 PM / Runtime: Com... |
156 157 158 159 160 161 162 163 164 |
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... |
165 166 167 168 |
static inline int pm_runtime_autosuspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_AUTO); } |
140a6c945 PM / Runtime: Com... |
169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
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 ... |
183 184 185 186 |
static inline int pm_request_autosuspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_ASYNC | RPM_AUTO); } |
5e928f77a PM: Introduce cor... |
187 188 |
static inline int pm_runtime_get(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
189 |
return __pm_runtime_resume(dev, RPM_GET_PUT | RPM_ASYNC); |
5e928f77a PM: Introduce cor... |
190 191 192 193 |
} static inline int pm_runtime_get_sync(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
194 |
return __pm_runtime_resume(dev, RPM_GET_PUT); |
5e928f77a PM: Introduce cor... |
195 196 197 198 |
} static inline int pm_runtime_put(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
199 |
return __pm_runtime_idle(dev, RPM_GET_PUT | RPM_ASYNC); |
5e928f77a PM: Introduce cor... |
200 |
} |
15bcb91d7 PM / Runtime: Imp... |
201 202 203 204 205 |
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... |
206 207 |
static inline int pm_runtime_put_sync(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
208 |
return __pm_runtime_idle(dev, RPM_GET_PUT); |
5e928f77a PM: Introduce cor... |
209 |
} |
c7b61de5b PM / Runtime: Add... |
210 211 212 213 |
static inline int pm_runtime_put_sync_suspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_GET_PUT); } |
15bcb91d7 PM / Runtime: Imp... |
214 215 216 217 |
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... |
218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
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... |
232 233 234 235 236 237 238 239 240 |
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... |
241 |
#endif |