summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-02-04 19:27:07 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-02-10 23:14:26 +0100
commit1f4f7369eebfea85b9cb74a7ecae04b05bf44d07 (patch)
tree18b4d3908b749b9841109e03b33736eb95f3ec0b
parentf982ea63989694f47bf8508883ddaa685d71fdf4 (diff)
downloadrockbox-1f4f7369eebfea85b9cb74a7ecae04b05bf44d07.tar.gz
rockbox-1f4f7369eebfea85b9cb74a7ecae04b05bf44d07.zip
imx233: add support for sd/mmc probing
zenxfi2: add support for internal storage on the SD version The code can now skip devices marked as PROBE if they fail to init, thus making it possible to handle various kinds of internal storages. The current code probably doesn't interplay nicely since it acquires pins and never release them so it will probably break NAND code when it's ready but NAND code is not ready yet anyway. Change-Id: I4cb962de4215661e521743a3f511445dbbf28673
-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 020d7433cf..d60f9a4277 100644
--- a/firmware/export/config/creativezenxfi2.h
+++ b/firmware/export/config/creativezenxfi2.h
@@ -132,7 +132,7 @@
132 132
133/* define this if the flash memory uses the SecureDigital Memory Card protocol */ 133/* define this if the flash memory uses the SecureDigital Memory Card protocol */
134#define CONFIG_STORAGE (/*STORAGE_NAND |*/ STORAGE_SD) 134#define CONFIG_STORAGE (/*STORAGE_NAND |*/ STORAGE_SD)
135#define NUM_DRIVES 1 135#define NUM_DRIVES 2
136#define HAVE_MULTIDRIVE 136#define HAVE_MULTIDRIVE
137#define HAVE_MULTIVOLUME 137#define HAVE_MULTIVOLUME
138#define HAVE_HOTSWAP_STORAGE_AS_MAIN 138#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 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}