| 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); |
| } |
| |