|
@@ -221,9 +221,10 @@ i2c_init(int speed, int slaveadd)
|
|
unsigned int temp;
|
|
unsigned int temp;
|
|
|
|
|
|
#ifdef CONFIG_SYS_I2C_INIT_BOARD
|
|
#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. */
|
|
|
|
|
|
+ /* 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();
|
|
i2c_init_board();
|
|
#endif
|
|
#endif
|
|
dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_I2C_OFFSET);
|
|
dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_I2C_OFFSET);
|
|
@@ -249,6 +250,15 @@ i2c_init(int speed, int slaveadd)
|
|
writeb(0x0, &dev->sr); /* clear status register */
|
|
writeb(0x0, &dev->sr); /* clear status register */
|
|
writeb(I2C_CR_MEN, &dev->cr); /* start I2C controller */
|
|
writeb(I2C_CR_MEN, &dev->cr); /* start I2C controller */
|
|
#endif
|
|
#endif
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_SYS_I2C_BOARD_LATE_INIT
|
|
|
|
+ /* Call board specific i2c bus reset routine AFTER the bus has been
|
|
|
|
+ * initialized. Use either this callpoint or i2c_init_board;
|
|
|
|
+ * which is called before i2c_init operations.
|
|
|
|
+ * For details about this problem see doc/I2C_Edge_Conditions.
|
|
|
|
+ */
|
|
|
|
+ i2c_board_late_init();
|
|
|
|
+#endif
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|