diff options
Diffstat (limited to 'firmware/target/arm/s5l8702/i2c-s5l8702.c')
-rw-r--r-- | firmware/target/arm/s5l8702/i2c-s5l8702.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/firmware/target/arm/s5l8702/i2c-s5l8702.c b/firmware/target/arm/s5l8702/i2c-s5l8702.c index 619768410a..13787d7357 100644 --- a/firmware/target/arm/s5l8702/i2c-s5l8702.c +++ b/firmware/target/arm/s5l8702/i2c-s5l8702.c | |||
@@ -179,3 +179,31 @@ int i2c_read(int bus, unsigned char slave, int address, int len, unsigned char * | |||
179 | mutex_unlock(&i2c_mtx[bus]); | 179 | mutex_unlock(&i2c_mtx[bus]); |
180 | return ret; | 180 | return ret; |
181 | } | 181 | } |
182 | |||
183 | #ifdef BOOTLOADER | ||
184 | #include "clocking-s5l8702.h" | ||
185 | |||
186 | static void wait_rdy(int bus) | ||
187 | { | ||
188 | while (IICUNK10(bus)); | ||
189 | } | ||
190 | |||
191 | void i2c_preinit(int bus) | ||
192 | { | ||
193 | clockgate_enable(I2CCLKGATE(bus), true); | ||
194 | wait_rdy(bus); | ||
195 | IICADD(bus) = 0x40; /* own slave address */ | ||
196 | wait_rdy(bus); | ||
197 | IICUNK14(bus) = 0; | ||
198 | wait_rdy(bus); | ||
199 | IICUNK18(bus) = 0; | ||
200 | wait_rdy(bus); | ||
201 | IICSTAT(bus) = 0x80; /* master Rx mode, Tx/Rx off */ | ||
202 | wait_rdy(bus); | ||
203 | IICCON(bus) = 0; | ||
204 | wait_rdy(bus); | ||
205 | IICSTAT(bus) = 0; /* slave Rx mode, Tx/Rx off */ | ||
206 | wait_rdy(bus); | ||
207 | clockgate_enable(I2CCLKGATE(bus), false); | ||
208 | } | ||
209 | #endif | ||