diff options
| author | Richard Retanubun <RichardRetanubun@RuggedCom.com> | 2010-04-12 15:08:17 -0400 | 
|---|---|---|
| committer | Heiko Schocher <hs@denx.de> | 2010-04-19 07:46:35 +0200 | 
| commit | 26a33504a55e4882520f2e9da96ba6c22badb353 (patch) | |
| tree | 42000dcd08814c5b5dbbe9438297e22506daa0e4 /drivers/i2c/fsl_i2c.c | |
| parent | 2a72e9ed18d2164eb7fe569119342eb631b568da (diff) | |
| download | olio-uboot-2014.01-26a33504a55e4882520f2e9da96ba6c22badb353.tar.xz olio-uboot-2014.01-26a33504a55e4882520f2e9da96ba6c22badb353.zip | |
fsl_i2c: Added a callpoint for i2c_board_late_init
This patch adds a callpoint in i2c_init that allows board specific
i2c board initialization (typically for i2c bus reset) that is called
after i2c_init operations, allowing the i2c_board_late_init function
to use the pre-configured i2c bus speed and slave address.
Diffstat (limited to 'drivers/i2c/fsl_i2c.c')
| -rw-r--r-- | drivers/i2c/fsl_i2c.c | 16 | 
1 files changed, 13 insertions, 3 deletions
| diff --git a/drivers/i2c/fsl_i2c.c b/drivers/i2c/fsl_i2c.c index 2241990f9..cb13deeea 100644 --- a/drivers/i2c/fsl_i2c.c +++ b/drivers/i2c/fsl_i2c.c @@ -221,9 +221,10 @@ i2c_init(int speed, int slaveadd)  	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.                  */ +	/* 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); @@ -249,6 +250,15 @@ 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_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 |