---
name: "gpioled"
section: "4"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/gpioled"
---

# gpioled(4)

GPIO LED generic device driver

## NAME

**gpioled** – GPIO LED generic device driver

## SYNOPSIS

To compile this driver into the kernel, place the following lines in your kernel configuration file:

**device gpio** **device gpioled**

## DESCRIPTION

The **gpioled** driver provides glue to attach a [led(4)](/led/4.md) compatible device to a GPIO pin. Each LED in the system has a *name* which is used to export a device as */dev/led/\<name\>*. The GPIO pin can then be controlled by writing to this device as described in [led(4)](/led/4.md).

On a [device.hints(5)](/device.hints/5.md) based system, like MIPS, these values are configurable for **gpioled**:

- *hint.gpioled.%d.at*

  The gpiobus you are attaching to. Normally assigned to gpiobus0.

- *hint.gpioled.%d.name*

  Arbitrary name of device in */dev/led/* to create for [led(4)](/led/4.md).

- *hint.gpioled.%d.pins*

  Which pin on the GPIO interface to map to this instance. Please note that this mask should only ever have one bit set (any other bits - i.e., pins - will be ignored).

- *hint.gpioled.%d.invert*

  Use pin inversion. If set to 1, the pin will be set to 0 to light the LED, and 1 to clear it.

- *hint.gpioled.%d.invmode*

  Whether or not to use hardware support when pin inversion is requested. Must be one of:

  - *auto*

    Use hardware pin inversion if available, else fallback to software pin inversion. This is the default.

  - *hw*

    Use hardware pin inversion.

  - *sw*

    Use software pin inversion.

- *hint.gpioled.%d.state*

  The initial state of the LED when the driver takes control over it. If set to 1 or 0, the LED will be on or off correspondingly. If set to -1, the LED will be kept in its original state.

On a [FDT(4)](/FDT/4.md) based system, like ARM, the DTS part for a **gpioled** device usually looks like:

```
gpio: gpio {
	gpio-controller;
	...
	led0 {
		compatible = "gpioled";
		gpios = <&gpio 16 2 0>;		/* GPIO pin 16. */
		name = "ok";
	};
	led1 {
		compatible = "gpioled";
		gpios = <&gpio 17 2 0>;		/* GPIO pin 17. */
		name = "user-led1";
	};
};
```

Optionally, you can choose to combine all the LEDs under a single “gpio-leds” compatible node:

```
simplebus0 {
	...
	leds {
		compatible = "gpio-leds";
		led0 {
			gpios = <&gpio 16 2 0>;
			name = "ok"
		};
		led1 {
			gpios = <&gpio 17 2 0>;
			name = "user-led1"
		};
	};
};
```

Both methods are equally supported and it is possible to have the LEDs defined with any sort of mix between the methods. The only restriction is that a GPIO pin cannot be mapped by two different (gpio)leds.

For more details about the *gpios* property, please consult */usr/src/sys/dts/bindings-gpio.txt*.

The property *name* is the arbitrary name of the device in */dev/led/* to create for [led(4)](/led/4.md).

## SEE ALSO

[fdt(4)](/fdt/4.md), [gpio(4)](/gpio/4.md), [gpioiic(4)](/gpioiic/4.md), [led(4)](/led/4.md)

## HISTORY

The **gpioled** manual page first appeared in FreeBSD 10.1.

## AUTHORS

This manual page was written by Luiz Otavio O Souza.
