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.
This commit is contained in:
parent
2a72e9ed18
commit
26a33504a5
11
README
11
README
@ -1509,6 +1509,17 @@ The following options need to be configured:
|
||||
custom i2c_init_board() routine in boards/xxx/board.c
|
||||
is run early in the boot sequence.
|
||||
|
||||
CONFIG_SYS_I2C_BOARD_LATE_INIT
|
||||
|
||||
An alternative to CONFIG_SYS_I2C_INIT_BOARD. If this option is
|
||||
defined a custom i2c_board_late_init() routine in
|
||||
boards/xxx/board.c is run AFTER the operations in i2c_init()
|
||||
is completed. This callpoint can be used to unreset i2c bus
|
||||
using CPU i2c controller register accesses for CPUs whose i2c
|
||||
controller provide such a method. It is called at the end of
|
||||
i2c_init() to allow i2c_init operations to setup the i2c bus
|
||||
controller on the CPU (e.g. setting bus speed & slave address).
|
||||
|
||||
CONFIG_I2CFAST (PPC405GP|PPC405EP only)
|
||||
|
||||
This option enables configuration of bi_iic_fast[] flags
|
||||
|
@ -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
|
||||
|
@ -111,6 +111,9 @@ void i2c_init(int speed, int slaveaddr);
|
||||
#ifdef CONFIG_SYS_I2C_INIT_BOARD
|
||||
void i2c_init_board(void);
|
||||
#endif
|
||||
#ifdef CONFIG_SYS_I2C_BOARD_LATE_INIT
|
||||
void i2c_board_late_init(void);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_I2C_MUX)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user