MPC8245's I2C support on linux kernel

xiaogeng_jin at xiaogeng_jin at
Wed Apr 21 05:29:52 EST 2004


Is anyone aware of the compatibility of I2C controller in MPC8245 and MPC8240? Now DENX supports i2c-algo-8240.c in its distribution. Is this algorithm working for MPC8245's I2C controller? It should be.

However I have some problem using this module on my custom MPC8245 board. There is no problem for write. Data seems to be written into SEEPROM. The following message is captured by the i2c monitor.
Msg     3 [Start]#A0[W][A]00[A]00[A]01[A]02[A]03[A]04[A][Stop]

But for read, only the first byte is returned when I try to read multiple bytes. The following messages show that I try to read 4 bytes at the beginning of SEEPROM.
Msg    14 [Start]#A0[W][A]00[A]00[A][Stop]
Msg    15 [Start]#A0[R][A]01[N]FF[N]FF[N]FF[N]FF[N][Stop]

I suspect that the i2c controller doesn't generate the ack bit, which is supposed to do so. Why does the controller generate ACK automatically for write operations but not for read operations?

Then I go back to check the code of i2c-algo-8240.c and find m8240_readbytes() has confused me.
	//m8240_iic_write(&i2c->i2ccr, M8240_I2CCR_TXAK, M8240_I2CCR_TXAK);
Why is TXAK set only after all multiple bytes are read? I think the ACK should be generated after each byte is read if the ACK is generated by the driver instead of the controller itself. Should TXAK be set during the initialization?


** Sent via the linuxppc-embedded mail list. See

More information about the Linuxppc-embedded mailing list