From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tony Lindgren Subject: Re: [PATCH omap-fixes] OMAP2/3: GPIO: remove recursion in IRQ wakeup path Date: Wed, 4 Feb 2009 12:02:15 -0800 Message-ID: <20090204200213.GO7215@atomide.com> References: <1233167723-12026-1-git-send-email-khilman@deeprootsystems.com> <87bptkenha.fsf@deeprootsystems.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mho-01-bos.mailhop.org ([63.208.196.178]:57875 "EHLO mho-01-bos.mailhop.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752139AbZBDUCR (ORCPT ); Wed, 4 Feb 2009 15:02:17 -0500 Content-Disposition: inline In-Reply-To: <87bptkenha.fsf@deeprootsystems.com> Sender: linux-omap-owner@vger.kernel.org List-Id: linux-omap@vger.kernel.org To: Kevin Hilman Cc: linux-omap@vger.kernel.org * Kevin Hilman [090202 09:53]: > Kevin Hilman writes: > > > Now that the generic IRQ and GPIO frameworks are used for enabling and > > disabling GPIO IRQ wakeup sources, there is no longer a need to call > > [enable|disable]_irq_wake() in the low-level code. Doing so results > > in recursive calls to [enable|disable]_irq_wake(). > > > > This was discovered in the suspend/resume path on OMAP3/Beagle using > > the gpio-keys driver which disables/re-enables GPIO IRQ wakeups in the > > suspend/resume path. > > > > Signed-off-by: Kevin Hilman > > Tony, > > Not sure if it's too late, but this could go into omap-fixes too. I'll add it after the previous omap-fixes are merged to the mainline. Tony > > Kevin > > > > --- > > arch/arm/plat-omap/gpio.c | 14 ++++---------- > > 1 files changed, 4 insertions(+), 10 deletions(-) > > > > diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c > > index f856a90..798a8cd 100644 > > --- a/arch/arm/plat-omap/gpio.c > > +++ b/arch/arm/plat-omap/gpio.c > > @@ -837,13 +837,10 @@ static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable) > > case METHOD_MPUIO: > > case METHOD_GPIO_1610: > > spin_lock_irqsave(&bank->lock, flags); > > - if (enable) { > > + if (enable) > > bank->suspend_wakeup |= (1 << gpio); > > - enable_irq_wake(bank->irq); > > - } else { > > - disable_irq_wake(bank->irq); > > + else > > bank->suspend_wakeup &= ~(1 << gpio); > > - } > > spin_unlock_irqrestore(&bank->lock, flags); > > return 0; > > #endif > > @@ -856,13 +853,10 @@ static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable) > > return -EINVAL; > > } > > spin_lock_irqsave(&bank->lock, flags); > > - if (enable) { > > + if (enable) > > bank->suspend_wakeup |= (1 << gpio); > > - enable_irq_wake(bank->irq); > > - } else { > > - disable_irq_wake(bank->irq); > > + else > > bank->suspend_wakeup &= ~(1 << gpio); > > - } > > spin_unlock_irqrestore(&bank->lock, flags); > > return 0; > > #endif > > -- > > 1.6.1 > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html