mmc: core: Add ->hs400_prepare_ddr() callback
authorYinbo Zhu <yinbo.zhu@nxp.com>
Fri, 23 Nov 2018 03:15:33 +0000 (11:15 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 17 Dec 2018 07:26:24 +0000 (08:26 +0100)
Some eMMC controllers need specific settings for HS400 mode before the
speed mode can be switched to DDR mode, during the HS400 initialization
sequence. For that reason, let's introduce a new host callback,
->hs400_prepare_ddr() and invoked it just before switching to DDR mode.

Signed-off-by: Yinbo Zhu <yinbo.zhu@nxp.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/core/mmc.c
include/linux/mmc/host.h

index bc1bd2c..4ff08ea 100644 (file)
@@ -1181,6 +1181,9 @@ static int mmc_select_hs400(struct mmc_card *card)
        if (err)
                goto out_err;
 
+       if (host->ops->hs400_prepare_ddr)
+               host->ops->hs400_prepare_ddr(host);
+
        /* Switch card to DDR */
        err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
                         EXT_CSD_BUS_WIDTH,
index 2a5fe75..2709c94 100644 (file)
@@ -147,6 +147,9 @@ struct mmc_host_ops {
        /* Prepare HS400 target operating frequency depending host driver */
        int     (*prepare_hs400_tuning)(struct mmc_host *host, struct mmc_ios *ios);
 
+       /* Prepare switch to DDR during the HS400 init sequence */
+       int     (*hs400_prepare_ddr)(struct mmc_host *host);
+
        /* Prepare for switching from HS400 to HS200 */
        void    (*hs400_downgrade)(struct mmc_host *host);