diff options
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.c | 12 |
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 | |||
84 | static void i2c_delay(void) | 85 | static 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 | |||
96 | struct i2c_interface s3c2440_i2c = { | 102 | struct i2c_interface s3c2440_i2c = { |
97 | 0x34, /* Address */ | 103 | 0x34, /* Address */ |
98 | 104 | ||