summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorRussell Robinson Jr <rrobinson@phytec.com>2013-09-11 14:45:57 -0700
committerAnthony Felice <tony.felice@timesys.com>2013-09-17 14:22:18 -0400
commit2c073ea51c603a56a6bc26114a8c24af7a4ac04b (patch)
tree4a4cd803e7bda93ecdb140609a8529fb197949f2 /drivers
parent0bbe7196d7e00997dc38d99e665998849b790ecc (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.c1
-rw-r--r--drivers/leds/ledtrig-gpio.c12
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);