Re: [PATCH] GPIO button wth wakeup attribute is supposed to wake the system up
From: Li, Aubrey <hidden>
Date: 2014-07-10 02:28:21
Also in:
linux-pm, lkml
On 2014/7/9 20:45, Rafael J. Wysocki wrote:
On Tuesday, July 08, 2014 05:54:35 PM Dmitry Torokhov wrote:quoted
On Wed, Jul 09, 2014 at 02:59:33AM +0200, Rafael J. Wysocki wrote:quoted
On Tuesday, July 08, 2014 05:15:06 PM Dmitry Torokhov wrote:quoted
On Wed, Jul 09, 2014 at 01:06:07AM +0200, Rafael J. Wysocki wrote:[cut]quoted
quoted
quoted
When device driver marks IRQ as a wakeup source I believe it is prepared to handle it (or it would shut it off explicitly).I can agree with that. Are you suggesting that __disable_irq() should check irq_data for IRQD_WAKEUP_STATE and skip the IRQ (in the 'suspend' case) if that is set?Yes, something like that.OK
Many thanks to you both for the discussion.
Aubrey, can you please check if the appended patch helps on the T100?
I verified this patch on T100, it works as expected, freeze can be waken up by reverting my patch and applying this one. Is this a final solution? Thanks, -Aubrey
quoted hunk ↗ jump to hunk
Rafael --- kernel/irq/manage.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-pm/kernel/irq/manage.c ===================================================================--- linux-pm.orig/kernel/irq/manage.c +++ linux-pm/kernel/irq/manage.c@@ -385,7 +385,8 @@ setup_affinity(unsigned int irq, struct void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend) { if (suspend) { - if (!desc->action || (desc->action->flags & IRQF_NO_SUSPEND)) + if (!desc->action || (desc->action->flags & IRQF_NO_SUSPEND) + || irqd_has_set(&desc->irq_data, IRQD_WAKEUP_STATE)) return; desc->istate |= IRQS_SUSPENDED; } --To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/