[PATCH] fsl_i2c: Move the call for i2c_init_board to the end of i2c_init
Richard Retanubun
richardretanubun at ruggedcom.com
Mon Apr 12 19:32:09 CEST 2010
This patch moved the call to i2c_init_board to the end of i2c_init.
This allows the board fixup functions to take advantage of the
setups done by i2c_init (i.e. bus speed and slave address).
On other boards, i2c_init_board is called before i2c_init operation
because the method of resetting i2c bus typically uses GPIOs
to bit-bang SCLK. For i2c controllers that is using fsl_i2c this is
unneccessary because there is a i2c register access sequence that
accomplish the same thing, and it is better to do the accesses
after the bus speed and slave address have been configured.
---
Hi Heiko,
Here is the patch for moving i2c_init_board to the end of i2c_init
that we talked about. Thanks
- Richard
drivers/i2c/fsl_i2c.c | 13 +++++++------
1 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/i2c/fsl_i2c.c b/drivers/i2c/fsl_i2c.c
index 2241990..5d992b6 100644
--- a/drivers/i2c/fsl_i2c.c
+++ b/drivers/i2c/fsl_i2c.c
@@ -220,12 +220,6 @@ i2c_init(int speed, int slaveadd)
struct fsl_i2c *dev;
unsigned int temp;
-#ifdef CONFIG_SYS_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();
-#endif
dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_I2C_OFFSET);
writeb(0, &dev->cr); /* stop I2C controller */
@@ -249,6 +243,13 @@ i2c_init(int speed, int slaveadd)
writeb(0x0, &dev->sr); /* clear status register */
writeb(I2C_CR_MEN, &dev->cr); /* start I2C controller */
#endif
+
+#ifdef CONFIG_SYS_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();
+#endif
}
static int
--
1.7.0
More information about the U-Boot
mailing list