Blame view
include/linux/pm_runtime.h
8.43 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 |
} |
f3393b62f PM / Runtime: Add... |
79 80 81 82 |
static inline bool pm_runtime_status_suspended(struct device *dev) { return dev->power.runtime_status == RPM_SUSPENDED; } |
4b31db8a1 PM / Runtime: Gen... |
83 84 85 86 |
static inline bool pm_runtime_enabled(struct device *dev) { return !dev->power.disable_depth; } |
cb8f51bda PM: Do not create... |
87 88 89 90 |
static inline bool pm_runtime_callbacks_present(struct device *dev) { return !dev->power.no_callbacks; } |
15bcb91d7 PM / Runtime: Imp... |
91 92 93 94 |
static inline void pm_runtime_mark_last_busy(struct device *dev) { ACCESS_ONCE(dev->power.last_busy) = jiffies; } |
5e928f77a PM: Introduce cor... |
95 |
#else /* !CONFIG_PM_RUNTIME */ |
140a6c945 PM / Runtime: Com... |
96 97 98 99 100 101 102 103 104 105 106 107 |
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... |
108 109 110 111 |
static inline int pm_schedule_suspend(struct device *dev, unsigned int delay) { return -ENOSYS; } |
5e928f77a PM: Introduce cor... |
112 113 114 115 116 |
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... |
117 118 |
static inline void pm_runtime_allow(struct device *dev) {} static inline void pm_runtime_forbid(struct device *dev) {} |
5e928f77a PM: Introduce cor... |
119 120 121 122 123 |
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 ... |
124 125 |
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... |
126 |
static inline bool pm_runtime_suspended(struct device *dev) { return false; } |
f3393b62f PM / Runtime: Add... |
127 |
static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } |
4b31db8a1 PM / Runtime: Gen... |
128 |
static inline bool pm_runtime_enabled(struct device *dev) { return false; } |
5e928f77a PM: Introduce cor... |
129 |
|
2f60ba706 i2c: Fix bus-leve... |
130 131 132 |
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... |
133 |
static inline void pm_runtime_no_callbacks(struct device *dev) {} |
c7b61de5b PM / Runtime: Add... |
134 |
static inline void pm_runtime_irq_safe(struct device *dev) {} |
2f60ba706 i2c: Fix bus-leve... |
135 |
|
cb8f51bda PM: Do not create... |
136 |
static inline bool pm_runtime_callbacks_present(struct device *dev) { return false; } |
15bcb91d7 PM / Runtime: Imp... |
137 138 139 140 141 142 143 |
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... |
144 |
#endif /* !CONFIG_PM_RUNTIME */ |
140a6c945 PM / Runtime: Com... |
145 146 147 148 149 150 151 152 153 |
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... |
154 155 156 157 |
static inline int pm_runtime_autosuspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_AUTO); } |
140a6c945 PM / Runtime: Com... |
158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
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 ... |
172 173 174 175 |
static inline int pm_request_autosuspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_ASYNC | RPM_AUTO); } |
5e928f77a PM: Introduce cor... |
176 177 |
static inline int pm_runtime_get(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
178 |
return __pm_runtime_resume(dev, RPM_GET_PUT | RPM_ASYNC); |
5e928f77a PM: Introduce cor... |
179 180 181 182 |
} static inline int pm_runtime_get_sync(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
183 |
return __pm_runtime_resume(dev, RPM_GET_PUT); |
5e928f77a PM: Introduce cor... |
184 185 186 187 |
} static inline int pm_runtime_put(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
188 |
return __pm_runtime_idle(dev, RPM_GET_PUT | RPM_ASYNC); |
5e928f77a PM: Introduce cor... |
189 |
} |
15bcb91d7 PM / Runtime: Imp... |
190 191 192 193 194 |
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... |
195 196 |
static inline int pm_runtime_put_sync(struct device *dev) { |
140a6c945 PM / Runtime: Com... |
197 |
return __pm_runtime_idle(dev, RPM_GET_PUT); |
5e928f77a PM: Introduce cor... |
198 |
} |
c7b61de5b PM / Runtime: Add... |
199 200 201 202 |
static inline int pm_runtime_put_sync_suspend(struct device *dev) { return __pm_runtime_suspend(dev, RPM_GET_PUT); } |
15bcb91d7 PM / Runtime: Imp... |
203 204 205 206 |
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... |
207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
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... |
221 222 223 224 225 226 227 228 229 |
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); } |
85eb8c8d0 PM / Runtime: Gen... |
230 231 |
struct pm_clk_notifier_block { struct notifier_block nb; |
564b905ab PM / Domains: Ren... |
232 |
struct dev_pm_domain *pm_domain; |
85eb8c8d0 PM / Runtime: Gen... |
233 234 |
char *con_ids[]; }; |
b7b95920a PM: Allow the clo... |
235 |
#ifdef CONFIG_PM_CLK |
3d5c30367 PM: Rename clock ... |
236 237 238 239 240 241 |
extern int pm_clk_init(struct device *dev); extern void pm_clk_destroy(struct device *dev); extern int pm_clk_add(struct device *dev, const char *con_id); extern void pm_clk_remove(struct device *dev, const char *con_id); extern int pm_clk_suspend(struct device *dev); extern int pm_clk_resume(struct device *dev); |
85eb8c8d0 PM / Runtime: Gen... |
242 |
#else |
3d5c30367 PM: Rename clock ... |
243 |
static inline int pm_clk_init(struct device *dev) |
85eb8c8d0 PM / Runtime: Gen... |
244 245 246 |
{ return -EINVAL; } |
3d5c30367 PM: Rename clock ... |
247 |
static inline void pm_clk_destroy(struct device *dev) |
85eb8c8d0 PM / Runtime: Gen... |
248 249 |
{ } |
3d5c30367 PM: Rename clock ... |
250 |
static inline int pm_clk_add(struct device *dev, const char *con_id) |
85eb8c8d0 PM / Runtime: Gen... |
251 252 253 |
{ return -EINVAL; } |
3d5c30367 PM: Rename clock ... |
254 |
static inline void pm_clk_remove(struct device *dev, const char *con_id) |
85eb8c8d0 PM / Runtime: Gen... |
255 256 |
{ } |
3d5c30367 PM: Rename clock ... |
257 258 |
#define pm_clk_suspend NULL #define pm_clk_resume NULL |
85eb8c8d0 PM / Runtime: Gen... |
259 260 261 |
#endif #ifdef CONFIG_HAVE_CLK |
3d5c30367 PM: Rename clock ... |
262 |
extern void pm_clk_add_notifier(struct bus_type *bus, |
85eb8c8d0 PM / Runtime: Gen... |
263 264 |
struct pm_clk_notifier_block *clknb); #else |
3d5c30367 PM: Rename clock ... |
265 |
static inline void pm_clk_add_notifier(struct bus_type *bus, |
85eb8c8d0 PM / Runtime: Gen... |
266 267 268 269 |
struct pm_clk_notifier_block *clknb) { } #endif |
5e928f77a PM: Introduce cor... |
270 |
#endif |