
Hi Peng,
On 10/08/2016 07:07 PM, Peng Fan wrote:
In device tree, there is vmmc-supply property for SD/MMC. Introduce mmc_power_init function to handle vmmc-supply.
As i know, vqmmc-supply should be optional. Do you have a plan to add this?
mmc_power_init will first invoke board_mmc_power_init to avoid break boards which already implement board_mmc_power_init.
If DM_MMC and DM_REGULATOR is defined, the regulator will be enabled to power up the device.
Signed-off-by: Peng Fan peng.fan@nxp.com Cc: Jaehoon Chung jh80.chung@samsung.com
The RFC patset thread: http://lists.denx.de/pipermail/u-boot/2016-April/251019.html V1: Use a generic way to handle vmmc supply, but not let vendor driver to handle it.
drivers/mmc/mmc.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 0312da9..c361098 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -15,6 +15,7 @@ #include <errno.h> #include <mmc.h> #include <part.h> +#include <power/regulator.h> #include <malloc.h> #include <memalign.h> #include <linux/list.h> @@ -1582,6 +1583,31 @@ __weak void board_mmc_power_init(void) { }
+int mmc_power_init(struct mmc *mmc)
Can be static?
+{
- board_mmc_power_init();
+#if defined(CONFIG_DM_MMC) && defined(CONFIG_DM_REGULATOR) && \
- !defined(CONFIG_SPL_BUILD)
- struct udevice *vmmc_supply;
- int ret;
- ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
&vmmc_supply);
- if (ret) {
debug("No vmmc supply\n");
return 0;
"return 0" is Right? Doesn't need to return error?
- }
- ret = regulator_set_enable(vmmc_supply, true);
- if (ret) {
puts("Error enabling VMMC supply\n");
return ret;
- }
+#endif
- return 0;
+}
int mmc_start_init(struct mmc *mmc) { bool no_card; @@ -1606,7 +1632,9 @@ int mmc_start_init(struct mmc *mmc) #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT mmc_adapter_card_type_ident(); #endif
- board_mmc_power_init();
- err = mmc_power_init(mmc);
- if (err)
return err;
#ifdef CONFIG_DM_MMC_OPS /* The device has already been probed ready for use */