提交 e4a09cbf 编写于 作者: S Sascha Hauer 提交者: David Woodhouse

mtd: mxc_nand: Use managed resources

To make the error path simpler and to make subsequent patches
easier.
Signed-off-by: NSascha Hauer <s.hauer@pengutronix.de>
Acked-by: NShawn Guo <shawn.guo@linaro.org>
Signed-off-by: NArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
上级 874d72c4
......@@ -1344,8 +1344,8 @@ static int __init mxcnd_probe(struct platform_device *pdev)
int err = 0;
/* Allocate memory for MTD device structure and private data */
host = kzalloc(sizeof(struct mxc_nand_host) + NAND_MAX_PAGESIZE +
NAND_MAX_OOBSIZE, GFP_KERNEL);
host = devm_kzalloc(&pdev->dev, sizeof(struct mxc_nand_host) +
NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE, GFP_KERNEL);
if (!host)
return -ENOMEM;
......@@ -1372,26 +1372,17 @@ static int __init mxcnd_probe(struct platform_device *pdev)
this->read_buf = mxc_nand_read_buf;
this->verify_buf = mxc_nand_verify_buf;
host->clk = clk_get(&pdev->dev, "nfc");
if (IS_ERR(host->clk)) {
err = PTR_ERR(host->clk);
goto eclk;
}
clk_prepare_enable(host->clk);
host->clk_act = 1;
host->clk = devm_clk_get(&pdev->dev, "nfc");
if (IS_ERR(host->clk))
return PTR_ERR(host->clk);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
err = -ENODEV;
goto eres;
}
if (!res)
return -ENODEV;
host->base = ioremap(res->start, resource_size(res));
if (!host->base) {
err = -ENOMEM;
goto eres;
}
host->base = devm_request_and_ioremap(&pdev->dev, res);
if (!host->base)
return -ENOMEM;
host->main_area0 = host->base;
......@@ -1399,7 +1390,7 @@ static int __init mxcnd_probe(struct platform_device *pdev)
if (err > 0)
err = mxcnd_probe_pdata(host);
if (err < 0)
goto eirq;
return err;
if (host->devtype_data->regs_offset)
host->regs = host->base + host->devtype_data->regs_offset;
......@@ -1416,15 +1407,11 @@ static int __init mxcnd_probe(struct platform_device *pdev)
if (host->devtype_data->needs_ip) {
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
if (!res) {
err = -ENODEV;
goto eirq;
}
host->regs_ip = ioremap(res->start, resource_size(res));
if (!host->regs_ip) {
err = -ENOMEM;
goto eirq;
}
if (!res)
return -ENODEV;
host->regs_ip = devm_request_and_ioremap(&pdev->dev, res);
if (!host->regs_ip)
return -ENOMEM;
}
if (host->pdata.hw_ecc) {
......@@ -1458,9 +1445,13 @@ static int __init mxcnd_probe(struct platform_device *pdev)
*/
host->devtype_data->irq_control(host, 0);
err = request_irq(host->irq, mxc_nfc_irq, IRQF_DISABLED, DRIVER_NAME, host);
err = devm_request_irq(&pdev->dev, host->irq, mxc_nfc_irq,
IRQF_DISABLED, DRIVER_NAME, host);
if (err)
goto eirq;
return err;
clk_prepare_enable(host->clk);
host->clk_act = 1;
/*
* Now that we "own" the interrupt make sure the interrupt mask bit is
......@@ -1512,15 +1503,7 @@ static int __init mxcnd_probe(struct platform_device *pdev)
return 0;
escan:
free_irq(host->irq, host);
eirq:
if (host->regs_ip)
iounmap(host->regs_ip);
iounmap(host->base);
eres:
clk_put(host->clk);
eclk:
kfree(host);
clk_disable_unprepare(host->clk);
return err;
}
......@@ -1529,16 +1512,9 @@ static int __devexit mxcnd_remove(struct platform_device *pdev)
{
struct mxc_nand_host *host = platform_get_drvdata(pdev);
clk_put(host->clk);
platform_set_drvdata(pdev, NULL);
nand_release(&host->mtd);
free_irq(host->irq, host);
if (host->regs_ip)
iounmap(host->regs_ip);
iounmap(host->base);
kfree(host);
return 0;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册