
After looking deeper I've found a difference in register values when performing drivers/i2c/ppc4xx_i2c.c->i2c_transfer function.
v1.7.02 code yields:
/* Transfer is in progress * we have to wait for upto 5 bytes of data * 1 byte chip address+r/w bit then bc bytes * of data. * udelay(10) is 1 bit time at 100khz * Doubled for slop. 20 is too small. */ i = 2*5*8; do { /* Get status */ status = in_8((u8 *)IIC_STS); printf("gd_ do status->i = %d, status = %d\n", i, status); udelay(20); i--; } while ((status & IIC_STS_PT) && !(status & IIC_STS_ERR) && (i > 0));
gd_ do status->i = 80, status = 40
v2013.01.01 Yields: i = 2 * 5 * 8; do { /* Get status */ status = in_8(&i2c->sts); printf("gd_ do status->i = %d, status = %d\n", i, status); udelay(10); i--; } while ((status & IIC_STS_PT) && !(status & IIC_STS_ERR) && (i > 0));
gd_ do status->i = 80, status = 40
v1.7.02 - include/4xx_i2c.h:#define IIC_STS (I2C_REGISTERS_BASE_ADDRESS+IICSTS) v2013.01.01 - struct ppc4xx_i2c *i2c = (struct ppc4xx_i2c *)I2C_BASE_ADDR;
Newb question, but I should be able to add an offset to correct this issue right?
Thanks
-- View this message in context: http://u-boot.10912.n7.nabble.com/PPC4XX-Custom-Board-Failing-to-read-I2C-tp... Sent from the U-Boot mailing list archive at Nabble.com.