]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
leds: trigger: gpio: GPIO 0 is valid
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 30 Aug 2019 15:08:19 +0000 (18:08 +0300)
committerJacek Anaszewski <jacek.anaszewski@gmail.com>
Sun, 1 Sep 2019 11:33:30 +0000 (13:33 +0200)
Allow all valid GPIOs to be used in the driver.

Fixes: 17354bfe8527 ("leds: Add gpio-led trigger")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
drivers/leds/trigger/ledtrig-gpio.c

index 33cc99a1a16a135aa0796bcadbc9713064aa1980..dc64679b1a9243c9219f8070de9ce6f5cc396d25 100644 (file)
@@ -131,10 +131,10 @@ static ssize_t gpio_trig_gpio_store(struct device *dev,
        if (gpio_data->gpio == gpio)
                return n;
 
-       if (!gpio) {
-               if (gpio_data->gpio != 0)
+       if (!gpio_is_valid(gpio)) {
+               if (gpio_is_valid(gpio_data->gpio))
                        free_irq(gpio_to_irq(gpio_data->gpio), led);
-               gpio_data->gpio = 0;
+               gpio_data->gpio = gpio;
                return n;
        }
 
@@ -144,7 +144,7 @@ static ssize_t gpio_trig_gpio_store(struct device *dev,
        if (ret) {
                dev_err(dev, "request_irq failed with error %d\n", ret);
        } else {
-               if (gpio_data->gpio != 0)
+               if (gpio_is_valid(gpio_data->gpio))
                        free_irq(gpio_to_irq(gpio_data->gpio), led);
                gpio_data->gpio = gpio;
                /* After changing the GPIO, we need to update the LED. */
@@ -172,6 +172,8 @@ static int gpio_trig_activate(struct led_classdev *led)
                return -ENOMEM;
 
        gpio_data->led = led;
+       gpio_data->gpio = -ENOENT;
+
        led_set_trigger_data(led, gpio_data);
 
        return 0;
@@ -181,7 +183,7 @@ static void gpio_trig_deactivate(struct led_classdev *led)
 {
        struct gpio_trig_data *gpio_data = led_get_trigger_data(led);
 
-       if (gpio_data->gpio != 0)
+       if (gpio_is_valid(gpio_data->gpio))
                free_irq(gpio_to_irq(gpio_data->gpio), led);
        kfree(gpio_data);
 }