On Tue, Oct 04, 2022 at 08:11:37PM +0200, Enrik Berkhan wrote: > Hi Michael, > > On Wed, 2022-09-28 at 17:48 +0300, Michael Zaidman wrote: > > diff --git a/drivers/hid/hid-ft260.c b/drivers/hid/hid-ft260.c > > index bfda5b191a3a..cb8f1782d1f0 100644 > > --- a/drivers/hid/hid-ft260.c > > +++ b/drivers/hid/hid-ft260.c > > @@ -460,49 +460,68 @@ static int ft260_smbus_write(struct ft260_device *dev, u8 addr, u8 cmd, > > static int ft260_i2c_read(struct ft260_device *dev, u8 addr, u8 *data, > > u16 len, u8 flag) > > { > > + u16 rd_len; > > + int timeout, ret; > > struct ft260_i2c_read_request_report rep; > > struct hid_device *hdev = dev->hdev; > > - int timeout; > > - int ret; > > + bool first = true; > > > > - if (len > FT260_RD_DATA_MAX) { > > - hid_err(hdev, "%s: unsupported rd len: %d\n", __func__, len); > > - return -EINVAL; > > - } > > + do { > > + if (first) { > > + if (flag & FT260_FLAG_START_REPEATED) > > I think the test should be > > if ((flag & FT260_FLAG_START_REPEATED) == FT260_FLAG_START_REPEATED) > > Otherwise, flag will never be FT260_FLAG_START ( = 2), as > FT260_FLAG_START_REPEATED (= 3) has tow bits set. It looks as if bit 0 > actually means "repeated", bit 1 is "start" and bit 2 is "stop". > > Cheers, > Enrik > Thanks for reviewing the code! Though the FT260 works fine with the FT260_FLAG_START_REPEATED flag at the beginning of the I2C IO, I will fix it as you suggested. Thanks, Michael