OSDN Git Service

[media] media: sh_mobile_csi2: use managed memory and resource allocations
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Wed, 10 Oct 2012 08:02:30 +0000 (05:02 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 20 Dec 2012 16:34:10 +0000 (14:34 -0200)
Use managed allocations to simplify error handling and clean up paths.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/platform/soc_camera/sh_mobile_csi2.c

index 0528650..c573be7 100644 (file)
@@ -318,23 +318,16 @@ static __devinit int sh_csi2_probe(struct platform_device *pdev)
                return -EINVAL;
        }
 
-       priv = kzalloc(sizeof(struct sh_csi2), GFP_KERNEL);
+       priv = devm_kzalloc(&pdev->dev, sizeof(struct sh_csi2), GFP_KERNEL);
        if (!priv)
                return -ENOMEM;
 
        priv->irq = irq;
 
-       if (!request_mem_region(res->start, resource_size(res), pdev->name)) {
-               dev_err(&pdev->dev, "CSI2 register region already claimed\n");
-               ret = -EBUSY;
-               goto ereqreg;
-       }
-
-       priv->base = ioremap(res->start, resource_size(res));
+       priv->base = devm_request_and_ioremap(&pdev->dev, res);
        if (!priv->base) {
-               ret = -ENXIO;
                dev_err(&pdev->dev, "Unable to ioremap CSI2 registers.\n");
-               goto eremap;
+               return -ENXIO;
        }
 
        priv->pdev = pdev;
@@ -357,11 +350,7 @@ static __devinit int sh_csi2_probe(struct platform_device *pdev)
        return 0;
 
 esdreg:
-       iounmap(priv->base);
-eremap:
-       release_mem_region(res->start, resource_size(res));
-ereqreg:
-       kfree(priv);
+       platform_set_drvdata(pdev, NULL);
 
        return ret;
 }
@@ -369,14 +358,10 @@ ereqreg:
 static __devexit int sh_csi2_remove(struct platform_device *pdev)
 {
        struct sh_csi2 *priv = platform_get_drvdata(pdev);
-       struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
        v4l2_device_unregister_subdev(&priv->subdev);
        pm_runtime_disable(&pdev->dev);
-       iounmap(priv->base);
-       release_mem_region(res->start, resource_size(res));
        platform_set_drvdata(pdev, NULL);
-       kfree(priv);
 
        return 0;
 }