Message ID | 1401882133-11050-5-git-send-email-ben.dooks@codethink.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 4 June 2014 13:42, Ben Dooks <ben.dooks@codethink.co.uk> wrote: > 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> > --- > 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 ae278a5..cc6858d 100644 > --- a/drivers/mmc/host/sh_mmcif.c > +++ b/drivers/mmc/host/sh_mmcif.c > @@ -1439,17 +1439,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; > } > } > > @@ -1476,11 +1478,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); > @@ -1494,7 +1492,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); > @@ -1512,13 +1509,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.0.0.rc2 > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c index ae278a5..cc6858d 100644 --- a/drivers/mmc/host/sh_mmcif.c +++ b/drivers/mmc/host/sh_mmcif.c @@ -1439,17 +1439,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; } } @@ -1476,11 +1478,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); @@ -1494,7 +1492,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); @@ -1512,13 +1509,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);
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> --- drivers/mmc/host/sh_mmcif.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-)