This will allow to known the source of wakeup

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
---
 common/reset_source.c  |   17 +++++++++++++++++
 include/reset_source.h |   11 +++++++++++
 2 files changed, 28 insertions(+)

diff --git a/common/reset_source.c b/common/reset_source.c
index ec1afc0..4791d29 100644
--- a/common/reset_source.c
+++ b/common/reset_source.c
@@ -34,11 +34,28 @@ void set_reset_source(enum reset_src_type st)
 }
 EXPORT_SYMBOL(set_reset_source);
 
+static const char * const wakeup_src_names[] = {
+       [WAKEUP_UKWNOWN] = "unknown",
+       [WAKEUP_POWER] = "power",
+       [WAKEUP_RTC] = "rtc",
+       [WAKEUP_TIMER] = "timer",
+       [WAKEUP_USER] = "user",
+       [WAKEUP_WOL] = "wakeup on lan",
+};
+
+void set_wakeup_source(enum wakeup_src_type st)
+{
+       setenv("global.system.wakeup", wakeup_src_names[st]);
+}
+EXPORT_SYMBOL(set_reset_source);
+
 /* ensure this runs after the 'global' device is already registerd */
 static int init_reset_source(void)
 {
        globalvar_add_simple("system.reset");
+       globalvar_add_simple("system.wakeup");
        set_reset_source(RESET_UKWNOWN);
+       set_wakeup_source(WAKEUP_UKWNOWN);
        return 0;
 }
 
diff --git a/include/reset_source.h b/include/reset_source.h
index af4246a..1777b2b 100644
--- a/include/reset_source.h
+++ b/include/reset_source.h
@@ -31,4 +31,15 @@ static inline void set_reset_source(enum reset_src_type 
unused)
 }
 #endif
 
+enum wakeup_src_type {
+       WAKEUP_UKWNOWN, /* maybe the SoC cannot detect the wakeup source */
+       WAKEUP_POWER,   /* Power restore */
+       WAKEUP_RTC,     /* rtc */
+       WAKEUP_TIMER,   /* timer */
+       WAKEUP_USER,    /* user */
+       WAKEUP_WOL,     /* wakeup on lan */
+};
+
+void set_wakeup_source(enum wakeup_src_type);
+
 #endif /* __INCLUDE_RESET_SOURCE_H */
-- 
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to