[Letux-kernel] Dual-edge GPIO IRQs (Re: SMP issue between LX16 and LX20 found...)
H. Nikolaus Schaller
hns at goldelico.com
Sun Jun 15 21:22:40 CEST 2025
Hi Paul,
> Am 15.06.2025 um 19:36 schrieb Paul Boddie <paul at boddie.org.uk>:
>
> On Sunday, 15 June 2025 18:53:34 CEST Paul Boddie wrote:
>>
>> Checking the GPIO registers would confirm whether the IRQs are
>> misconfigured. I have tried to modify your jzgpio script to work with the
>> X2000, complicated by the UART misbehaving again. This does seem to suggest
>> that the GPIOs are indeed set to dual-edge triggering, which is a pretty
>> bad default.
>
> Looking more closely at the output and checking with the device tree, it seems
> that the PE31 pin is set to being an IRQ pin with active level low and is not
> dual-edge triggered. So, it looks like the pinctrl configuration is working,
> and I suppose it doesn't really matter if the default is dual-edge triggering
> if the pins are not configured for IRQs.
Hm. This sounds is if the polarity of being dual-edge or single-edge may be inverted...
> Thinking a bit more about it, shouldn't WKUP actually have an interrupt
> associated with it using IRQ_TYPE_EDGE_FALLING? Maybe something like this:
>
> interrupt-parent = <&gpe>;
> interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
> irq-gpios = <&gpe 31 GPIO_ACTIVE_HIGH>;
As far as I understand it is done in the gpio-keys driver which sets up all button
gpios as dual-edge and installs some interrupt handler to handle button press or
release by interrupt.
Maybe here:
https://elixir.bootlin.com/linux/v6.16-rc1/source/drivers/input/keyboard/gpio_keys.c#L984
> See: arch/mips/boot/dts/ingenic/halley5.dts
Unless I did miss something there is only a wifi and a touch interrupt. These
are falling edge of course. Touch drivers usually use a timer and polling to
track activities after the first touch interrupt.
BR,
Nikolaus
More information about the Letux-kernel
mailing list