5e928f77a0
Introduce a core framework for run-time power management of I/O devices. Add device run-time PM fields to 'struct dev_pm_info' and device run-time PM callbacks to 'struct dev_pm_ops'. Introduce a run-time PM workqueue and define some device run-time PM helper functions at the core level. Document all these things. Special thanks to Alan Stern for his help with the design and multiple detailed reviews of the pereceding versions of this patch and to Magnus Damm for testing feedback. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Magnus Damm <damm@igel.co.jp>
75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
#ifdef CONFIG_PM_RUNTIME
|
|
|
|
extern void pm_runtime_init(struct device *dev);
|
|
extern void pm_runtime_remove(struct device *dev);
|
|
|
|
#else /* !CONFIG_PM_RUNTIME */
|
|
|
|
static inline void pm_runtime_init(struct device *dev) {}
|
|
static inline void pm_runtime_remove(struct device *dev) {}
|
|
|
|
#endif /* !CONFIG_PM_RUNTIME */
|
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
|
|
/*
|
|
* main.c
|
|
*/
|
|
|
|
extern struct list_head dpm_list; /* The active device list */
|
|
|
|
static inline struct device *to_device(struct list_head *entry)
|
|
{
|
|
return container_of(entry, struct device, power.entry);
|
|
}
|
|
|
|
extern void device_pm_init(struct device *dev);
|
|
extern void device_pm_add(struct device *);
|
|
extern void device_pm_remove(struct device *);
|
|
extern void device_pm_move_before(struct device *, struct device *);
|
|
extern void device_pm_move_after(struct device *, struct device *);
|
|
extern void device_pm_move_last(struct device *);
|
|
|
|
#else /* !CONFIG_PM_SLEEP */
|
|
|
|
static inline void device_pm_init(struct device *dev)
|
|
{
|
|
pm_runtime_init(dev);
|
|
}
|
|
|
|
static inline void device_pm_remove(struct device *dev)
|
|
{
|
|
pm_runtime_remove(dev);
|
|
}
|
|
|
|
static inline void device_pm_add(struct device *dev) {}
|
|
static inline void device_pm_move_before(struct device *deva,
|
|
struct device *devb) {}
|
|
static inline void device_pm_move_after(struct device *deva,
|
|
struct device *devb) {}
|
|
static inline void device_pm_move_last(struct device *dev) {}
|
|
|
|
#endif /* !CONFIG_PM_SLEEP */
|
|
|
|
#ifdef CONFIG_PM
|
|
|
|
/*
|
|
* sysfs.c
|
|
*/
|
|
|
|
extern int dpm_sysfs_add(struct device *);
|
|
extern void dpm_sysfs_remove(struct device *);
|
|
|
|
#else /* CONFIG_PM */
|
|
|
|
static inline int dpm_sysfs_add(struct device *dev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void dpm_sysfs_remove(struct device *dev)
|
|
{
|
|
}
|
|
|
|
#endif
|