diff options
author | Rob Purchase <shotofadds@rockbox.org> | 2008-12-01 21:02:00 +0000 |
---|---|---|
committer | Rob Purchase <shotofadds@rockbox.org> | 2008-12-01 21:02:00 +0000 |
commit | e70096ea5cafedce01291a40a949bec94fa8b90b (patch) | |
tree | 3fcad1871ce34dd0d502ed1415f2da1bbabf7492 /firmware/target | |
parent | 8da8159f74f4c9373b25197e6155c753a00e1f4b (diff) | |
download | rockbox-e70096ea5cafedce01291a40a949bec94fa8b90b.tar.gz rockbox-e70096ea5cafedce01291a40a949bec94fa8b90b.zip |
Telechips I2C: Scale the busy-wait delay based on FREQ, reducing wasted CPU cycles when unboosted (eg. when reading from the D2 touchscreen).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19293 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/i2c-telechips.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/firmware/target/arm/i2c-telechips.c b/firmware/target/arm/i2c-telechips.c index b84fbe4438..fb341c7905 100644 --- a/firmware/target/arm/i2c-telechips.c +++ b/firmware/target/arm/i2c-telechips.c | |||
@@ -24,8 +24,13 @@ | |||
24 | #include "i2c.h" | 24 | #include "i2c.h" |
25 | #include "i2c-target.h" | 25 | #include "i2c-target.h" |
26 | 26 | ||
27 | /* arbitrary delay loop */ | 27 | /* Delay loop based on CPU frequency (FREQ>>22 is 7..45 for 32MHz..192MHz) */ |
28 | #define DELAY do { int _x; for(_x=0;_x<40;_x++);} while (0) | 28 | static inline void delay_loop(void) |
29 | { | ||
30 | unsigned long x; | ||
31 | for (x = (unsigned)(FREQ>>22); x; x--); | ||
32 | } | ||
33 | #define DELAY delay_loop() | ||
29 | 34 | ||
30 | static struct mutex i2c_mtx; | 35 | static struct mutex i2c_mtx; |
31 | 36 | ||