aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorWenkai Du <wenkai.du@intel.com>2015-11-26 07:00:44 -0500
committerUlf Hansson <ulf.hansson@linaro.org>2015-12-22 05:32:13 -0500
commitadb24d42a516bca8b9741ed21206509daaab5b13 (patch)
tree7c7bcf2b646979be3b7679aaf040be864ad92cc7 /drivers/mmc
parent100a606d54a087cfec54efbedba72f36e5a9cdf0 (diff)
mmc: mmc: Fix incorrect use of driver strength switching HS200 and HS400
Commit cc4f414c885c ("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: Wenkai Du <wenkai.du@intel.com> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: stable@vger.kernel.org # v4.2+ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/core/mmc.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 66957addf9e4..549c56e8cf6b 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -1076,8 +1076,7 @@ static int mmc_select_hs400(struct mmc_card *card)
1076 mmc_set_clock(host, max_dtr); 1076 mmc_set_clock(host, max_dtr);
1077 1077
1078 /* Switch card to HS mode */ 1078 /* Switch card to HS mode */
1079 val = EXT_CSD_TIMING_HS | 1079 val = EXT_CSD_TIMING_HS;
1080 card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1081 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, 1080 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1082 EXT_CSD_HS_TIMING, val, 1081 EXT_CSD_HS_TIMING, val,
1083 card->ext_csd.generic_cmd6_time, 1082 card->ext_csd.generic_cmd6_time,
@@ -1160,8 +1159,7 @@ int mmc_hs400_to_hs200(struct mmc_card *card)
1160 mmc_set_clock(host, max_dtr); 1159 mmc_set_clock(host, max_dtr);
1161 1160
1162 /* Switch HS400 to HS DDR */ 1161 /* Switch HS400 to HS DDR */
1163 val = EXT_CSD_TIMING_HS | 1162 val = EXT_CSD_TIMING_HS;
1164 card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1165 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1163 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
1166 val, card->ext_csd.generic_cmd6_time, 1164 val, card->ext_csd.generic_cmd6_time,
1167 true, send_status, true); 1165 true, send_status, true);