This patch adds the option for a boardspecific
I2C deblocking mechanism for the soft i2c driver.
Signed-off-by: Heiko Schocher <hs@denx.de>
/*-----------------------------------------------------------------------
* Local functions
*/
/*-----------------------------------------------------------------------
* Local functions
*/
+#if !defined(CFG_I2C_INIT_BOARD)
static void send_reset (void);
static void send_reset (void);
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);
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
/*-----------------------------------------------------------------------
* 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
send_stop();
I2C_TRISTATE;
}
send_stop();
I2C_TRISTATE;
}
/*-----------------------------------------------------------------------
* START: High -> Low on SDA while SCL is High
/*-----------------------------------------------------------------------
* START: High -> Low on SDA while SCL is High
*/
void i2c_init (int speed, int slaveaddr)
{
*/
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
/*
* WARNING: Do NOT save speed in a static variable: if the
* I2C routines are called before RAM is initialized (to read
* system will crash.
*/
send_reset ();
* system will crash.
*/
send_reset ();
}
/*-----------------------------------------------------------------------
}
/*-----------------------------------------------------------------------