summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/export/config/creativezenxfi2.h2
-rw-r--r--firmware/target/arm/imx233/sdmmc-imx233.c26
2 files changed, 26 insertions, 2 deletions
diff --git a/firmware/export/config/creativezenxfi2.h b/firmware/export/config/creativezenxfi2.h
index 020d743..d60f9a4 100644
--- a/firmware/export/config/creativezenxfi2.h
+++ b/firmware/export/config/creativezenxfi2.h
@@ -132,7 +132,7 @@
/* define this if the flash memory uses the SecureDigital Memory Card protocol */
#define CONFIG_STORAGE (/*STORAGE_NAND |*/ STORAGE_SD)
-#define NUM_DRIVES 1
+#define NUM_DRIVES 2
#define HAVE_MULTIDRIVE
#define HAVE_MULTIVOLUME
#define HAVE_HOTSWAP_STORAGE_AS_MAIN
diff --git a/firmware/target/arm/imx233/sdmmc-imx233.c b/firmware/target/arm/imx233/sdmmc-imx233.c
index 8103e98..7df0e41 100644
--- a/firmware/target/arm/imx233/sdmmc-imx233.c
+++ b/firmware/target/arm/imx233/sdmmc-imx233.c
@@ -73,6 +73,7 @@ struct sdmmc_config_t
#define WINDOW (1 << 5)
#define WP_PIN (1 << 6)
#define WP_INVERTED (1 << 7)
+#define PROBE (1 << 8)
/* modes */
#define SD_MODE 0
@@ -103,6 +104,12 @@ struct sdmmc_config_t sdmmc_config[] =
.mode = MMC_MODE,
},
#elif defined(CREATIVE_ZENXFI2)
+ {
+ .name = "internal/SD",
+ .flags = WINDOW | PROBE,
+ .ssp = 2,
+ .mode = SD_MODE,
+ },
/* The Zen X-Fi2 uses pin B1P29 for power */
{
.name = "microSD",
@@ -866,7 +873,16 @@ int sd_init(void)
_sd_num_drives = 0;
for(unsigned drive = 0; drive < SDMMC_NUM_DRIVES; drive++)
if(SDMMC_MODE(drive) == SD_MODE)
+ {
+ /* if asked to probe, try to init it and ignore it if it fails */
+ if(SDMMC_FLAGS(drive) & PROBE)
+ {
+ int ret = init_drive(drive);
+ if(ret < 0)
+ continue;
+ }
sd_map[_sd_num_drives++] = drive;
+ }
return 0;
}
@@ -931,8 +947,16 @@ int mmc_init(void)
for(unsigned drive = 0; drive < SDMMC_NUM_DRIVES; drive++)
if(SDMMC_MODE(drive) == MMC_MODE)
{
+ /* try to init drive, panic on failure or skip if probing */
+ int ret = init_drive(drive);
+ if(ret < 0)
+ {
+ if(SDMMC_FLAGS(drive) & PROBE)
+ continue;
+ else
+ panicf("init_drive(%d) failed: %d (mmc)", ret);
+ }
mmc_map[_mmc_num_drives++] = drive;
- init_drive(drive);
}
return 0;
}