s5pc1xx: mmc: enable 8-bit buswidth mode
authorJaehoon Chung <jh80.chung@samsung.com>
Fri, 20 Aug 2010 05:41:47 +0000 (14:41 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Fri, 20 Aug 2010 05:41:47 +0000 (14:41 +0900)
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
arch/arm/include/asm/arch-s5p64xx/mmc.h
arch/arm/include/asm/arch-s5pc1xx/mmc.h
arch/arm/include/asm/arch-s5pc2xx/mmc.h
board/samsung/p1p2/p1p2.c
board/samsung/universal_c100/universal.c
board/samsung/universal_c110/universal.c
board/samsung/universal_c210/universal.c
drivers/mmc/s5p_mmc.c

index 3df8908..695554b 100644 (file)
@@ -71,7 +71,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 f75e7ee..148f900 100644 (file)
@@ -75,7 +75,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 ece92e8..38d5dec 100644 (file)
@@ -75,7 +75,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 9df29cb..af6b0e3 100644 (file)
@@ -2184,7 +2184,7 @@ int board_mmc_init(bd_t *bis)
                gpio_set_drv(&s5pc110_gpio->gpio_g0, i, GPIO_DRV_4X);
        }
 
-       return s5p_mmc_init(0);
+       return s5p_mmc_init(0, 4);
 }
 #endif
 
index ac4412f..4e7dfe1 100644 (file)
@@ -2772,6 +2772,7 @@ int s5p_no_mmc_support(void)
 int board_mmc_init(bd_t *bis)
 {
        int i;
+       int buswidth = 4;
 
        if (s5p_no_mmc_support())
                return -1;
@@ -2808,6 +2809,8 @@ int board_mmc_init(bd_t *bis)
                        /* GPG1[3:6] drv 4x */
                        gpio_set_drv(&gpio->gpio_g1, i, GPIO_DRV_4X);
                }
+
+               buswidth = 8 /* 8-bit buswidth */
        }
 
        if (mach_is_geminus()) {
@@ -2815,7 +2818,7 @@ int board_mmc_init(bd_t *bis)
                gpio_set_pull(&gpio->gpio_j2, 7, GPIO_PULL_NONE);
        }
 
-       return s5p_mmc_init(0);
+       return s5p_mmc_init(0, buswidth);
 }
 #endif
 
index ac4412f..4e7dfe1 100644 (file)
@@ -2772,6 +2772,7 @@ int s5p_no_mmc_support(void)
 int board_mmc_init(bd_t *bis)
 {
        int i;
+       int buswidth = 4;
 
        if (s5p_no_mmc_support())
                return -1;
@@ -2808,6 +2809,8 @@ int board_mmc_init(bd_t *bis)
                        /* GPG1[3:6] drv 4x */
                        gpio_set_drv(&gpio->gpio_g1, i, GPIO_DRV_4X);
                }
+
+               buswidth = 8 /* 8-bit buswidth */
        }
 
        if (mach_is_geminus()) {
@@ -2815,7 +2818,7 @@ int board_mmc_init(bd_t *bis)
                gpio_set_pull(&gpio->gpio_j2, 7, GPIO_PULL_NONE);
        }
 
-       return s5p_mmc_init(0);
+       return s5p_mmc_init(0, buswidth);
 }
 #endif
 
index 634f24c..05709ed 100644 (file)
@@ -101,6 +101,6 @@ int board_mmc_init(bd_t *bis)
                gpio_set_drv(&gpio2->gpio_k1, i, GPIO_DRV_4X);
        }
 
-       return s5p_mmc_init(0);
+       return s5p_mmc_init(0, 8);
 }
 #endif
index 5874043..8609447 100644 (file)
@@ -454,7 +454,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;
 
@@ -467,7 +467,12 @@ 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;
@@ -479,7 +484,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);
 }