at v4.3 151 lines 4.0 kB view raw
1#include <linux/pm_qos.h> 2 3static inline void device_pm_init_common(struct device *dev) 4{ 5 if (!dev->power.early_init) { 6 spin_lock_init(&dev->power.lock); 7 dev->power.qos = NULL; 8 dev->power.early_init = true; 9 } 10} 11 12#ifdef CONFIG_PM 13 14static inline void pm_runtime_early_init(struct device *dev) 15{ 16 dev->power.disable_depth = 1; 17 device_pm_init_common(dev); 18} 19 20extern void pm_runtime_init(struct device *dev); 21extern void pm_runtime_remove(struct device *dev); 22 23struct wake_irq { 24 struct device *dev; 25 int irq; 26 bool dedicated_irq:1; 27}; 28 29extern void dev_pm_arm_wake_irq(struct wake_irq *wirq); 30extern void dev_pm_disarm_wake_irq(struct wake_irq *wirq); 31 32#ifdef CONFIG_PM_SLEEP 33 34extern int device_wakeup_attach_irq(struct device *dev, 35 struct wake_irq *wakeirq); 36extern void device_wakeup_detach_irq(struct device *dev); 37extern void device_wakeup_arm_wake_irqs(void); 38extern void device_wakeup_disarm_wake_irqs(void); 39 40#else 41 42static inline int 43device_wakeup_attach_irq(struct device *dev, 44 struct wake_irq *wakeirq) 45{ 46 return 0; 47} 48 49static inline void device_wakeup_detach_irq(struct device *dev) 50{ 51} 52 53static inline void device_wakeup_arm_wake_irqs(void) 54{ 55} 56 57static inline void device_wakeup_disarm_wake_irqs(void) 58{ 59} 60 61#endif /* CONFIG_PM_SLEEP */ 62 63/* 64 * sysfs.c 65 */ 66 67extern int dpm_sysfs_add(struct device *dev); 68extern void dpm_sysfs_remove(struct device *dev); 69extern void rpm_sysfs_remove(struct device *dev); 70extern int wakeup_sysfs_add(struct device *dev); 71extern void wakeup_sysfs_remove(struct device *dev); 72extern int pm_qos_sysfs_add_resume_latency(struct device *dev); 73extern void pm_qos_sysfs_remove_resume_latency(struct device *dev); 74extern int pm_qos_sysfs_add_flags(struct device *dev); 75extern void pm_qos_sysfs_remove_flags(struct device *dev); 76extern int pm_qos_sysfs_add_latency_tolerance(struct device *dev); 77extern void pm_qos_sysfs_remove_latency_tolerance(struct device *dev); 78 79#else /* CONFIG_PM */ 80 81static inline void pm_runtime_early_init(struct device *dev) 82{ 83 device_pm_init_common(dev); 84} 85 86static inline void pm_runtime_init(struct device *dev) {} 87static inline void pm_runtime_remove(struct device *dev) {} 88 89static inline int dpm_sysfs_add(struct device *dev) { return 0; } 90static inline void dpm_sysfs_remove(struct device *dev) {} 91static inline void rpm_sysfs_remove(struct device *dev) {} 92static inline int wakeup_sysfs_add(struct device *dev) { return 0; } 93static inline void wakeup_sysfs_remove(struct device *dev) {} 94static inline int pm_qos_sysfs_add(struct device *dev) { return 0; } 95static inline void pm_qos_sysfs_remove(struct device *dev) {} 96 97static inline void dev_pm_arm_wake_irq(struct wake_irq *wirq) 98{ 99} 100 101static inline void dev_pm_disarm_wake_irq(struct wake_irq *wirq) 102{ 103} 104 105#endif 106 107#ifdef CONFIG_PM_SLEEP 108 109/* kernel/power/main.c */ 110extern int pm_async_enabled; 111 112/* drivers/base/power/main.c */ 113extern struct list_head dpm_list; /* The active device list */ 114 115static inline struct device *to_device(struct list_head *entry) 116{ 117 return container_of(entry, struct device, power.entry); 118} 119 120extern void device_pm_sleep_init(struct device *dev); 121extern void device_pm_add(struct device *); 122extern void device_pm_remove(struct device *); 123extern void device_pm_move_before(struct device *, struct device *); 124extern void device_pm_move_after(struct device *, struct device *); 125extern void device_pm_move_last(struct device *); 126 127#else /* !CONFIG_PM_SLEEP */ 128 129static inline void device_pm_sleep_init(struct device *dev) {} 130 131static inline void device_pm_add(struct device *dev) {} 132 133static inline void device_pm_remove(struct device *dev) 134{ 135 pm_runtime_remove(dev); 136} 137 138static inline void device_pm_move_before(struct device *deva, 139 struct device *devb) {} 140static inline void device_pm_move_after(struct device *deva, 141 struct device *devb) {} 142static inline void device_pm_move_last(struct device *dev) {} 143 144#endif /* !CONFIG_PM_SLEEP */ 145 146static inline void device_pm_init(struct device *dev) 147{ 148 device_pm_init_common(dev); 149 device_pm_sleep_init(dev); 150 pm_runtime_init(dev); 151}