From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peng Fan Date: Wed, 16 Mar 2016 09:32:27 +0800 Subject: [U-Boot] [RFC 2/2] dm: mmc: implement pwrup function In-Reply-To: <1458091947-10397-1-git-send-email-van.freenix@gmail.com> References: <1458091947-10397-1-git-send-email-van.freenix@gmail.com> Message-ID: <1458091947-10397-2-git-send-email-van.freenix@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de If vmmc-supply property is provided, then enable it. If vmmc-supply is not provided, just ignore it. For now, only fixed regulator is supported. In device tree: " reg_sd1_vmmc: regulator at 1 { compatible = "regulator-fixed"; regulator-name = "VSD_3V3"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>; enable-active-high; }; &usdhc1 { pinctrl-names = "default", "state_100mhz", "state_200mhz"; pinctrl-0 = <&pinctrl_usdhc1>; pinctrl-1 = <&pinctrl_usdhc1_100mhz>; pinctrl-2 = <&pinctrl_usdhc1_200mhz>; cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; keep-power-in-suspend; enable-sdio-wakeup; vmmc-supply = <®_sd1_vmmc>; status = "okay"; }; " Signed-off-by: Peng Fan Cc: Pantelis Antoniou Cc: Simon Glass Cc: Eric Nelson Cc: York Sun Cc: Stefano Babic Cc: Fabio Estevam --- drivers/mmc/fsl_esdhc.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index e657bd0..33a7efb 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -23,6 +23,7 @@ #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -671,6 +672,29 @@ static int esdhc_getcd(struct mmc *mmc) return timeout > 0; } +static int esdhc_pwrup(struct mmc *mmc) +{ +#ifdef CONFIG_DM_MMC + struct fsl_esdhc_priv *priv = mmc->priv; + struct udevice *vmmc_supply; + int ret; + + ret = device_get_supply_regulator(priv->dev, "vmmc-supply", + &vmmc_supply); + if (ret) { + debug("No vmmc supply\n"); + return 0; + } + + ret = regulator_set_enable(vmmc_supply, true); + if (ret) { + puts("Error enabling VMMC supply\n"); + return ret; + } +#endif + return 0; +} + static void esdhc_reset(struct fsl_esdhc *regs) { unsigned long timeout = 100; /* wait max 100 ms */ @@ -690,6 +714,7 @@ static const struct mmc_ops esdhc_ops = { .set_ios = esdhc_set_ios, .init = esdhc_init, .getcd = esdhc_getcd, + .pwrup = esdhc_pwrup, }; static int fsl_esdhc_cfg_to_priv(struct fsl_esdhc_cfg *cfg, -- 2.6.2