|
@@ -902,7 +902,11 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
|
|
}
|
|
}
|
|
|
|
|
|
End:
|
|
End:
|
|
- dev->power.is_suspended = !error;
|
|
|
|
|
|
+ if (!error) {
|
|
|
|
+ dev->power.is_suspended = true;
|
|
|
|
+ if (dev->power.wakeup_path && dev->parent)
|
|
|
|
+ dev->parent->power.wakeup_path = true;
|
|
|
|
+ }
|
|
|
|
|
|
device_unlock(dev);
|
|
device_unlock(dev);
|
|
complete_all(&dev->power.completion);
|
|
complete_all(&dev->power.completion);
|
|
@@ -999,6 +1003,8 @@ static int device_prepare(struct device *dev, pm_message_t state)
|
|
|
|
|
|
device_lock(dev);
|
|
device_lock(dev);
|
|
|
|
|
|
|
|
+ dev->power.wakeup_path = device_may_wakeup(dev);
|
|
|
|
+
|
|
if (dev->pm_domain) {
|
|
if (dev->pm_domain) {
|
|
pm_dev_dbg(dev, state, "preparing power domain ");
|
|
pm_dev_dbg(dev, state, "preparing power domain ");
|
|
if (dev->pm_domain->ops.prepare)
|
|
if (dev->pm_domain->ops.prepare)
|