mmc: mxcmmc: Use mmc_regulator_get_supply() API
authorAlexander Shiyan <shc_work@mail.ru>
Sat, 3 May 2014 06:55:17 +0000 (10:55 +0400)
committerChris Ball <chris@printf.net>
Mon, 12 May 2014 22:08:24 +0000 (18:08 -0400)
This patch replaces regulator manipulation with
mmc_regulator_get_supply() function from MMC core.

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Chris Ball <chris@printf.net>
drivers/mmc/host/mxcmmc.c

index 86401c09e35723fb8d8ba830bfc60d8808ca4bd8..ed1cb93c3784b54a62916e9aeb0540db2bf303e6 100644 (file)
@@ -153,8 +153,6 @@ struct mxcmci_host {
        struct work_struct      datawork;
        spinlock_t              lock;
 
-       struct regulator        *vcc;
-
        int                     burstlen;
        int                     dmareq;
        struct dma_slave_config dma_slave_config;
@@ -240,30 +238,15 @@ 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 void mxcmci_init_ocr(struct mxcmci_host *host)
+static void mxcmci_set_power(struct mxcmci_host *host, unsigned int vdd)
 {
-       host->vcc = devm_regulator_get(mmc_dev(host->mmc), "vmmc");
-       if (IS_ERR(host->vcc)) {
-               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");
-       }
-}
-
-static void mxcmci_set_power(struct mxcmci_host *host, unsigned char power_mode,
-                            unsigned int vdd)
-{
-       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)
-                       mmc_regulator_set_ocr(host->mmc, host->vcc, 0);
+       if (!IS_ERR(host->mmc->supply.vmmc)) {
+               if (host->power_mode == MMC_POWER_UP)
+                       mmc_regulator_set_ocr(host->mmc,
+                                             host->mmc->supply.vmmc, vdd);
+               else if (host->power_mode == MMC_POWER_OFF)
+                       mmc_regulator_set_ocr(host->mmc,
+                                             host->mmc->supply.vmmc, 0);
        }
 
        if (host->pdata && host->pdata->setpower)
@@ -902,8 +885,8 @@ static void mxcmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
                host->cmdat &= ~CMD_DAT_CONT_BUS_WIDTH_4;
 
        if (host->power_mode != ios->power_mode) {
-               mxcmci_set_power(host, ios->power_mode, ios->vdd);
                host->power_mode = ios->power_mode;
+               mxcmci_set_power(host, ios->vdd);
 
                if (ios->power_mode == MMC_POWER_ON)
                        host->cmdat |= CMD_DAT_CONT_INIT;
@@ -1100,7 +1083,14 @@ static int mxcmci_probe(struct platform_device *pdev)
                        && !of_property_read_bool(pdev->dev.of_node, "cd-gpios"))
                dat3_card_detect = true;
 
-       mxcmci_init_ocr(host);
+       ret = mmc_regulator_get_supply(mmc);
+       if (ret) {
+               if (pdata && ret != -EPROBE_DEFER)
+                       mmc->ocr_avail = pdata->ocr_avail ? :
+                               MMC_VDD_32_33 | MMC_VDD_33_34;
+               else
+                       goto out_free;
+       }
 
        if (dat3_card_detect)
                host->default_irq_mask =