Skip to content
Snippets Groups Projects
Commit e2e2cd4b authored by Iliyan Malchev's avatar Iliyan Malchev
Browse files

PM: wakeup_reason: add functions to query and clear wakeup reasons


The query results are valid until the next PM_SUSPEND_PREPARE.

Change-Id: I6bc2bd47c830262319576a001d39ac9a994916cf
Signed-off-by: default avatarIliyan Malchev <malchev@google.com>
parent b72e1a8b
No related branches found
No related tags found
No related merge requests found
...@@ -18,10 +18,14 @@ ...@@ -18,10 +18,14 @@
#ifndef _LINUX_WAKEUP_REASON_H #ifndef _LINUX_WAKEUP_REASON_H
#define _LINUX_WAKEUP_REASON_H #define _LINUX_WAKEUP_REASON_H
#include <linux/types.h>
#define MAX_SUSPEND_ABORT_LEN 256 #define MAX_SUSPEND_ABORT_LEN 256
void log_wakeup_reason(int irq); void log_wakeup_reason(int irq);
void log_suspend_abort_reason(const char *fmt, ...); void log_suspend_abort_reason(const char *fmt, ...);
int check_wakeup_reason(int irq); int check_wakeup_reason(int irq);
const int* get_wakeup_reasons(size_t *len);
void clear_wakeup_reasons(void);
#endif /* _LINUX_WAKEUP_REASON_H */ #endif /* _LINUX_WAKEUP_REASON_H */
...@@ -129,6 +129,20 @@ void log_suspend_abort_reason(const char *fmt, ...) ...@@ -129,6 +129,20 @@ void log_suspend_abort_reason(const char *fmt, ...)
spin_unlock(&resume_reason_lock); spin_unlock(&resume_reason_lock);
} }
const int* get_wakeup_reasons(size_t *len)
{
*len = irqcount;
return irq_list;
}
void clear_wakeup_reasons(void)
{
spin_lock(&resume_reason_lock);
irqcount = 0;
suspend_abort = false;
spin_unlock(&resume_reason_lock);
}
/* Detects a suspend and clears all the previous wake up reasons*/ /* Detects a suspend and clears all the previous wake up reasons*/
static int wakeup_reason_pm_event(struct notifier_block *notifier, static int wakeup_reason_pm_event(struct notifier_block *notifier,
unsigned long pm_event, void *unused) unsigned long pm_event, void *unused)
...@@ -136,8 +150,7 @@ static int wakeup_reason_pm_event(struct notifier_block *notifier, ...@@ -136,8 +150,7 @@ static int wakeup_reason_pm_event(struct notifier_block *notifier,
switch (pm_event) { switch (pm_event) {
case PM_SUSPEND_PREPARE: case PM_SUSPEND_PREPARE:
spin_lock(&resume_reason_lock); spin_lock(&resume_reason_lock);
irqcount = 0; clear_wakeup_reasons();
suspend_abort = false;
spin_unlock(&resume_reason_lock); spin_unlock(&resume_reason_lock);
break; break;
default: default:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment