diff options
| -rw-r--r-- | drivers/input/keyboard/gpio_keys.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index d327f5a2bb0e..b29ca651a395 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c | |||
| @@ -602,6 +602,7 @@ gpio_keys_get_devtree_pdata(struct device *dev) | |||
| 602 | 602 | ||
| 603 | i = 0; | 603 | i = 0; |
| 604 | for_each_child_of_node(node, pp) { | 604 | for_each_child_of_node(node, pp) { |
| 605 | int gpio; | ||
| 605 | enum of_gpio_flags flags; | 606 | enum of_gpio_flags flags; |
| 606 | 607 | ||
| 607 | if (!of_find_property(pp, "gpios", NULL)) { | 608 | if (!of_find_property(pp, "gpios", NULL)) { |
| @@ -610,9 +611,19 @@ gpio_keys_get_devtree_pdata(struct device *dev) | |||
| 610 | continue; | 611 | continue; |
| 611 | } | 612 | } |
| 612 | 613 | ||
| 614 | gpio = of_get_gpio_flags(pp, 0, &flags); | ||
| 615 | if (gpio < 0) { | ||
| 616 | error = gpio; | ||
| 617 | if (error != -EPROBE_DEFER) | ||
| 618 | dev_err(dev, | ||
| 619 | "Failed to get gpio flags, error: %d\n", | ||
| 620 | error); | ||
| 621 | goto err_free_pdata; | ||
| 622 | } | ||
| 623 | |||
| 613 | button = &pdata->buttons[i++]; | 624 | button = &pdata->buttons[i++]; |
| 614 | 625 | ||
| 615 | button->gpio = of_get_gpio_flags(pp, 0, &flags); | 626 | button->gpio = gpio; |
| 616 | button->active_low = flags & OF_GPIO_ACTIVE_LOW; | 627 | button->active_low = flags & OF_GPIO_ACTIVE_LOW; |
| 617 | 628 | ||
| 618 | if (of_property_read_u32(pp, "linux,code", &button->code)) { | 629 | if (of_property_read_u32(pp, "linux,code", &button->code)) { |
