Hi Heiner, On Sat, Mar 04, 2023 at 10:36:34PM +0100, Heiner Kallweit wrote: > Here we don't have to write SMBHSTCNT in each iteration of the loop. > Bit SMBHSTCNT_START is internally cleared immediately, therefore > we don't have to touch the value of SMBHSTCNT until the last byte. > > Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> > --- > drivers/i2c/busses/i2c-i801.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c > index 7641bd0ac..e1350a8cc 100644 > --- a/drivers/i2c/busses/i2c-i801.c > +++ b/drivers/i2c/busses/i2c-i801.c > @@ -677,11 +677,11 @@ static int i801_block_transaction_byte_by_byte(struct i801_priv *priv, > for (i = 1; i <= len; i++) { > if (i == len && read_write == I2C_SMBUS_READ) > smbcmd |= SMBHSTCNT_LAST_BYTE; > - outb_p(smbcmd, SMBHSTCNT(priv)); > > if (i == 1) > - outb_p(inb(SMBHSTCNT(priv)) | SMBHSTCNT_START, > - SMBHSTCNT(priv)); > + outb_p(smbcmd | SMBHSTCNT_START, SMBHSTCNT(priv)); > + else if (smbcmd & SMBHSTCNT_LAST_BYTE) > + outb_p(smbcmd, SMBHSTCNT(priv)); Looks reasonable to me... Jean, any opinion here? Andi