You can refer to the following modifications. Have a try. Thanks
diff --git a/kernel/power/earlysuspend.c b/kernel/power/earlysuspend.c
index f428084..da2ec80 100644
--- a/kernel/power/earlysuspend.c
+++ b/kernel/power/earlysuspend.c
@@ -23,6 +23,7 @@
#include "power.h"
+extern void release_whole_wake_lock(void);
enum {
DEBUG_USER_STATE = 1U << 0,
DEBUG_SUSPEND = 1U << 2,
@@ -103,6 +104,7 @@ static void early_suspend(struct work_struct *work)
pr_info("early_suspend: sync\n");
sys_sync();
+ release_whole_wake_lock();
abort:
spin_lock_irqsave(&state_lock, irqflags);
if (state == SUSPEND_REQUESTED_AND_SUSPENDED)
diff --git a/kernel/power/userwakelock.c b/kernel/power/userwakelock.c
index 33f95d9..590eb10 100644
--- a/kernel/power/userwakelock.c
+++ b/kernel/power/userwakelock.c
@@ -147,6 +147,26 @@ ssize_t wake_lock_show(
return s - buf;
}
+
+void release_whole_wake_lock(void)
+{
+
+ struct rb_node *n;
+ struct user_wake_lock *l;
+ struct user_wake_lock *k;
+
+ mutex_lock(&tree_lock);
+
+ for (n = rb_first(&user_wake_locks); n != NULL; n = rb_next(n)) {
+ l = rb_entry(n, struct user_wake_lock, node);
+ if (wake_lock_active(&l->wake_lock)) {
+ k = lookup_wake_lock_name(l->name, 0, NULL);
+ wake_unlock(&k->wake_lock);
+ }
+ }
+ mutex_unlock(&tree_lock);
+}
+
ssize_t wake_lock_store(
struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t n)