The patches do the following 1. If mmc size is more than 2GB , we need to calculated using the extended csd register. 2. mmc_set_clock() is hard setting, that is not good solution.
If mmc is not MMC_MODE_HS, mmc will set card's trans_speed. Signed-off-by: Jaehoon Chung <jh80.ch...@samsung.com> --- drivers/mmc/mmc.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index cf4ea16..c985924 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -410,6 +410,10 @@ int mmc_change_freq(struct mmc *mmc) if (ext_csd[212] || ext_csd[213] || ext_csd[214] || ext_csd[215]) mmc->high_capacity = 1; + if (mmc->high_capacity) + mmc->capacity = ((ext_csd[215] << 24) | (ext_csd[214] << 16) | + (ext_csd[213] << 8) | ext_csd[212]); + cardtype = ext_csd[196] & 0xf; err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1); @@ -794,12 +798,11 @@ int mmc_startup(struct mmc *mmc) if (mmc->card_caps & MMC_MODE_HS) { if (mmc->card_caps & MMC_MODE_HS_52MHz) - mmc_set_clock(mmc, 52000000); + mmc->tran_speed = 52000000; else - mmc_set_clock(mmc, 26000000); - } else - mmc_set_clock(mmc, 20000000); - } + mmc->tran_speed = 26000000; + } + mmc_set_clock(mmc, mmc->tran_speed); /* fill in device description */ mmc->block_dev.lun = 0; -- 1.6.0.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot