| From 188fe79de024289c8b6c6a6a92302c313d0eed14 Mon Sep 17 00:00:00 2001 |
| From: Ben Dooks <ben.dooks@codethink.co.uk> |
| Date: Wed, 4 Jun 2014 12:42:11 +0100 |
| Subject: 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: Ben Dooks <ben.dooks@codethink.co.uk> |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| (cherry picked from commit 75bed8a19d15f94bf712bf610ad4e3425c035ebc) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/mmc/host/sh_mmcif.c | 26 ++++++++------------------ |
| 1 file changed, 8 insertions(+), 18 deletions(-) |
| |
| diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c |
| index ec9bda30da73..a0776cec070c 100644 |
| --- a/drivers/mmc/host/sh_mmcif.c |
| +++ b/drivers/mmc/host/sh_mmcif.c |
| @@ -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, |
| - 0, "sh_mmc:int", host); |
| + 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); |
| -- |
| 2.1.2 |
| |