ARM64: dts: rk3399: fixup android next backlight gpio
[firefly-linux-kernel-4.4.55.git] / drivers / base / power / wakeup.c
index a1e0b9ab847a345c6a09adab3ff9f2fd9af3ad3e..09c07f519952d7afa342fb8e1156c6f15497f9c8 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/seq_file.h>
 #include <linux/debugfs.h>
 #include <linux/pm_wakeirq.h>
+#include <linux/types.h>
 #include <trace/events/power.h>
 
 #include "power.h"
@@ -804,6 +805,37 @@ void pm_wakeup_event(struct device *dev, unsigned int msec)
 }
 EXPORT_SYMBOL_GPL(pm_wakeup_event);
 
+void pm_get_active_wakeup_sources(char *pending_wakeup_source, size_t max)
+{
+       struct wakeup_source *ws, *last_active_ws = NULL;
+       int len = 0;
+       bool active = false;
+
+       rcu_read_lock();
+       list_for_each_entry_rcu(ws, &wakeup_sources, entry) {
+               if (ws->active && len < max) {
+                       if (!active)
+                               len += scnprintf(pending_wakeup_source, max,
+                                               "Pending Wakeup Sources: ");
+                       len += scnprintf(pending_wakeup_source + len, max - len,
+                               "%s ", ws->name);
+                       active = true;
+               } else if (!active &&
+                          (!last_active_ws ||
+                           ktime_to_ns(ws->last_time) >
+                           ktime_to_ns(last_active_ws->last_time))) {
+                       last_active_ws = ws;
+               }
+       }
+       if (!active && last_active_ws) {
+               scnprintf(pending_wakeup_source, max,
+                               "Last active Wakeup Source: %s",
+                               last_active_ws->name);
+       }
+       rcu_read_unlock();
+}
+EXPORT_SYMBOL_GPL(pm_get_active_wakeup_sources);
+
 void pm_print_active_wakeup_sources(void)
 {
        struct wakeup_source *ws;