[U-Boot] [PATCH] arm:goni:mmc: Add sd card detection and initialization.

This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2". SD card is inited even if eMMC initialization fails.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com --- board/samsung/goni/goni.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index 5b3d6ef..d63e902 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -72,7 +72,7 @@ int checkboard(void) #ifdef CONFIG_GENERIC_MMC int board_mmc_init(bd_t *bis) { - int i; + int i, ret, ret_sd = 0;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1); @@ -95,7 +95,36 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4); + ret = s5p_mmc_init(0, 4); + if (ret) + puts("MMC: Failed to init MMC:0.\n"); + + /* + * SD card (T_FLASH) detect and init + * T_FLASH_DETECT: EINT28: GPH3[4] input mode + */ + s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT); + s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP); + + if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) { + for (i = 0; i < 7; i++) { + if (i == 2) + continue; + + /* GPG2[0:6] special function 2 */ + s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2); + /* GPG2[0:6] pull disable */ + s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE); + /* GPG2[0:6] drv 4x */ + s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X); + } + + ret_sd = s5p_mmc_init(2, 4) + if (ret_sd) + puts("MMC: Failed to init SD card (MMC:2).\n"); + } + + return ret | ret_sd; } #endif

Dear Przemyslaw,
On 09/09/2013 09:50 PM, Przemyslaw Marczak wrote:
This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2". SD card is inited even if eMMC initialization fails.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
board/samsung/goni/goni.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index 5b3d6ef..d63e902 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -72,7 +72,7 @@ int checkboard(void) #ifdef CONFIG_GENERIC_MMC int board_mmc_init(bd_t *bis) {
- int i;
int i, ret, ret_sd = 0;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1);
@@ -95,7 +95,36 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4);
- ret = s5p_mmc_init(0, 4);
- if (ret)
puts("MMC: Failed to init MMC:0.\n");
- /*
* SD card (T_FLASH) detect and init
* T_FLASH_DETECT: EINT28: GPH3[4] input mode
*/
- s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT);
- s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP);
- if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) {
for (i = 0; i < 7; i++) {
if (i == 2)
continue;
/* GPG2[0:6] special function 2 */
s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2);
/* GPG2[0:6] pull disable */
s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE);
/* GPG2[0:6] drv 4x */
s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X);
}
ret_sd = s5p_mmc_init(2, 4)
if (ret_sd)
puts("MMC: Failed to init SD card (MMC:2).\n");
I think you can refer to trats.c.
Best Regards, Jaehoon Chung
- }
- return ret | ret_sd;
} #endif

This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2". SD card is inited even if eMMC initialization fails.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com --- Changes for v2: - add ret_sd for sd card initialization errors - return bit OR of ret and ret_sd values
Changes for v3: - change puts() to error() when prints error message - chance BIT OR on ret and sd_ret to BIT AND
Now return value is 0 if any card will init succeed and -1 if both fails.
--- board/samsung/goni/goni.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index 5b3d6ef..366f648 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -72,7 +72,7 @@ int checkboard(void) #ifdef CONFIG_GENERIC_MMC int board_mmc_init(bd_t *bis) { - int i; + int i, ret, ret_sd = 0;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1); @@ -95,7 +95,36 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4); + ret = s5p_mmc_init(0, 4); + if (ret) + error("MMC: Failed to init MMC:0.\n"); + + /* + * SD card (T_FLASH) detect and init + * T_FLASH_DETECT: EINT28: GPH3[4] input mode + */ + s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT); + s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP); + + if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) { + for (i = 0; i < 7; i++) { + if (i == 2) + continue; + + /* GPG2[0:6] special function 2 */ + s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2); + /* GPG2[0:6] pull disable */ + s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE); + /* GPG2[0:6] drv 4x */ + s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X); + } + + ret_sd = s5p_mmc_init(2, 4); + if (ret_sd) + error("MMC: Failed to init SD card (MMC:2).\n"); + } + + return ret & ret_sd; } #endif

Looks good to me.
Acked-by: Jaehoon Chung jh80.chung@samsung.com
On 09/10/2013 06:34 PM, Przemyslaw Marczak wrote:
This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2". SD card is inited even if eMMC initialization fails.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Changes for v2:
- add ret_sd for sd card initialization errors
- return bit OR of ret and ret_sd values
Changes for v3:
- change puts() to error() when prints error message
- chance BIT OR on ret and sd_ret to BIT AND
Now return value is 0 if any card will init succeed and -1 if both fails.
board/samsung/goni/goni.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index 5b3d6ef..366f648 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -72,7 +72,7 @@ int checkboard(void) #ifdef CONFIG_GENERIC_MMC int board_mmc_init(bd_t *bis) {
- int i;
int i, ret, ret_sd = 0;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1);
@@ -95,7 +95,36 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4);
- ret = s5p_mmc_init(0, 4);
- if (ret)
error("MMC: Failed to init MMC:0.\n");
- /*
* SD card (T_FLASH) detect and init
* T_FLASH_DETECT: EINT28: GPH3[4] input mode
*/
- s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT);
- s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP);
- if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) {
for (i = 0; i < 7; i++) {
if (i == 2)
continue;
/* GPG2[0:6] special function 2 */
s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2);
/* GPG2[0:6] pull disable */
s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE);
/* GPG2[0:6] drv 4x */
s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X);
}
ret_sd = s5p_mmc_init(2, 4);
if (ret_sd)
error("MMC: Failed to init SD card (MMC:2).\n");
- }
- return ret & ret_sd;
} #endif

On 10/09/13 19:28, Jaehoon Chung wrote:
Looks good to me.
Acked-by: Jaehoon Chung jh80.chung@samsung.com
On 09/10/2013 06:34 PM, Przemyslaw Marczak wrote:
This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2". SD card is inited even if eMMC initialization fails.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
Changes for v2:
- add ret_sd for sd card initialization errors
- return bit OR of ret and ret_sd values
Changes for v3:
- change puts() to error() when prints error message
- chance BIT OR on ret and sd_ret to BIT AND
Now return value is 0 if any card will init succeed and -1 if both fails.
board/samsung/goni/goni.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-)
applied to u-boot-samsung.
Thanks, Minkyu Kang.
participants (3)
-
Jaehoon Chung
-
Minkyu Kang
-
Przemyslaw Marczak