diff options
author | Stefan Roese <sr@denx.de> | 2010-03-29 15:30:46 +0200 |
---|---|---|
committer | Stefan Roese <sr@denx.de> | 2010-03-30 13:05:05 +0200 |
commit | 1a332da61df9c38b567359af114daeaaaefaead8 (patch) | |
tree | e1e00a5055162beab62f14b4a2b7e3016eeef333 | |
parent | 060f28532b09dd3d2c78423bdd809ac768a27629 (diff) | |
download | u-boot-1a332da61df9c38b567359af114daeaaaefaead8.zip u-boot-1a332da61df9c38b567359af114daeaaaefaead8.tar.gz u-boot-1a332da61df9c38b567359af114daeaaaefaead8.tar.bz2 |
ppc4xx: Fix problem with I2C bus >= 1 initialization
This patch fixes a problem introduced with patch eb5eb2b0
[ppc4xx: Cleanup PPC4xx I2C infrastructure]. We need to assign the I2C
base address to the "i2c" pointer inside of the controller loop.
Otherwise controller 0 is initialized multiple times instead of
initializing each I2C controller sequentially.
Tested on Katmai.
Signed-off-by: Stefan Roese <sr@denx.de>
Acked-by: Heiko Schocher <hs@denx.de>
-rw-r--r-- | cpu/ppc4xx/i2c.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/cpu/ppc4xx/i2c.c b/cpu/ppc4xx/i2c.c index 7976e75..9b86187 100644 --- a/cpu/ppc4xx/i2c.c +++ b/cpu/ppc4xx/i2c.c @@ -93,7 +93,7 @@ static void _i2c_bus_reset(void) void i2c_init(int speed, int slaveaddr) { - struct ppc4xx_i2c *i2c = (struct ppc4xx_i2c *)I2C_BASE_ADDR; + struct ppc4xx_i2c *i2c; int val, divisor; int bus; @@ -109,6 +109,9 @@ void i2c_init(int speed, int slaveaddr) for (bus = 0; bus < CONFIG_SYS_MAX_I2C_BUS; bus++) { I2C_SET_BUS(bus); + /* Set i2c pointer after calling I2C_SET_BUS() */ + i2c = (struct ppc4xx_i2c *)I2C_BASE_ADDR; + /* Handle possible failed I2C state */ /* FIXME: put this into i2c_init_board()? */ _i2c_bus_reset(); |