HACK: PM / Sleep: Abort suspend if event is in progress
Prashant Gaikwad [Thu, 17 May 2012 10:26:25 +0000 (15:26 +0530)]
Abort suspend if event is in progress even though check
is not enabled. This fixes suspend abort if wake_lock
is acquired.

Bug 985999

Change-Id: Ib319bcc07b9021d8497149c039bc6b9d2f756f8a
Signed-off-by: Prashant Gaikwad <pgaikwad@nvidia.com>
Reviewed-on: http://git-master/r/103073
Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>

drivers/base/power/wakeup.c

index 2a3e581..5d13179 100644 (file)
@@ -638,14 +638,22 @@ bool pm_wakeup_pending(void)
 {
        unsigned long flags;
        bool ret = false;
+       unsigned int cnt, inpr;
 
+       /**
+        * HACK: return true if event is in progress even though
+        * check is not enabled. This causes suspend to abort
+        * if wake_lock is acquired before starting suspend
+        * process and user has not enabled check. This HACK is for
+        * android wake locks to work.
+        */
        spin_lock_irqsave(&events_lock, flags);
+       split_counters(&cnt, &inpr);
        if (events_check_enabled) {
-               unsigned int cnt, inpr;
-
-               split_counters(&cnt, &inpr);
                ret = (cnt != saved_count || inpr > 0);
                events_check_enabled = !ret;
+       } else if (inpr > 0) {
+               ret = true;
        }
        spin_unlock_irqrestore(&events_lock, flags);
        if (ret)