diff options
Diffstat (limited to 'drivers/leds/trigger/ledtrig-gpio.c')
| -rw-r--r-- | drivers/leds/trigger/ledtrig-gpio.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/leds/trigger/ledtrig-gpio.c b/drivers/leds/trigger/ledtrig-gpio.c index 33cc99a1a16a..dc64679b1a92 100644 --- a/drivers/leds/trigger/ledtrig-gpio.c +++ b/drivers/leds/trigger/ledtrig-gpio.c @@ -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);  }  |