aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2010-09-25 17:35:15 -0400
committerRafael J. Wysocki <rjw@sisk.pl>2010-10-16 19:57:47 -0400
commit7490e44239e60293bca0c2663229050c36c660c2 (patch)
tree938cd1cafba133f2d47c648ac01242de841d6d1b /include
parent140a6c945211ee911dec776fafa52e03a7d7bb9a (diff)
PM / Runtime: Add no_callbacks flag
Some devices, such as USB interfaces, cannot be power-managed independently of their parents, i.e., they cannot be put in low power while the parent remains at full power. This patch (as1425) creates a new "no_callbacks" flag, which tells the PM core not to invoke the runtime-PM callback routines for the such devices but instead to assume that the callbacks always succeed. In addition, the non-debugging runtime-PM sysfs attributes for the devices are removed, since they are pretty much meaningless. The advantage of this scheme comes not so much from avoiding the callbacks themselves, but rather from the fact that without the need for a process context in which to run the callbacks, more work can be done in interrupt context. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'include')
-rw-r--r--include/linux/pm.h7
-rw-r--r--include/linux/pm_runtime.h2
2 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/pm.h b/include/linux/pm.h
index 1abfe84f447d..abd81ffaba3c 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -41,6 +41,12 @@ extern void (*pm_power_off_prepare)(void);
41 41
42struct device; 42struct device;
43 43
44#ifdef CONFIG_PM
45extern const char power_group_name[]; /* = "power" */
46#else
47#define power_group_name NULL
48#endif
49
44typedef struct pm_message { 50typedef struct pm_message {
45 int event; 51 int event;
46} pm_message_t; 52} pm_message_t;
@@ -475,6 +481,7 @@ struct dev_pm_info {
475 unsigned int deferred_resume:1; 481 unsigned int deferred_resume:1;
476 unsigned int run_wake:1; 482 unsigned int run_wake:1;
477 unsigned int runtime_auto:1; 483 unsigned int runtime_auto:1;
484 unsigned int no_callbacks:1;
478 enum rpm_request request; 485 enum rpm_request request;
479 enum rpm_status runtime_status; 486 enum rpm_status runtime_status;
480 int runtime_error; 487 int runtime_error;
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 5869d87fffac..8ca52f7c357e 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -36,6 +36,7 @@ extern void pm_runtime_forbid(struct device *dev);
36extern int pm_generic_runtime_idle(struct device *dev); 36extern int pm_generic_runtime_idle(struct device *dev);
37extern int pm_generic_runtime_suspend(struct device *dev); 37extern int pm_generic_runtime_suspend(struct device *dev);
38extern int pm_generic_runtime_resume(struct device *dev); 38extern int pm_generic_runtime_resume(struct device *dev);
39extern void pm_runtime_no_callbacks(struct device *dev);
39 40
40static inline bool pm_children_suspended(struct device *dev) 41static inline bool pm_children_suspended(struct device *dev)
41{ 42{
@@ -110,6 +111,7 @@ static inline bool pm_runtime_suspended(struct device *dev) { return false; }
110static inline int pm_generic_runtime_idle(struct device *dev) { return 0; } 111static inline int pm_generic_runtime_idle(struct device *dev) { return 0; }
111static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } 112static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; }
112static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } 113static inline int pm_generic_runtime_resume(struct device *dev) { return 0; }
114static inline void pm_runtime_no_callbacks(struct device *dev) {}
113 115
114#endif /* !CONFIG_PM_RUNTIME */ 116#endif /* !CONFIG_PM_RUNTIME */
115 117