summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Purchase <shotofadds@rockbox.org>2008-12-01 21:02:00 +0000
committerRob Purchase <shotofadds@rockbox.org>2008-12-01 21:02:00 +0000
commite70096ea5cafedce01291a40a949bec94fa8b90b (patch)
tree3fcad1871ce34dd0d502ed1415f2da1bbabf7492
parent8da8159f74f4c9373b25197e6155c753a00e1f4b (diff)
downloadrockbox-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
-rw-r--r--firmware/target/arm/i2c-telechips.c9
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) 28static 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
30static struct mutex i2c_mtx; 35static struct mutex i2c_mtx;
31 36