]> git.ipfire.org Git - thirdparty/kernel/linux.git/blame - drivers/base/power/power.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[thirdparty/kernel/linux.git] / drivers / base / power / power.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
1a9a9152
RW
2#include <linux/pm_qos.h>
3
e91c11b1
RW
4static inline void device_pm_init_common(struct device *dev)
5{
bed2b42d
RW
6 if (!dev->power.early_init) {
7 spin_lock_init(&dev->power.lock);
37530f2b 8 dev->power.qos = NULL;
bed2b42d
RW
9 dev->power.early_init = true;
10 }
e91c11b1
RW
11}
12
d30d819d 13#ifdef CONFIG_PM
5e928f77 14
bed2b42d
RW
15static inline void pm_runtime_early_init(struct device *dev)
16{
17 dev->power.disable_depth = 1;
18 device_pm_init_common(dev);
19}
20
5e928f77 21extern void pm_runtime_init(struct device *dev);
5de85b9d 22extern void pm_runtime_reinit(struct device *dev);
5e928f77
RW
23extern void pm_runtime_remove(struct device *dev);
24
bed57030
TL
25#define WAKE_IRQ_DEDICATED_ALLOCATED BIT(0)
26#define WAKE_IRQ_DEDICATED_MANAGED BIT(1)
27#define WAKE_IRQ_DEDICATED_MASK (WAKE_IRQ_DEDICATED_ALLOCATED | \
28 WAKE_IRQ_DEDICATED_MANAGED)
29
4990d4fe
TL
30struct wake_irq {
31 struct device *dev;
bed57030 32 unsigned int status;
4990d4fe 33 int irq;
4990d4fe
TL
34};
35
36extern void dev_pm_arm_wake_irq(struct wake_irq *wirq);
37extern void dev_pm_disarm_wake_irq(struct wake_irq *wirq);
bed57030
TL
38extern void dev_pm_enable_wake_irq_check(struct device *dev,
39 bool can_change_status);
40extern void dev_pm_disable_wake_irq_check(struct device *dev);
4990d4fe
TL
41
42#ifdef CONFIG_PM_SLEEP
43
44extern int device_wakeup_attach_irq(struct device *dev,
45 struct wake_irq *wakeirq);
46extern void device_wakeup_detach_irq(struct device *dev);
47extern void device_wakeup_arm_wake_irqs(void);
48extern void device_wakeup_disarm_wake_irqs(void);
49
50#else
51
52static inline int
53device_wakeup_attach_irq(struct device *dev,
54 struct wake_irq *wakeirq)
55{
56 return 0;
57}
58
59static inline void device_wakeup_detach_irq(struct device *dev)
60{
61}
62
63static inline void device_wakeup_arm_wake_irqs(void)
64{
65}
66
67static inline void device_wakeup_disarm_wake_irqs(void)
68{
69}
70
71#endif /* CONFIG_PM_SLEEP */
72
d30d819d
RW
73/*
74 * sysfs.c
75 */
76
77extern int dpm_sysfs_add(struct device *dev);
78extern void dpm_sysfs_remove(struct device *dev);
79extern void rpm_sysfs_remove(struct device *dev);
80extern int wakeup_sysfs_add(struct device *dev);
81extern void wakeup_sysfs_remove(struct device *dev);
82extern int pm_qos_sysfs_add_resume_latency(struct device *dev);
83extern void pm_qos_sysfs_remove_resume_latency(struct device *dev);
84extern int pm_qos_sysfs_add_flags(struct device *dev);
85extern void pm_qos_sysfs_remove_flags(struct device *dev);
13b2c4a0
MW
86extern int pm_qos_sysfs_add_latency_tolerance(struct device *dev);
87extern void pm_qos_sysfs_remove_latency_tolerance(struct device *dev);
d30d819d
RW
88
89#else /* CONFIG_PM */
5e928f77 90
bed2b42d
RW
91static inline void pm_runtime_early_init(struct device *dev)
92{
93 device_pm_init_common(dev);
94}
95
5e928f77 96static inline void pm_runtime_init(struct device *dev) {}
5de85b9d 97static inline void pm_runtime_reinit(struct device *dev) {}
5e928f77
RW
98static inline void pm_runtime_remove(struct device *dev) {}
99
d30d819d
RW
100static inline int dpm_sysfs_add(struct device *dev) { return 0; }
101static inline void dpm_sysfs_remove(struct device *dev) {}
102static inline void rpm_sysfs_remove(struct device *dev) {}
103static inline int wakeup_sysfs_add(struct device *dev) { return 0; }
104static inline void wakeup_sysfs_remove(struct device *dev) {}
105static inline int pm_qos_sysfs_add(struct device *dev) { return 0; }
106static inline void pm_qos_sysfs_remove(struct device *dev) {}
107
4990d4fe
TL
108static inline void dev_pm_arm_wake_irq(struct wake_irq *wirq)
109{
110}
111
112static inline void dev_pm_disarm_wake_irq(struct wake_irq *wirq)
113{
114}
115
bed57030
TL
116static inline void dev_pm_enable_wake_irq_check(struct device *dev,
117 bool can_change_status)
118{
119}
120
121static inline void dev_pm_disable_wake_irq_check(struct device *dev)
122{
123}
124
d30d819d 125#endif
3b98aeaf 126
296699de 127#ifdef CONFIG_PM_SLEEP
1da177e4 128
0e06b4a8
RW
129/* kernel/power/main.c */
130extern int pm_async_enabled;
1da177e4 131
0e06b4a8 132/* drivers/base/power/main.c */
1eede070 133extern struct list_head dpm_list; /* The active device list */
1da177e4 134
dec13c15 135static inline struct device *to_device(struct list_head *entry)
1da177e4 136{
cd59abfc 137 return container_of(entry, struct device, power.entry);
1da177e4
LT
138}
139
e91c11b1 140extern void device_pm_sleep_init(struct device *dev);
3b98aeaf 141extern void device_pm_add(struct device *);
1da177e4 142extern void device_pm_remove(struct device *);
ffa6a705
CH
143extern void device_pm_move_before(struct device *, struct device *);
144extern void device_pm_move_after(struct device *, struct device *);
145extern void device_pm_move_last(struct device *);
aa8e54b5 146extern void device_pm_check_callbacks(struct device *dev);
1da177e4 147
9ed98953
RW
148static inline bool device_pm_initialized(struct device *dev)
149{
150 return dev->power.in_dpm_list;
151}
152
5e928f77
RW
153#else /* !CONFIG_PM_SLEEP */
154
e91c11b1 155static inline void device_pm_sleep_init(struct device *dev) {}
5e928f77 156
37530f2b 157static inline void device_pm_add(struct device *dev) {}
1a9a9152 158
5e928f77
RW
159static inline void device_pm_remove(struct device *dev)
160{
161 pm_runtime_remove(dev);
162}
dec13c15 163
ffa6a705
CH
164static inline void device_pm_move_before(struct device *deva,
165 struct device *devb) {}
166static inline void device_pm_move_after(struct device *deva,
167 struct device *devb) {}
168static inline void device_pm_move_last(struct device *dev) {}
775b64d2 169
aa8e54b5
TV
170static inline void device_pm_check_callbacks(struct device *dev) {}
171
9ed98953
RW
172static inline bool device_pm_initialized(struct device *dev)
173{
174 return device_is_registered(dev);
175}
176
5e928f77 177#endif /* !CONFIG_PM_SLEEP */
dec13c15 178
e91c11b1
RW
179static inline void device_pm_init(struct device *dev)
180{
181 device_pm_init_common(dev);
182 device_pm_sleep_init(dev);
183 pm_runtime_init(dev);
184}