From f1f3a45c046254476b730d21362ec645f1c889fb Mon Sep 17 00:00:00 2001 From: kugel Date: Sun, 2 May 2010 02:30:06 +0000 Subject: [PATCH] Fix wrong udelay logic that made it be way off. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25770 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c | 4 ++-- firmware/target/arm/as3525/system-target.h | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c index 4129d34ec..d23fb432d 100644 --- a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c +++ b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c @@ -233,12 +233,12 @@ int button_read_device(void) CCU_IO &= ~(1<<12); GPIOB_PIN(0) = 1<<0; - udelay(10); + udelay(4); gpiod6 = GPIOD_PIN(6); GPIOB_PIN(0) = 0; - udelay(5); + udelay(2); if (GPIOC_PIN(1) & 1<<1) btn |= BUTTON_DOWN; diff --git a/firmware/target/arm/as3525/system-target.h b/firmware/target/arm/as3525/system-target.h index ee46e7c7a..38e2028f6 100644 --- a/firmware/target/arm/as3525/system-target.h +++ b/firmware/target/arm/as3525/system-target.h @@ -66,15 +66,15 @@ static inline void udelay(unsigned usecs) int end; /** - * we're limited to 1.5us multiplies due to the odd timer frequency (1.5MHz), + * we're limited to 0.666us multiplies due to the odd timer frequency (1.5MHz), * to avoid calculating which is safer (need to round up for small values) * and saves spending time in the divider we have a lut for - * small us values, it should be roughly us*2/3 + * small us values, it should be roughly us*3/2 **/ static const unsigned char udelay_lut[] = { - 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, - 7, 8, 8, 9, 10, 10, 11, 12, 12, 13, + 0, 2, 3, 5, 6, 8, 9, 11, 12, 14, + 15, 17, 18, 20, 21, 23, 24, 26, 27, 29, }; @@ -82,7 +82,7 @@ static inline void udelay(unsigned usecs) /* we don't want to handle multiple overflows, so limit the numbers * (if you want to wait more than a tick just poll current_tick, or * call sleep()) */ - if (UNLIKELY(usecs >= TIMER_PERIOD)) + if (UNLIKELY(usecs >= (TIMER_PERIOD*2/3))) panicf("%s(): %d too high!", __func__, usecs); if (UNLIKELY(usecs <= 0)) return; @@ -92,7 +92,7 @@ static inline void udelay(unsigned usecs) } else { /* to usecs */ - int delay = usecs * 2 / 3; /* us * 1.5 = us*timer_period */ + int delay = usecs * 3 / 2; /* us * 0.666 = us*timer_period */ end = now - delay; } -- 2.11.4.GIT