Loading drivers/mmc/core/mmc.c +19 −4 Original line number Diff line number Diff line Loading @@ -1384,13 +1384,17 @@ static int mmc_select_hs400es(struct mmc_card *card) goto out_err; } /* * Bump to HS timing and frequency. Some cards don't handle * SEND_STATUS reliably at the initial frequency. */ mmc_set_timing(host, MMC_TIMING_MMC_HS); mmc_set_bus_speed(card); err = mmc_switch_status(card, true); if (err) goto out_err; mmc_set_clock(host, card->ext_csd.hs_max_dtr); /* Switch card to DDR with strobe bit */ val = EXT_CSD_DDR_BUS_WIDTH_8 | EXT_CSD_BUS_WIDTH_STROBE; err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, Loading Loading @@ -1448,7 +1452,7 @@ static int mmc_select_hs400es(struct mmc_card *card) static int mmc_select_hs200(struct mmc_card *card) { struct mmc_host *host = card->host; unsigned int old_timing, old_signal_voltage; unsigned int old_timing, old_signal_voltage, old_clock; int err = -EINVAL; u8 val; Loading Loading @@ -1479,8 +1483,17 @@ static int mmc_select_hs200(struct mmc_card *card) false, true, MMC_CMD_RETRIES); if (err) goto err; /* * Bump to HS timing and frequency. Some cards don't handle * SEND_STATUS reliably at the initial frequency. * NB: We can't move to full (HS200) speeds until after we've * successfully switched over. */ old_timing = host->ios.timing; old_clock = host->ios.clock; mmc_set_timing(host, MMC_TIMING_MMC_HS200); mmc_set_clock(card->host, card->ext_csd.hs_max_dtr); /* * For HS200, CRC errors are not a reliable way to know the Loading @@ -1493,9 +1506,11 @@ static int mmc_select_hs200(struct mmc_card *card) * mmc_select_timing() assumes timing has not changed if * it is a switch error. */ if (err == -EBADMSG) if (err == -EBADMSG) { mmc_set_clock(host, old_clock); mmc_set_timing(host, old_timing); } } err: if (err) { /* fall back to the old signal voltage, if fails report error */ Loading Loading
drivers/mmc/core/mmc.c +19 −4 Original line number Diff line number Diff line Loading @@ -1384,13 +1384,17 @@ static int mmc_select_hs400es(struct mmc_card *card) goto out_err; } /* * Bump to HS timing and frequency. Some cards don't handle * SEND_STATUS reliably at the initial frequency. */ mmc_set_timing(host, MMC_TIMING_MMC_HS); mmc_set_bus_speed(card); err = mmc_switch_status(card, true); if (err) goto out_err; mmc_set_clock(host, card->ext_csd.hs_max_dtr); /* Switch card to DDR with strobe bit */ val = EXT_CSD_DDR_BUS_WIDTH_8 | EXT_CSD_BUS_WIDTH_STROBE; err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, Loading Loading @@ -1448,7 +1452,7 @@ static int mmc_select_hs400es(struct mmc_card *card) static int mmc_select_hs200(struct mmc_card *card) { struct mmc_host *host = card->host; unsigned int old_timing, old_signal_voltage; unsigned int old_timing, old_signal_voltage, old_clock; int err = -EINVAL; u8 val; Loading Loading @@ -1479,8 +1483,17 @@ static int mmc_select_hs200(struct mmc_card *card) false, true, MMC_CMD_RETRIES); if (err) goto err; /* * Bump to HS timing and frequency. Some cards don't handle * SEND_STATUS reliably at the initial frequency. * NB: We can't move to full (HS200) speeds until after we've * successfully switched over. */ old_timing = host->ios.timing; old_clock = host->ios.clock; mmc_set_timing(host, MMC_TIMING_MMC_HS200); mmc_set_clock(card->host, card->ext_csd.hs_max_dtr); /* * For HS200, CRC errors are not a reliable way to know the Loading @@ -1493,9 +1506,11 @@ static int mmc_select_hs200(struct mmc_card *card) * mmc_select_timing() assumes timing has not changed if * it is a switch error. */ if (err == -EBADMSG) if (err == -EBADMSG) { mmc_set_clock(host, old_clock); mmc_set_timing(host, old_timing); } } err: if (err) { /* fall back to the old signal voltage, if fails report error */ Loading