aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/input/keyboard/gpio_keys.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 5e875771a066a5..e196174856796b 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -616,12 +616,19 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
break;
}
} else {
- if (!button->irq) {
- dev_err(dev, "Found button without gpio or irq\n");
- return -EINVAL;
- }
+ if (button->irq) {
+ bdata->irq = button->irq;
+ } else {
+ irq = platform_get_irq_optional(pdev, idx);
+ if (irq < 0) {
+ error = irq;
+ return dev_err_probe(dev, error,
+ "Unable to determine IRQ# for button #%d",
+ idx);
+ }
- bdata->irq = button->irq;
+ bdata->irq = irq;
+ }
if (button->type && button->type != EV_KEY) {
dev_err(dev, "Only EV_KEY allowed for IRQ buttons.\n");