From: Ryan QIAN Date: Tue, 21 Feb 2012 01:28:50 +0000 (+0800) Subject: ENGR00174892 [MX6]MMC: support SD3.0 UHS-I DDR50 mode. X-Git-Tag: v3.0.35-fsl_4.1.0~1607 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=53e4f05fddb31d63a42f905bff0182b93824a11a;p=karo-tx-linux.git ENGR00174892 [MX6]MMC: support SD3.0 UHS-I DDR50 mode. - align UHS-I trial sequence with community that first DDR50 then SDR50. - escape DDR50 from tuning procedure, only SDR104 will be tuned so far. Signed-off-by: Ryan QIAN --- diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index 52b3171746a5..8fddc550a3c3 100644 --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c @@ -477,17 +477,17 @@ static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status) bus_speed = UHS_SDR104_BUS_SPEED; timing = MMC_TIMING_UHS_SDR104; card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR; + } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && + (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { + bus_speed = UHS_DDR50_BUS_SPEED; + timing = MMC_TIMING_UHS_DDR50; + card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR; } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR50)) { bus_speed = UHS_SDR50_BUS_SPEED; timing = MMC_TIMING_UHS_SDR50; card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR; - } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && - (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { - bus_speed = UHS_DDR50_BUS_SPEED; - timing = MMC_TIMING_UHS_DDR50; - card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR; } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) && (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) { @@ -625,7 +625,8 @@ static int mmc_sd_init_uhs_card(struct mmc_card *card) /* SPI mode doesn't define CMD19 */ #ifdef CONFIG_MMC_SDHCI_ESDHC_IMX - if (!mmc_host_is_spi(card->host)) { + if (!mmc_host_is_spi(card->host) && + (card->sd_bus_speed == UHS_SDR104_BUS_SPEED)) { int min, max, avg; min = card->host->tuning_min;