summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8702/i2c-s5l8702.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s5l8702/i2c-s5l8702.c')
-rw-r--r--firmware/target/arm/s5l8702/i2c-s5l8702.c28
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
186static void wait_rdy(int bus)
187{
188 while (IICUNK10(bus));
189}
190
191void 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