[PATCH v3 4/4] pinctrl: sunxi: Define enable / disable irq callbacks for level triggered irqs

Linus Walleij linus.walleij at linaro.org
Fri Jul 4 14:39:16 PDT 2014


On Sun, Jun 29, 2014 at 4:11 PM, Hans de Goede <hdegoede at redhat.com> wrote:

> Some drivers use disable_irq / enable_irq and do the work clearing the source
> in another thread instead of using a threaded interrupt handler.
>
> The irqchip used not having irq_disable and irq_enable callbacks in this case,
> will lead to unnecessary spurious interrupts:
>
> On a disable_irq in a chip without a handller for this, the irq core will
> remember the disable, but not actually call into the irqchip. With a level
> triggered interrupt (where the source has not been cleared) this will lead
> to an immediate retrigger, at which point the irq-core will mask the irq.
> So having an irq_disable callback in the irqchip will save us the interrupt
> firing a 2nd time for nothing.
>
> Drivers using disable / enable_irq like this, will call enable_irq when
> they finally have cleared the interrupt source, without an enable_irq callback,
> this will turn into an unmask, at which point the irq will trigger immediately
> because when it was originally acked the level was still high, so the ack was
> a nop.
>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>

Patch applied with Maxime's ACK.

Yours,
Linus Walleij



More information about the linux-arm-kernel mailing list