summaryrefslogtreecommitdiff
path: root/firmware/target/arm/sandisk/sansa-e200/ata-e200.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/sandisk/sansa-e200/ata-e200.c')
-rw-r--r--firmware/target/arm/sandisk/sansa-e200/ata-e200.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/firmware/target/arm/sandisk/sansa-e200/ata-e200.c b/firmware/target/arm/sandisk/sansa-e200/ata-e200.c
index 29fe0d9109..10c13cdb2e 100644
--- a/firmware/target/arm/sandisk/sansa-e200/ata-e200.c
+++ b/firmware/target/arm/sandisk/sansa-e200/ata-e200.c
@@ -223,6 +223,7 @@ void sd_wait_for_state(tSDCardInfo* card, unsigned int state)
223 while(((response >> 9) & 0xf) != state) 223 while(((response >> 9) & 0xf) != state)
224 { 224 {
225 sd_send_command(SEND_STATUS, (card->rca) << 16, 1); 225 sd_send_command(SEND_STATUS, (card->rca) << 16, 1);
226 priority_yield();
226 sd_read_response(&response, 1); 227 sd_read_response(&response, 1);
227 /* TODO: Add a timeout and error handling */ 228 /* TODO: Add a timeout and error handling */
228 } 229 }
@@ -442,7 +443,7 @@ void sd_init_device(void)
442 dataptr += (FIFO_SIZE*2); /* Advance one chunk of 16 words */ 443 dataptr += (FIFO_SIZE*2); /* Advance one chunk of 16 words */
443 } 444 }
444 } 445 }
445 mutex_init(&sd_mtx); 446 spinlock_init(&sd_mtx);
446} 447}
447 448
448/* API Functions */ 449/* API Functions */
@@ -472,7 +473,7 @@ int ata_read_sectors(IF_MV2(int drive,)
472#ifdef HAVE_MULTIVOLUME 473#ifdef HAVE_MULTIVOLUME
473 (void)drive; /* unused for now */ 474 (void)drive; /* unused for now */
474#endif 475#endif
475 mutex_lock(&sd_mtx); 476 spinlock_lock(&sd_mtx);
476 477
477 last_disk_activity = current_tick; 478 last_disk_activity = current_tick;
478 spinup_start = current_tick; 479 spinup_start = current_tick;
@@ -530,7 +531,7 @@ int ata_read_sectors(IF_MV2(int drive,)
530 ata_led(false); 531 ata_led(false);
531 ata_enable(false); 532 ata_enable(false);
532 533
533 mutex_unlock(&sd_mtx); 534 spinlock_unlock(&sd_mtx);
534 535
535 return ret; 536 return ret;
536} 537}
@@ -551,7 +552,7 @@ int ata_write_sectors(IF_MV2(int drive,)
551 long timeout; 552 long timeout;
552 tSDCardInfo *card = &card_info[current_card]; 553 tSDCardInfo *card = &card_info[current_card];
553 554
554 mutex_lock(&sd_mtx); 555 spinlock_lock(&sd_mtx);
555 ata_enable(true); 556 ata_enable(true);
556 ata_led(true); 557 ata_led(true);
557 if(current_card == 0) 558 if(current_card == 0)
@@ -607,7 +608,7 @@ retry:
607 sd_wait_for_state(card, TRAN); 608 sd_wait_for_state(card, TRAN);
608 ata_led(false); 609 ata_led(false);
609 ata_enable(false); 610 ata_enable(false);
610 mutex_unlock(&sd_mtx); 611 spinlock_unlock(&sd_mtx);
611 612
612 return ret; 613 return ret;
613} 614}