Hi Andy, Thank you for the patch. On 8/21/19 7:17 PM, Andy Shevchenko wrote: > Allow all valid GPIOs to be used in the driver. > > Fixes: 17354bfe8527 ("leds: Add gpio-led trigger") > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > drivers/leds/trigger/ledtrig-gpio.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/leds/trigger/ledtrig-gpio.c b/drivers/leds/trigger/ledtrig-gpio.c > index 33cc99a1a16a..31f456dd4417 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; It looks odd to me. I'd just assign invalid constant gpio number e.g. -1. Note that we should also do that in gpio_trig_activate(), where gpio_data->gpio is initialized to 0 by kzalloc(). That later can have nasty side effect in gpio_trig_gpio_store() when gpio to set is 0. Then the condition "if (gpio_data->gpio == gpio)" will evaluate to true and gpio_trig_irq() handler will not be registered. > 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. */ > @@ -181,7 +181,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); > } > -- Best regards, Jacek Anaszewski