Message ID | 20220805074346.4123650-1-conor.dooley@microchip.com |
---|---|
State | Accepted |
Commit | dde61c48303afae6d5db50fc2c9f7199413945e5 |
Headers | show |
Series | i2c: microchip-core: fix erroneous late ack send | expand |
On Fri, Aug 05, 2022 at 08:43:46AM +0100, Conor Dooley wrote: > A late ack is currently being sent at the end of a transfer due to > incorrect logic in mchp_corei2c_empty_rx(). Currently the Assert Ack > bit is being written to the controller's control reg after the last > byte has been received, causing it to sent another byte with the ack. > Instead, the AA flag should be written to to the contol register when > the penultimate byte is read so it is sent out for the last byte. > > Reported-by: Andreas Buerkler <andreas.buerkler@enclustra.com> > Fixes: 64a6f1c4987e ("i2c: add support for microchip fpga i2c controllers") > Tested-by: Lewis Hanly <lewis.hanly@microchip.com> > Signed-off-by: Conor Dooley <conor.dooley@microchip.com> Fixed these checkpatch warnings: WARNING: 'contol' may be misspelled - perhaps 'control'? WARNING: Possible repeated word: 'to' and applied to for-current, thanks!
On 11/08/2022 13:28, Wolfram Sang wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > On Fri, Aug 05, 2022 at 08:43:46AM +0100, Conor Dooley wrote: >> A late ack is currently being sent at the end of a transfer due to >> incorrect logic in mchp_corei2c_empty_rx(). Currently the Assert Ack >> bit is being written to the controller's control reg after the last >> byte has been received, causing it to sent another byte with the ack. >> Instead, the AA flag should be written to to the contol register when >> the penultimate byte is read so it is sent out for the last byte. >> >> Reported-by: Andreas Buerkler <andreas.buerkler@enclustra.com> >> Fixes: 64a6f1c4987e ("i2c: add support for microchip fpga i2c controllers") >> Tested-by: Lewis Hanly <lewis.hanly@microchip.com> >> Signed-off-by: Conor Dooley <conor.dooley@microchip.com> > > Fixed these checkpatch warnings: > > WARNING: 'contol' may be misspelled - perhaps 'control'? > WARNING: Possible repeated word: 'to' Heh, that's what I get for editing the commit in send-email.. > > and applied to for-current, thanks! Thanks :) > >
> Heh, that's what I get for editing the commit in send-email..
I know that feeling... :)
diff --git a/drivers/i2c/busses/i2c-microchip-corei2c.c b/drivers/i2c/busses/i2c-microchip-corei2c.c index 6df0f1c33278..4d7e9b25f018 100644 --- a/drivers/i2c/busses/i2c-microchip-corei2c.c +++ b/drivers/i2c/busses/i2c-microchip-corei2c.c @@ -206,7 +206,7 @@ static void mchp_corei2c_empty_rx(struct mchp_corei2c_dev *idev) idev->msg_len--; } - if (idev->msg_len == 0) { + if (idev->msg_len <= 1) { ctrl = readb(idev->base + CORE_I2C_CTRL); ctrl &= ~CTRL_AA; writeb(ctrl, idev->base + CORE_I2C_CTRL);