| From c074c39d62306efa5ba7c69c1a1531bc7333d252 Mon Sep 17 00:00:00 2001 |
| From: Jean Delvare <khali@linux-fr.org> |
| Date: Sat, 13 Mar 2010 20:56:53 +0100 |
| Subject: i2c-i801: Don't use the block buffer for I2C block writes |
| |
| From: Jean Delvare <khali@linux-fr.org> |
| |
| 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 | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/i2c/busses/i2c-i801.c |
| +++ b/drivers/i2c/busses/i2c-i801.c |
| @@ -413,9 +413,11 @@ static int i801_block_transaction(union |
| 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); |