serial: imx: Use devm_* APIs
authorSachin Kamat <sachin.kamat@linaro.org>
Mon, 7 Jan 2013 04:55:06 +0000 (10:25 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Jan 2013 06:02:52 +0000 (22:02 -0800)
devm_* APIs are device managed and make cleanup and exit code simpler
and easier.

Cc: Shawn Guo <shawn.guo@linaro.org>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index 78f793617e4f8d272202cb9ead9a4b23f1098ff0..1a2488495f697eda21e2d343e4f05058ca7907f9 100644 (file)
@@ -1461,7 +1461,7 @@ static int serial_imx_probe(struct platform_device *pdev)
        struct resource *res;
        struct pinctrl *pinctrl;
 
-       sport = kzalloc(sizeof(*sport), GFP_KERNEL);
+       sport = devm_kzalloc(&pdev->dev, sizeof(*sport), GFP_KERNEL);
        if (!sport)
                return -ENOMEM;
 
@@ -1469,19 +1469,15 @@ static int serial_imx_probe(struct platform_device *pdev)
        if (ret > 0)
                serial_imx_probe_pdata(sport, pdev);
        else if (ret < 0)
-               goto free;
+               return ret;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res) {
-               ret = -ENODEV;
-               goto free;
-       }
+       if (!res)
+               return -ENODEV;
 
-       base = ioremap(res->start, PAGE_SIZE);
-       if (!base) {
-               ret = -ENOMEM;
-               goto free;
-       }
+       base = devm_ioremap(&pdev->dev, res->start, PAGE_SIZE);
+       if (!base)
+               return -ENOMEM;
 
        sport->port.dev = &pdev->dev;
        sport->port.mapbase = res->start;
@@ -1503,21 +1499,21 @@ static int serial_imx_probe(struct platform_device *pdev)
        if (IS_ERR(pinctrl)) {
                ret = PTR_ERR(pinctrl);
                dev_err(&pdev->dev, "failed to get default pinctrl: %d\n", ret);
-               goto unmap;
+               return ret;
        }
 
        sport->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
        if (IS_ERR(sport->clk_ipg)) {
                ret = PTR_ERR(sport->clk_ipg);
                dev_err(&pdev->dev, "failed to get ipg clk: %d\n", ret);
-               goto unmap;
+               return ret;
        }
 
        sport->clk_per = devm_clk_get(&pdev->dev, "per");
        if (IS_ERR(sport->clk_per)) {
                ret = PTR_ERR(sport->clk_per);
                dev_err(&pdev->dev, "failed to get per clk: %d\n", ret);
-               goto unmap;
+               return ret;
        }
 
        clk_prepare_enable(sport->clk_per);
@@ -1546,11 +1542,6 @@ deinit:
 clkput:
        clk_disable_unprepare(sport->clk_per);
        clk_disable_unprepare(sport->clk_ipg);
-unmap:
-       iounmap(sport->port.membase);
-free:
-       kfree(sport);
-
        return ret;
 }
 
@@ -1571,9 +1562,6 @@ static int serial_imx_remove(struct platform_device *pdev)
        if (pdata && pdata->exit)
                pdata->exit(pdev);
 
-       iounmap(sport->port.membase);
-       kfree(sport);
-
        return 0;
 }