]> git.baikalelectronics.ru Git - kernel.git/commit
i2c-algo-bit: Read block data bugfix
authorDavid Brownell <david-b@pacbell.net>
Sun, 9 Sep 2007 20:29:14 +0000 (22:29 +0200)
committerJean Delvare <khali@hyperion.delvare>
Sun, 9 Sep 2007 20:29:14 +0000 (22:29 +0200)
commit4b83e6fb7525362421b25f45cbccb11b99dd34ce
tree4fb51849830e0bc3ef4e6534117fdb216a29406d
parent4b10e9e0b421ffd4658abc5feb104bf00bda9e8c
i2c-algo-bit: Read block data bugfix

This fixes a bug in the way i2c-algo-bit handles I2C_M_RECV_LEN,
used to implement i2c_smbus_read_block_data().  Previously, in the
absence of PEC (rarely used!) it would NAK the "length" byte:

S addr Rd [A] [length] NA

That prevents the subsequent data bytes from being read:

S addr Rd [A] [length] { A [data] }* NA

The primary fix just reorders two code blocks, so the length used
in the "should I NAK now?" check incorporates the data which it
just read from the slave device.

However, that move also highlighted other fault handling glitches.
This fixes those by abstracting the RX path ack/nak logic, so it
can be used in more than one location.  Also, a few CodingStyle
issues were also resolved.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
drivers/i2c/algos/i2c-algo-bit.c