From: Julia Lawall <julia.law...@lip6.fr>

devm free functions should not have to be explicitly used.

The only thing left that is useful in the function mpc5121_nfc_free is the
call to clk_disable, which is moved to the call sites.

This function also incorrectly called iounmap on devm_ioremap allocated
data.

Use devm_request_and_ioremap in place of devm_request_mem_region and
devm_ioremap.

Use devm_clk_get.

A semantic match that finds the first problem is as follows:
(http://coccinelle.lip6.fr/)

// <smpl>
@@
@@

(
* devm_kfree(...);
|
* devm_free_irq(...);
|
* devm_iounmap(...);
|
* devm_release_region(...);
|
* devm_release_mem_region(...);
)
// </smpl>

Signed-off-by: Julia Lawall <julia.law...@lip6.fr>

---
 drivers/mtd/nand/mpc5121_nfc.c |   35 +++++------------------------------
 1 file changed, 5 insertions(+), 30 deletions(-)

diff --git a/drivers/mtd/nand/mpc5121_nfc.c b/drivers/mtd/nand/mpc5121_nfc.c
index c259c24..45183ba 100644
--- a/drivers/mtd/nand/mpc5121_nfc.c
+++ b/drivers/mtd/nand/mpc5121_nfc.c
@@ -632,21 +632,6 @@ out:
        return ret;
 }
 
-/* Free driver resources */
-static void mpc5121_nfc_free(struct device *dev, struct mtd_info *mtd)
-{
-       struct nand_chip *chip = mtd->priv;
-       struct mpc5121_nfc_prv *prv = chip->priv;
-
-       if (prv->clk) {
-               clk_disable(prv->clk);
-               clk_put(prv->clk);
-       }
-
-       if (prv->csreg)
-               iounmap(prv->csreg);
-}
-
 static int __devinit mpc5121_nfc_probe(struct platform_device *op)
 {
        struct device_node *rootnode, *dn = op->dev.of_node;
@@ -713,12 +698,7 @@ static int __devinit mpc5121_nfc_probe(struct 
platform_device *op)
        regs_paddr = res.start;
        regs_size = resource_size(&res);
 
-       if (!devm_request_mem_region(dev, regs_paddr, regs_size, DRV_NAME)) {
-               dev_err(dev, "Error requesting memory region!\n");
-               return -EBUSY;
-       }
-
-       prv->regs = devm_ioremap(dev, regs_paddr, regs_size);
+       prv->regs = devm_request_and_ioremap(dev, &res);
        if (!prv->regs) {
                dev_err(dev, "Error mapping memory region!\n");
                return -ENOMEM;
@@ -752,11 +732,10 @@ static int __devinit mpc5121_nfc_probe(struct 
platform_device *op)
        of_node_put(rootnode);
 
        /* Enable NFC clock */
-       prv->clk = clk_get(dev, "nfc_clk");
+       prv->clk = devm_clk_get(dev, "nfc_clk");
        if (IS_ERR(prv->clk)) {
                dev_err(dev, "Unable to acquire NFC clock!\n");
-               retval = PTR_ERR(prv->clk);
-               goto error;
+               return PTR_ERR(prv->clk);
        }
 
        clk_enable(prv->clk);
@@ -803,7 +782,6 @@ static int __devinit mpc5121_nfc_probe(struct 
platform_device *op)
        /* Detect NAND chips */
        if (nand_scan(mtd, be32_to_cpup(chips_no))) {
                dev_err(dev, "NAND Flash not found !\n");
-               devm_free_irq(dev, prv->irq, mtd);
                retval = -ENXIO;
                goto error;
        }
@@ -828,7 +806,6 @@ static int __devinit mpc5121_nfc_probe(struct 
platform_device *op)
 
        default:
                dev_err(dev, "Unsupported NAND flash!\n");
-               devm_free_irq(dev, prv->irq, mtd);
                retval = -ENXIO;
                goto error;
        }
@@ -839,13 +816,12 @@ static int __devinit mpc5121_nfc_probe(struct 
platform_device *op)
        retval = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
        if (retval) {
                dev_err(dev, "Error adding MTD device!\n");
-               devm_free_irq(dev, prv->irq, mtd);
                goto error;
        }
 
        return 0;
 error:
-       mpc5121_nfc_free(dev, mtd);
+       clk_disable(prv->clk);
        return retval;
 }
 
@@ -857,8 +833,7 @@ static int __devexit mpc5121_nfc_remove(struct 
platform_device *op)
        struct mpc5121_nfc_prv *prv = chip->priv;
 
        nand_release(mtd);
-       devm_free_irq(dev, prv->irq, mtd);
-       mpc5121_nfc_free(dev, mtd);
+       clk_disable(prv->clk);
 
        return 0;
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to