--- a/drivers/leds/leds-gpio.c +++ b/drivers/leds/leds-gpio.c @@ -55,13 +55,17 @@ static void gpio_led_set(struct led_clas container_of(led_cdev, struct gpio_led_data, cdev); int level; - if (value == LED_OFF) - level = 0; - else - level = 1; - - if (led_dat->active_low) - level = !level; + switch (value) { + case LED_OFF: + level = led_dat->active_low ? 1 : 0; + break; + case LED_FULL: + level = led_dat->active_low ? 0 : 1; + break; + default: + level = value; + break; + } /* Setting GPIOs with I2C/etc requires a task context, and we don't * seem to have a reliable way to know if we're already in one; so