Re: [PATCH v4 1/2] i2c: tegra: Fix PEC support for SMBUS block read
From: Dmitry Osipenko
Date: Thu Apr 13 2023 - 05:40:26 EST
On 3/24/23 14:59, Akhil R wrote:
...
> @@ -279,6 +280,7 @@ struct tegra_i2c_dev {
> size_t msg_buf_remaining;
> int msg_err;
> u8 *msg_buf;
> + __u16 msg_len;
__u16 is for UAPI headers, please use unsigned int. Also keep variables
sorted by string length.
> struct completion dma_complete;
> struct dma_chan *tx_dma_chan;
> @@ -1169,7 +1171,7 @@ static void tegra_i2c_push_packet_header(struct tegra_i2c_dev *i2c_dev,
> else
> i2c_writel(i2c_dev, packet_header, I2C_TX_FIFO);
>
> - packet_header = msg->len - 1;
> + packet_header = i2c_dev->msg_len - 1;
>
> if (i2c_dev->dma_mode && !i2c_dev->msg_read)
> *dma_buf++ = packet_header;
> @@ -1242,20 +1244,32 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
> return err;
>
> i2c_dev->msg_buf = msg->buf;
> + i2c_dev->msg_len = msg->len;
>
> - /* The condition true implies smbus block read and len is already read */
> - if (msg->flags & I2C_M_RECV_LEN && end_state != MSG_END_CONTINUE)
> - i2c_dev->msg_buf = msg->buf + 1;
> -
> - i2c_dev->msg_buf_remaining = msg->len;
> i2c_dev->msg_err = I2C_ERR_NONE;
> i2c_dev->msg_read = !!(msg->flags & I2C_M_RD);
> reinit_completion(&i2c_dev->msg_complete);
>
> + /* *
Please correct the comment style
> + * For SMBUS block read command, read only 1 byte in the first transfer.
> + * Adjust that 1 byte for the next transfer in the msg buffer and msg
> + * length.
> + */
--
Best regards,
Dmitry