diff options
author | Russell Robinson Jr <rrobinson@phytec.com> | 2013-09-11 14:45:57 -0700 |
---|---|---|
committer | Anthony Felice <tony.felice@timesys.com> | 2013-09-17 14:22:18 -0400 |
commit | 2c073ea51c603a56a6bc26114a8c24af7a4ac04b (patch) | |
tree | 4a4cd803e7bda93ecdb140609a8529fb197949f2 /drivers | |
parent | 0bbe7196d7e00997dc38d99e665998849b790ecc (diff) |
leds-gpio: ledtrig-gpio: allow static gpio val
Modified leds-gpio and ledtrig-gpio driver to allow gpios to
be designated in kernel space instead of being limited to
user space assignment.
Signed-off-by: Johnathan Feuerstein <jfeuerstein@phytec.com>
Signed-off-by: Russell Robinson Jr <rrobinson@phytec.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/leds/leds-gpio.c | 1 | ||||
-rw-r--r-- | drivers/leds/ledtrig-gpio.c | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c index b0480c8fbcbf..688a06e80db3 100644 --- a/drivers/leds/leds-gpio.c +++ b/drivers/leds/leds-gpio.c @@ -111,6 +111,7 @@ static int __devinit create_gpio_led(const struct gpio_led *template, led_dat->cdev.name = template->name; led_dat->cdev.default_trigger = template->default_trigger; + led_dat->cdev.trigger_gpio = template->trigger_gpio; led_dat->gpio = template->gpio; led_dat->can_sleep = gpio_cansleep(template->gpio); led_dat->active_low = template->active_low; diff --git a/drivers/leds/ledtrig-gpio.c b/drivers/leds/ledtrig-gpio.c index ecc4bf3f37a9..91460309d006 100644 --- a/drivers/leds/ledtrig-gpio.c +++ b/drivers/leds/ledtrig-gpio.c @@ -164,6 +164,7 @@ static ssize_t gpio_trig_gpio_store(struct device *dev, ret = request_irq(gpio_to_irq(gpio), gpio_trig_irq, IRQF_SHARED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "ledtrig-gpio", led); + if (ret) { dev_err(dev, "request_irq failed with error %d\n", ret); } else { @@ -198,6 +199,17 @@ static void gpio_trig_activate(struct led_classdev *led) goto err_brightness; gpio_data->led = led; + + if(led->trigger_gpio) + { + gpio_data->gpio = led->trigger_gpio; + ret = request_irq(gpio_to_irq(gpio_data->gpio), gpio_trig_irq, + IRQF_SHARED | IRQF_TRIGGER_RISING + | IRQF_TRIGGER_FALLING, "ledtrig-gpio", led); + } + if (ret) + dev_err(led->dev, "request_irq failed with error %d\n", ret); + led->trigger_data = gpio_data; INIT_WORK(&gpio_data->work, gpio_trig_work); |