diff options
author | Jack Halpin <jack.halpin@gmail.com> | 2009-11-24 17:43:53 +0000 |
---|---|---|
committer | Jack Halpin <jack.halpin@gmail.com> | 2009-11-24 17:43:53 +0000 |
commit | cb9dff0a95cc98d83d6e1445c20bdad53614fe00 (patch) | |
tree | 960f0c1cc1225ed47e30f90cc160e6899cb99dd4 /firmware/target/arm/as3525 | |
parent | 1511d75f9d965cba0e1ef9d2fddb94149196638c (diff) | |
download | rockbox-cb9dff0a95cc98d83d6e1445c20bdad53614fe00.tar.gz rockbox-cb9dff0a95cc98d83d6e1445c20bdad53614fe00.zip |
AMS Sansa: Include time spent yielding when figuring timeout in sd_wait_for_state().
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23738 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525')
-rw-r--r-- | firmware/target/arm/as3525/ata_sd_as3525.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/firmware/target/arm/as3525/ata_sd_as3525.c b/firmware/target/arm/as3525/ata_sd_as3525.c index 9f2514d8ba..e71c886021 100644 --- a/firmware/target/arm/as3525/ata_sd_as3525.c +++ b/firmware/target/arm/as3525/ata_sd_as3525.c | |||
@@ -539,13 +539,10 @@ bool sd_present(IF_MD_NONVOID(int drive)) | |||
539 | static int sd_wait_for_state(const int drive, unsigned int state) | 539 | static int sd_wait_for_state(const int drive, unsigned int state) |
540 | { | 540 | { |
541 | unsigned long response = 0; | 541 | unsigned long response = 0; |
542 | unsigned int timeout = 100; /* ticks */ | 542 | unsigned int timeout = current_tick + 100; /* 100 ticks timeout */ |
543 | long t = current_tick; | ||
544 | 543 | ||
545 | while (1) | 544 | while (1) |
546 | { | 545 | { |
547 | long tick; | ||
548 | |||
549 | if(!send_cmd(drive, SD_SEND_STATUS, card_info[drive].rca, | 546 | if(!send_cmd(drive, SD_SEND_STATUS, card_info[drive].rca, |
550 | MCI_RESP|MCI_ARG, &response)) | 547 | MCI_RESP|MCI_ARG, &response)) |
551 | return -1; | 548 | return -1; |
@@ -553,14 +550,13 @@ static int sd_wait_for_state(const int drive, unsigned int state) | |||
553 | if (((response >> 9) & 0xf) == state) | 550 | if (((response >> 9) & 0xf) == state) |
554 | return 0; | 551 | return 0; |
555 | 552 | ||
556 | if(TIME_AFTER(current_tick, t + timeout)) | 553 | if(TIME_AFTER(current_tick, timeout)) |
557 | return -2; | 554 | return -2; |
558 | 555 | ||
559 | if (TIME_AFTER((tick = current_tick), next_yield)) | 556 | if (TIME_AFTER(current_tick, next_yield)) |
560 | { | 557 | { |
561 | yield(); | 558 | yield(); |
562 | timeout += current_tick - tick; | 559 | next_yield = current_tick + MIN_YIELD_PERIOD; |
563 | next_yield = tick + MIN_YIELD_PERIOD; | ||
564 | } | 560 | } |
565 | } | 561 | } |
566 | } | 562 | } |