]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
s5p_mmc: support 8-bit bus width
authorJaehoon Chung <jh80.chung@samsung.com>
Mon, 27 Sep 2010 06:43:52 +0000 (15:43 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Tue, 19 Oct 2010 02:34:54 +0000 (11:34 +0900)
This Patch do support 8-bit bus width for s5p
So we add parameter for bus_width (in s5p_mmc_init(), s5p_mmc_initialize())
If want to use 8-bit bus width, only change (0, 8) instead of (0, 4).

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
arch/arm/include/asm/arch-s5pc1xx/mmc.h
board/samsung/goni/goni.c
drivers/mmc/s5p_mmc.c

index 68c59d13e3406223d73815220a7753153f010696..48de64d9c3532f864cffdcf2d0b0dea32a9c942e 100644 (file)
@@ -65,7 +65,7 @@ struct mmc_host {
        unsigned int clock;     /* Current clock (MHz) */
 };
 
-int s5p_mmc_init(int dev_index);
+int s5p_mmc_init(int dev_index, int bus_width);
 
 #endif /* __ASSEMBLY__ */
 #endif
index 43367291132f4b86c96e9160fa13e489b7e5d32a..0b09ebaf898b90db4f6c302d155626ef96efe689 100644 (file)
@@ -87,6 +87,6 @@ int board_mmc_init(bd_t *bis)
                gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X);
        }
 
-       return s5p_mmc_init(0);
+       return s5p_mmc_init(0, 4);
 }
 #endif
index 1fd425cbb67467d4ae2e4c6443a5f73c0e72abc8..195b5be39ea2d33fe12168d3603c165a48727dae 100644 (file)
@@ -352,11 +352,16 @@ static void mmc_set_ios(struct mmc *mmc)
        ctrl = readb(&host->reg->hostctl);
 
        /*
+        * WIDE8[5]
+        * 0 = Depend on WIDE4
+        * 1 = 8-bit mode
         * WIDE4[1]
         * 1 = 4-bit mode
         * 0 = 1-bit mode
         */
-       if (mmc->bus_width == 4)
+       if (mmc->bus_width == 8)
+               ctrl |= (1 << 5);
+       else if (mmc->bus_width == 4)
                ctrl |= (1 << 1);
        else
                ctrl &= ~(1 << 1);
@@ -437,7 +442,7 @@ static int mmc_core_init(struct mmc *mmc)
        return 0;
 }
 
-static int s5p_mmc_initialize(int dev_index)
+static int s5p_mmc_initialize(int dev_index, int bus_width)
 {
        struct mmc *mmc;
 
@@ -450,7 +455,11 @@ static int s5p_mmc_initialize(int dev_index)
        mmc->init = mmc_core_init;
 
        mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
-       mmc->host_caps = MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS;
+       if (bus_width == 8)
+               mmc->host_caps = MMC_MODE_8BIT;
+       else
+               mmc->host_caps = MMC_MODE_4BIT;
+       mmc->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
 
        mmc->f_min = 400000;
        mmc->f_max = 52000000;
@@ -462,7 +471,7 @@ static int s5p_mmc_initialize(int dev_index)
        return 0;
 }
 
-int s5p_mmc_init(int dev_index)
+int s5p_mmc_init(int dev_index, int bus_width)
 {
-       return s5p_mmc_initialize(dev_index);
+       return s5p_mmc_initialize(dev_index, bus_width);
 }