ppc4xx: Fix problem with I2C bus >= 1 initialization
authorStefan Roese <sr@denx.de>
Mon, 29 Mar 2010 13:30:46 +0000 (15:30 +0200)
committerStefan Roese <sr@denx.de>
Tue, 30 Mar 2010 11:05:05 +0000 (13:05 +0200)
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>
cpu/ppc4xx/i2c.c

index 7976e75e0ba2d01e533c2947e20af9ee9ef54054..9b86187a798082957fed8a928f86ec1b3bfb6d22 100644 (file)
@@ -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();