]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
i2c-i801: Don't use the block buffer for I2C block writes
authorJean Delvare <khali@linux-fr.org>
Sat, 13 Mar 2010 19:56:53 +0000 (20:56 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 1 Apr 2010 23:01:12 +0000 (16:01 -0700)
commit c074c39d62306efa5ba7c69c1a1531bc7333d252 upstream.

Experience has shown that the block buffer can only be used for SMBus
(not I2C) block transactions, even though the datasheet doesn't
mention this limitation.

Reported-by: Felix Rubinstein <felixru@gmail.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: Oleg Ryjkov <oryjkov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/i2c/busses/i2c-i801.c

index df6ab553f975c98ed078475454d35a58d272aef7..5574be2ae6f933c1b3538d3a1091d52fd6ac31e3 100644 (file)
@@ -415,9 +415,11 @@ static int i801_block_transaction(union i2c_smbus_data *data, char read_write,
                data->block[0] = 32;    /* max for SMBus block reads */
        }
 
+       /* Experience has shown that the block buffer can only be used for
+          SMBus (not I2C) block transactions, even though the datasheet
+          doesn't mention this limitation. */
        if ((i801_features & FEATURE_BLOCK_BUFFER)
-        && !(command == I2C_SMBUS_I2C_BLOCK_DATA
-             && read_write == I2C_SMBUS_READ)
+        && command != I2C_SMBUS_I2C_BLOCK_DATA
         && i801_set_block_buffer_mode() == 0)
                result = i801_block_transaction_by_block(data, read_write,
                                                         hwpec);