On 12 May 2017 at 12:16, Jean-Jacques Hiblot <[email protected]> wrote:
Please add commit message which what is happening and motivation. > Signed-off-by: Jean-Jacques Hiblot <[email protected]> > --- > drivers/mmc/mmc.c | 40 +++++++++++++++++++++++++++++----------- > 1 file changed, 29 insertions(+), 11 deletions(-) Reviewed-by: Simon Glass <[email protected]> > > diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c > index 5d418c5..dc7985f 100644 > --- a/drivers/mmc/mmc.c > +++ b/drivers/mmc/mmc.c > @@ -171,9 +171,35 @@ const char *mmc_mode_name(enum bus_mode mode) > else > return names[mode]; > } > + > +static uint mmc_mode2freq(struct mmc *mmc, enum bus_mode mode) > +{ > + static const int freqs[] = { > + [SD_LEGACY] = 25000000, > + [MMC_HS] = 26000000, > + [SD_HS] = 50000000, > + [UHS_SDR12] = 25000000, > + [UHS_SDR25] = 50000000, > + [UHS_SDR50] = 100000000, > + [UHS_SDR104] = 208000000, > + [UHS_DDR50] = 50000000, > + [MMC_HS_52] = 52000000, > + [MMC_DDR_52] = 52000000, > + [MMC_HS_200] = 200000000, > + }; > + > + if (mode == MMC_LEGACY) > + return mmc->legacy_speed; > + else if (mode >= MMC_MODES_END) > + return 0; > + else > + return freqs[mode]; > +} > + > static int mmc_select_mode(struct mmc *mmc, enum bus_mode mode) > { > mmc->selected_mode = mode; > + mmc->tran_speed = mmc_mode2freq(mmc, mode); > debug("selecting mode %s (freq : %d MHz)\n", mmc_mode_name(mode), > mmc->tran_speed / 1000000); > return 0; > @@ -1185,13 +1211,10 @@ static int sd_select_bus_freq_width(struct mmc *mmc) > if (err) > return err; > > - if (mmc->card_caps & MMC_MODE_HS) { > + if (mmc->card_caps & MMC_MODE_HS) > mmc_select_mode(mmc, SD_HS); > - mmc->tran_speed = 50000000; > - } else { > + else > mmc_select_mode(mmc, SD_LEGACY); > - mmc->tran_speed = 25000000; > - } > > return 0; > } > @@ -1310,11 +1333,8 @@ static int mmc_select_bus_freq_width(struct mmc *mmc) > mmc_select_mode(mmc, MMC_DDR_52); > else > mmc_select_mode(mmc, MMC_HS_52); > - mmc->tran_speed = 52000000; > - } else if (mmc->card_caps & MMC_MODE_HS) { > + } else if (mmc->card_caps & MMC_MODE_HS) > mmc_select_mode(mmc, MMC_HS); > - mmc->tran_speed = 26000000; > - } > > return err; > } > @@ -1584,7 +1604,6 @@ static int mmc_startup(struct mmc *mmc) > mult = multipliers[((cmd.response[0] >> 3) & 0xf)]; > > mmc->legacy_speed = freq * mult; > - mmc->tran_speed = mmc->legacy_speed; > mmc_select_mode(mmc, MMC_LEGACY); > > mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1); > @@ -1659,7 +1678,6 @@ static int mmc_startup(struct mmc *mmc) > if (err) > return err; > > - mmc_set_clock(mmc, mmc->tran_speed); > > /* Fix the block length for DDR mode */ > if (mmc->ddr_mode) { > -- > 1.9.1 > _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

