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