From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peng Fan Date: Wed, 16 Mar 2016 09:32:26 +0800 Subject: [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function Message-ID: <1458091947-10397-1-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 In device tree, there is vmmc-supply property for SD/MMC. Introduce mmc_power_init function and pwrup hook function to let the specific drivers handle vmmc-supply. mmc_power_init will first invoke board_mmc_power_init to avoid break boards which already implement board_mmc_power_init. Then if pwrup hook functions have been implemented for different mmc drivers, pwrup will be invoked. Signed-off-by: Peng Fan Cc: Pantelis Antoniou Cc: Andrew Gabbasov Cc: Simon Glass Cc: Stephen Warren Cc: Clemens Gruber Cc: Eric Nelson Cc: Stefano Babic Cc: Fabio Estevam --- drivers/mmc/mmc.c | 15 ++++++++++++++- include/mmc.h | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index ede5d6e..f6d5c6f 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1594,6 +1594,16 @@ __weak void board_mmc_power_init(void) { } +__weak int mmc_power_init(struct mmc *mmc) +{ + board_mmc_power_init(); + + if (mmc->cfg->ops->pwrup) + return mmc->cfg->ops->pwrup(mmc); + + return 0; +} + int mmc_start_init(struct mmc *mmc) { int err; @@ -1613,7 +1623,10 @@ 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; /* made sure it's not NULL earlier */ err = mmc->cfg->ops->init(mmc); diff --git a/include/mmc.h b/include/mmc.h index d652c14..111ff75 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -329,6 +329,7 @@ struct mmc_ops { int (*init)(struct mmc *mmc); int (*getcd)(struct mmc *mmc); int (*getwp)(struct mmc *mmc); + int (*pwrup)(struct mmc *mmc); }; struct mmc_config { -- 2.6.2