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

Commit 6f4789e6 authored by Ben Dooks's avatar Ben Dooks Committed by Ulf Hansson
Browse files

mmc: sh-mmcif: use devm_ for irq management



Use devm_request_threaded_irq() for the host interrupt handlers so we
do not have to worry about freeing them on exit or error. Tidies up the
exit path code for the driver.

Signed-off-by: default avatarBen Dooks <ben.dooks@codethink.co.uk>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 46991005
Loading
Loading
Loading
Loading
+8 −18
Original line number Diff line number Diff line
@@ -1440,17 +1440,19 @@ static int sh_mmcif_probe(struct platform_device *pdev)
	sh_mmcif_writel(host->addr, MMCIF_CE_INT_MASK, MASK_ALL);

	name = irq[1] < 0 ? dev_name(&pdev->dev) : "sh_mmc:error";
	ret = request_threaded_irq(irq[0], sh_mmcif_intr, sh_mmcif_irqt, 0, name, host);
	ret = devm_request_threaded_irq(&pdev->dev, irq[0], sh_mmcif_intr,
					sh_mmcif_irqt, 0, name, host);
	if (ret) {
		dev_err(&pdev->dev, "request_irq error (%s)\n", name);
		goto ereqirq0;
		goto err_irq;
	}
	if (irq[1] >= 0) {
		ret = request_threaded_irq(irq[1], sh_mmcif_intr, sh_mmcif_irqt,
		ret = devm_request_threaded_irq(&pdev->dev, irq[1],
						sh_mmcif_intr, sh_mmcif_irqt,
						0, "sh_mmc:int", host);
		if (ret) {
			dev_err(&pdev->dev, "request_irq error (sh_mmc:int)\n");
			goto ereqirq1;
			goto err_irq;
		}
	}

@@ -1477,11 +1479,7 @@ static int sh_mmcif_probe(struct platform_device *pdev)

emmcaddh:
erqcd:
	if (irq[1] >= 0)
		free_irq(irq[1], host);
ereqirq1:
	free_irq(irq[0], host);
ereqirq0:
err_irq:
	pm_runtime_suspend(&pdev->dev);
err_clk:
	clk_disable_unprepare(host->hclk);
@@ -1495,7 +1493,6 @@ err_host:
static int sh_mmcif_remove(struct platform_device *pdev)
{
	struct sh_mmcif_host *host = platform_get_drvdata(pdev);
	int irq[2];

	host->dying = true;
	clk_prepare_enable(host->hclk);
@@ -1513,13 +1510,6 @@ static int sh_mmcif_remove(struct platform_device *pdev)
	 */
	cancel_delayed_work_sync(&host->timeout_work);

	irq[0] = platform_get_irq(pdev, 0);
	irq[1] = platform_get_irq(pdev, 1);

	free_irq(irq[0], host);
	if (irq[1] >= 0)
		free_irq(irq[1], host);

	clk_disable_unprepare(host->hclk);
	mmc_free_host(host->mmc);
	pm_runtime_put_sync(&pdev->dev);