mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 09:44:18 +08:00
mtd: mxc_nand: Use managed resources
To make the error path simpler and to make subsequent patches easier. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Acked-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
874d72c4fe
commit
e4a09cbf2d
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user