[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