11a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysocki#include <linux/pm_qos.h>
21a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysocki
35e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki#ifdef CONFIG_PM_RUNTIME
45e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki
55e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysockiextern void pm_runtime_init(struct device *dev);
65e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysockiextern void pm_runtime_remove(struct device *dev);
75e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki
85e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki#else /* !CONFIG_PM_RUNTIME */
95e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki
105e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysockistatic inline void pm_runtime_init(struct device *dev) {}
115e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysockistatic inline void pm_runtime_remove(struct device *dev) {}
125e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki
135e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki#endif /* !CONFIG_PM_RUNTIME */
143b98aeaf3a75f544dc945694f4fcf6e1c4bab89dAlan Stern
15296699de6bdc717189a331ab6bbe90e05c94db06Rafael J. Wysocki#ifdef CONFIG_PM_SLEEP
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
170e06b4a891c6a108412fe24b4500f499da2cf8a1Rafael J. Wysocki/* kernel/power/main.c */
180e06b4a891c6a108412fe24b4500f499da2cf8a1Rafael J. Wysockiextern int pm_async_enabled;
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
200e06b4a891c6a108412fe24b4500f499da2cf8a1Rafael J. Wysocki/* drivers/base/power/main.c */
211eede070a59e1cc73da51e1aaa00d9ab86572cfcRafael J. Wysockiextern struct list_head dpm_list;	/* The active device list */
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23dec13c15445fec29ca9087890895718450e80b95Daniel Drakestatic inline struct device *to_device(struct list_head *entry)
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
25cd59abfcc441b2abb4cf2cd62c1eb0f02a60e8ddAlan Stern	return container_of(entry, struct device, power.entry);
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
285e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysockiextern void device_pm_init(struct device *dev);
293b98aeaf3a75f544dc945694f4fcf6e1c4bab89dAlan Sternextern void device_pm_add(struct device *);
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void device_pm_remove(struct device *);
31ffa6a7054d172a2f57248dff2de600ca795c5656Cornelia Huckextern void device_pm_move_before(struct device *, struct device *);
32ffa6a7054d172a2f57248dff2de600ca795c5656Cornelia Huckextern void device_pm_move_after(struct device *, struct device *);
33ffa6a7054d172a2f57248dff2de600ca795c5656Cornelia Huckextern void device_pm_move_last(struct device *);
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
355e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki#else /* !CONFIG_PM_SLEEP */
365e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki
375e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysockistatic inline void device_pm_init(struct device *dev)
385e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki{
39074037ec79bea73edf1b1ec72fef1010e83e3cc5Rafael J. Wysocki	spin_lock_init(&dev->power.lock);
401a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysocki	dev->power.power_state = PMSG_INVALID;
415e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki	pm_runtime_init(dev);
425e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki}
435e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki
441a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysockistatic inline void device_pm_add(struct device *dev)
451a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysocki{
461a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysocki	dev_pm_qos_constraints_init(dev);
471a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysocki}
481a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysocki
495e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysockistatic inline void device_pm_remove(struct device *dev)
505e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki{
511a9a91525d806f2b3bd8b57b963755a96fd36ce2Rafael J. Wysocki	dev_pm_qos_constraints_destroy(dev);
525e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki	pm_runtime_remove(dev);
535e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki}
54dec13c15445fec29ca9087890895718450e80b95Daniel Drake
55ffa6a7054d172a2f57248dff2de600ca795c5656Cornelia Huckstatic inline void device_pm_move_before(struct device *deva,
56ffa6a7054d172a2f57248dff2de600ca795c5656Cornelia Huck					 struct device *devb) {}
57ffa6a7054d172a2f57248dff2de600ca795c5656Cornelia Huckstatic inline void device_pm_move_after(struct device *deva,
58ffa6a7054d172a2f57248dff2de600ca795c5656Cornelia Huck					struct device *devb) {}
59ffa6a7054d172a2f57248dff2de600ca795c5656Cornelia Huckstatic inline void device_pm_move_last(struct device *dev) {}
60775b64d2b6ca37697de925f70799c710aab5849aRafael J. Wysocki
615e928f77a09a07f9dd595bb8a489965d69a83458Rafael J. Wysocki#endif /* !CONFIG_PM_SLEEP */
62dec13c15445fec29ca9087890895718450e80b95Daniel Drake
63dec13c15445fec29ca9087890895718450e80b95Daniel Drake#ifdef CONFIG_PM
64dec13c15445fec29ca9087890895718450e80b95Daniel Drake
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * sysfs.c
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
69cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockiextern int dpm_sysfs_add(struct device *dev);
70cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockiextern void dpm_sysfs_remove(struct device *dev);
71cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockiextern void rpm_sysfs_remove(struct device *dev);
72cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockiextern int wakeup_sysfs_add(struct device *dev);
73cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockiextern void wakeup_sysfs_remove(struct device *dev);
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
75dec13c15445fec29ca9087890895718450e80b95Daniel Drake#else /* CONFIG_PM */
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
77cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockistatic inline int dpm_sysfs_add(struct device *dev) { return 0; }
78cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockistatic inline void dpm_sysfs_remove(struct device *dev) {}
79cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockistatic inline void rpm_sysfs_remove(struct device *dev) {}
80cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockistatic inline int wakeup_sysfs_add(struct device *dev) { return 0; }
81cb8f51bdadb7969139c2e39c2defd4cde98c1ea8Rafael J. Wysockistatic inline void wakeup_sysfs_remove(struct device *dev) {}
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
84