blob: 6132a37869faeb7efcf3246d17e3a05f9e28f882 [file] [log] [blame]
From 61d987b2399860c3fb69915397f9ef1ffe779a58 Mon Sep 17 00:00:00 2001
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: Thu, 20 Oct 2016 15:11:45 -0700
Subject: [PATCH 015/299] Input: gpio_keys - fix leaking DT node references
for_each_available_child_of_node(node, pp) takes reference to 'pp' and
drops it when attempting next iteration. However if we exit the loop early
we need to drop the reference ourselves.
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
(cherry picked from commit 0860913b02c28f0a1d8b515b99ae6419ef10569f)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
drivers/input/keyboard/gpio_keys.c | 3 +++
1 file changed, 3 insertions(+)
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -674,6 +674,7 @@ gpio_keys_get_devtree_pdata(struct devic
dev_err(dev,
"Failed to get gpio flags, error: %d\n",
error);
+ of_node_put(pp);
return ERR_PTR(error);
}
} else {
@@ -684,12 +685,14 @@ gpio_keys_get_devtree_pdata(struct devic
if (!gpio_is_valid(button->gpio) && !button->irq) {
dev_err(dev, "Found button without gpios or irqs\n");
+ of_node_put(pp);
return ERR_PTR(-EINVAL);
}
if (of_property_read_u32(pp, "linux,code", &button->code)) {
dev_err(dev, "Button without keycode: 0x%x\n",
button->gpio);
+ of_node_put(pp);
return ERR_PTR(-EINVAL);
}