|
@@ -1314,31 +1314,38 @@ int mmc_regulator_set_ocr(struct mmc_host *mmc,
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(mmc_regulator_set_ocr);
|
|
|
|
|
|
+#endif /* CONFIG_REGULATOR */
|
|
|
+
|
|
|
int mmc_regulator_get_supply(struct mmc_host *mmc)
|
|
|
{
|
|
|
struct device *dev = mmc_dev(mmc);
|
|
|
- struct regulator *supply;
|
|
|
int ret;
|
|
|
|
|
|
- supply = devm_regulator_get(dev, "vmmc");
|
|
|
- mmc->supply.vmmc = supply;
|
|
|
+ mmc->supply.vmmc = devm_regulator_get_optional(dev, "vmmc");
|
|
|
mmc->supply.vqmmc = devm_regulator_get_optional(dev, "vqmmc");
|
|
|
|
|
|
- if (IS_ERR(supply))
|
|
|
- return PTR_ERR(supply);
|
|
|
+ if (IS_ERR(mmc->supply.vmmc)) {
|
|
|
+ if (PTR_ERR(mmc->supply.vmmc) == -EPROBE_DEFER)
|
|
|
+ return -EPROBE_DEFER;
|
|
|
+ dev_info(dev, "No vmmc regulator found\n");
|
|
|
+ } else {
|
|
|
+ ret = mmc_regulator_get_ocrmask(mmc->supply.vmmc);
|
|
|
+ if (ret > 0)
|
|
|
+ mmc->ocr_avail = ret;
|
|
|
+ else
|
|
|
+ dev_warn(dev, "Failed getting OCR mask: %d\n", ret);
|
|
|
+ }
|
|
|
|
|
|
- ret = mmc_regulator_get_ocrmask(supply);
|
|
|
- if (ret > 0)
|
|
|
- mmc->ocr_avail = ret;
|
|
|
- else
|
|
|
- dev_warn(mmc_dev(mmc), "Failed getting OCR mask: %d\n", ret);
|
|
|
+ if (IS_ERR(mmc->supply.vqmmc)) {
|
|
|
+ if (PTR_ERR(mmc->supply.vqmmc) == -EPROBE_DEFER)
|
|
|
+ return -EPROBE_DEFER;
|
|
|
+ dev_info(dev, "No vqmmc regulator found\n");
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(mmc_regulator_get_supply);
|
|
|
|
|
|
-#endif /* CONFIG_REGULATOR */
|
|
|
-
|
|
|
/*
|
|
|
* Mask off any voltages we don't support and select
|
|
|
* the lowest voltage
|