diff options
author | Frank Gevaerts <frank@gevaerts.be> | 2009-07-20 13:23:28 +0000 |
---|---|---|
committer | Frank Gevaerts <frank@gevaerts.be> | 2009-07-20 13:23:28 +0000 |
commit | 3e1b9d5fdd73d97b3be5043f2cfa2176c1d441a1 (patch) | |
tree | 4be6aeb66ad8b1e832177898d1604ade338850aa | |
parent | 8e7f9fe595818939ddd3ce12d946c5d795cbb071 (diff) | |
download | rockbox-3e1b9d5fdd73d97b3be5043f2cfa2176c1d441a1.tar.gz rockbox-3e1b9d5fdd73d97b3be5043f2cfa2176c1d441a1.zip |
take first_drive into account when handling hotswap. This is not important as long as this is the only driver in use, but it avoids bugs as soon as things like ramdisks are used
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21980 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/target/arm/ata-sd-pp.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/firmware/target/arm/ata-sd-pp.c b/firmware/target/arm/ata-sd-pp.c index 77d3c3dc31..f963e0ac48 100644 --- a/firmware/target/arm/ata-sd-pp.c +++ b/firmware/target/arm/ata-sd-pp.c | |||
@@ -180,6 +180,8 @@ static const char sd_thread_name[] = "ata/sd"; | |||
180 | static struct mutex sd_mtx SHAREDBSS_ATTR; | 180 | static struct mutex sd_mtx SHAREDBSS_ATTR; |
181 | static struct event_queue sd_queue; | 181 | static struct event_queue sd_queue; |
182 | 182 | ||
183 | static int sd_first_drive = 0; | ||
184 | |||
183 | /* Posted when card plugged status has changed */ | 185 | /* Posted when card plugged status has changed */ |
184 | #define SD_HOTSWAP 1 | 186 | #define SD_HOTSWAP 1 |
185 | /* Actions taken by sd_thread when card status has changed */ | 187 | /* Actions taken by sd_thread when card status has changed */ |
@@ -1108,9 +1110,9 @@ static void sd_thread(void) | |||
1108 | 1110 | ||
1109 | /* We now have exclusive control of fat cache and ata */ | 1111 | /* We now have exclusive control of fat cache and ata */ |
1110 | 1112 | ||
1111 | disk_unmount(1); /* release "by force", ensure file | 1113 | disk_unmount(sd_first_drive+1); /* release "by force", ensure file |
1112 | descriptors aren't leaked and any busy | 1114 | descriptors aren't leaked and any busy |
1113 | ones are invalid if mounting */ | 1115 | ones are invalid if mounting */ |
1114 | 1116 | ||
1115 | /* Force card init for new card, re-init for re-inserted one or | 1117 | /* Force card init for new card, re-init for re-inserted one or |
1116 | * clear if the last attempt to init failed with an error. */ | 1118 | * clear if the last attempt to init failed with an error. */ |
@@ -1118,7 +1120,7 @@ static void sd_thread(void) | |||
1118 | sd_status[1].retry = 0; | 1120 | sd_status[1].retry = 0; |
1119 | 1121 | ||
1120 | if (ev.id == SYS_HOTSWAP_INSERTED) | 1122 | if (ev.id == SYS_HOTSWAP_INSERTED) |
1121 | disk_mount(1); | 1123 | disk_mount(sd_first_drive+1); |
1122 | 1124 | ||
1123 | queue_broadcast(SYS_FS_CHANGED, 0); | 1125 | queue_broadcast(SYS_FS_CHANGED, 0); |
1124 | 1126 | ||
@@ -1350,8 +1352,8 @@ bool sd_present(IF_MD_NONVOID(int drive)) | |||
1350 | #ifdef CONFIG_STORAGE_MULTI | 1352 | #ifdef CONFIG_STORAGE_MULTI |
1351 | int sd_num_drives(int first_drive) | 1353 | int sd_num_drives(int first_drive) |
1352 | { | 1354 | { |
1353 | /* We don't care which logical drive number(s) we have been assigned */ | 1355 | /* Store which logical drive number(s) we have been assigned */ |
1354 | (void)first_drive; | 1356 | sd_first_drive = first_drive; |
1355 | 1357 | ||
1356 | #ifdef HAVE_MULTIDRIVE | 1358 | #ifdef HAVE_MULTIDRIVE |
1357 | return 2; | 1359 | return 2; |