From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jaehoon Chung Date: Mon, 10 Oct 2016 13:19:41 +0900 Subject: [U-Boot] [PATCH] mmc: introduce mmc_power_init In-Reply-To: <1475921271-29093-1-git-send-email-peng.fan@nxp.com> References: <1475921271-29093-1-git-send-email-peng.fan@nxp.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > Cc: Jaehoon Chung > --- > > 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 > #include > #include > +#include > #include > #include > #include > @@ -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 */ >