diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h index ec33fbdb919b..b9402548c797 100644 --- a/drivers/base/power/power.h +++ b/drivers/base/power/power.h @@ -99,6 +99,12 @@ extern int pm_async_enabled; /* drivers/base/power/main.c */ extern struct list_head dpm_list; /* The active device list */ +#ifdef CONFIG_QCOM_SHOW_RESUME_IRQ +extern int msm_show_resume_irq_mask; +#else +#define msm_show_resume_irq_mask 0 +#endif + static inline struct device *to_device(struct list_head *entry) { return container_of(entry, struct device, power.entry); diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index f5b97b1cd3d9..9ac60a1db55e 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -17,6 +17,9 @@ #include #include #include +#include +#include +#include #include "power.h" @@ -903,7 +906,21 @@ void pm_wakeup_clear(bool reset) void pm_system_irq_wakeup(unsigned int irq_number) { + struct irq_desc *desc; + const char *name = "null"; + if (pm_wakeup_irq == 0) { + if (msm_show_resume_irq_mask) { + desc = irq_to_desc(irq_number); + if (desc == NULL) + name = "stray irq"; + else if (desc->action && desc->action->name) + name = desc->action->name; + + pr_warn("%s: %d triggered %s\n", __func__, + irq_number, name); + + } pm_wakeup_irq = irq_number; pm_system_wakeup(); }