mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 06:31:31 +00:00
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
3 changed files with 27 additions and 3 deletions
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
|
custom i2c_init_board() routine in boards/xxx/board.c
|
||||||
is run early in the boot sequence.
|
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)
|
CONFIG_I2CFAST (PPC405GP|PPC405EP only)
|
||||||
|
|
||||||
This option enables configuration of bi_iic_fast[] flags
|
This option enables configuration of bi_iic_fast[] flags
|
||||||
|
|
|
@ -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 */
|
/* Call board specific i2c bus reset routine before accessing the
|
||||||
/* environment, which might be in a chip on that bus. For details */
|
* environment, which might be in a chip on that bus. For details
|
||||||
/* about this problem see doc/I2C_Edge_Conditions. */
|
* 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
|
||||||
|
|
|
@ -111,6 +111,9 @@ void i2c_init(int speed, int slaveaddr);
|
||||||
#ifdef CONFIG_SYS_I2C_INIT_BOARD
|
#ifdef CONFIG_SYS_I2C_INIT_BOARD
|
||||||
void i2c_init_board(void);
|
void i2c_init_board(void);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_SYS_I2C_BOARD_LATE_INIT
|
||||||
|
void i2c_board_late_init(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_I2C_MUX)
|
#if defined(CONFIG_I2C_MUX)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue