|
@@ -1991,19 +1991,6 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id)
|
|
|
#endif /* CONFIG_MMC_DW_IDMAC */
|
|
|
}
|
|
|
|
|
|
- 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;
|
|
|
- } else {
|
|
|
- ret = regulator_enable(host->vmmc);
|
|
|
- if (ret) {
|
|
|
- dev_err(host->dev,
|
|
|
- "failed to enable regulator: %d\n", ret);
|
|
|
- goto err_setup_bus;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
if (dw_mci_get_cd(mmc))
|
|
|
set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
|
|
|
else
|
|
@@ -2235,11 +2222,29 @@ int dw_mci_probe(struct dw_mci *host)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ host->vmmc = devm_regulator_get(host->dev, "vmmc");
|
|
|
+ if (IS_ERR(host->vmmc)) {
|
|
|
+ ret = PTR_ERR(host->vmmc);
|
|
|
+ if (ret == -EPROBE_DEFER)
|
|
|
+ goto err_clk_ciu;
|
|
|
+
|
|
|
+ dev_info(host->dev, "no vmmc regulator found: %d\n", ret);
|
|
|
+ host->vmmc = NULL;
|
|
|
+ } else {
|
|
|
+ ret = regulator_enable(host->vmmc);
|
|
|
+ if (ret) {
|
|
|
+ if (ret != -EPROBE_DEFER)
|
|
|
+ dev_err(host->dev,
|
|
|
+ "regulator_enable fail: %d\n", ret);
|
|
|
+ goto err_clk_ciu;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (!host->bus_hz) {
|
|
|
dev_err(host->dev,
|
|
|
"Platform data must supply bus speed\n");
|
|
|
ret = -ENODEV;
|
|
|
- goto err_clk_ciu;
|
|
|
+ goto err_regulator;
|
|
|
}
|
|
|
|
|
|
host->quirks = host->pdata->quirks;
|
|
@@ -2386,6 +2391,7 @@ err_dmaunmap:
|
|
|
if (host->use_dma && host->dma_ops->exit)
|
|
|
host->dma_ops->exit(host);
|
|
|
|
|
|
+err_regulator:
|
|
|
if (host->vmmc)
|
|
|
regulator_disable(host->vmmc);
|
|
|
|