Re: [PATCH] HID: ft260: fix SMBus block read protocol handling
Jiri Kosina <[email protected]> Mon, 3 Aug 2026 19:16:07 +0200 (CEST)
| Newsgroups | org.kernel.vger.linux-i2c,org.kernel.vger.linux-input,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 10 Jun 2026, Raman Varabets wrote: > For I2C_SMBUS_BLOCK_DATA reads, ft260_smbus_xfer() passed > data->block[0] + 1 as the read length. But on a block read the byte > count is supplied by the slave as the first byte of the response; > data->block[0] is not initialized by the caller, so the transfer > length was taken from stale buffer contents, and the count byte the > slave did return was stored without any validation. > > Implement the SMBus 2.0 block read protocol properly: read the count > byte first with a repeated START and no STOP, validate it against > I2C_SMBUS_BLOCK_MAX (resetting the bus and returning -EPROTO on a > bogus count), then read exactly that many data bytes and finish the > transaction with STOP. This keeps the whole sequence within a single > I2C transaction: > > S Addr+Wr A Reg A Sr Addr+Rd A Count A Data... P > > To support issuing the two reads as one transaction, teach > ft260_i2c_read() to honor the caller's flags instead of always > forcing a START and unconditionally appending STOP to the last > chunk: START is only emitted if requested, and STOP is appended to > the final chunk only when the caller asked for it. > > Signed-off-by: Raman Varabets <[email protected]> Applied, thanks. -- Jiri Kosina SUSE Labs