Commit 6eec26b7 authored by Wenkai Du's avatar Wenkai Du Committed by Greg Kroah-Hartman

mmc: mmc: Fix incorrect use of driver strength switching HS200 and HS400

commit adb24d42 upstream.

Commit cc4f414c ("mmc: mmc: Add driver strength selection")
added driver strength selection for eMMC HS200 and HS400 modes.
That patch also set the driver stength when transitioning through
High Speed mode to HS200/HS400, but driver strength is not defined
for High Speed mode.  While the JEDEC specification is not clear
on this point it has been observed to cause problems for some eMMC,
and removing the driver strength setting in this case makes it
consistent with the normal use of High Speed mode.
Signed-off-by: default avatarWenkai Du <wenkai.du@intel.com>
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8ae7192d
...@@ -1076,8 +1076,7 @@ static int mmc_select_hs400(struct mmc_card *card) ...@@ -1076,8 +1076,7 @@ static int mmc_select_hs400(struct mmc_card *card)
mmc_set_clock(host, max_dtr); mmc_set_clock(host, max_dtr);
/* Switch card to HS mode */ /* Switch card to HS mode */
val = EXT_CSD_TIMING_HS | val = EXT_CSD_TIMING_HS;
card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
EXT_CSD_HS_TIMING, val, EXT_CSD_HS_TIMING, val,
card->ext_csd.generic_cmd6_time, card->ext_csd.generic_cmd6_time,
...@@ -1160,8 +1159,7 @@ int mmc_hs400_to_hs200(struct mmc_card *card) ...@@ -1160,8 +1159,7 @@ int mmc_hs400_to_hs200(struct mmc_card *card)
mmc_set_clock(host, max_dtr); mmc_set_clock(host, max_dtr);
/* Switch HS400 to HS DDR */ /* Switch HS400 to HS DDR */
val = EXT_CSD_TIMING_HS | val = EXT_CSD_TIMING_HS;
card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
val, card->ext_csd.generic_cmd6_time, val, card->ext_csd.generic_cmd6_time,
true, send_status, true); true, send_status, true);
......
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