Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9bda6da7 authored by Julia Lawall's avatar Julia Lawall Committed by Chris Ball
Browse files

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: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent 1d4dc338
Loading
Loading
Loading
Loading
+3 −24
Original line number Diff line number Diff line
@@ -443,12 +443,6 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
		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));
	if (IS_ERR(host)) {
		dev_err(dev, "sdhci_alloc_host() failed\n");
@@ -513,15 +507,8 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
		goto err_no_busclks;
	}

	sc->ioarea = request_mem_region(res->start, resource_size(res),
					mmc_hostname(host->mmc));
	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));
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	host->ioaddr = devm_request_and_ioremap(&pdev->dev, res);
	if (!host->ioaddr) {
		dev_err(dev, "failed to map registers\n");
		ret = -ENXIO;
@@ -606,7 +593,7 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
	ret = sdhci_add_host(host);
	if (ret) {
		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
@@ -620,10 +607,6 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)

	return 0;

 err_add_host:
	release_resource(sc->ioarea);
	kfree(sc->ioarea);

 err_req_regs:
	for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) {
		if (sc->clk_bus[ptr]) {
@@ -669,10 +652,6 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev)
	clk_disable(sc->clk_io);
	clk_put(sc->clk_io);

	iounmap(host->ioaddr);
	release_resource(sc->ioarea);
	kfree(sc->ioarea);

	sdhci_free_host(host);
	platform_set_drvdata(pdev, NULL);