From 9ff986cdca896cc3ea7f8b2b46806b508f849c34 Mon Sep 17 00:00:00 2001 From: Rafaël Carré Date: Thu, 27 May 2010 23:32:29 +0000 Subject: sd-as3525v2: Include time spent yielding when figuring timeout in sd_wait_for_tran_state() (apply r23738 to as3525v2 code) extend the arbitrary delay to 5 seconds, we never know git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26342 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/as3525/sd-as3525v2.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c index 061be8d1c2..2d796c63cb 100644 --- a/firmware/target/arm/as3525/sd-as3525v2.c +++ b/firmware/target/arm/as3525/sd-as3525v2.c @@ -759,26 +759,22 @@ int sd_init(void) static int sd_wait_for_tran_state(const int drive) { unsigned long response; - unsigned int timeout = 100; /* ticks */ - long t = current_tick; + unsigned int timeout = current_tick + 5*HZ; while (1) { - long tick; - while(!(send_cmd(drive, SD_SEND_STATUS, card_info[drive].rca, MCI_RESP, &response))); if (((response >> 9) & 0xf) == SD_TRAN) return 0; - if(TIME_AFTER(current_tick, t + timeout)) + if(TIME_AFTER(current_tick, timeout)) return -10 * ((response >> 9) & 0xf); - if (TIME_AFTER((tick = current_tick), next_yield)) + if (TIME_AFTER(current_tick, next_yield)) { yield(); - timeout += current_tick - tick; - next_yield = tick + MIN_YIELD_PERIOD; + next_yield = current_tick + MIN_YIELD_PERIOD; } } } -- cgit v1.2.3