]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
gpio/gpio-pl061: Covert to use devm_* functions
authorTobias Klauser <tklauser@distanz.ch>
Fri, 5 Oct 2012 09:45:28 +0000 (11:45 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 12 Oct 2012 21:02:14 +0000 (23:02 +0200)
Use the devm_* family of functions during probe to reduce the error
handling code footprint.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-pl061.c

index b4b5da4fd2cc896f219859bc9849831c2c0527c4..31d9c9e79ea924b474b52ceda3d69f34a0414162 100644 (file)
@@ -216,39 +216,34 @@ static void __init pl061_init_gc(struct pl061_gpio *chip, int irq_base)
                               IRQ_GC_INIT_NESTED_LOCK, IRQ_NOREQUEST, 0);
 }
 
-static int pl061_probe(struct amba_device *dev, const struct amba_id *id)
+static int pl061_probe(struct amba_device *adev, const struct amba_id *id)
 {
-       struct pl061_platform_data *pdata;
+       struct device *dev = &adev->dev;
+       struct pl061_platform_data *pdata = dev->platform_data;
        struct pl061_gpio *chip;
        int ret, irq, i;
 
-       chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+       chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL);
        if (chip == NULL)
                return -ENOMEM;
 
-       pdata = dev->dev.platform_data;
        if (pdata) {
                chip->gc.base = pdata->gpio_base;
                chip->irq_base = pdata->irq_base;
-       } else if (dev->dev.of_node) {
+       } else if (adev->dev.of_node) {
                chip->gc.base = -1;
                chip->irq_base = 0;
-       } else {
-               ret = -ENODEV;
-               goto free_mem;
-       }
+       } else
+               return -ENODEV;
 
-       if (!request_mem_region(dev->res.start,
-                               resource_size(&dev->res), "pl061")) {
-               ret = -EBUSY;
-               goto free_mem;
-       }
+       if (!devm_request_mem_region(dev, adev->res.start,
+                               resource_size(&adev->res), "pl061"))
+               return -EBUSY;
 
-       chip->base = ioremap(dev->res.start, resource_size(&dev->res));
-       if (chip->base == NULL) {
-               ret = -ENOMEM;
-               goto release_region;
-       }
+       chip->base = devm_ioremap(dev, adev->res.start,
+                               resource_size(&adev->res));
+       if (chip->base == NULL)
+               return -ENOMEM;
 
        spin_lock_init(&chip->lock);
 
@@ -258,13 +253,13 @@ static int pl061_probe(struct amba_device *dev, const struct amba_id *id)
        chip->gc.set = pl061_set_value;
        chip->gc.to_irq = pl061_to_irq;
        chip->gc.ngpio = PL061_GPIO_NR;
-       chip->gc.label = dev_name(&dev->dev);
-       chip->gc.dev = &dev->dev;
+       chip->gc.label = dev_name(dev);
+       chip->gc.dev = dev;
        chip->gc.owner = THIS_MODULE;
 
        ret = gpiochip_add(&chip->gc);
        if (ret)
-               goto iounmap;
+               return ret;
 
        /*
         * irq_chip support
@@ -276,11 +271,10 @@ static int pl061_probe(struct amba_device *dev, const struct amba_id *id)
        pl061_init_gc(chip, chip->irq_base);
 
        writeb(0, chip->base + GPIOIE); /* disable irqs */
-       irq = dev->irq[0];
-       if (irq < 0) {
-               ret = -ENODEV;
-               goto iounmap;
-       }
+       irq = adev->irq[0];
+       if (irq < 0)
+               return -ENODEV;
+
        irq_set_chained_handler(irq, pl061_irq_handler);
        irq_set_handler_data(irq, chip);
 
@@ -294,18 +288,9 @@ static int pl061_probe(struct amba_device *dev, const struct amba_id *id)
                }
        }
 
-       amba_set_drvdata(dev, chip);
+       amba_set_drvdata(adev, chip);
 
        return 0;
-
-iounmap:
-       iounmap(chip->base);
-release_region:
-       release_mem_region(dev->res.start, resource_size(&dev->res));
-free_mem:
-       kfree(chip);
-
-       return ret;
 }
 
 #ifdef CONFIG_PM