diff options
Diffstat (limited to 'drivers/base/power/main.c')
-rw-r--r-- | drivers/base/power/main.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index a85459126bc6..1e15732c12c4 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
@@ -902,7 +902,11 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) | |||
902 | } | 902 | } |
903 | 903 | ||
904 | End: | 904 | End: |
905 | dev->power.is_suspended = !error; | 905 | if (!error) { |
906 | dev->power.is_suspended = true; | ||
907 | if (dev->power.wakeup_path && dev->parent) | ||
908 | dev->parent->power.wakeup_path = true; | ||
909 | } | ||
906 | 910 | ||
907 | device_unlock(dev); | 911 | device_unlock(dev); |
908 | complete_all(&dev->power.completion); | 912 | complete_all(&dev->power.completion); |
@@ -999,6 +1003,8 @@ static int device_prepare(struct device *dev, pm_message_t state) | |||
999 | 1003 | ||
1000 | device_lock(dev); | 1004 | device_lock(dev); |
1001 | 1005 | ||
1006 | dev->power.wakeup_path = device_may_wakeup(dev); | ||
1007 | |||
1002 | if (dev->pm_domain) { | 1008 | if (dev->pm_domain) { |
1003 | pm_dev_dbg(dev, state, "preparing power domain "); | 1009 | pm_dev_dbg(dev, state, "preparing power domain "); |
1004 | if (dev->pm_domain->ops.prepare) | 1010 | if (dev->pm_domain->ops.prepare) |