Use separate wake sources for dequeuing vs wake events

Bug: 234897999
Signed-off-by: Craig Dooley <dooleyc@google.com>
Change-Id: I15c96c6da6fe1a5a2e0f4ecada1e4416bbe63c2a
diff --git a/aoc_channel_dev.c b/aoc_channel_dev.c
index 5911e1f..d09d6f6 100644
--- a/aoc_channel_dev.c
+++ b/aoc_channel_dev.c
@@ -36,7 +36,8 @@
 module_param(sent_msg_count, long, S_IRUGO);
 
 struct chan_prvdata {
-	struct wakeup_source *wakelock;
+	struct wakeup_source *queue_wakelock;
+	struct wakeup_source *user_wakelock;
 };
 
 struct aocc_device_entry {
@@ -245,9 +246,9 @@
 		 * reading a waking message at the end.
 		 */
 		if (take_wake_lock) {
-			pm_wakeup_ws_event(service_prvdata->wakelock, 200, true);
+			pm_wakeup_ws_event(service_prvdata->user_wakelock, 200, true);
 		} else if (aoc_service_can_read(service)) {
-			pm_wakeup_ws_event(service_prvdata->wakelock, 10, true);
+			pm_wakeup_ws_event(service_prvdata->queue_wakelock, 10, true);
 		}
 
 		if (!handler_found) {
@@ -773,7 +774,8 @@
 		return -ENOMEM;
 
 	if (strcmp(dev_name(&dev->dev), "usf_sh_mem_doorbell") != 0) {
-		prvdata->wakelock = wakeup_source_register(&dev->dev, dev_name(&dev->dev));
+		prvdata->user_wakelock = wakeup_source_register(&dev->dev, dev_name(&dev->dev));
+		prvdata->queue_wakelock = wakeup_source_register(&dev->dev, "usf_queue");
 		dev->prvdata = prvdata;
 
 		ret = create_character_device(dev);
@@ -808,9 +810,14 @@
 		sh_mem_doorbell_service_dev = NULL;
 	} else {
 		prvdata = dev->prvdata;
-		if (prvdata->wakelock) {
-			wakeup_source_unregister(prvdata->wakelock);
-			prvdata->wakelock = NULL;
+		if (prvdata->queue_wakelock) {
+			wakeup_source_unregister(prvdata->queue_wakelock);
+			prvdata->queue_wakelock = NULL;
+		}
+
+		if (prvdata->user_wakelock) {
+			wakeup_source_unregister(prvdata->user_wakelock);
+			prvdata->user_wakelock = NULL;
 		}
 	}