Commit fb458864 authored by Chanho Min's avatar Chanho Min Committed by Ulf Hansson

mmc: core: add driver strength selection when selecting hs400es

The driver strength selection is missed and required when selecting
hs400es. So, It is added here.

Fixes: 81ac2af6 ("mmc: core: implement enhanced strobe support")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarHankyung Yu <hankyung.yu@lge.com>
Signed-off-by: default avatarChanho Min <chanho.min@lge.com>
Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Reviewed-by: default avatarShawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 9e66317d
...@@ -1286,6 +1286,23 @@ int mmc_hs400_to_hs200(struct mmc_card *card) ...@@ -1286,6 +1286,23 @@ int mmc_hs400_to_hs200(struct mmc_card *card)
return err; return err;
} }
static void mmc_select_driver_type(struct mmc_card *card)
{
int card_drv_type, drive_strength, drv_type;
card_drv_type = card->ext_csd.raw_driver_strength |
mmc_driver_type_mask(0);
drive_strength = mmc_select_drive_strength(card,
card->ext_csd.hs200_max_dtr,
card_drv_type, &drv_type);
card->drive_strength = drive_strength;
if (drv_type)
mmc_set_driver_type(card->host, drv_type);
}
static int mmc_select_hs400es(struct mmc_card *card) static int mmc_select_hs400es(struct mmc_card *card)
{ {
struct mmc_host *host = card->host; struct mmc_host *host = card->host;
...@@ -1341,6 +1358,8 @@ static int mmc_select_hs400es(struct mmc_card *card) ...@@ -1341,6 +1358,8 @@ static int mmc_select_hs400es(struct mmc_card *card)
goto out_err; goto out_err;
} }
mmc_select_driver_type(card);
/* Switch card to HS400 */ /* Switch card to HS400 */
val = EXT_CSD_TIMING_HS400 | val = EXT_CSD_TIMING_HS400 |
card->drive_strength << EXT_CSD_DRV_STR_SHIFT; card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
...@@ -1374,23 +1393,6 @@ static int mmc_select_hs400es(struct mmc_card *card) ...@@ -1374,23 +1393,6 @@ static int mmc_select_hs400es(struct mmc_card *card)
return err; return err;
} }
static void mmc_select_driver_type(struct mmc_card *card)
{
int card_drv_type, drive_strength, drv_type;
card_drv_type = card->ext_csd.raw_driver_strength |
mmc_driver_type_mask(0);
drive_strength = mmc_select_drive_strength(card,
card->ext_csd.hs200_max_dtr,
card_drv_type, &drv_type);
card->drive_strength = drive_strength;
if (drv_type)
mmc_set_driver_type(card->host, drv_type);
}
/* /*
* For device supporting HS200 mode, the following sequence * For device supporting HS200 mode, the following sequence
* should be done before executing the tuning process. * should be done before executing the tuning process.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment