summaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2014-04-16 11:47:52 +0530
committerSeema Khowala <seemaj@nvidia.com>2014-04-23 14:05:10 -0700
commitc24a1ec7773dc55c309b846589cbaff955780005 (patch)
treecf4e7df20faf74e86b3e3d038bb67492e6209944 /drivers/input
parent98b3df4596794c109ae6534b7f1933a6127be178 (diff)
input: gpio-keys: add support for reading irq from DT node for interrupt key
GPIO keys driver support the interrupt only keys. Add support for reading irq number for interrupt keys from DT node. Change-Id: I9d355923b8f9b388ecd2f71275c213aa0d7c88b9 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/396849
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/keyboard/gpio_keys.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 282880dc8fb3..edac00b51372 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -28,6 +28,7 @@
#include <linux/gpio_keys.h>
#include <linux/workqueue.h>
#include <linux/gpio.h>
+#include <linux/of_irq.h>
#include <linux/of_platform.h>
#include <linux/of_gpio.h>
#include <linux/spinlock.h>
@@ -619,15 +620,28 @@ gpio_keys_get_devtree_pdata(struct device *dev)
i = 0;
for_each_child_of_node(node, pp) {
- int gpio;
+ int gpio = -1;
+ unsigned int irq = 0;
enum of_gpio_flags flags;
+ bool gpio_props = false;
+ bool irq_prop = false;
- if (!of_find_property(pp, "gpios", NULL)) {
+ if (of_find_property(pp, "gpios", NULL))
+ gpio_props = true;
+
+ irq = irq_of_parse_and_map(pp, 0);
+ if (irq > 0)
+ irq_prop = true;
+
+ if (!gpio_props && !irq_prop) {
+ dev_warn(dev, "Found button without gpios/irq\n");
pdata->nbuttons--;
- dev_warn(dev, "Found button without gpios\n");
continue;
}
+ if (!gpio_props)
+ goto gpio_get;
+
gpio = of_get_gpio_flags(pp, 0, &flags);
if (gpio < 0) {
error = gpio;
@@ -638,9 +652,11 @@ gpio_keys_get_devtree_pdata(struct device *dev)
goto err_free_pdata;
}
+gpio_get:
button = &pdata->buttons[i++];
button->gpio = gpio;
+ button->irq = irq;
button->active_low = flags & OF_GPIO_ACTIVE_LOW;
if (of_property_read_u32(pp, "linux,code", &button->code)) {