Commit 9dfdcdfe authored by Igor Grinberg's avatar Igor Grinberg Committed by Tom Rini

gpio_led: add support for inverted polarity

Some GPIO connected LEDs have inverted polarity.
Introduce new config option: CONFIG_GPIO_LED_INVERTED_TABLE for the
specifying the inverted GPIO LEDs list and add support for this in the
gpio_led driver.
Signed-off-by: default avatarIgor Grinberg <>
Tested-by: default avatarIlya Ledvich <>
parent 6516f81b
......@@ -1971,6 +1971,13 @@ CBFS (Coreboot Filesystem) support
status LED backend implementation. Define CONFIG_GPIO_LED
to include the gpio_led driver in the U-Boot binary.
Some GPIO connected LEDs may have inverted polarity in which
case the GPIO high value corresponds to LED off state and
GPIO low value corresponds to LED on state.
In such cases CONFIG_GPIO_LED_INVERTED_TABLE may be defined
with a list of GPIO LEDs that have inverted polarity.
Defining CONFIG_CAN_DRIVER enables CAN driver support
......@@ -9,19 +9,42 @@
#include <status_led.h>
#include <asm/gpio.h>
static led_id_t gpio_led_inv[] = CONFIG_GPIO_LED_INVERTED_TABLE;
static int gpio_led_gpio_value(led_id_t mask, int state)
int i, gpio_value = (state == STATUS_LED_ON);
for (i = 0; i < ARRAY_SIZE(gpio_led_inv); i++) {
if (gpio_led_inv[i] == mask)
gpio_value = !gpio_value;
return gpio_value;
void __led_init(led_id_t mask, int state)
int gpio_value;
if (gpio_request(mask, "gpio_led") != 0) {
printf("%s: failed requesting GPIO%lu!\n", __func__, mask);
gpio_direction_output(mask, state == STATUS_LED_ON);
gpio_value = gpio_led_gpio_value(mask, state);
gpio_direction_output(mask, gpio_value);
void __led_set(led_id_t mask, int state)
gpio_set_value(mask, state == STATUS_LED_ON);
int gpio_value = gpio_led_gpio_value(mask, state);
gpio_set_value(mask, gpio_value);
void __led_toggle(led_id_t mask)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment