soft_i2c: Add CFG_I2C_INIT_BOARD option
PATCH v2 11/16 soft_i2c: Add CFG_I2C_INIT_BOARD option
This patch adds the option for a boardspecific
I2C deblocking mechanism for the soft i2c driver.
Signed-off-by Heiko Schocher <[email protected]>
--- drivers/i2c/soft_i2c.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
drivers/i2c/soft_i2c.c +11 -0
@@ -75,13 +75,16 @@ static unsigned int i2c_bus_num __attribute__ ((section ("data"))) = 0;/*----------------------------------------------------------------------- * Local functions */ +#if !defined(CFG_I2C_INIT_BOARD )static void send_reset (void ); +#endif static void send_start (void );static void send_stop (void );static void send_ack (int );static int write_byte (uchar byte);static uchar read_byte (int ); +#if !defined(CFG_I2C_INIT_BOARD )/*----------------------------------------------------------------------- * Send a reset sequence consisting of 9 clocks with the data signal high * to clock any confused device back into an idle state. Also send a
@@ -109,6 +112,7 @@ static void send_reset(void)send_stop (); I2C_TRISTATE; } +#endif /*----------------------------------------------------------------------- * START: High -> Low on SDA while SCL is High
@@ -280,6 +284,12 @@ static uchar read_byte(int ack)*/ void i2c_init (int speed,int slaveaddr) { +#if defined(CFG_I2C_INIT_BOARD ) +/* call board specific i2c bus reset routine before accessing the */ +/* environment, which might be in a chip on that bus. For details */ +/* about this problem see doc/I2C_Edge_Conditions. */ +i2c_init_board (); +#else /* * WARNING: Do NOT save speed in a static variable: if the * I2C routines are called before RAM is initialized (to read
@@ -287,6 +297,7 @@ void i2c_init (int speed, int slaveaddr)* system will crash. */ send_reset (); +#endif }/*-----------------------------------------------------------------------
Signature · 5 lines
1.5.6.1 -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany