+ Jon, On Sat, Aug 25, 2012 at 5:14 PM, NeilBrown wrote: > > > > Current kernel will wake from suspend on an event on any active > GPIO even if enable_irq_wake() wasn't called. > > There are two reasons that the hardware wake-enable bit should be set: > > 1/ while non-suspended the CPU might go into a deep sleep (off_mode) > in which the wake-enable bit is needed for an interrupt to be > recognised. > 2/ while suspended the GPIO interrupt should wake from suspend if and > only if irq_wake as been enabled. > > The code currently doesn't keep these two reasons separate so they get > confused and sometimes the wakeup flags is set incorrectly. > > This patch reverts: > commit 9c4ed9e6c01e7a8bd9079da8267e1f03cb4761fc > gpio/omap: remove suspend/resume callbacks > and > commit 0aa2727399c0b78225021413022c164cb99fbc5e > gpio/omap: remove suspend_wakeup field from struct gpio_bank > > and makes some minor changes so that we have separate flags for "GPIO > should wake from deep idle" and "GPIO should wake from suspend". > > With this patch, the GPIO from my touch screen doesn't wake my device > any more, which is what I want. > > Cc: Kevin Hilman > Cc: Tony Lindgren > Cc: Santosh Shilimkar > Cc: Cousson, Benoit > Cc: Grant Likely > Cc: Tarun Kanti DebBarma > Cc: Felipe Balbi > Cc: Govindraj.R > > Signed-off-by: NeilBrown > The patch doesn't seems to be correct. At least the 2/ gets fixed with a proper IRQCHIP flag. Can you try the patch at end of the email and see if it helps ? Am attaching it in case mailer damages it. Regards Santosh >From b8a38fc75e046f6462610e26c47c620cad850c24 Mon Sep 17 00:00:00 2001 From: Santosh Shilimkar Date: Sun, 26 Aug 2012 09:39:51 +0530 Subject: [PATCH] gpio: omap: Set IRQCHIP_MASK_ON_SUSPEND to mask all non-wakeup gpio wakeups. Set the irq chip flag IRQCHIP_MASK_ON_SUSPEND to cause the irq pm code to mask all non-wake gpios in suspend, which will ensure the wakeup enable bit is not set on non-wake gpios. Signed-off-by: Santosh Shilimkar --- drivers/gpio/gpio-omap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index e6efd77..50b4c18 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -779,6 +779,7 @@ static struct irq_chip gpio_irq_chip = { .irq_unmask = gpio_unmask_irq, .irq_set_type = gpio_irq_type, .irq_set_wake = gpio_wake_enable, + .flags = IRQCHIP_MASK_ON_SUSPEND; }; /*---------------------------------------------------------------------*/ -- 1.7.9.5