]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
leds: trigger: gpio: make ledtrig-gpio useable with GPIO drivers requiring threaded...
authorLothar Waßmann <LW@KARO-electronics.de>
Mon, 8 Sep 2014 13:04:49 +0000 (15:04 +0200)
committerLothar Waßmann <LW@KARO-electronics.de>
Wed, 10 Sep 2014 06:42:52 +0000 (08:42 +0200)
When trying to use the LED GPIO trigger with e.g. the PCA953x GPIO
driver, request_irq() fails with -EINVAL, because the GPIO driver
requires a nested interrupt handler.

Use request_any_context_irq() to be able to use any GPIO driver as LED
trigger.

drivers/leds/trigger/ledtrig-gpio.c

index c86c41826476ca48b3fa6f58e0a41db869418cf8..b4168a7e1c417ab4b0219b0608c6bcfcd9a1b5be 100644 (file)
@@ -161,10 +161,10 @@ static ssize_t gpio_trig_gpio_store(struct device *dev,
                return n;
        }
 
-       ret = request_irq(gpio_to_irq(gpio), gpio_trig_irq,
+       ret = request_any_context_irq(gpio_to_irq(gpio), gpio_trig_irq,
                        IRQF_SHARED | IRQF_TRIGGER_RISING
                        | IRQF_TRIGGER_FALLING, "ledtrig-gpio", led);
-       if (ret) {
+       if (ret < 0) {
                dev_err(dev, "request_irq failed with error %d\n", ret);
        } else {
                if (gpio_data->gpio != 0)
@@ -172,7 +172,7 @@ static ssize_t gpio_trig_gpio_store(struct device *dev,
                gpio_data->gpio = gpio;
        }
 
-       return ret ? ret : n;
+       return ret < 0 ? ret : n;
 }
 static DEVICE_ATTR(gpio, 0644, gpio_trig_gpio_show, gpio_trig_gpio_store);