diff options
Diffstat (limited to 'drivers/base/power/runtime.c')
-rw-r--r-- | drivers/base/power/runtime.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 5f5c4236f006..ee99025be6b3 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c | |||
@@ -135,8 +135,9 @@ static int rpm_check_suspend_allowed(struct device *dev) | |||
135 | 135 | ||
136 | if (dev->power.runtime_error) | 136 | if (dev->power.runtime_error) |
137 | retval = -EINVAL; | 137 | retval = -EINVAL; |
138 | else if (atomic_read(&dev->power.usage_count) > 0 | 138 | else if (dev->power.disable_depth > 0) |
139 | || dev->power.disable_depth > 0) | 139 | retval = -EACCES; |
140 | else if (atomic_read(&dev->power.usage_count) > 0) | ||
140 | retval = -EAGAIN; | 141 | retval = -EAGAIN; |
141 | else if (!pm_children_suspended(dev)) | 142 | else if (!pm_children_suspended(dev)) |
142 | retval = -EBUSY; | 143 | retval = -EBUSY; |
@@ -262,7 +263,7 @@ static int rpm_callback(int (*cb)(struct device *), struct device *dev) | |||
262 | spin_lock_irq(&dev->power.lock); | 263 | spin_lock_irq(&dev->power.lock); |
263 | } | 264 | } |
264 | dev->power.runtime_error = retval; | 265 | dev->power.runtime_error = retval; |
265 | return retval; | 266 | return retval != -EACCES ? retval : -EIO; |
266 | } | 267 | } |
267 | 268 | ||
268 | /** | 269 | /** |
@@ -458,7 +459,7 @@ static int rpm_resume(struct device *dev, int rpmflags) | |||
458 | if (dev->power.runtime_error) | 459 | if (dev->power.runtime_error) |
459 | retval = -EINVAL; | 460 | retval = -EINVAL; |
460 | else if (dev->power.disable_depth > 0) | 461 | else if (dev->power.disable_depth > 0) |
461 | retval = -EAGAIN; | 462 | retval = -EACCES; |
462 | if (retval) | 463 | if (retval) |
463 | goto out; | 464 | goto out; |
464 | 465 | ||