On Wed, May 06, 2009 at 09:44:34AM +0100, Mark Brown wrote:
All high-level i2c functions to write block data, namely i2c_smbus_write_block_data() and i2c_smbus_write_i2c_block_data(), put the length of the data being sent inside the block sent on the wire. I couldn't believe it myself, but even my hardware I2C analyzer clearly shows that. The API seems to assume that communication to I2C devices always wants data to be sent with a leading command, followed by the number of data bytes attached and then the data itself. Correct me if I'm wrong on that.
That's not the I2C API, that's the SMBus API. SMBus is more restricted than I2C - it essentially defines a protocol on top of I2C. If the device doesn't implement SMBus then you should use the I2C API directly.
Hmm, ok. That makes sense. However, the driver uses the equivalent function to read the whole register set, so I wanted to keep it in sync.
Anyway, the patch I sent for the resume code writes the registeres one by one. There are only eigth of them, so it doesn't really matter.
But thanks for your clarification :)
Daniel