*/
if (!parent->power.disable_depth
&& !parent->power.ignore_children
- --- && parent->power.runtime_status != RPM_ACTIVE)
+ +++ && parent->power.runtime_status != RPM_ACTIVE) {
+ +++ dev_err(dev, "runtime PM trying to activate child device %s but parent (%s) is not active\n",
+ +++ dev_name(dev),
+ +++ dev_name(parent));
error = -EBUSY;
- --- else if (dev->power.runtime_status == RPM_SUSPENDED)
+ +++ } else if (dev->power.runtime_status == RPM_SUSPENDED) {
atomic_inc(&parent->power.child_count);
+ +++ }
spin_unlock(&parent->power.lock);
dev->power.runtime_auto = true;
if (atomic_dec_and_test(&dev->power.usage_count))
- --- rpm_idle(dev, RPM_AUTO);
+ +++ rpm_idle(dev, RPM_AUTO | RPM_ASYNC);
out:
spin_unlock_irq(&dev->power.lock);
goto out;
}
+++ + if (!pm_runtime_status_suspended(dev))
+++ + goto out;
+++ +
ret = pm_runtime_set_active(dev);
if (ret)
goto out;