gpio: em: Make use of devm functions
PATCH 1/1 gpio: em: Make use of devm functions
From: Magnus Damm <[email protected]>
Update the Emma Mobile GPIO driver to make use of devm functions. This simplifies the error handling and makes the code more compact.
---
Written on top of:
[PATCH] gpio: em: Add Device Tree support
drivers/gpio/gpio-em.c | 53 +++++++++++++++++------------------------------- 1 file changed, 19 insertions(+), 34 deletions(-)
drivers/gpio/gpio-em.c +19 -34
@@ -245,7 +245,7 @@ static int em_gio_probe(struct platform_const char *name =dev_name (&pdev->dev);int ret; - p =kzalloc (sizeof (*p),GFP_KERNEL ); + p =devm_kzalloc (&pdev->dev,sizeof (*p),GFP_KERNEL );if (!p) {dev_err (&pdev->dev,"failed to allocate driver data\n" ); ret = -ENOMEM ;
@@ -264,21 +264,23 @@ static int em_gio_probe(struct platform_if (!io[0 ] || !io[1 ] || !irq[0 ] || !irq[1 ]) {dev_err (&pdev->dev,"missing IRQ or IOMEM\n" ); ret = -EINVAL ; - goto err1; + goto err0; } - p->base0 =ioremap_nocache (io[0 ]->start,resource_size (io[0 ])); + p->base0 =devm_ioremap_nocache (&pdev->dev, io[0 ]->start, +resource_size (io[0 ]));if (!p->base0) {dev_err (&pdev->dev,"failed to remap low I/O memory\n" ); ret = -ENXIO ; - goto err1; + goto err0; } - p->base1 =ioremap_nocache (io[1 ]->start,resource_size (io[1 ])); + p->base1 =devm_ioremap_nocache (&pdev->dev, io[1 ]->start, +resource_size (io[1 ]));if (!p->base1) {dev_err (&pdev->dev,"failed to remap high I/O memory\n" ); ret = -ENXIO ; - goto err2; + goto err0; }if (!pdata) {
@@ -289,13 +291,13 @@ static int em_gio_probe(struct platform_ &pdata->number_of_pins)) {dev_err (&pdev->dev,"Missing ngpios OF property\n" ); ret = -EINVAL ; - goto err3; + goto err0; } ret =of_alias_get_id (pdev->dev.of_node,"gpio" );if (ret <0 ) {dev_err (&pdev->dev,"Couldn't get OF id\n" ); - goto err3; + goto err0; } pdata->gpio_base = ret *32 ;/* 32 GPIOs per instance */ }
@@ -327,40 +329,32 @@ static int em_gio_probe(struct platform_if (!p->irq_domain) { ret = -ENXIO ;dev_err (&pdev->dev,"cannot initialize irq domain\n" ); - goto err3; + goto err0; } -if (request_irq (irq[0 ]->start, em_gio_irq_handler,0 , name, p)) { +if (devm_request_irq (&pdev->dev, irq[0 ]->start, + em_gio_irq_handler,0 , name, p)) {dev_err (&pdev->dev,"failed to request low IRQ\n" ); ret = -ENOENT ; - goto err4; + goto err1; } -if (request_irq (irq[1 ]->start, em_gio_irq_handler,0 , name, p)) { +if (devm_request_irq (&pdev->dev, irq[1 ]->start, + em_gio_irq_handler,0 , name, p)) {dev_err (&pdev->dev,"failed to request high IRQ\n" ); ret = -ENOENT ; - goto err5; + goto err1; } ret =gpiochip_add (gpio_chip);if (ret) {dev_err (&pdev->dev,"failed to add GPIO controller\n" ); - goto err6; + goto err1; }return 0 ; -err6: -free_irq (irq[1 ]->start, pdev); -err5: -free_irq (irq[0 ]->start, pdev); -err4: -irq_domain_remove (p->irq_domain); -err3: -iounmap (p->base1); -err2: -iounmap (p->base0); err1: -kfree (p); +irq_domain_remove (p->irq_domain); err0:return ret; }
@@ -368,22 +362,13 @@ err0:static int em_gio_remove (struct platform_device *pdev) {struct em_gio_priv *p =platform_get_drvdata (pdev); -struct resource *irq[2 ];int ret; ret =gpiochip_remove (&p->gpio_chip);if (ret)return ret; - irq[0 ] =platform_get_resource (pdev,IORESOURCE_IRQ ,0 ); - irq[1 ] =platform_get_resource (pdev,IORESOURCE_IRQ ,1 ); - -free_irq (irq[1 ]->start, pdev); -free_irq (irq[0 ]->start, pdev);irq_domain_remove (p->irq_domain); -iounmap (p->base1); -iounmap (p->base0); -kfree (p);return 0 ; }
Quoted 11 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Update the Emma Mobile GPIO driver to make use of devm functions. This simplifies the error handling and makes the code more compact.
Signed-off-by Magnus Damm <[email protected]>---
Written on top of:
[PATCH] gpio: em: Add Device Tree support
Patch applied, hm git am complains that the patch is broken on line 137, then when I use patch -p1 < magnus.patch everything works fine. Weird.
Thanks!
Linus Walleij
Hi Linus,
Quoted 11 lines · Linus Walleij
Quoted 9 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Update the Emma Mobile GPIO driver to make use of devm functions. This simplifies the error handling and makes the code more compact.
Signed-off-by Magnus Damm <[email protected]>---
Quoted 6 lines
Quoted 2 lines
Written on top of:
[PATCH] gpio: em: Add Device Tree supportPatch applied, hm git am complains that the patch is broken on line 137, then when I use patch -p1 < magnus.patch everything works fine. Weird.
Yes, indeed a bit weird. I actually tested the code about an hour ago, but I used patch then.
Thanks for your help!
/ magnus