Blackfin: TWI/I2C: fix pure writes
authorPeter Meerwald <pmeerw@pmeerw.net>
Mon, 29 Jun 2009 19:48:33 +0000 (15:48 -0400)
committerHeiko Schocher <hs@denx.de>
Tue, 30 Jun 2009 06:27:45 +0000 (08:27 +0200)
If doing a pure write with register address and data (not a read/write
combo transfer), we don't set the initial transfer length properly which
ends up causing only the register address to be transferred.

While we're here, fix the i2c_write() parameter description of the buffer.

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
drivers/i2c/bfin-twi_i2c.c

index cfe55cd..e790634 100644 (file)
@@ -164,7 +164,7 @@ static int i2c_transfer(uchar chip, uint addr, int alen, uchar *buffer, int len,
 
        /* prime the pump */
        if (msg.alen) {
-               len = msg.alen;
+               len = (msg.flags & I2C_M_COMBO) ? msg.alen : msg.alen + len;
                debugi("first byte=0x%02x", *msg.abuf);
                bfin_write_TWI_XMT_DATA8(*(msg.abuf++));
                --msg.alen;
@@ -275,7 +275,7 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
  *     @chip: i2c chip addr
  *     @addr: memory (register) address in the chip
  *     @alen: byte size of address
- *     @buffer: buffer to store data read from chip
+ *     @buffer: buffer holding data to write to chip
  *     @len: how many bytes to write
  *     @return: 0 on success, non-0 on failure
  */