i2c: ismt: use correct length when copy buffer
In block write mode, when encapsulating dma_buffer, first element is 'command', the rest is data buffer, so only copy actual data buffer starting from block[1] with the size indicating by block[0]. Signed-off-by: Fan Du <fan.du@intel.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de> Cc: stable@kernel.org
This commit is contained in:
parent
938916fbb8
commit
979bbf7b7a
1 changed files with 2 additions and 2 deletions
|
@ -497,7 +497,7 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
|
||||||
desc->wr_len_cmd = dma_size;
|
desc->wr_len_cmd = dma_size;
|
||||||
desc->control |= ISMT_DESC_BLK;
|
desc->control |= ISMT_DESC_BLK;
|
||||||
priv->dma_buffer[0] = command;
|
priv->dma_buffer[0] = command;
|
||||||
memcpy(&priv->dma_buffer[1], &data->block[1], dma_size);
|
memcpy(&priv->dma_buffer[1], &data->block[1], dma_size - 1);
|
||||||
} else {
|
} else {
|
||||||
/* Block Read */
|
/* Block Read */
|
||||||
dev_dbg(dev, "I2C_SMBUS_BLOCK_DATA: READ\n");
|
dev_dbg(dev, "I2C_SMBUS_BLOCK_DATA: READ\n");
|
||||||
|
@ -525,7 +525,7 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
|
||||||
desc->wr_len_cmd = dma_size;
|
desc->wr_len_cmd = dma_size;
|
||||||
desc->control |= ISMT_DESC_I2C;
|
desc->control |= ISMT_DESC_I2C;
|
||||||
priv->dma_buffer[0] = command;
|
priv->dma_buffer[0] = command;
|
||||||
memcpy(&priv->dma_buffer[1], &data->block[1], dma_size);
|
memcpy(&priv->dma_buffer[1], &data->block[1], dma_size - 1);
|
||||||
} else {
|
} else {
|
||||||
/* i2c Block Read */
|
/* i2c Block Read */
|
||||||
dev_dbg(dev, "I2C_SMBUS_I2C_BLOCK_DATA: READ\n");
|
dev_dbg(dev, "I2C_SMBUS_I2C_BLOCK_DATA: READ\n");
|
||||||
|
|
Loading…
Add table
Reference in a new issue