]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
leds: trigger: gpio: Use GPIOD_FLAGS_BIT_NONEXCLUSIVE
authorPiotr Kubik <piotr@kubik.pl>
Wed, 8 Apr 2026 11:51:06 +0000 (13:51 +0200)
committerLee Jones <lee@kernel.org>
Wed, 17 Jun 2026 10:28:09 +0000 (11:28 +0100)
When a GPIO is shared between the LED trigger driver and another driver,
the LED trigger driver needs to request the GPIO with
GPIOD_FLAGS_BIT_NONEXCLUSIVE to allow both drivers to monitor the same
GPIO pin.

Without this flag, if another driver has already claimed the GPIO,
the LED trigger driver's gpiod_get_optional() call fails silently,
and the LED trigger doesn't work.

This is needed for scenarios like:
- SFP module presence/status LED triggered by SFP Mod_ABS/Rx_LOS

Both GPIOs are also monitored by the SFP driver for module state
management, so they need to be shared.

Signed-off-by: Piotr Kubik <piotr@kubik.pl>
Link: https://patch.msgid.link/20260408115106.379834-1-piotr@kubik.pl
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/trigger/ledtrig-gpio.c

index fc911dfec0ef9af856c77a22c82e64833e56ee42..3b3e6869e8561f11a95e8e1c6dee6175c48473c0 100644 (file)
@@ -86,7 +86,8 @@ static int gpio_trig_activate(struct led_classdev *led)
         * The generic property "trigger-sources" is followed,
         * and we hope that this is a GPIO.
         */
-       gpio_data->gpiod = gpiod_get_optional(dev, "trigger-sources", GPIOD_IN);
+       gpio_data->gpiod = gpiod_get_optional(dev, "trigger-sources",
+                                             GPIOD_IN | GPIOD_FLAGS_BIT_NONEXCLUSIVE);
        if (IS_ERR(gpio_data->gpiod)) {
                ret = PTR_ERR(gpio_data->gpiod);
                kfree(gpio_data);