mmc: mxcmmc: Use mmc_regulator_get_supply() API
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>
This commit is contained in:
Родитель
6e9e406282
Коммит
bc3c17711e
|
@ -153,8 +153,6 @@ struct mxcmci_host {
|
||||||
struct work_struct datawork;
|
struct work_struct datawork;
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
|
|
||||||
struct regulator *vcc;
|
|
||||||
|
|
||||||
int burstlen;
|
int burstlen;
|
||||||
int dmareq;
|
int dmareq;
|
||||||
struct dma_slave_config dma_slave_config;
|
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_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->mmc->supply.vmmc)) {
|
||||||
if (IS_ERR(host->vcc)) {
|
if (host->power_mode == MMC_POWER_UP)
|
||||||
if (host->pdata && host->pdata->ocr_avail)
|
mmc_regulator_set_ocr(host->mmc,
|
||||||
host->mmc->ocr_avail = host->pdata->ocr_avail;
|
host->mmc->supply.vmmc, vdd);
|
||||||
else
|
else if (host->power_mode == MMC_POWER_OFF)
|
||||||
host->mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
|
mmc_regulator_set_ocr(host->mmc,
|
||||||
} else {
|
host->mmc->supply.vmmc, 0);
|
||||||
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 (host->pdata && host->pdata->setpower)
|
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;
|
host->cmdat &= ~CMD_DAT_CONT_BUS_WIDTH_4;
|
||||||
|
|
||||||
if (host->power_mode != ios->power_mode) {
|
if (host->power_mode != ios->power_mode) {
|
||||||
mxcmci_set_power(host, ios->power_mode, ios->vdd);
|
|
||||||
host->power_mode = ios->power_mode;
|
host->power_mode = ios->power_mode;
|
||||||
|
mxcmci_set_power(host, ios->vdd);
|
||||||
|
|
||||||
if (ios->power_mode == MMC_POWER_ON)
|
if (ios->power_mode == MMC_POWER_ON)
|
||||||
host->cmdat |= CMD_DAT_CONT_INIT;
|
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"))
|
&& !of_property_read_bool(pdev->dev.of_node, "cd-gpios"))
|
||||||
dat3_card_detect = true;
|
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)
|
if (dat3_card_detect)
|
||||||
host->default_irq_mask =
|
host->default_irq_mask =
|
||||||
|
|
Загрузка…
Ссылка в новой задаче