|
@@ -602,6 +602,7 @@ gpio_keys_get_devtree_pdata(struct device *dev)
|
|
|
|
|
|
i = 0;
|
|
|
for_each_child_of_node(node, pp) {
|
|
|
+ int gpio;
|
|
|
enum of_gpio_flags flags;
|
|
|
|
|
|
if (!of_find_property(pp, "gpios", NULL)) {
|
|
@@ -610,9 +611,19 @@ gpio_keys_get_devtree_pdata(struct device *dev)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ gpio = of_get_gpio_flags(pp, 0, &flags);
|
|
|
+ if (gpio < 0) {
|
|
|
+ error = gpio;
|
|
|
+ if (error != -EPROBE_DEFER)
|
|
|
+ dev_err(dev,
|
|
|
+ "Failed to get gpio flags, error: %d\n",
|
|
|
+ error);
|
|
|
+ goto err_free_pdata;
|
|
|
+ }
|
|
|
+
|
|
|
button = &pdata->buttons[i++];
|
|
|
|
|
|
- button->gpio = of_get_gpio_flags(pp, 0, &flags);
|
|
|
+ button->gpio = gpio;
|
|
|
button->active_low = flags & OF_GPIO_ACTIVE_LOW;
|
|
|
|
|
|
if (of_property_read_u32(pp, "linux,code", &button->code)) {
|