summaryrefslogtreecommitdiff
path: root/firmware/target/arm
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/imx233/sdmmc-imx233.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/firmware/target/arm/imx233/sdmmc-imx233.c b/firmware/target/arm/imx233/sdmmc-imx233.c
index 8103e980d1..7df0e412e5 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
73#define WINDOW (1 << 5) 73#define WINDOW (1 << 5)
74#define WP_PIN (1 << 6) 74#define WP_PIN (1 << 6)
75#define WP_INVERTED (1 << 7) 75#define WP_INVERTED (1 << 7)
76#define PROBE (1 << 8)
76 77
77/* modes */ 78/* modes */
78#define SD_MODE 0 79#define SD_MODE 0
@@ -103,6 +104,12 @@ struct sdmmc_config_t sdmmc_config[] =
103 .mode = MMC_MODE, 104 .mode = MMC_MODE,
104 }, 105 },
105#elif defined(CREATIVE_ZENXFI2) 106#elif defined(CREATIVE_ZENXFI2)
107 {
108 .name = "internal/SD",
109 .flags = WINDOW | PROBE,
110 .ssp = 2,
111 .mode = SD_MODE,
112 },
106 /* The Zen X-Fi2 uses pin B1P29 for power */ 113 /* The Zen X-Fi2 uses pin B1P29 for power */
107 { 114 {
108 .name = "microSD", 115 .name = "microSD",
@@ -866,7 +873,16 @@ int sd_init(void)
866 _sd_num_drives = 0; 873 _sd_num_drives = 0;
867 for(unsigned drive = 0; drive < SDMMC_NUM_DRIVES; drive++) 874 for(unsigned drive = 0; drive < SDMMC_NUM_DRIVES; drive++)
868 if(SDMMC_MODE(drive) == SD_MODE) 875 if(SDMMC_MODE(drive) == SD_MODE)
876 {
877 /* if asked to probe, try to init it and ignore it if it fails */
878 if(SDMMC_FLAGS(drive) & PROBE)
879 {
880 int ret = init_drive(drive);
881 if(ret < 0)
882 continue;
883 }
869 sd_map[_sd_num_drives++] = drive; 884 sd_map[_sd_num_drives++] = drive;
885 }
870 return 0; 886 return 0;
871} 887}
872 888
@@ -931,8 +947,16 @@ int mmc_init(void)
931 for(unsigned drive = 0; drive < SDMMC_NUM_DRIVES; drive++) 947 for(unsigned drive = 0; drive < SDMMC_NUM_DRIVES; drive++)
932 if(SDMMC_MODE(drive) == MMC_MODE) 948 if(SDMMC_MODE(drive) == MMC_MODE)
933 { 949 {
950 /* try to init drive, panic on failure or skip if probing */
951 int ret = init_drive(drive);
952 if(ret < 0)
953 {
954 if(SDMMC_FLAGS(drive) & PROBE)
955 continue;
956 else
957 panicf("init_drive(%d) failed: %d (mmc)", ret);
958 }
934 mmc_map[_mmc_num_drives++] = drive; 959 mmc_map[_mmc_num_drives++] = drive;
935 init_drive(drive);
936 } 960 }
937 return 0; 961 return 0;
938} 962}