PM: Wait for completion of the parent resume before resuming
authorBenoit Goby <benoit@android.com>
Mon, 13 Dec 2010 23:27:06 +0000 (15:27 -0800)
committerBenoit Goby <benoit@android.com>
Tue, 14 Dec 2010 01:39:09 +0000 (17:39 -0800)
If the parent device is in the DPM_RESUMING state, resume might get called
before the parent's resume has completed, because dpm_wait won't get
called. This issue was introduced by:
3d46a3c PM: Prevent waiting forever on asynchronous resume after abort

Wait for completion of the parent resume if the parent state is >= DPM_OFF
or == DPM_RESUMING

Change-Id: I14a4e16426f61efceaefedc7e772f53b7522b5dd
Signed-off-by: Benoit Goby <benoit@android.com>
drivers/base/power/main.c

index 17aff79bd329df516b1f182e78d98bbcef484b6a..4a57ecc4ead9231c70c8707040a54fdd38e64a37 100644 (file)
@@ -528,7 +528,8 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
        TRACE_DEVICE(dev);
        TRACE_RESUME(0);
 
-       if (dev->parent && dev->parent->power.status >= DPM_OFF)
+       if (dev->parent && (dev->parent->power.status >= DPM_OFF ||
+                           dev->parent->power.status == DPM_RESUMING))
                dpm_wait(dev->parent, async);
        device_lock(dev);