board/neo1973/neo1973.c (board_late_init): moved MMC power-up to separate function cpu/arm920t/s3c24x0/mmc.c (mmc_init): call mmc_power_up and return -ENODEV immediately if there is no card - Werner Almesberger Index: u-boot/board/neo1973/neo1973.c =================================================================== --- u-boot.orig/board/neo1973/neo1973.c +++ u-boot/board/neo1973/neo1973.c @@ -223,6 +223,19 @@ int board_init (void) return 0; } +int mmc_power_up(void) +{ +#if defined(CONFIG_ARCH_GTA01B_v4) + S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); + + /* check if sd card is inserted, and power-up if it is */ + if (gpio->GPFDAT & (1 << 5)) + return 0; + gpio->GPBDAT &= ~(1 << 2); +#endif /* !CONFIG_ARCH_GTA01B_v4 */ + return 1; +} + int board_late_init(void) { unsigned char tmp; @@ -289,14 +302,8 @@ continue_boot: /* switch on the backlight */ neo1973_backlight(1); -#if defined(CONFIG_ARCH_GTA01B_v4) - { - /* check if sd card is inserted, and power-up if it is */ - S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); - if (!(gpio->GPFDAT & (1 << 5))) - gpio->GPBDAT &= ~(1 << 2); - } -#endif + /* check if sd card is inserted, and power-up if it is */ + mmc_power_up(); return 0; } Index: u-boot/cpu/arm920t/s3c24x0/mmc.c =================================================================== --- u-boot.orig/cpu/arm920t/s3c24x0/mmc.c +++ u-boot/cpu/arm920t/s3c24x0/mmc.c @@ -381,6 +381,11 @@ static void print_sd_cid(const struct sd cid->crc >> 1, cid->crc & 1); } +int __attribute__((weak)) mmc_power_up(void) +{ + return 1; +} + int mmc_init(int verbose) { int retries, rc = -ENODEV; @@ -393,6 +398,8 @@ int mmc_init(int verbose) debug("mmc_init(PCLK=%u)\n", get_PCLK()); clk_power->CLKCON |= (1 << 9); + if (!mmc_power_up()) + return -ENODEV; /* S3C2410 has some bug that prevents reliable operation at higher speed */ //sdi->SDIPRE = 0x3e; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */