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