On 28/11/12 10:26, Seungwon Jeon wrote: > Use managed device resource functions for easy handling. > This makes driver simpler in the routine of error and exit. > > Signed-off-by: Seungwon Jeon <tgih.jun@xxxxxxxxxxx> This looks reasonable to me Acked-by: James Hogan <james.hogan@xxxxxxxxxx> > --- > drivers/mmc/host/dw_mmc.c | 43 ++++++++++++++----------------------------- > 1 files changed, 14 insertions(+), 29 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 7342029..6785d62 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -1914,7 +1914,7 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id) > #endif /* CONFIG_MMC_DW_IDMAC */ > } > > - host->vmmc = regulator_get(mmc_dev(mmc), "vmmc"); > + host->vmmc = devm_regulator_get(mmc_dev(mmc), "vmmc"); > if (IS_ERR(host->vmmc)) { > pr_info("%s: no vmmc regulator found\n", mmc_hostname(mmc)); > host->vmmc = NULL; > @@ -1963,7 +1963,7 @@ static void dw_mci_cleanup_slot(struct dw_mci_slot *slot, unsigned int id) > static void dw_mci_init_dma(struct dw_mci *host) > { > /* Alloc memory for sg translation */ > - host->sg_cpu = dma_alloc_coherent(host->dev, PAGE_SIZE, > + host->sg_cpu = dmam_alloc_coherent(host->dev, PAGE_SIZE, > &host->sg_dma, GFP_KERNEL); > if (!host->sg_cpu) { > dev_err(host->dev, "%s: could not alloc DMA memory\n", > @@ -2112,26 +2112,24 @@ int dw_mci_probe(struct dw_mci *host) > return -ENODEV; > } > > - host->biu_clk = clk_get(host->dev, "biu"); > + host->biu_clk = devm_clk_get(host->dev, "biu"); > if (IS_ERR(host->biu_clk)) { > dev_dbg(host->dev, "biu clock not available\n"); > } else { > ret = clk_prepare_enable(host->biu_clk); > if (ret) { > dev_err(host->dev, "failed to enable biu clock\n"); > - clk_put(host->biu_clk); > return ret; > } > } > > - host->ciu_clk = clk_get(host->dev, "ciu"); > + host->ciu_clk = devm_clk_get(host->dev, "ciu"); > if (IS_ERR(host->ciu_clk)) { > dev_dbg(host->dev, "ciu clock not available\n"); > } else { > ret = clk_prepare_enable(host->ciu_clk); > if (ret) { > dev_err(host->dev, "failed to enable ciu clock\n"); > - clk_put(host->ciu_clk); > goto err_clk_biu; > } > } > @@ -2233,7 +2231,8 @@ int dw_mci_probe(struct dw_mci *host) > if (!host->card_workqueue) > goto err_dmaunmap; > INIT_WORK(&host->card_work, dw_mci_work_routine_card); > - ret = request_irq(host->irq, dw_mci_interrupt, host->irq_flags, "dw-mci", host); > + ret = devm_request_irq(host->dev, host->irq, dw_mci_interrupt, > + host->irq_flags, "dw-mci", host); > if (ret) > goto err_workqueue; > > @@ -2271,7 +2270,7 @@ int dw_mci_probe(struct dw_mci *host) > } else { > dev_dbg(host->dev, "attempted to initialize %d slots, " > "but failed on all\n", host->num_slots); > - goto err_init_slot; > + goto err_workqueue; > } > > /* > @@ -2291,33 +2290,24 @@ int dw_mci_probe(struct dw_mci *host) > > return 0; > > -err_init_slot: > - free_irq(host->irq, host); > - > err_workqueue: > destroy_workqueue(host->card_workqueue); > > err_dmaunmap: > if (host->use_dma && host->dma_ops->exit) > host->dma_ops->exit(host); > - dma_free_coherent(host->dev, PAGE_SIZE, > - host->sg_cpu, host->sg_dma); > > - if (host->vmmc) { > + if (host->vmmc) > regulator_disable(host->vmmc); > - regulator_put(host->vmmc); > - } > > err_clk_ciu: > - if (!IS_ERR(host->ciu_clk)) { > + if (!IS_ERR(host->ciu_clk)) > clk_disable_unprepare(host->ciu_clk); > - clk_put(host->ciu_clk); > - } > + > err_clk_biu: > - if (!IS_ERR(host->biu_clk)) { > + if (!IS_ERR(host->biu_clk)) > clk_disable_unprepare(host->biu_clk); > - clk_put(host->biu_clk); > - } > + > return ret; > } > EXPORT_SYMBOL(dw_mci_probe); > @@ -2339,24 +2329,19 @@ void dw_mci_remove(struct dw_mci *host) > mci_writel(host, CLKENA, 0); > mci_writel(host, CLKSRC, 0); > > - free_irq(host->irq, host); > destroy_workqueue(host->card_workqueue); > - dma_free_coherent(host->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma); > > if (host->use_dma && host->dma_ops->exit) > host->dma_ops->exit(host); > > - if (host->vmmc) { > + if (host->vmmc) > regulator_disable(host->vmmc); > - regulator_put(host->vmmc); > - } > > if (!IS_ERR(host->ciu_clk)) > clk_disable_unprepare(host->ciu_clk); > + > if (!IS_ERR(host->biu_clk)) > clk_disable_unprepare(host->biu_clk); > - clk_put(host->ciu_clk); > - clk_put(host->biu_clk); > } > EXPORT_SYMBOL(dw_mci_remove); > > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html