summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-05-02 02:30:06 +0000
committerThomas Martitz <kugel@rockbox.org>2010-05-02 02:30:06 +0000
commit3adac47c6160f62e990e5704151ea73d44791f71 (patch)
treebe487345b4d9cc0a1237257bc0f6387fefb86235 /firmware
parenta607a6c3c2d0a63448c252b57845bafd694a1fe7 (diff)
downloadrockbox-3adac47c6160f62e990e5704151ea73d44791f71.tar.gz
rockbox-3adac47c6160f62e990e5704151ea73d44791f71.zip
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
Diffstat (limited to 'firmware')
-rw-r--r--firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c4
-rw-r--r--firmware/target/arm/as3525/system-target.h12
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 4129d34ec7..d23fb432d6 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 ee46e7c7a5..38e2028f65 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;
}