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