Re: [PATCH v4 00/10] gpio: improve support for shared GPIOs

Linus Walleij
2025-11-18T23:24:09Z

On Tue, Nov 18, 2025 at 12:15 PM Geert Uytterhoeven
<geert@linux-m68k.org> wrote:

> We have a long-standing use-case on various Renesas R-Car Gen3 boards
> (e.g. Salvator-X(S) and ULCB[1]), where GPIOs are shared by LEDs and
> key switches. Basically, the GPIO is connected to:
> 1. A key switch connecting to GND when closed, with pull-up.
> 2. The gate of an N-channel MOSFET, turning on an LED when driven
> high.
>
> Hence:
> - In output mode, the LED can be controlled freely,
> - In input mode, the LED is on, unless the key is pressed,
> - Hence the switch state can only be read when the LED is turned on.

Fantastic solution to a lack of GPIO lines.

This reminds me of the Amiga 500 power LED which was connected
to a GPIO which was cleverly also reused to control the audio filter,
with the effect that when you turned off the audio filter the power LED
went out and music toggling the filter off/on for effects would also
give you an incidental stroboscope.

> If you have any idea how to handle this, feel free to reply ;-)

Isn't it pretty clear from the system-level DTS how the line
is used?

If it is connected to a gpio key it gets assigned for that usecase
and handled by that driver and if it is connected to a gpio LED
it is handled by that driver.

For the input usecase the status of the LED is a byproduct and
should not reflect in software I think. It surely should not be
controllable and possible to set into output mode because
that sounds like a recipe for HW damage if you drive it
actively high and press the key at the same time.

gpio_keys {
compatible = "gpio-keys";

button-ok {
gpios = <&gpio 0 GPIO_OPEN_DRAIN | GPIO_PULL_UP>;
};
};

Yours,
Linus Walleij