All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API
@ 2014-03-22  8:52 Alexander Shiyan
  2014-03-22  8:52 ` [PATCH RESEND 2/2] mmc: mxcmmc: Convert to SIMPLE_DEV_PM_OPS Alexander Shiyan
  2014-03-24  9:29 ` [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API Ulf Hansson
  0 siblings, 2 replies; 5+ messages in thread
From: Alexander Shiyan @ 2014-03-22  8:52 UTC (permalink / raw)
  To: linux-mmc
  Cc: Chris Ball, Ulf Hansson, Sascha Hauer, Anatolij Gustschin,
	Alexander Shiyan

Replace existing resource handling in the driver with managed
device resource, this ensures more consistent error values and
simplifies error paths.

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
 drivers/mmc/host/mxcmmc.c | 101 +++++++++++++++++-----------------------------
 1 file changed, 38 insertions(+), 63 deletions(-)

diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
index f7199c8..84d630e 100644
--- a/drivers/mmc/host/mxcmmc.c
+++ b/drivers/mmc/host/mxcmmc.c
@@ -124,9 +124,8 @@ enum mxcmci_type {
 
 struct mxcmci_host {
 	struct mmc_host		*mmc;
-	struct resource		*res;
 	void __iomem		*base;
-	int			irq;
+	dma_addr_t		phys_base;
 	int			detect_irq;
 	struct dma_chan		*dma;
 	struct dma_async_tx_descriptor *desc;
@@ -241,33 +240,26 @@ static inline void mxcmci_writew(struct mxcmci_host *host, u16 val, int reg)
 
 static void mxcmci_set_clk_rate(struct mxcmci_host *host, unsigned int clk_ios);
 
-static inline void mxcmci_init_ocr(struct mxcmci_host *host)
+static void mxcmci_init_ocr(struct mxcmci_host *host)
 {
-	host->vcc = regulator_get(mmc_dev(host->mmc), "vmmc");
-
+	host->vcc = devm_regulator_get(mmc_dev(host->mmc), "vmmc");
 	if (IS_ERR(host->vcc)) {
-		host->vcc = NULL;
+		if (host->pdata && host->pdata->ocr_avail)
+			host->mmc->ocr_avail = host->pdata->ocr_avail;
+		else
+			host->mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
 	} else {
 		host->mmc->ocr_avail = mmc_regulator_get_ocrmask(host->vcc);
 		if (host->pdata && host->pdata->ocr_avail)
 			dev_warn(mmc_dev(host->mmc),
 				"pdata->ocr_avail will not be used\n");
 	}
-
-	if (host->vcc == NULL) {
-		/* fall-back to platform data */
-		if (host->pdata && host->pdata->ocr_avail)
-			host->mmc->ocr_avail = host->pdata->ocr_avail;
-		else
-			host->mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
-	}
 }
 
-static inline void mxcmci_set_power(struct mxcmci_host *host,
-				    unsigned char power_mode,
-				    unsigned int vdd)
+static void mxcmci_set_power(struct mxcmci_host *host, unsigned char power_mode,
+			     unsigned int vdd)
 {
-	if (host->vcc) {
+	if (!IS_ERR(host->vcc)) {
 		if (power_mode == MMC_POWER_UP)
 			mmc_regulator_set_ocr(host->mmc, host->vcc, vdd);
 		else if (power_mode == MMC_POWER_OFF)
@@ -299,7 +291,6 @@ static void mxcmci_softreset(struct mxcmci_host *host)
 
 	mxcmci_writew(host, 0xff, MMC_REG_RES_TO);
 }
-static int mxcmci_setup_dma(struct mmc_host *mmc);
 
 #if IS_ENABLED(CONFIG_PPC_MPC512x)
 static inline void buffer_swap32(u32 *buf, int len)
@@ -868,8 +859,8 @@ static int mxcmci_setup_dma(struct mmc_host *mmc)
 	struct mxcmci_host *host = mmc_priv(mmc);
 	struct dma_slave_config *config = &host->dma_slave_config;
 
-	config->dst_addr = host->res->start + MMC_REG_BUFFER_ACCESS;
-	config->src_addr = host->res->start + MMC_REG_BUFFER_ACCESS;
+	config->dst_addr = host->phys_base + MMC_REG_BUFFER_ACCESS;
+	config->src_addr = host->phys_base + MMC_REG_BUFFER_ACCESS;
 	config->dst_addr_width = 4;
 	config->src_addr_width = 4;
 	config->dst_maxburst = host->burstlen;
@@ -1040,8 +1031,8 @@ static const struct mmc_host_ops mxcmci_ops = {
 static int mxcmci_probe(struct platform_device *pdev)
 {
 	struct mmc_host *mmc;
-	struct mxcmci_host *host = NULL;
-	struct resource *iores, *r;
+	struct mxcmci_host *host;
+	struct resource *res;
 	int ret = 0, irq;
 	bool dat3_card_detect = false;
 	dma_cap_mask_t mask;
@@ -1052,21 +1043,25 @@ static int mxcmci_probe(struct platform_device *pdev)
 
 	of_id = of_match_device(mxcmci_of_match, &pdev->dev);
 
-	iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	irq = platform_get_irq(pdev, 0);
-	if (!iores || irq < 0)
+	if (irq < 0)
 		return -EINVAL;
 
-	r = request_mem_region(iores->start, resource_size(iores), pdev->name);
-	if (!r)
-		return -EBUSY;
+	mmc = mmc_alloc_host(sizeof(*host), &pdev->dev);
+	if (!mmc)
+		return -ENOMEM;
 
-	mmc = mmc_alloc_host(sizeof(struct mxcmci_host), &pdev->dev);
-	if (!mmc) {
-		ret = -ENOMEM;
-		goto out_release_mem;
+	host = mmc_priv(mmc);
+
+	host->base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(host->base)) {
+		ret = PTR_ERR(host->base);
+		goto out_free;
 	}
 
+	host->phys_base = res->start;
+
 	ret = mmc_of_parse(mmc);
 	if (ret)
 		goto out_free;
@@ -1084,13 +1079,6 @@ static int mxcmci_probe(struct platform_device *pdev)
 	mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
 	mmc->max_seg_size = mmc->max_req_size;
 
-	host = mmc_priv(mmc);
-	host->base = ioremap(r->start, resource_size(r));
-	if (!host->base) {
-		ret = -ENOMEM;
-		goto out_free;
-	}
-
 	if (of_id) {
 		const struct platform_device_id *id_entry = of_id->data;
 		host->devtype = id_entry->driver_data;
@@ -1120,19 +1108,16 @@ static int mxcmci_probe(struct platform_device *pdev)
 	else
 		host->default_irq_mask = 0;
 
-	host->res = r;
-	host->irq = irq;
-
 	host->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
 	if (IS_ERR(host->clk_ipg)) {
 		ret = PTR_ERR(host->clk_ipg);
-		goto out_iounmap;
+		goto out_free;
 	}
 
 	host->clk_per = devm_clk_get(&pdev->dev, "per");
 	if (IS_ERR(host->clk_per)) {
 		ret = PTR_ERR(host->clk_per);
-		goto out_iounmap;
+		goto out_free;
 	}
 
 	clk_prepare_enable(host->clk_per);
@@ -1159,9 +1144,9 @@ static int mxcmci_probe(struct platform_device *pdev)
 	if (!host->pdata) {
 		host->dma = dma_request_slave_channel(&pdev->dev, "rx-tx");
 	} else {
-		r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
-		if (r) {
-			host->dmareq = r->start;
+		res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+		if (res) {
+			host->dmareq = res->start;
 			host->dma_data.peripheral_type = IMX_DMATYPE_SDHC;
 			host->dma_data.priority = DMA_PRIO_LOW;
 			host->dma_data.dma_request = host->dmareq;
@@ -1178,7 +1163,8 @@ static int mxcmci_probe(struct platform_device *pdev)
 
 	INIT_WORK(&host->datawork, mxcmci_datawork);
 
-	ret = request_irq(host->irq, mxcmci_irq, 0, DRIVER_NAME, host);
+	ret = devm_request_irq(&pdev->dev, irq, mxcmci_irq, 0,
+			       dev_name(&pdev->dev), host);
 	if (ret)
 		goto out_free_dma;
 
@@ -1188,7 +1174,7 @@ static int mxcmci_probe(struct platform_device *pdev)
 		ret = host->pdata->init(&pdev->dev, mxcmci_detect_irq,
 				host->mmc);
 		if (ret)
-			goto out_free_irq;
+			goto out_free_dma;
 	}
 
 	init_timer(&host->watchdog);
@@ -1199,20 +1185,17 @@ static int mxcmci_probe(struct platform_device *pdev)
 
 	return 0;
 
-out_free_irq:
-	free_irq(host->irq, host);
 out_free_dma:
 	if (host->dma)
 		dma_release_channel(host->dma);
+
 out_clk_put:
 	clk_disable_unprepare(host->clk_per);
 	clk_disable_unprepare(host->clk_ipg);
-out_iounmap:
-	iounmap(host->base);
+
 out_free:
 	mmc_free_host(mmc);
-out_release_mem:
-	release_mem_region(iores->start, resource_size(iores));
+
 	return ret;
 }
 
@@ -1223,23 +1206,15 @@ static int mxcmci_remove(struct platform_device *pdev)
 
 	mmc_remove_host(mmc);
 
-	if (host->vcc)
-		regulator_put(host->vcc);
-
 	if (host->pdata && host->pdata->exit)
 		host->pdata->exit(&pdev->dev, mmc);
 
-	free_irq(host->irq, host);
-	iounmap(host->base);
-
 	if (host->dma)
 		dma_release_channel(host->dma);
 
 	clk_disable_unprepare(host->clk_per);
 	clk_disable_unprepare(host->clk_ipg);
 
-	release_mem_region(host->res->start, resource_size(host->res));
-
 	mmc_free_host(mmc);
 
 	return 0;
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH RESEND 2/2] mmc: mxcmmc: Convert to SIMPLE_DEV_PM_OPS
  2014-03-22  8:52 [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API Alexander Shiyan
@ 2014-03-22  8:52 ` Alexander Shiyan
  2014-04-14 12:37   ` Ulf Hansson
  2014-03-24  9:29 ` [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API Ulf Hansson
  1 sibling, 1 reply; 5+ messages in thread
From: Alexander Shiyan @ 2014-03-22  8:52 UTC (permalink / raw)
  To: linux-mmc
  Cc: Chris Ball, Ulf Hansson, Sascha Hauer, Anatolij Gustschin,
	Alexander Shiyan

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
 drivers/mmc/host/mxcmmc.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
index 84d630e..86401c0 100644
--- a/drivers/mmc/host/mxcmmc.c
+++ b/drivers/mmc/host/mxcmmc.c
@@ -1220,8 +1220,7 @@ static int mxcmci_remove(struct platform_device *pdev)
 	return 0;
 }
 
-#ifdef CONFIG_PM
-static int mxcmci_suspend(struct device *dev)
+static int __maybe_unused mxcmci_suspend(struct device *dev)
 {
 	struct mmc_host *mmc = dev_get_drvdata(dev);
 	struct mxcmci_host *host = mmc_priv(mmc);
@@ -1231,7 +1230,7 @@ static int mxcmci_suspend(struct device *dev)
 	return 0;
 }
 
-static int mxcmci_resume(struct device *dev)
+static int __maybe_unused mxcmci_resume(struct device *dev)
 {
 	struct mmc_host *mmc = dev_get_drvdata(dev);
 	struct mxcmci_host *host = mmc_priv(mmc);
@@ -1241,11 +1240,7 @@ static int mxcmci_resume(struct device *dev)
 	return 0;
 }
 
-static const struct dev_pm_ops mxcmci_pm_ops = {
-	.suspend	= mxcmci_suspend,
-	.resume		= mxcmci_resume,
-};
-#endif
+static SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
 
 static struct platform_driver mxcmci_driver = {
 	.probe		= mxcmci_probe,
@@ -1254,9 +1249,7 @@ static struct platform_driver mxcmci_driver = {
 	.driver		= {
 		.name		= DRIVER_NAME,
 		.owner		= THIS_MODULE,
-#ifdef CONFIG_PM
 		.pm	= &mxcmci_pm_ops,
-#endif
 		.of_match_table	= mxcmci_of_match,
 	}
 };
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API
  2014-03-22  8:52 [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API Alexander Shiyan
  2014-03-22  8:52 ` [PATCH RESEND 2/2] mmc: mxcmmc: Convert to SIMPLE_DEV_PM_OPS Alexander Shiyan
@ 2014-03-24  9:29 ` Ulf Hansson
  2014-03-24  9:42   ` Alexander Shiyan
  1 sibling, 1 reply; 5+ messages in thread
From: Ulf Hansson @ 2014-03-24  9:29 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: linux-mmc, Chris Ball, Sascha Hauer, Anatolij Gustschin

On 22 March 2014 09:52, Alexander Shiyan <shc_work@mail.ru> wrote:
> Replace existing resource handling in the driver with managed
> device resource, this ensures more consistent error values and
> simplifies error paths.
>
> Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
> ---
>  drivers/mmc/host/mxcmmc.c | 101 +++++++++++++++++-----------------------------
>  1 file changed, 38 insertions(+), 63 deletions(-)
>
> diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
> index f7199c8..84d630e 100644
> --- a/drivers/mmc/host/mxcmmc.c
> +++ b/drivers/mmc/host/mxcmmc.c
> @@ -124,9 +124,8 @@ enum mxcmci_type {
>
>  struct mxcmci_host {
>         struct mmc_host         *mmc;
> -       struct resource         *res;
>         void __iomem            *base;
> -       int                     irq;
> +       dma_addr_t              phys_base;
>         int                     detect_irq;
>         struct dma_chan         *dma;
>         struct dma_async_tx_descriptor *desc;
> @@ -241,33 +240,26 @@ static inline void mxcmci_writew(struct mxcmci_host *host, u16 val, int reg)
>
>  static void mxcmci_set_clk_rate(struct mxcmci_host *host, unsigned int clk_ios);
>
> -static inline void mxcmci_init_ocr(struct mxcmci_host *host)
> +static void mxcmci_init_ocr(struct mxcmci_host *host)
>  {
> -       host->vcc = regulator_get(mmc_dev(host->mmc), "vmmc");
> -
> +       host->vcc = devm_regulator_get(mmc_dev(host->mmc), "vmmc");

A semi-related comment to this patch. May I suggest you post a follow
up patch on top of this one, which convert to use the
mmc_regulator_get_supply() API.


>         if (IS_ERR(host->vcc)) {
> -               host->vcc = NULL;
> +               if (host->pdata && host->pdata->ocr_avail)
> +                       host->mmc->ocr_avail = host->pdata->ocr_avail;
> +               else
> +                       host->mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
>         } else {
>                 host->mmc->ocr_avail = mmc_regulator_get_ocrmask(host->vcc);
>                 if (host->pdata && host->pdata->ocr_avail)
>                         dev_warn(mmc_dev(host->mmc),
>                                 "pdata->ocr_avail will not be used\n");
>         }
> -
> -       if (host->vcc == NULL) {
> -               /* fall-back to platform data */
> -               if (host->pdata && host->pdata->ocr_avail)
> -                       host->mmc->ocr_avail = host->pdata->ocr_avail;
> -               else
> -                       host->mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
> -       }
>  }
>
> -static inline void mxcmci_set_power(struct mxcmci_host *host,
> -                                   unsigned char power_mode,
> -                                   unsigned int vdd)
> +static void mxcmci_set_power(struct mxcmci_host *host, unsigned char power_mode,
> +                            unsigned int vdd)
>  {
> -       if (host->vcc) {
> +       if (!IS_ERR(host->vcc)) {
>                 if (power_mode == MMC_POWER_UP)
>                         mmc_regulator_set_ocr(host->mmc, host->vcc, vdd);
>                 else if (power_mode == MMC_POWER_OFF)
> @@ -299,7 +291,6 @@ static void mxcmci_softreset(struct mxcmci_host *host)
>
>         mxcmci_writew(host, 0xff, MMC_REG_RES_TO);
>  }
> -static int mxcmci_setup_dma(struct mmc_host *mmc);
>
>  #if IS_ENABLED(CONFIG_PPC_MPC512x)
>  static inline void buffer_swap32(u32 *buf, int len)
> @@ -868,8 +859,8 @@ static int mxcmci_setup_dma(struct mmc_host *mmc)
>         struct mxcmci_host *host = mmc_priv(mmc);
>         struct dma_slave_config *config = &host->dma_slave_config;
>
> -       config->dst_addr = host->res->start + MMC_REG_BUFFER_ACCESS;
> -       config->src_addr = host->res->start + MMC_REG_BUFFER_ACCESS;
> +       config->dst_addr = host->phys_base + MMC_REG_BUFFER_ACCESS;
> +       config->src_addr = host->phys_base + MMC_REG_BUFFER_ACCESS;
>         config->dst_addr_width = 4;
>         config->src_addr_width = 4;
>         config->dst_maxburst = host->burstlen;
> @@ -1040,8 +1031,8 @@ static const struct mmc_host_ops mxcmci_ops = {
>  static int mxcmci_probe(struct platform_device *pdev)
>  {
>         struct mmc_host *mmc;
> -       struct mxcmci_host *host = NULL;
> -       struct resource *iores, *r;
> +       struct mxcmci_host *host;
> +       struct resource *res;
>         int ret = 0, irq;
>         bool dat3_card_detect = false;
>         dma_cap_mask_t mask;
> @@ -1052,21 +1043,25 @@ static int mxcmci_probe(struct platform_device *pdev)
>
>         of_id = of_match_device(mxcmci_of_match, &pdev->dev);
>
> -       iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>         irq = platform_get_irq(pdev, 0);
> -       if (!iores || irq < 0)
> +       if (irq < 0)
>                 return -EINVAL;
>
> -       r = request_mem_region(iores->start, resource_size(iores), pdev->name);
> -       if (!r)
> -               return -EBUSY;
> +       mmc = mmc_alloc_host(sizeof(*host), &pdev->dev);
> +       if (!mmc)
> +               return -ENOMEM;
>
> -       mmc = mmc_alloc_host(sizeof(struct mxcmci_host), &pdev->dev);
> -       if (!mmc) {
> -               ret = -ENOMEM;
> -               goto out_release_mem;
> +       host = mmc_priv(mmc);
> +
> +       host->base = devm_ioremap_resource(&pdev->dev, res);
> +       if (IS_ERR(host->base)) {
> +               ret = PTR_ERR(host->base);
> +               goto out_free;
>         }
>
> +       host->phys_base = res->start;
> +
>         ret = mmc_of_parse(mmc);
>         if (ret)
>                 goto out_free;
> @@ -1084,13 +1079,6 @@ static int mxcmci_probe(struct platform_device *pdev)
>         mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
>         mmc->max_seg_size = mmc->max_req_size;
>
> -       host = mmc_priv(mmc);
> -       host->base = ioremap(r->start, resource_size(r));
> -       if (!host->base) {
> -               ret = -ENOMEM;
> -               goto out_free;
> -       }
> -
>         if (of_id) {
>                 const struct platform_device_id *id_entry = of_id->data;
>                 host->devtype = id_entry->driver_data;
> @@ -1120,19 +1108,16 @@ static int mxcmci_probe(struct platform_device *pdev)
>         else
>                 host->default_irq_mask = 0;
>
> -       host->res = r;
> -       host->irq = irq;
> -
>         host->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
>         if (IS_ERR(host->clk_ipg)) {
>                 ret = PTR_ERR(host->clk_ipg);
> -               goto out_iounmap;
> +               goto out_free;
>         }
>
>         host->clk_per = devm_clk_get(&pdev->dev, "per");
>         if (IS_ERR(host->clk_per)) {
>                 ret = PTR_ERR(host->clk_per);
> -               goto out_iounmap;
> +               goto out_free;
>         }
>
>         clk_prepare_enable(host->clk_per);
> @@ -1159,9 +1144,9 @@ static int mxcmci_probe(struct platform_device *pdev)
>         if (!host->pdata) {
>                 host->dma = dma_request_slave_channel(&pdev->dev, "rx-tx");
>         } else {
> -               r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
> -               if (r) {
> -                       host->dmareq = r->start;
> +               res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
> +               if (res) {
> +                       host->dmareq = res->start;
>                         host->dma_data.peripheral_type = IMX_DMATYPE_SDHC;
>                         host->dma_data.priority = DMA_PRIO_LOW;
>                         host->dma_data.dma_request = host->dmareq;
> @@ -1178,7 +1163,8 @@ static int mxcmci_probe(struct platform_device *pdev)
>
>         INIT_WORK(&host->datawork, mxcmci_datawork);
>
> -       ret = request_irq(host->irq, mxcmci_irq, 0, DRIVER_NAME, host);
> +       ret = devm_request_irq(&pdev->dev, irq, mxcmci_irq, 0,
> +                              dev_name(&pdev->dev), host);
>         if (ret)
>                 goto out_free_dma;
>
> @@ -1188,7 +1174,7 @@ static int mxcmci_probe(struct platform_device *pdev)
>                 ret = host->pdata->init(&pdev->dev, mxcmci_detect_irq,
>                                 host->mmc);
>                 if (ret)
> -                       goto out_free_irq;
> +                       goto out_free_dma;
>         }
>
>         init_timer(&host->watchdog);
> @@ -1199,20 +1185,17 @@ static int mxcmci_probe(struct platform_device *pdev)
>
>         return 0;
>
> -out_free_irq:
> -       free_irq(host->irq, host);
>  out_free_dma:
>         if (host->dma)
>                 dma_release_channel(host->dma);
> +
>  out_clk_put:
>         clk_disable_unprepare(host->clk_per);
>         clk_disable_unprepare(host->clk_ipg);
> -out_iounmap:
> -       iounmap(host->base);
> +
>  out_free:
>         mmc_free_host(mmc);
> -out_release_mem:
> -       release_mem_region(iores->start, resource_size(iores));
> +
>         return ret;
>  }
>
> @@ -1223,23 +1206,15 @@ static int mxcmci_remove(struct platform_device *pdev)
>
>         mmc_remove_host(mmc);
>
> -       if (host->vcc)
> -               regulator_put(host->vcc);
> -
>         if (host->pdata && host->pdata->exit)
>                 host->pdata->exit(&pdev->dev, mmc);
>
> -       free_irq(host->irq, host);
> -       iounmap(host->base);
> -
>         if (host->dma)
>                 dma_release_channel(host->dma);
>
>         clk_disable_unprepare(host->clk_per);
>         clk_disable_unprepare(host->clk_ipg);
>
> -       release_mem_region(host->res->start, resource_size(host->res));
> -
>         mmc_free_host(mmc);
>
>         return 0;
> --
> 1.8.3.2
>

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API
  2014-03-24  9:29 ` [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API Ulf Hansson
@ 2014-03-24  9:42   ` Alexander Shiyan
  0 siblings, 0 replies; 5+ messages in thread
From: Alexander Shiyan @ 2014-03-24  9:42 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: linux-mmc, Chris Ball, Sascha Hauer, Anatolij Gustschin

Mon, 24 Mar 2014 10:29:45 +0100 от Ulf Hansson <ulf.hansson@linaro.org>:
> On 22 March 2014 09:52, Alexander Shiyan <shc_work@mail.ru> wrote:
> > Replace existing resource handling in the driver with managed
> > device resource, this ensures more consistent error values and
> > simplifies error paths.
> >
> > Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
> > ---
...
> > +static void mxcmci_init_ocr(struct mxcmci_host *host)
> >  {
> > -       host->vcc = regulator_get(mmc_dev(host->mmc), "vmmc");
> > -
> > +       host->vcc = devm_regulator_get(mmc_dev(host->mmc), "vmmc");
> 
> A semi-related comment to this patch. May I suggest you post a follow
> up patch on top of this one, which convert to use the
> mmc_regulator_get_supply() API.

It's an interesting idea. I'll try to make it a bit later.

---


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH RESEND 2/2] mmc: mxcmmc: Convert to SIMPLE_DEV_PM_OPS
  2014-03-22  8:52 ` [PATCH RESEND 2/2] mmc: mxcmmc: Convert to SIMPLE_DEV_PM_OPS Alexander Shiyan
@ 2014-04-14 12:37   ` Ulf Hansson
  0 siblings, 0 replies; 5+ messages in thread
From: Ulf Hansson @ 2014-04-14 12:37 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: linux-mmc, Chris Ball, Sascha Hauer, Anatolij Gustschin

On 22 March 2014 09:52, Alexander Shiyan <shc_work@mail.ru> wrote:
> Signed-off-by: Alexander Shiyan <shc_work@mail.ru>

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
>  drivers/mmc/host/mxcmmc.c | 13 +++----------
>  1 file changed, 3 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
> index 84d630e..86401c0 100644
> --- a/drivers/mmc/host/mxcmmc.c
> +++ b/drivers/mmc/host/mxcmmc.c
> @@ -1220,8 +1220,7 @@ static int mxcmci_remove(struct platform_device *pdev)
>         return 0;
>  }
>
> -#ifdef CONFIG_PM
> -static int mxcmci_suspend(struct device *dev)
> +static int __maybe_unused mxcmci_suspend(struct device *dev)
>  {
>         struct mmc_host *mmc = dev_get_drvdata(dev);
>         struct mxcmci_host *host = mmc_priv(mmc);
> @@ -1231,7 +1230,7 @@ static int mxcmci_suspend(struct device *dev)
>         return 0;
>  }
>
> -static int mxcmci_resume(struct device *dev)
> +static int __maybe_unused mxcmci_resume(struct device *dev)
>  {
>         struct mmc_host *mmc = dev_get_drvdata(dev);
>         struct mxcmci_host *host = mmc_priv(mmc);
> @@ -1241,11 +1240,7 @@ static int mxcmci_resume(struct device *dev)
>         return 0;
>  }
>
> -static const struct dev_pm_ops mxcmci_pm_ops = {
> -       .suspend        = mxcmci_suspend,
> -       .resume         = mxcmci_resume,
> -};
> -#endif
> +static SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
>
>  static struct platform_driver mxcmci_driver = {
>         .probe          = mxcmci_probe,
> @@ -1254,9 +1249,7 @@ static struct platform_driver mxcmci_driver = {
>         .driver         = {
>                 .name           = DRIVER_NAME,
>                 .owner          = THIS_MODULE,
> -#ifdef CONFIG_PM
>                 .pm     = &mxcmci_pm_ops,
> -#endif
>                 .of_match_table = mxcmci_of_match,
>         }
>  };
> --
> 1.8.3.2
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-04-14 12:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-03-22  8:52 [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API Alexander Shiyan
2014-03-22  8:52 ` [PATCH RESEND 2/2] mmc: mxcmmc: Convert to SIMPLE_DEV_PM_OPS Alexander Shiyan
2014-04-14 12:37   ` Ulf Hansson
2014-03-24  9:29 ` [PATCH RESEND 1/2] mmc: mxcmmc: Convert to devm-* API Ulf Hansson
2014-03-24  9:42   ` Alexander Shiyan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.