diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/common/disk.c | 34 | ||||
-rw-r--r-- | firmware/drivers/ata_mmc.c | 60 | ||||
-rw-r--r-- | firmware/export/disk.h | 3 | ||||
-rw-r--r-- | firmware/export/sd.h | 1 | ||||
-rw-r--r-- | firmware/export/sdmmc.h | 5 | ||||
-rw-r--r-- | firmware/target/arm/as3525/sd-as3525.c | 12 | ||||
-rw-r--r-- | firmware/target/arm/as3525/sd-as3525v2.c | 11 | ||||
-rw-r--r-- | firmware/target/arm/ata-sd-pp.c | 27 | ||||
-rw-r--r-- | firmware/target/arm/s3c2440/sd-s3c2440.c | 21 | ||||
-rw-r--r-- | firmware/target/arm/tcc780x/sd-tcc780x.c | 13 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c | 8 |
11 files changed, 70 insertions, 125 deletions
diff --git a/firmware/common/disk.c b/firmware/common/disk.c index 8d93f3b8cd..bc0ad793d2 100644 --- a/firmware/common/disk.c +++ b/firmware/common/disk.c | |||
@@ -19,11 +19,11 @@ | |||
19 | * | 19 | * |
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #include <stdio.h> | 21 | #include <stdio.h> |
22 | #include "kernel.h" | ||
22 | #include "storage.h" | 23 | #include "storage.h" |
23 | #include "debug.h" | 24 | #include "debug.h" |
24 | #include "fat.h" | 25 | #include "fat.h" |
25 | #ifdef HAVE_HOTSWAP | 26 | #ifdef HAVE_HOTSWAP |
26 | #include "sdmmc.h" /* for card_enable_monitoring() */ | ||
27 | #include "dir.h" /* for release_dirs() */ | 27 | #include "dir.h" /* for release_dirs() */ |
28 | #include "file.h" /* for release_files() */ | 28 | #include "file.h" /* for release_files() */ |
29 | #endif | 29 | #endif |
@@ -60,12 +60,13 @@ static const unsigned char fat_partition_types[] = { | |||
60 | 60 | ||
61 | static struct partinfo part[NUM_DRIVES*4]; /* space for 4 partitions on 2 drives */ | 61 | static struct partinfo part[NUM_DRIVES*4]; /* space for 4 partitions on 2 drives */ |
62 | static int vol_drive[NUM_VOLUMES]; /* mounted to which drive (-1 if none) */ | 62 | static int vol_drive[NUM_VOLUMES]; /* mounted to which drive (-1 if none) */ |
63 | static struct mutex disk_mutex; | ||
63 | 64 | ||
64 | #ifdef MAX_LOG_SECTOR_SIZE | 65 | #ifdef MAX_LOG_SECTOR_SIZE |
65 | int disk_sector_multiplier = 1; | 66 | int disk_sector_multiplier = 1; |
66 | #endif | 67 | #endif |
67 | 68 | ||
68 | struct partinfo* disk_init(IF_MD_NONVOID(int drive)) | 69 | static struct partinfo* disk_init(IF_MD_NONVOID(int drive)) |
69 | { | 70 | { |
70 | int i; | 71 | int i; |
71 | unsigned char sector[SECTOR_SIZE]; | 72 | unsigned char sector[SECTOR_SIZE]; |
@@ -113,13 +114,18 @@ struct partinfo* disk_partinfo(int partition) | |||
113 | return &part[partition]; | 114 | return &part[partition]; |
114 | } | 115 | } |
115 | 116 | ||
117 | void disk_init_subsystem(void) | ||
118 | { | ||
119 | mutex_init(&disk_mutex); | ||
120 | } | ||
121 | |||
116 | int disk_mount_all(void) | 122 | int disk_mount_all(void) |
117 | { | 123 | { |
118 | int mounted=0; | 124 | int mounted=0; |
119 | int i; | 125 | int i; |
120 | 126 | ||
121 | #ifdef HAVE_HOTSWAP | 127 | #ifdef HAVE_HOTSWAP |
122 | card_enable_monitoring(false); | 128 | mutex_lock(&disk_mutex); |
123 | #endif | 129 | #endif |
124 | 130 | ||
125 | fat_init(); /* reset all mounted partitions */ | 131 | fat_init(); /* reset all mounted partitions */ |
@@ -139,9 +145,8 @@ int disk_mount_all(void) | |||
139 | #endif | 145 | #endif |
140 | 146 | ||
141 | #ifdef HAVE_HOTSWAP | 147 | #ifdef HAVE_HOTSWAP |
142 | card_enable_monitoring(true); | 148 | mutex_unlock(&disk_mutex); |
143 | #endif | 149 | #endif |
144 | |||
145 | return mounted; | 150 | return mounted; |
146 | } | 151 | } |
147 | 152 | ||
@@ -160,11 +165,21 @@ static int get_free_volume(void) | |||
160 | int disk_mount(int drive) | 165 | int disk_mount(int drive) |
161 | { | 166 | { |
162 | int mounted = 0; /* reset partition-on-drive flag */ | 167 | int mounted = 0; /* reset partition-on-drive flag */ |
163 | int volume = get_free_volume(); | 168 | int volume; |
164 | struct partinfo* pinfo = disk_init(IF_MD(drive)); | 169 | struct partinfo* pinfo; |
170 | |||
171 | #ifdef HAVE_HOTSWAP | ||
172 | mutex_lock(&disk_mutex); | ||
173 | #endif | ||
174 | |||
175 | volume = get_free_volume(); | ||
176 | pinfo = disk_init(IF_MD(drive)); | ||
165 | 177 | ||
166 | if (pinfo == NULL) | 178 | if (pinfo == NULL) |
167 | { | 179 | { |
180 | #ifdef HAVE_HOTSWAP | ||
181 | mutex_unlock(&disk_mutex); | ||
182 | #endif | ||
168 | return 0; | 183 | return 0; |
169 | } | 184 | } |
170 | #if defined(TOSHIBA_GIGABEAT_S) | 185 | #if defined(TOSHIBA_GIGABEAT_S) |
@@ -214,6 +229,9 @@ int disk_mount(int drive) | |||
214 | vol_drive[volume] = drive; /* remember the drive for this volume */ | 229 | vol_drive[volume] = drive; /* remember the drive for this volume */ |
215 | } | 230 | } |
216 | } | 231 | } |
232 | #ifdef HAVE_HOTSWAP | ||
233 | mutex_unlock(&disk_mutex); | ||
234 | #endif | ||
217 | return mounted; | 235 | return mounted; |
218 | } | 236 | } |
219 | 237 | ||
@@ -222,6 +240,7 @@ int disk_unmount(int drive) | |||
222 | { | 240 | { |
223 | int unmounted = 0; | 241 | int unmounted = 0; |
224 | int i; | 242 | int i; |
243 | mutex_lock(&disk_mutex); | ||
225 | for (i=0; i<NUM_VOLUMES; i++) | 244 | for (i=0; i<NUM_VOLUMES; i++) |
226 | { | 245 | { |
227 | if (vol_drive[i] == drive) | 246 | if (vol_drive[i] == drive) |
@@ -233,6 +252,7 @@ int disk_unmount(int drive) | |||
233 | fat_unmount(i, false); | 252 | fat_unmount(i, false); |
234 | } | 253 | } |
235 | } | 254 | } |
255 | mutex_unlock(&disk_mutex); | ||
236 | 256 | ||
237 | return unmounted; | 257 | return unmounted; |
238 | } | 258 | } |
diff --git a/firmware/drivers/ata_mmc.c b/firmware/drivers/ata_mmc.c index 5da0b44292..c27c3b5d05 100644 --- a/firmware/drivers/ata_mmc.c +++ b/firmware/drivers/ata_mmc.c | |||
@@ -93,7 +93,6 @@ static long last_disk_activity = -1; | |||
93 | static struct mutex mmc_mutex; | 93 | static struct mutex mmc_mutex; |
94 | 94 | ||
95 | #ifdef HAVE_HOTSWAP | 95 | #ifdef HAVE_HOTSWAP |
96 | static bool mmc_monitor_enabled = true; | ||
97 | static long mmc_stack[((DEFAULT_STACK_SIZE*2) + 0x800)/sizeof(long)]; | 96 | static long mmc_stack[((DEFAULT_STACK_SIZE*2) + 0x800)/sizeof(long)]; |
98 | #else | 97 | #else |
99 | static long mmc_stack[(DEFAULT_STACK_SIZE*2)/sizeof(long)]; | 98 | static long mmc_stack[(DEFAULT_STACK_SIZE*2)/sizeof(long)]; |
@@ -130,7 +129,9 @@ static tCardInfo card_info[2]; | |||
130 | static int current_card = 0; | 129 | static int current_card = 0; |
131 | #endif | 130 | #endif |
132 | static bool last_mmc_status = false; | 131 | static bool last_mmc_status = false; |
133 | static int countdown = HZ/3; /* for mmc switch debouncing */ | 132 | static int countdown = -1; /* for mmc switch debouncing. -1 because the |
133 | countdown should not happen if the card | ||
134 | is inserted at boot */ | ||
134 | static bool usb_activity; /* monitoring the USB bridge */ | 135 | static bool usb_activity; /* monitoring the USB bridge */ |
135 | static long last_usb_activity; | 136 | static long last_usb_activity; |
136 | 137 | ||
@@ -807,13 +808,6 @@ static void mmc_thread(void) | |||
807 | } | 808 | } |
808 | } | 809 | } |
809 | 810 | ||
810 | #ifdef HAVE_HOTSWAP | ||
811 | void mmc_enable_monitoring(bool on) | ||
812 | { | ||
813 | mmc_monitor_enabled = on; | ||
814 | } | ||
815 | #endif | ||
816 | |||
817 | bool mmc_detect(void) | 811 | bool mmc_detect(void) |
818 | { | 812 | { |
819 | return (adc_read(ADC_MMC_SWITCH) < 0x200); | 813 | return (adc_read(ADC_MMC_SWITCH) < 0x200); |
@@ -846,9 +840,6 @@ bool mmc_usb_active(int delayticks) | |||
846 | static void mmc_tick(void) | 840 | static void mmc_tick(void) |
847 | { | 841 | { |
848 | bool current_status; | 842 | bool current_status; |
849 | #ifndef HAVE_HOTSWAP | ||
850 | const bool mmc_monitor_enabled = true; | ||
851 | #endif | ||
852 | 843 | ||
853 | if (new_mmc_circuit) | 844 | if (new_mmc_circuit) |
854 | /* USB bridge activity is 0 on idle, ~527 on active */ | 845 | /* USB bridge activity is 0 on idle, ~527 on active */ |
@@ -860,33 +851,30 @@ static void mmc_tick(void) | |||
860 | last_usb_activity = current_tick; | 851 | last_usb_activity = current_tick; |
861 | usb_activity = current_status; | 852 | usb_activity = current_status; |
862 | 853 | ||
863 | if (mmc_monitor_enabled) | 854 | current_status = mmc_detect(); |
855 | /* Only report when the status has changed */ | ||
856 | if (current_status != last_mmc_status) | ||
864 | { | 857 | { |
865 | current_status = mmc_detect(); | 858 | last_mmc_status = current_status; |
866 | /* Only report when the status has changed */ | 859 | countdown = HZ/3; |
867 | if (current_status != last_mmc_status) | 860 | } |
868 | { | 861 | else |
869 | last_mmc_status = current_status; | 862 | { |
870 | countdown = HZ/3; | 863 | /* Count down until it gets negative */ |
871 | } | 864 | if (countdown >= 0) |
872 | else | 865 | countdown--; |
873 | { | ||
874 | /* Count down until it gets negative */ | ||
875 | if (countdown >= 0) | ||
876 | countdown--; | ||
877 | 866 | ||
878 | if (countdown == 0) | 867 | if (countdown == 0) |
868 | { | ||
869 | if (current_status) | ||
879 | { | 870 | { |
880 | if (current_status) | 871 | queue_broadcast(SYS_HOTSWAP_INSERTED, 0); |
881 | { | 872 | } |
882 | queue_broadcast(SYS_HOTSWAP_INSERTED, 0); | 873 | else |
883 | } | 874 | { |
884 | else | 875 | queue_broadcast(SYS_HOTSWAP_EXTRACTED, 0); |
885 | { | 876 | mmc_status = MMC_UNTOUCHED; |
886 | queue_broadcast(SYS_HOTSWAP_EXTRACTED, 0); | 877 | card_info[1].initialized = false; |
887 | mmc_status = MMC_UNTOUCHED; | ||
888 | card_info[1].initialized = false; | ||
889 | } | ||
890 | } | 878 | } |
891 | } | 879 | } |
892 | } | 880 | } |
diff --git a/firmware/export/disk.h b/firmware/export/disk.h index cd937fdf66..d73a2a7f88 100644 --- a/firmware/export/disk.h +++ b/firmware/export/disk.h | |||
@@ -35,8 +35,9 @@ struct partinfo { | |||
35 | #define PARTITION_TYPE_OS2_HIDDEN_C_DRIVE 0x84 | 35 | #define PARTITION_TYPE_OS2_HIDDEN_C_DRIVE 0x84 |
36 | 36 | ||
37 | /* returns a pointer to an array of 8 partinfo structs */ | 37 | /* returns a pointer to an array of 8 partinfo structs */ |
38 | struct partinfo* disk_init(IF_MD_NONVOID(int drive)); | ||
39 | struct partinfo* disk_partinfo(int partition); | 38 | struct partinfo* disk_partinfo(int partition); |
39 | |||
40 | void disk_init_subsystem(void); /* Initialises mutexes */ | ||
40 | int disk_mount_all(void); /* returns the # of successful mounts */ | 41 | int disk_mount_all(void); /* returns the # of successful mounts */ |
41 | int disk_mount(int drive); | 42 | int disk_mount(int drive); |
42 | int disk_unmount(int drive); | 43 | int disk_unmount(int drive); |
diff --git a/firmware/export/sd.h b/firmware/export/sd.h index 1c61364566..c798f54e9a 100644 --- a/firmware/export/sd.h +++ b/firmware/export/sd.h | |||
@@ -48,7 +48,6 @@ void sd_get_info(IF_MD2(int drive,) struct storage_info *info); | |||
48 | #ifdef HAVE_HOTSWAP | 48 | #ifdef HAVE_HOTSWAP |
49 | bool sd_removable(IF_MV_NONVOID(int drive)); | 49 | bool sd_removable(IF_MV_NONVOID(int drive)); |
50 | bool sd_present(IF_MV_NONVOID(int drive)); | 50 | bool sd_present(IF_MV_NONVOID(int drive)); |
51 | void card_enable_monitoring_target(bool on); | ||
52 | #endif | 51 | #endif |
53 | 52 | ||
54 | long sd_last_disk_activity(void); | 53 | long sd_last_disk_activity(void); |
diff --git a/firmware/export/sdmmc.h b/firmware/export/sdmmc.h index 6ac3bd2af5..4351c85c42 100644 --- a/firmware/export/sdmmc.h +++ b/firmware/export/sdmmc.h | |||
@@ -57,17 +57,12 @@ typedef struct | |||
57 | tCardInfo *card_get_info_target(int card_no); | 57 | tCardInfo *card_get_info_target(int card_no); |
58 | void sd_parse_csd(tCardInfo *card); | 58 | void sd_parse_csd(tCardInfo *card); |
59 | 59 | ||
60 | #ifdef HAVE_HOTSWAP | ||
61 | #define card_enable_monitoring card_enable_monitoring_target | ||
62 | #endif | ||
63 | |||
64 | #else /* STORAGE_MMC */ | 60 | #else /* STORAGE_MMC */ |
65 | 61 | ||
66 | #include "ata_mmc.h" | 62 | #include "ata_mmc.h" |
67 | #define card_get_info mmc_card_info | 63 | #define card_get_info mmc_card_info |
68 | tCardInfo *mmc_card_info(int card_no); | 64 | tCardInfo *mmc_card_info(int card_no); |
69 | #define card_touched mmc_touched | 65 | #define card_touched mmc_touched |
70 | #define card_enable_monitoring mmc_enable_monitoring | ||
71 | 66 | ||
72 | #endif | 67 | #endif |
73 | 68 | ||
diff --git a/firmware/target/arm/as3525/sd-as3525.c b/firmware/target/arm/as3525/sd-as3525.c index 9c0b4124ac..8aaae55cf4 100644 --- a/firmware/target/arm/as3525/sd-as3525.c +++ b/firmware/target/arm/as3525/sd-as3525.c | |||
@@ -508,6 +508,8 @@ static void init_pl180_controller(const int drive) | |||
508 | GPIOA_IS &= ~EXT_SD_BITS; | 508 | GPIOA_IS &= ~EXT_SD_BITS; |
509 | /* detect both raising and falling edges */ | 509 | /* detect both raising and falling edges */ |
510 | GPIOA_IBE |= EXT_SD_BITS; | 510 | GPIOA_IBE |= EXT_SD_BITS; |
511 | /* enable the card detect interrupt */ | ||
512 | GPIOA_IE |= EXT_SD_BITS; | ||
511 | 513 | ||
512 | #else | 514 | #else |
513 | VIC_INT_ENABLE = INTERRUPT_NAND; | 515 | VIC_INT_ENABLE = INTERRUPT_NAND; |
@@ -922,16 +924,6 @@ tCardInfo *card_get_info_target(int card_no) | |||
922 | return &card_info[card_no]; | 924 | return &card_info[card_no]; |
923 | } | 925 | } |
924 | 926 | ||
925 | #ifdef HAVE_HOTSWAP | ||
926 | void card_enable_monitoring_target(bool on) | ||
927 | { | ||
928 | if (on) /* enable interrupt */ | ||
929 | GPIOA_IE |= EXT_SD_BITS; | ||
930 | else /* disable interrupt */ | ||
931 | GPIOA_IE &= ~EXT_SD_BITS; | ||
932 | } | ||
933 | #endif /* HAVE_HOTSWAP */ | ||
934 | |||
935 | #endif /* !BOOTLOADER */ | 927 | #endif /* !BOOTLOADER */ |
936 | 928 | ||
937 | #ifdef CONFIG_STORAGE_MULTI | 929 | #ifdef CONFIG_STORAGE_MULTI |
diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c index ccc88be25d..1a555e745d 100644 --- a/firmware/target/arm/as3525/sd-as3525v2.c +++ b/firmware/target/arm/as3525/sd-as3525v2.c | |||
@@ -731,6 +731,9 @@ int sd_init(void) | |||
731 | GPIOA_IS &= ~EXT_SD_BITS; | 731 | GPIOA_IS &= ~EXT_SD_BITS; |
732 | /* detect both raising and falling edges */ | 732 | /* detect both raising and falling edges */ |
733 | GPIOA_IBE |= EXT_SD_BITS; | 733 | GPIOA_IBE |= EXT_SD_BITS; |
734 | /* enable the card detect interrupt */ | ||
735 | GPIOA_IE |= EXT_SD_BITS; | ||
736 | |||
734 | /* Configure XPD for SD-MCI interface */ | 737 | /* Configure XPD for SD-MCI interface */ |
735 | CCU_IO |= (1<<2); | 738 | CCU_IO |= (1<<2); |
736 | #endif | 739 | #endif |
@@ -989,14 +992,6 @@ void sd_gpioa_isr(void) | |||
989 | /* acknowledge interrupt */ | 992 | /* acknowledge interrupt */ |
990 | GPIOA_IC = EXT_SD_BITS; | 993 | GPIOA_IC = EXT_SD_BITS; |
991 | } | 994 | } |
992 | |||
993 | void card_enable_monitoring_target(bool on) | ||
994 | { | ||
995 | if (on) /* enable interrupt */ | ||
996 | GPIOA_IE |= EXT_SD_BITS; | ||
997 | else /* disable interrupt */ | ||
998 | GPIOA_IE &= ~EXT_SD_BITS; | ||
999 | } | ||
1000 | #endif /* HAVE_HOTSWAP */ | 995 | #endif /* HAVE_HOTSWAP */ |
1001 | 996 | ||
1002 | #ifdef CONFIG_STORAGE_MULTI | 997 | #ifdef CONFIG_STORAGE_MULTI |
diff --git a/firmware/target/arm/ata-sd-pp.c b/firmware/target/arm/ata-sd-pp.c index f7b4a992e4..a2dcfe518f 100644 --- a/firmware/target/arm/ata-sd-pp.c +++ b/firmware/target/arm/ata-sd-pp.c | |||
@@ -1190,27 +1190,6 @@ void sd_enable(bool on) | |||
1190 | } | 1190 | } |
1191 | } | 1191 | } |
1192 | 1192 | ||
1193 | #ifdef HAVE_HOTSWAP | ||
1194 | void card_enable_monitoring_target(bool on) | ||
1195 | { | ||
1196 | if (on) | ||
1197 | { | ||
1198 | #ifdef SANSA_E200 | ||
1199 | GPIO_SET_BITWISE(GPIOA_INT_EN, 0x80); | ||
1200 | #elif defined(SANSA_C200) | ||
1201 | GPIO_SET_BITWISE(GPIOL_INT_EN, 0x08); | ||
1202 | #endif | ||
1203 | } | ||
1204 | else | ||
1205 | { | ||
1206 | #ifdef SANSA_E200 | ||
1207 | GPIO_CLEAR_BITWISE(GPIOA_INT_EN, 0x80); | ||
1208 | #elif defined(SANSA_C200) | ||
1209 | GPIO_CLEAR_BITWISE(GPIOL_INT_EN, 0x08); | ||
1210 | #endif | ||
1211 | } | ||
1212 | } | ||
1213 | #endif | ||
1214 | 1193 | ||
1215 | int sd_init(void) | 1194 | int sd_init(void) |
1216 | { | 1195 | { |
@@ -1275,6 +1254,9 @@ int sd_init(void) | |||
1275 | GPIOA_INT_LEV = (0x80 << 8) | (~GPIOA_INPUT_VAL & 0x80); | 1254 | GPIOA_INT_LEV = (0x80 << 8) | (~GPIOA_INPUT_VAL & 0x80); |
1276 | 1255 | ||
1277 | GPIOA_INT_CLR = 0x80; | 1256 | GPIOA_INT_CLR = 0x80; |
1257 | |||
1258 | /* enable the card detect interrupt */ | ||
1259 | GPIO_SET_BITWISE(GPIOA_INT_EN, 0x80); | ||
1278 | #elif defined SANSA_C200 | 1260 | #elif defined SANSA_C200 |
1279 | CPU_INT_EN = HI_MASK; | 1261 | CPU_INT_EN = HI_MASK; |
1280 | CPU_HI_INT_EN = GPIO2_MASK; | 1262 | CPU_HI_INT_EN = GPIO2_MASK; |
@@ -1282,6 +1264,9 @@ int sd_init(void) | |||
1282 | GPIOL_INT_LEV = (0x08 << 8) | (~GPIOL_INPUT_VAL & 0x08); | 1264 | GPIOL_INT_LEV = (0x08 << 8) | (~GPIOL_INPUT_VAL & 0x08); |
1283 | 1265 | ||
1284 | GPIOL_INT_CLR = 0x08; | 1266 | GPIOL_INT_CLR = 0x08; |
1267 | |||
1268 | /* enable the card detect interrupt */ | ||
1269 | GPIO_SET_BITWISE(GPIOL_INT_EN, 0x08); | ||
1285 | #endif | 1270 | #endif |
1286 | #endif | 1271 | #endif |
1287 | } | 1272 | } |
diff --git a/firmware/target/arm/s3c2440/sd-s3c2440.c b/firmware/target/arm/s3c2440/sd-s3c2440.c index 33b995213e..f4c8a4f599 100644 --- a/firmware/target/arm/s3c2440/sd-s3c2440.c +++ b/firmware/target/arm/s3c2440/sd-s3c2440.c | |||
@@ -270,6 +270,11 @@ static void init_sdi_controller(const int card_no) | |||
270 | 270 | ||
271 | /* Card Detect input */ | 271 | /* Card Detect input */ |
272 | S3C2440_GPIO_CONFIG (GPGCON, 8, GPIO_INPUT); | 272 | S3C2440_GPIO_CONFIG (GPGCON, 8, GPIO_INPUT); |
273 | /* enable external irq 8-23 on the internal interrupt controller */ | ||
274 | INTMSK &= ~1<<5; | ||
275 | /* enable GPG8 IRQ on the external interrupt controller */ | ||
276 | EINTMASK &= ~(1<<16); | ||
277 | |||
273 | 278 | ||
274 | /* Write Protect input */ | 279 | /* Write Protect input */ |
275 | S3C2440_GPIO_CONFIG (GPHCON, 8, GPIO_INPUT); | 280 | S3C2440_GPIO_CONFIG (GPHCON, 8, GPIO_INPUT); |
@@ -523,22 +528,6 @@ static int sd1_oneshot_callback(struct timeout *tmo) | |||
523 | return 0; | 528 | return 0; |
524 | } | 529 | } |
525 | 530 | ||
526 | void card_enable_monitoring_target(bool on) | ||
527 | { | ||
528 | if (on) | ||
529 | { /* enable external irq 8-23 on the internal interrupt controller */ | ||
530 | INTMSK &= ~1<<5; | ||
531 | /* enable GPG8 IRQ on the external interrupt controller */ | ||
532 | EINTMASK &= ~(1<<16); | ||
533 | } | ||
534 | else | ||
535 | { | ||
536 | /* mask internal and external IRQs */ | ||
537 | INTMSK |= 1<<5; | ||
538 | EINTMASK |= (1<<16); | ||
539 | } | ||
540 | } | ||
541 | |||
542 | void EINT8_23(void) | 531 | void EINT8_23(void) |
543 | { | 532 | { |
544 | static struct timeout sd1_oneshot; | 533 | static struct timeout sd1_oneshot; |
diff --git a/firmware/target/arm/tcc780x/sd-tcc780x.c b/firmware/target/arm/tcc780x/sd-tcc780x.c index bfab9fdddd..88ccf187f0 100644 --- a/firmware/target/arm/tcc780x/sd-tcc780x.c +++ b/firmware/target/arm/tcc780x/sd-tcc780x.c | |||
@@ -214,18 +214,6 @@ static inline bool card_detect_target(void) | |||
214 | #endif | 214 | #endif |
215 | } | 215 | } |
216 | 216 | ||
217 | void card_enable_monitoring_target(bool on) | ||
218 | { | ||
219 | if (on) | ||
220 | { | ||
221 | IEN |= EXT0_IRQ_MASK; | ||
222 | } | ||
223 | else | ||
224 | { | ||
225 | IEN &= ~EXT0_IRQ_MASK; | ||
226 | } | ||
227 | } | ||
228 | |||
229 | static int sd1_oneshot_callback(struct timeout *tmo) | 217 | static int sd1_oneshot_callback(struct timeout *tmo) |
230 | { | 218 | { |
231 | (void)tmo; | 219 | (void)tmo; |
@@ -786,6 +774,7 @@ int sd_init(void) | |||
786 | /* Configure interrupts for the card slot */ | 774 | /* Configure interrupts for the card slot */ |
787 | TMODE &= ~EXT0_IRQ_MASK; /* edge-triggered */ | 775 | TMODE &= ~EXT0_IRQ_MASK; /* edge-triggered */ |
788 | TMODEA |= EXT0_IRQ_MASK; /* trigger on both edges */ | 776 | TMODEA |= EXT0_IRQ_MASK; /* trigger on both edges */ |
777 | IEN |= EXT0_IRQ_MASK; /* enable the interrupt */ | ||
789 | #endif | 778 | #endif |
790 | } | 779 | } |
791 | 780 | ||
diff --git a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c index be534bf24e..8fdf7d0287 100644 --- a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c | |||
@@ -1412,14 +1412,6 @@ bool sd_removable(IF_MV_NONVOID(int drive)) | |||
1412 | return true; | 1412 | return true; |
1413 | } | 1413 | } |
1414 | 1414 | ||
1415 | void card_enable_monitoring_target(bool on) | ||
1416 | { | ||
1417 | if(on) | ||
1418 | sd_gpio_setup_irq(card_detect_target()); | ||
1419 | else | ||
1420 | __gpio_mask_irq(MMC_CD_PIN); | ||
1421 | } | ||
1422 | |||
1423 | static int sd_oneshot_callback(struct timeout *tmo) | 1415 | static int sd_oneshot_callback(struct timeout *tmo) |
1424 | { | 1416 | { |
1425 | (void)tmo; | 1417 | (void)tmo; |