]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ARM: integrator: use managed resources for the IM-PD1
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 21 Nov 2013 22:21:10 +0000 (23:21 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 13 Feb 2014 10:21:28 +0000 (11:21 +0100)
Switch the IM-PD1 driver to use managed resources and cut down
on boilerplate.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/mach-integrator/impd1.c

index 9f82f9dcbb9803d195d3fd5d545fe1475db69689..aeeae0d79a18cf33a30d8d6062a1fbad51239dee 100644 (file)
@@ -307,25 +307,23 @@ static struct impd1_device impd1_devs[] = {
 static int impd1_probe(struct lm_device *dev)
 {
        struct impd1_module *impd1;
-       int i, ret;
+       int i;
 
        if (dev->id != module_id)
                return -EINVAL;
 
-       if (!request_mem_region(dev->resource.start, SZ_4K, "LM registers"))
+       if (!devm_request_mem_region(&dev->dev, dev->resource.start,
+                                    SZ_4K, "LM registers"))
                return -EBUSY;
 
-       impd1 = kzalloc(sizeof(struct impd1_module), GFP_KERNEL);
-       if (!impd1) {
-               ret = -ENOMEM;
-               goto release_lm;
-       }
+       impd1 = devm_kzalloc(&dev->dev, sizeof(struct impd1_module),
+                            GFP_KERNEL);
+       if (!impd1)
+               return -ENOMEM;
 
-       impd1->base = ioremap(dev->resource.start, SZ_4K);
-       if (!impd1->base) {
-               ret = -ENOMEM;
-               goto free_impd1;
-       }
+       impd1->base = devm_ioremap(&dev->dev, dev->resource.start, SZ_4K);
+       if (!impd1->base)
+               return -ENOMEM;
 
        lm_set_drvdata(dev, impd1);
 
@@ -353,14 +351,6 @@ static int impd1_probe(struct lm_device *dev)
        }
 
        return 0;
-
- free_impd1:
-       if (impd1 && impd1->base)
-               iounmap(impd1->base);
-       kfree(impd1);
- release_lm:
-       release_mem_region(dev->resource.start, SZ_4K);
-       return ret;
 }
 
 static int impd1_remove_one(struct device *dev, void *data)
@@ -371,16 +361,10 @@ static int impd1_remove_one(struct device *dev, void *data)
 
 static void impd1_remove(struct lm_device *dev)
 {
-       struct impd1_module *impd1 = lm_get_drvdata(dev);
-
        device_for_each_child(&dev->dev, NULL, impd1_remove_one);
        integrator_impd1_clk_exit(dev->id);
 
        lm_set_drvdata(dev, NULL);
-
-       iounmap(impd1->base);
-       kfree(impd1);
-       release_mem_region(dev->resource.start, SZ_4K);
 }
 
 static struct lm_driver impd1_driver = {