提交 9bda6da7 编写于 作者: J Julia Lawall 提交者: Chris Ball

mmc: sdhci-s3c: use devm_ functions

The various devm_ functions allocate memory that is released when a driver
detaches.  This patch uses these functions for data that is allocated in
the probe function of a platform device and is only freed in the remove
function.

By using devm_ioremap, it also removes a potential memory leak, because
there was no call to iounmap in the probe function.

The call to platform_get_resource was moved just to make it closer to the
place where its result it used.
Signed-off-by: NJulia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: NChris Ball <cjb@laptop.org>
上级 1d4dc338
...@@ -443,12 +443,6 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) ...@@ -443,12 +443,6 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
return irq; return irq;
} }
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(dev, "no memory specified\n");
return -ENOENT;
}
host = sdhci_alloc_host(dev, sizeof(struct sdhci_s3c)); host = sdhci_alloc_host(dev, sizeof(struct sdhci_s3c));
if (IS_ERR(host)) { if (IS_ERR(host)) {
dev_err(dev, "sdhci_alloc_host() failed\n"); dev_err(dev, "sdhci_alloc_host() failed\n");
...@@ -513,15 +507,8 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) ...@@ -513,15 +507,8 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
goto err_no_busclks; goto err_no_busclks;
} }
sc->ioarea = request_mem_region(res->start, resource_size(res), res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
mmc_hostname(host->mmc)); host->ioaddr = devm_request_and_ioremap(&pdev->dev, res);
if (!sc->ioarea) {
dev_err(dev, "failed to reserve register area\n");
ret = -ENXIO;
goto err_req_regs;
}
host->ioaddr = ioremap_nocache(res->start, resource_size(res));
if (!host->ioaddr) { if (!host->ioaddr) {
dev_err(dev, "failed to map registers\n"); dev_err(dev, "failed to map registers\n");
ret = -ENXIO; ret = -ENXIO;
...@@ -606,7 +593,7 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) ...@@ -606,7 +593,7 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
ret = sdhci_add_host(host); ret = sdhci_add_host(host);
if (ret) { if (ret) {
dev_err(dev, "sdhci_add_host() failed\n"); dev_err(dev, "sdhci_add_host() failed\n");
goto err_add_host; goto err_req_regs;
} }
/* The following two methods of card detection might call /* The following two methods of card detection might call
...@@ -620,10 +607,6 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) ...@@ -620,10 +607,6 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
return 0; return 0;
err_add_host:
release_resource(sc->ioarea);
kfree(sc->ioarea);
err_req_regs: err_req_regs:
for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) { for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) {
if (sc->clk_bus[ptr]) { if (sc->clk_bus[ptr]) {
...@@ -669,10 +652,6 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev) ...@@ -669,10 +652,6 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev)
clk_disable(sc->clk_io); clk_disable(sc->clk_io);
clk_put(sc->clk_io); clk_put(sc->clk_io);
iounmap(host->ioaddr);
release_resource(sc->ioarea);
kfree(sc->ioarea);
sdhci_free_host(host); sdhci_free_host(host);
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册