On Fri, Sep 22, 2023 at 09:40:25PM +0200, Heiner Kallweit wrote: > Add a sentinel length value that is used to check whether we should > read and use the length value provided by the slave device. > This simplifies the currently used checks. > > Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> > --- > drivers/i2c/busses/i2c-i801.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c > index a9d3dfd9e..30a2f9268 100644 > --- a/drivers/i2c/busses/i2c-i801.c > +++ b/drivers/i2c/busses/i2c-i801.c > @@ -204,6 +204,8 @@ > #define STATUS_FLAGS (SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INTR | \ > STATUS_ERROR_FLAGS) > > +#define SMBUS_LEN_SENTINEL (I2C_SMBUS_BLOCK_MAX + 1) > + > /* Older devices have their ID defined in <linux/pci_ids.h> */ > #define PCI_DEVICE_ID_INTEL_COMETLAKE_SMBUS 0x02a3 > #define PCI_DEVICE_ID_INTEL_COMETLAKE_H_SMBUS 0x06a3 > @@ -541,8 +543,7 @@ static void i801_isr_byte_done(struct i801_priv *priv) > { > if (priv->is_read) { > /* For SMBus block reads, length is received with first byte */ > - if (((priv->cmd & 0x1c) == I801_BLOCK_DATA) && > - (priv->count == 0)) { > + if (priv->len == SMBUS_LEN_SENTINEL) { > priv->len = inb_p(SMBHSTDAT0(priv)); > if (priv->len < 1 || priv->len > I2C_SMBUS_BLOCK_MAX) { > dev_err(&priv->pci_dev->dev, > @@ -697,8 +698,7 @@ static int i801_block_transaction_byte_by_byte(struct i801_priv *priv, > if (status) > return status; > > - if (i == 1 && read_write == I2C_SMBUS_READ > - && command != I2C_SMBUS_I2C_BLOCK_DATA) { > + if (len == SMBUS_LEN_SENTINEL) { > len = inb_p(SMBHSTDAT0(priv)); > if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) { > dev_err(&priv->pci_dev->dev, > @@ -805,7 +805,7 @@ static int i801_smbus_block_transaction(struct i801_priv *priv, union i2c_smbus_ > u8 addr, u8 hstcmd, char read_write, int command) > { > if (read_write == I2C_SMBUS_READ && command == I2C_SMBUS_BLOCK_DATA) > - data->block[0] = I2C_SMBUS_BLOCK_MAX; > + data->block[0] = SMBUS_LEN_SENTINEL; This patch is good, but a few comments for each change to tell where the sentinel will be used and where the sentinel was set would help to better understand the use of the sentinel. Thanks, Andi > else if (data->block[0] < 1 || data->block[0] > I2C_SMBUS_BLOCK_MAX) > return -EPROTO; > > -- > 2.42.0 > >