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
