mmc: sh_mmcif: Change maximum and minimum value of MMC clock
authorNobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Wed, 3 Dec 2014 08:57:01 +0000 (17:57 +0900)
committerNobuhiro Iwamatsu <iwamatsu@nigauri.org>
Fri, 5 Dec 2014 02:15:52 +0000 (11:15 +0900)
Maximum value and the minimum value of clock for sh_mmcif instead by
base of MMC clock. This removes fixed clock, make the changes to be calculated
according to environment.

Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
drivers/mmc/sh_mmcif.c
drivers/mmc/sh_mmcif.h

index 8f386e23da161ffe2cd89341d3d42aac52749ea0..3a2022c81393885c8eac195a26ee8fed84449950 100644 (file)
@@ -579,8 +579,6 @@ static struct mmc_config sh_mmcif_cfg = {
        .host_caps      = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT |
                          MMC_MODE_8BIT | MMC_MODE_HC,
        .voltages       = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .f_min          = CLKDEV_MMC_INIT,
-       .f_max          = CLKDEV_EMMC_DATA,
        .b_max          = CONFIG_SYS_MMC_MAX_BLK_COUNT,
 };
 
@@ -597,6 +595,9 @@ int mmcif_mmc_init(void)
        host->regs = (struct sh_mmcif_regs *)CONFIG_SH_MMCIF_ADDR;
        host->clk = CONFIG_SH_MMCIF_CLK;
 
+       sh_mmcif_cfg.f_min = MMC_CLK_DIV_MIN(host->clk);
+       sh_mmcif_cfg.f_max = MMC_CLK_DIV_MAX;
+
        mmc = mmc_create(&sh_mmcif_cfg, host);
        if (mmc == NULL) {
                free(host);
index bd6fbf7c62e60788bf98da96271efbc4fcf84633..70034e2576d9ddc54f815e17d905c69b571edd3d 100644 (file)
@@ -199,7 +199,8 @@ struct sh_mmcif_regs {
 #define SOFT_RST_OFF           (0 << 31)
 
 #define CLKDEV_EMMC_DATA       52000000        /* 52MHz */
-#define        CLKDEV_MMC_INIT         400000          /* 100 - 400 KHz */
+#define MMC_CLK_DIV_MIN(clk)   (clk / (1 << 8))
+#define MMC_CLK_DIV_MAX                CLKDEV_EMMC_DATA
 
 #define MMC_BUS_WIDTH_1                0
 #define MMC_BUS_WIDTH_4                2