]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
pinctrl: renesas: rzt2h: Allow .get_direction() for IRQ function GPIOs
authorCosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
Fri, 5 Dec 2025 15:02:28 +0000 (17:02 +0200)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Fri, 9 Jan 2026 10:49:49 +0000 (11:49 +0100)
commit49b039a61a314c18074c15a7047705399e1240e6
tree6c1ca80dcdd807aa342889f718c639d14e91f8b4
parentba4a92372bea29aa2f0294a215e04ff77d98cbe7
pinctrl: renesas: rzt2h: Allow .get_direction() for IRQ function GPIOs

Setting up an IRQ would normally be done in the .activate() and
.deactivate() ops of the IRQ domain, but for hierarchical IRQ domains
the .activate() and .deactivate() ops are overridden in the
gpiochip_hierarchy_setup_domain_ops() function.

As such, activating and deactivating need to be done in the .translate()
and .free() ops of the IRQ domain.

For RZ/T2H and RZ/N2H, interrupts go through the pin controller, into
the ICU, which level-translates them and forwards them to the GIC.

To use a GPIO as an interrupt it needs to be put into peripheral
function mode 0, which will connect it to the IRQ lines of the ICU.

The IRQ chip .child_to_parent_hwirq() callback is called as part of the
IRQ fwspec parsing logic (as part of irq_create_of_mapping()) which
happens before the IRQ is requested (as part of gpiochip_lock_as_irq()).

gpiochip_lock_as_irq() calls gpiod_get_direction() if the
.get_direction() callback is provided to ensure that the GPIO line is
set up as input.

In our case, IRQ function is separate from GPIO, and both cannot be true
at the same time.

Return GPIO_LINE_DIRECTION_IN even if pin is in IRQ function to allow
this setup to work.

Hold the spinlock to ensure atomicity between reading the PMC register
(which determines whether the pin is in GPIO mode or not) and reading
the function of the pin when it is not in GPIO mode.

Signed-off-by: Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20251205150234.2958140-3-cosmin-gabriel.tanislav.xa@renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
drivers/pinctrl/renesas/pinctrl-rzt2h.c