xref: /linux/drivers/base/power/power.h (revision e91c11b1a7f876c6f056d872eb210734150a1795)
11a9a9152SRafael J. Wysocki #include <linux/pm_qos.h>
21a9a9152SRafael J. Wysocki 
3*e91c11b1SRafael J. Wysocki static inline void device_pm_init_common(struct device *dev)
4*e91c11b1SRafael J. Wysocki {
5*e91c11b1SRafael J. Wysocki 	spin_lock_init(&dev->power.lock);
6*e91c11b1SRafael J. Wysocki 	dev->power.power_state = PMSG_INVALID;
7*e91c11b1SRafael J. Wysocki }
8*e91c11b1SRafael J. Wysocki 
95e928f77SRafael J. Wysocki #ifdef CONFIG_PM_RUNTIME
105e928f77SRafael J. Wysocki 
115e928f77SRafael J. Wysocki extern void pm_runtime_init(struct device *dev);
125e928f77SRafael J. Wysocki extern void pm_runtime_remove(struct device *dev);
135e928f77SRafael J. Wysocki 
145e928f77SRafael J. Wysocki #else /* !CONFIG_PM_RUNTIME */
155e928f77SRafael J. Wysocki 
165e928f77SRafael J. Wysocki static inline void pm_runtime_init(struct device *dev) {}
175e928f77SRafael J. Wysocki static inline void pm_runtime_remove(struct device *dev) {}
185e928f77SRafael J. Wysocki 
195e928f77SRafael J. Wysocki #endif /* !CONFIG_PM_RUNTIME */
203b98aeafSAlan Stern 
21296699deSRafael J. Wysocki #ifdef CONFIG_PM_SLEEP
221da177e4SLinus Torvalds 
230e06b4a8SRafael J. Wysocki /* kernel/power/main.c */
240e06b4a8SRafael J. Wysocki extern int pm_async_enabled;
251da177e4SLinus Torvalds 
260e06b4a8SRafael J. Wysocki /* drivers/base/power/main.c */
271eede070SRafael J. Wysocki extern struct list_head dpm_list;	/* The active device list */
281da177e4SLinus Torvalds 
291da177e4SLinus Torvalds static inline struct device *to_device(struct list_head *entry)
301da177e4SLinus Torvalds {
31cd59abfcSAlan Stern 	return container_of(entry, struct device, power.entry);
321da177e4SLinus Torvalds }
331da177e4SLinus Torvalds 
34*e91c11b1SRafael J. Wysocki extern void device_pm_sleep_init(struct device *dev);
353b98aeafSAlan Stern extern void device_pm_add(struct device *);
361da177e4SLinus Torvalds extern void device_pm_remove(struct device *);
37ffa6a705SCornelia Huck extern void device_pm_move_before(struct device *, struct device *);
38ffa6a705SCornelia Huck extern void device_pm_move_after(struct device *, struct device *);
39ffa6a705SCornelia Huck extern void device_pm_move_last(struct device *);
401da177e4SLinus Torvalds 
415e928f77SRafael J. Wysocki #else /* !CONFIG_PM_SLEEP */
425e928f77SRafael J. Wysocki 
43*e91c11b1SRafael J. Wysocki static inline void device_pm_sleep_init(struct device *dev) {}
445e928f77SRafael J. Wysocki 
451a9a9152SRafael J. Wysocki static inline void device_pm_add(struct device *dev)
461a9a9152SRafael J. Wysocki {
471a9a9152SRafael J. Wysocki 	dev_pm_qos_constraints_init(dev);
481a9a9152SRafael J. Wysocki }
491a9a9152SRafael J. Wysocki 
505e928f77SRafael J. Wysocki static inline void device_pm_remove(struct device *dev)
515e928f77SRafael J. Wysocki {
521a9a9152SRafael J. Wysocki 	dev_pm_qos_constraints_destroy(dev);
535e928f77SRafael J. Wysocki 	pm_runtime_remove(dev);
545e928f77SRafael J. Wysocki }
55dec13c15SDaniel Drake 
56ffa6a705SCornelia Huck static inline void device_pm_move_before(struct device *deva,
57ffa6a705SCornelia Huck 					 struct device *devb) {}
58ffa6a705SCornelia Huck static inline void device_pm_move_after(struct device *deva,
59ffa6a705SCornelia Huck 					struct device *devb) {}
60ffa6a705SCornelia Huck static inline void device_pm_move_last(struct device *dev) {}
61775b64d2SRafael J. Wysocki 
625e928f77SRafael J. Wysocki #endif /* !CONFIG_PM_SLEEP */
63dec13c15SDaniel Drake 
64*e91c11b1SRafael J. Wysocki static inline void device_pm_init(struct device *dev)
65*e91c11b1SRafael J. Wysocki {
66*e91c11b1SRafael J. Wysocki 	device_pm_init_common(dev);
67*e91c11b1SRafael J. Wysocki 	device_pm_sleep_init(dev);
68*e91c11b1SRafael J. Wysocki 	pm_runtime_init(dev);
69*e91c11b1SRafael J. Wysocki }
70*e91c11b1SRafael J. Wysocki 
71dec13c15SDaniel Drake #ifdef CONFIG_PM
72dec13c15SDaniel Drake 
731da177e4SLinus Torvalds /*
741da177e4SLinus Torvalds  * sysfs.c
751da177e4SLinus Torvalds  */
761da177e4SLinus Torvalds 
77cb8f51bdSRafael J. Wysocki extern int dpm_sysfs_add(struct device *dev);
78cb8f51bdSRafael J. Wysocki extern void dpm_sysfs_remove(struct device *dev);
79cb8f51bdSRafael J. Wysocki extern void rpm_sysfs_remove(struct device *dev);
80cb8f51bdSRafael J. Wysocki extern int wakeup_sysfs_add(struct device *dev);
81cb8f51bdSRafael J. Wysocki extern void wakeup_sysfs_remove(struct device *dev);
8285dc0b8aSRafael J. Wysocki extern int pm_qos_sysfs_add(struct device *dev);
8385dc0b8aSRafael J. Wysocki extern void pm_qos_sysfs_remove(struct device *dev);
841da177e4SLinus Torvalds 
85dec13c15SDaniel Drake #else /* CONFIG_PM */
861da177e4SLinus Torvalds 
87cb8f51bdSRafael J. Wysocki static inline int dpm_sysfs_add(struct device *dev) { return 0; }
88cb8f51bdSRafael J. Wysocki static inline void dpm_sysfs_remove(struct device *dev) {}
89cb8f51bdSRafael J. Wysocki static inline void rpm_sysfs_remove(struct device *dev) {}
90cb8f51bdSRafael J. Wysocki static inline int wakeup_sysfs_add(struct device *dev) { return 0; }
91cb8f51bdSRafael J. Wysocki static inline void wakeup_sysfs_remove(struct device *dev) {}
9285dc0b8aSRafael J. Wysocki static inline int pm_qos_sysfs_add(struct device *dev) { return 0; }
9385dc0b8aSRafael J. Wysocki static inline void pm_qos_sysfs_remove(struct device *dev) {}
941da177e4SLinus Torvalds 
951da177e4SLinus Torvalds #endif
96