Pass the transfer length to i2c_smbus_read_block_data() in
cyapa_smbus_read_block(), accounting for the final chunk size.

Signed-off-by: Dmitry Torokhov <[email protected]>
---
 drivers/input/mouse/cyapa_gen3.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/input/mouse/cyapa_gen3.c b/drivers/input/mouse/cyapa_gen3.c
index fc3fb954523b..0cdebf2c34e7 100644
--- a/drivers/input/mouse/cyapa_gen3.c
+++ b/drivers/input/mouse/cyapa_gen3.c
@@ -256,7 +256,7 @@ ssize_t cyapa_smbus_read_block(struct cyapa *cyapa, u8 cmd, 
size_t len,
        if (SMBUS_GROUP_BLOCK_CMD_MASK & cmd) {
                /* read specific block registers command. */
                smbus_cmd = SMBUS_ENCODE_RW(cmd, SMBUS_READ);
-               ret = i2c_smbus_read_block_data(client, smbus_cmd, values);
+               ret = i2c_smbus_read_block_data(client, smbus_cmd, len, values);
                goto out;
        }
 
@@ -265,7 +265,11 @@ ssize_t cyapa_smbus_read_block(struct cyapa *cyapa, u8 
cmd, size_t len,
                smbus_cmd = SMBUS_ENCODE_IDX(cmd, index);
                smbus_cmd = SMBUS_ENCODE_RW(smbus_cmd, SMBUS_READ);
                buf = values + I2C_SMBUS_BLOCK_MAX * index;
-               ret = i2c_smbus_read_block_data(client, smbus_cmd, buf);
+               ret = i2c_smbus_read_block_data(client, smbus_cmd,
+                                               min_t(size_t,
+                                                     len - I2C_SMBUS_BLOCK_MAX 
* index,
+                                                     I2C_SMBUS_BLOCK_MAX),
+                                               buf);
                if (ret < 0)
                        goto out;
        }

-- 
2.56.0.257.gf7497c7d27-goog



_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to