From mboxrd@z Thu Jan 1 00:00:00 1970 From: austinwc@codeaurora.org (Christ, Austin) Date: Mon, 23 May 2016 11:45:51 -0600 Subject: [PATCH v2 2/2] i2c: qup: support SMBus block read In-Reply-To: <000501d1b271$fef3bc90$fcdb35b0$@codeaurora.org> References: <1463006736-24652-1-git-send-email-nkaje@codeaurora.org> <1463006736-24652-2-git-send-email-nkaje@codeaurora.org> <000d01d1b0d3$d70e1f30$852a5d90$@codeaurora.org> <757c18e2-562a-9f43-0fb6-ab3e7ac3af88@codeaurora.org> <000501d1b271$fef3bc90$fcdb35b0$@codeaurora.org> Message-ID: <4ca84ab1-f558-25b1-2fa5-dbcf9e8cc2e7@codeaurora.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 5/20/2016 2:31 AM, Sricharan wrote: > Hi, > > >>>> @@ -1128,6 +1173,22 @@ static int qup_i2c_read_one_v2(struct >>>> qup_i2c_dev *qup, struct i2c_msg *msg) >>>> goto err; >>>> >>>> qup->blk.pos++; >>>> + >>>> + /* Handle SMBus block read length */ >>>> + if (qup_i2c_check_msg_len(msg) && (msg->len == 1)) { >>>> + if (msg->buf[0] > I2C_SMBUS_BLOCK_MAX) { >>>> + ret = -EPROTO; >>>> + goto err; >>>> + } >>>> + msg->len += msg->buf[0]; >>>> + qup->pos = 0; >>>> + qup_i2c_set_read_mode_v2(qup, msg->len); >>>> + qup_i2c_issue_xfer_v2(qup, msg); >>>> + ret = qup_i2c_wait_for_complete(qup, msg); >>>> + if (ret) >>>> + goto err; >>> Is the issue_xfer_v2 needed inside this here ? >> No, qup_i2c_issue_xfer_v2 is needed so that we read rest of the data >> that is indicated by the length we read earlier. > So qup_i2c_issue_xfer_v2 writes the tags and there is one already in the loop above this > check. So if you just do qup_i2c_set_read_mode_v2 and qup_i2c_set_blk_data inside this > check, will not be enough ? > > Regards, > Sricharan > In testing, removing the call to qup_i2c_issue_xfer_v2() within the conditional statement for SMBus length causes failures. That transfer request is needed to read that block of data. Thanks, Austin