rtc: ds1307: fix ds1307_native_smbus_read_block_data function
authorNicolas Boullis <nboullis@debian.org>
Sat, 2 Apr 2016 22:10:37 +0000 (00:10 +0200)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Fri, 20 May 2016 10:33:51 +0000 (12:33 +0200)
The i2c_smbus_read_i2c_block_data function returns 0 on success, not the
number of bytes written.

Hence, when there are 32 bytes or less to send, the
ds1307_native_smbus_write_block_data function returns 0 on success,
while it returns the number of bytes when there are more than 32.

The ds1307_write_block_data always returns the number of bytes on
success.

Signed-off-by: Nicolas Boullis <nboullis@debian.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
drivers/rtc/rtc-ds1307.c

index ecb7dbae9be9daa0ee96ede34a446a78e8e7debd..eed5c06bf6244117c0f1559dd5ed94fcd2efe809 100644 (file)
@@ -275,9 +275,13 @@ static s32 ds1307_native_smbus_write_block_data(const struct i2c_client *client,
 {
        u8 suboffset = 0;
 
-       if (length <= I2C_SMBUS_BLOCK_MAX)
-               return i2c_smbus_write_i2c_block_data(client,
+       if (length <= I2C_SMBUS_BLOCK_MAX) {
+               s32 retval = i2c_smbus_write_i2c_block_data(client,
                                        command, length, values);
+               if (retval < 0)
+                       return retval;
+               return length;
+       }
 
        while (suboffset < length) {
                s32 retval = i2c_smbus_write_i2c_block_data(client,