Thread (21 messages) 21 messages, 5 authors, 2014-07-16

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/
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help