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 bc1bd2c256132c2f3def2844a7d5ccccb05ef523..4ff08ea930a61bb55c0246704b337cb3e36904c1 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 2a5fe75dd0821d03f7b8624d878ae457d6fe2ee9..2709c94d9d867c2b969c38fca9dd6657f9c072e7 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);