Commit 4e421040 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Jacek Anaszewski
Browse files

leds: trigger: gpio: GPIO 0 is valid



Allow all valid GPIOs to be used in the driver.

Fixes: 17354bfe ("leds: Add gpio-led trigger")
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarJacek Anaszewski <jacek.anaszewski@gmail.com>
parent d4b02200
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -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);
}