diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2010-07-07 18:05:37 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rjw@sisk.pl> | 2010-07-18 20:00:36 -0400 |
commit | 0fcb4eef8294492c8f1de8236b1ed81f09e42922 (patch) | |
tree | 23c96ecfc5a85c1870d85c5db9421b6c09763fa8 /drivers/base | |
parent | 4eb241e5691363c391aac8a5051d0d013188ec84 (diff) |
PM / Runtime: Make runtime_status attribute not debug-only (v. 2)
This patch (as1404b) makes the runtime_status sysfs attribute available
even in the absence of CONFIG_PM_ADVANCED_DEBUG, and it changes the
routine to display "unsupported" when runtime PM is disabled for a
device. Although not strictly 100% accurate, this will almost always
be correct.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/power/sysfs.c | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c index 81d344e0e95d..1eca50c8e7ca 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c | |||
@@ -110,6 +110,38 @@ static ssize_t control_store(struct device * dev, struct device_attribute *attr, | |||
110 | } | 110 | } |
111 | 111 | ||
112 | static DEVICE_ATTR(control, 0644, control_show, control_store); | 112 | static DEVICE_ATTR(control, 0644, control_show, control_store); |
113 | |||
114 | static ssize_t rtpm_status_show(struct device *dev, | ||
115 | struct device_attribute *attr, char *buf) | ||
116 | { | ||
117 | const char *p; | ||
118 | |||
119 | if (dev->power.runtime_error) { | ||
120 | p = "error\n"; | ||
121 | } else if (dev->power.disable_depth) { | ||
122 | p = "unsupported\n"; | ||
123 | } else { | ||
124 | switch (dev->power.runtime_status) { | ||
125 | case RPM_SUSPENDED: | ||
126 | p = "suspended\n"; | ||
127 | break; | ||
128 | case RPM_SUSPENDING: | ||
129 | p = "suspending\n"; | ||
130 | break; | ||
131 | case RPM_RESUMING: | ||
132 | p = "resuming\n"; | ||
133 | break; | ||
134 | case RPM_ACTIVE: | ||
135 | p = "active\n"; | ||
136 | break; | ||
137 | default: | ||
138 | return -EIO; | ||
139 | } | ||
140 | } | ||
141 | return sprintf(buf, p); | ||
142 | } | ||
143 | |||
144 | static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL); | ||
113 | #endif | 145 | #endif |
114 | 146 | ||
115 | static ssize_t | 147 | static ssize_t |
@@ -184,27 +216,8 @@ static ssize_t rtpm_enabled_show(struct device *dev, | |||
184 | return sprintf(buf, "enabled\n"); | 216 | return sprintf(buf, "enabled\n"); |
185 | } | 217 | } |
186 | 218 | ||
187 | static ssize_t rtpm_status_show(struct device *dev, | ||
188 | struct device_attribute *attr, char *buf) | ||
189 | { | ||
190 | if (dev->power.runtime_error) | ||
191 | return sprintf(buf, "error\n"); | ||
192 | switch (dev->power.runtime_status) { | ||
193 | case RPM_SUSPENDED: | ||
194 | return sprintf(buf, "suspended\n"); | ||
195 | case RPM_SUSPENDING: | ||
196 | return sprintf(buf, "suspending\n"); | ||
197 | case RPM_RESUMING: | ||
198 | return sprintf(buf, "resuming\n"); | ||
199 | case RPM_ACTIVE: | ||
200 | return sprintf(buf, "active\n"); | ||
201 | } | ||
202 | return -EIO; | ||
203 | } | ||
204 | |||
205 | static DEVICE_ATTR(runtime_usage, 0444, rtpm_usagecount_show, NULL); | 219 | static DEVICE_ATTR(runtime_usage, 0444, rtpm_usagecount_show, NULL); |
206 | static DEVICE_ATTR(runtime_active_kids, 0444, rtpm_children_show, NULL); | 220 | static DEVICE_ATTR(runtime_active_kids, 0444, rtpm_children_show, NULL); |
207 | static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL); | ||
208 | static DEVICE_ATTR(runtime_enabled, 0444, rtpm_enabled_show, NULL); | 221 | static DEVICE_ATTR(runtime_enabled, 0444, rtpm_enabled_show, NULL); |
209 | 222 | ||
210 | #endif | 223 | #endif |
@@ -240,6 +253,7 @@ static DEVICE_ATTR(async, 0644, async_show, async_store); | |||
240 | static struct attribute * power_attrs[] = { | 253 | static struct attribute * power_attrs[] = { |
241 | #ifdef CONFIG_PM_RUNTIME | 254 | #ifdef CONFIG_PM_RUNTIME |
242 | &dev_attr_control.attr, | 255 | &dev_attr_control.attr, |
256 | &dev_attr_runtime_status.attr, | ||
243 | #endif | 257 | #endif |
244 | &dev_attr_wakeup.attr, | 258 | &dev_attr_wakeup.attr, |
245 | #ifdef CONFIG_PM_SLEEP | 259 | #ifdef CONFIG_PM_SLEEP |
@@ -250,7 +264,6 @@ static struct attribute * power_attrs[] = { | |||
250 | #ifdef CONFIG_PM_RUNTIME | 264 | #ifdef CONFIG_PM_RUNTIME |
251 | &dev_attr_runtime_usage.attr, | 265 | &dev_attr_runtime_usage.attr, |
252 | &dev_attr_runtime_active_kids.attr, | 266 | &dev_attr_runtime_active_kids.attr, |
253 | &dev_attr_runtime_status.attr, | ||
254 | &dev_attr_runtime_enabled.attr, | 267 | &dev_attr_runtime_enabled.attr, |
255 | #endif | 268 | #endif |
256 | #endif | 269 | #endif |