Re: [PATCH] extcon: gpio: Request reasonable interrupts

From: Linus Walleij
Date: Fri Jun 07 2019 - 17:29:26 EST


On Tue, Jun 4, 2019 at 3:30 AM Chanwoo Choi <cw00.choi@xxxxxxxxxxx> wrote:
> On 19. 5. 31. ìì 3:39, Linus Walleij wrote:

> > + /*
> > + * It is unlikely that this is an acknowledged interrupt that goes
> > + * away after handling, what we are looking for are falling edges
> > + * if the signal is active low, and rising edges if the signal is
> > + * active high.
> > + */
> > + if (gpiod_is_active_low(data->gpiod))
> > + irq_flags = IRQF_TRIGGER_FALLING;
>
> If gpiod_is_active_low(data->gpiod) is true, irq_flags might be
> IRQF_TRIGGER_LOW instead of IRQF_TRIGGER_FALLING. How can we sure
> that irq_flags is always IRQF_TRIGGER_FALLING?

OK correct me if I'm wrong, but this is an external connector and
the GPIO goes low/high when the connector is physically inserted.
If it was level trigged, it would lock up the CPU with interrupts until
it was unplugged again, since there is no way to acknowledge a
level IRQ.

I think level IRQ on GPIOs are only used for logic peripherals
such as ethernet controllers etc where you can talk to the peripheral
and get it to deassert the line and thus acknowledge the IRQ.

So the way I see it only edge triggering makes sense for extcon.

Correct me if I'm wrong.

Yours,
Linus Walleij