Branch data Line data Source code
1 : : #include <linux/pm_qos.h>
2 : :
3 : : static inline void device_pm_init_common(struct device *dev)
4 : : {
5 [ # # ][ + - ]: 128 : if (!dev->power.early_init) {
6 : 128 : spin_lock_init(&dev->power.lock);
7 : 128 : dev->power.qos = NULL;
8 : 128 : dev->power.early_init = true;
9 : : }
10 : : }
11 : :
12 : : #ifdef CONFIG_PM_RUNTIME
13 : :
14 : : static inline void pm_runtime_early_init(struct device *dev)
15 : : {
16 : : dev->power.disable_depth = 1;
17 : : device_pm_init_common(dev);
18 : : }
19 : :
20 : : extern void pm_runtime_init(struct device *dev);
21 : : extern void pm_runtime_remove(struct device *dev);
22 : :
23 : : #else /* !CONFIG_PM_RUNTIME */
24 : :
25 : : static inline void pm_runtime_early_init(struct device *dev)
26 : : {
27 : : device_pm_init_common(dev);
28 : : }
29 : :
30 : : static inline void pm_runtime_init(struct device *dev) {}
31 : : static inline void pm_runtime_remove(struct device *dev) {}
32 : :
33 : : #endif /* !CONFIG_PM_RUNTIME */
34 : :
35 : : #ifdef CONFIG_PM_SLEEP
36 : :
37 : : /* kernel/power/main.c */
38 : : extern int pm_async_enabled;
39 : :
40 : : /* drivers/base/power/main.c */
41 : : extern struct list_head dpm_list; /* The active device list */
42 : :
43 : : static inline struct device *to_device(struct list_head *entry)
44 : : {
45 : : return container_of(entry, struct device, power.entry);
46 : : }
47 : :
48 : : extern void device_pm_sleep_init(struct device *dev);
49 : : extern void device_pm_add(struct device *);
50 : : extern void device_pm_remove(struct device *);
51 : : extern void device_pm_move_before(struct device *, struct device *);
52 : : extern void device_pm_move_after(struct device *, struct device *);
53 : : extern void device_pm_move_last(struct device *);
54 : :
55 : : #else /* !CONFIG_PM_SLEEP */
56 : :
57 : : static inline void device_pm_sleep_init(struct device *dev) {}
58 : :
59 : : static inline void device_pm_add(struct device *dev) {}
60 : :
61 : : static inline void device_pm_remove(struct device *dev)
62 : : {
63 : : pm_runtime_remove(dev);
64 : : }
65 : :
66 : : static inline void device_pm_move_before(struct device *deva,
67 : : struct device *devb) {}
68 : : static inline void device_pm_move_after(struct device *deva,
69 : : struct device *devb) {}
70 : : static inline void device_pm_move_last(struct device *dev) {}
71 : :
72 : : #endif /* !CONFIG_PM_SLEEP */
73 : :
74 : : static inline void device_pm_init(struct device *dev)
75 : : {
76 : : device_pm_init_common(dev);
77 : 128 : device_pm_sleep_init(dev);
78 : : pm_runtime_init(dev);
79 : : }
80 : :
81 : : #ifdef CONFIG_PM
82 : :
83 : : /*
84 : : * sysfs.c
85 : : */
86 : :
87 : : extern int dpm_sysfs_add(struct device *dev);
88 : : extern void dpm_sysfs_remove(struct device *dev);
89 : : extern void rpm_sysfs_remove(struct device *dev);
90 : : extern int wakeup_sysfs_add(struct device *dev);
91 : : extern void wakeup_sysfs_remove(struct device *dev);
92 : : extern int pm_qos_sysfs_add_latency(struct device *dev);
93 : : extern void pm_qos_sysfs_remove_latency(struct device *dev);
94 : : extern int pm_qos_sysfs_add_flags(struct device *dev);
95 : : extern void pm_qos_sysfs_remove_flags(struct device *dev);
96 : :
97 : : #else /* CONFIG_PM */
98 : :
99 : : static inline int dpm_sysfs_add(struct device *dev) { return 0; }
100 : : static inline void dpm_sysfs_remove(struct device *dev) {}
101 : : static inline void rpm_sysfs_remove(struct device *dev) {}
102 : : static inline int wakeup_sysfs_add(struct device *dev) { return 0; }
103 : : static inline void wakeup_sysfs_remove(struct device *dev) {}
104 : : static inline int pm_qos_sysfs_add(struct device *dev) { return 0; }
105 : : static inline void pm_qos_sysfs_remove(struct device *dev) {}
106 : :
107 : : #endif
|