Re: [PATCH] input: gpio_keys: Cleanup devicetree parser
flat view
From: Rob Herring <hidden>
Date: 2012-06-25 15:21:33
Also in:
linux-devicetree, lkml
On 06/25/2012 10:17 AM, Alexandre Pereira da Silva wrote:
Fix sizeof in memset. Cleanup dt properties extraction. Use for_each macro. Use of_match_ptr macro. Signed-off-by: Alexandre Pereira da Silva <redacted>
Acked-by: Rob Herring <redacted>
quoted hunk ↗ jump to hunk
--- drivers/input/keyboard/gpio_keys.c | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-)diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index 62bfce4..1ef15ae 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c@@ -548,22 +548,16 @@ static int gpio_keys_get_devtree_pdata(struct device *dev, struct device_node *node, *pp; int i; struct gpio_keys_button *buttons; - u32 reg; node = dev->of_node; if (node == NULL) return -ENODEV; - memset(pdata, 0, sizeof *pdata); + memset(pdata, 0, sizeof(*pdata)); pdata->rep = !!of_get_property(node, "autorepeat", NULL); - /* First count the subnodes */ - pdata->nbuttons = 0; - pp = NULL; - while ((pp = of_get_next_child(node, pp))) - pdata->nbuttons++; - + pdata->nbuttons = of_get_child_count(node); if (pdata->nbuttons == 0) return -ENODEV;@@ -571,9 +565,8 @@ static int gpio_keys_get_devtree_pdata(struct device *dev, if (!buttons) return -ENOMEM; - pp = NULL; i = 0; - while ((pp = of_get_next_child(node, pp))) { + for_each_child_of_node(node, pp) { enum of_gpio_flags flags; if (!of_find_property(pp, "gpios", NULL)) {@@ -584,24 +577,21 @@ static int gpio_keys_get_devtree_pdata(struct device *dev, buttons[i].gpio = of_get_gpio_flags(pp, 0, &flags); buttons[i].active_low = flags & OF_GPIO_ACTIVE_LOW; - if (of_property_read_u32(pp, "linux,code", ®)) { + if (of_property_read_u32(pp, "linux,code", &buttons[i].code)) { dev_err(dev, "Button without keycode: 0x%x\n", buttons[i].gpio); goto out_fail; } - buttons[i].code = reg; buttons[i].desc = of_get_property(pp, "label", NULL); - if (of_property_read_u32(pp, "linux,input-type", ®) == 0) - buttons[i].type = reg; - else + if (of_property_read_u32(pp, "linux,input-type", + &buttons[i].type)) buttons[i].type = EV_KEY; buttons[i].wakeup = !!of_get_property(pp, "gpio-key,wakeup", NULL); - if (of_property_read_u32(pp, "debounce-interval", ®) == 0) - buttons[i].debounce_interval = reg; - else + if (of_property_read_u32(pp, "debounce-interval", + &buttons[i].debounce_interval)) buttons[i].debounce_interval = 5; i++;@@ -630,8 +620,6 @@ static int gpio_keys_get_devtree_pdata(struct device *dev, return -ENODEV; } -#define gpio_keys_of_match NULL - #endif static void gpio_remove_key(struct gpio_button_data *bdata)@@ -823,7 +811,7 @@ static struct platform_driver gpio_keys_device_driver = { .name = "gpio-keys", .owner = THIS_MODULE, .pm = &gpio_keys_pm_ops, - .of_match_table = gpio_keys_of_match, + .of_match_table = of_match_ptr(gpio_keys_of_match), } };