[i2c] Generalise i2c bit-bashing support to addressless devices
authorMichael Brown <mcb30@etherboot.org>
Wed, 1 Oct 2008 18:15:07 +0000 (19:15 +0100)
committerMichael Brown <mcb30@etherboot.org>
Wed, 1 Oct 2008 18:24:56 +0000 (19:24 +0100)
commit9dccbc0af2337e3e81716b338c0f55449c0be360
treec28206f93faef967455025e036c8efa6fe1623bb
parent91802c6e85fb5153d397ca019a95632841999c1f
[i2c] Generalise i2c bit-bashing support to addressless devices

Some devices (e.g. the Atmel AT24C11) have no concept of a device
address; they respond to every device address and use this value as
the word address.  Some other devices use part of the device address
field to extend the word address field.

Generalise the i2c bit-bashing support to handle this by defining the
device address length and word address length as properties of an i2c
device.  The word address is assumed to overflow into the device
address field if the address used exceeds the width of the word
address field.

Also add a bus reset mechanism.  i2c chips don't usually have a reset
line, so rebooting the host will not clear any bizarre state that the
chip may be in.  We reset the bus by clocking SCL until we see SDA
high, at which point we know we can generate a start condition and
have it seen by all devices.  We then generate a stop condition to
leave the bus in a known state prior to use.

Finally, add some extra debugging messages to i2c_bit.c.
src/drivers/bitbash/i2c_bit.c
src/drivers/net/etherfabric.c
src/include/gpxe/i2c.h