summaryrefslogtreecommitdiff
path: root/firmware/target/arm/gigabeat/meg-fx/i2c-meg-fx.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/gigabeat/meg-fx/i2c-meg-fx.c')
-rw-r--r--firmware/target/arm/gigabeat/meg-fx/i2c-meg-fx.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/firmware/target/arm/gigabeat/meg-fx/i2c-meg-fx.c b/firmware/target/arm/gigabeat/meg-fx/i2c-meg-fx.c
index 7667c03e38..fd5d9577a3 100644
--- a/firmware/target/arm/gigabeat/meg-fx/i2c-meg-fx.c
+++ b/firmware/target/arm/gigabeat/meg-fx/i2c-meg-fx.c
@@ -81,18 +81,24 @@ static void i2c_scl_hi(void)
81} 81}
82 82
83 83
84
84static void i2c_delay(void) 85static void i2c_delay(void)
85{ 86{
86 volatile int _x; 87 unsigned _x;
87 88
88 /* The i2c can clock at 500KHz: 2uS period -> 1uS half period */ 89 /* The i2c can clock at 500KHz: 2uS period -> 1uS half period */
89 /* At 300Mhz - if loop takes 10 cycles @ 3.3nS each -> 1uS / 33nS -> 30 */ 90 /* about 30 cycles overhead + X * 7 */
90 for (_x=0; _x<30; _x++) 91 /* 300MHz: 1000nS @3.36nS/cyc = 297cyc: X = 38*/
92 /* 100MHz: 1000nS @10nS/cyc = 100cyc : X = 10 */
93 for (_x = get_cpu_boost_counter() ? 38 : 10; _x; _x--)
91 { 94 {
92 /* burn CPU cycles */ 95 /* burn CPU cycles */
96 /* gcc makes it an inc loop - check with objdump for asm timing */
93 } 97 }
94} 98}
95 99
100
101
96struct i2c_interface s3c2440_i2c = { 102struct i2c_interface s3c2440_i2c = {
97 0x34, /* Address */ 103 0x34, /* Address */
98 104