Re: [PATCH] HID: mcp2221: cancel last I2C command on read error

From: Jiri Kosina

Date: Fri Feb 27 2026 - 12:54:56 EST


On Fri, 6 Feb 2026, Romain Sioen wrote:

> When an I2C SMBus read operation fails, the MCP2221 internal state machine
> may not reset correctly, causing subsequent transactions to fail.
>
> By adding a short delay and explicitly cancelling the last command,
> we ensure the device is ready for the next operation.
>
> Fix an issue where i2cdetect was not able to detect all devices correctly
> on the bus.
>
> Signed-off-by: Romain Sioen <romain.sioen@xxxxxxxxxxxxx>
> ---
> drivers/hid/hid-mcp2221.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/hid/hid-mcp2221.c b/drivers/hid/hid-mcp2221.c
> index 64dcedbcc0fc9..5eefdcc477b9d 100644
> --- a/drivers/hid/hid-mcp2221.c
> +++ b/drivers/hid/hid-mcp2221.c
> @@ -353,6 +353,8 @@ static int mcp_i2c_smbus_read(struct mcp2221 *mcp,
> usleep_range(90, 100);
> retries++;
> } else {
> + usleep_range(980, 1000);
> + mcp_cancel_last_cmd(mcp);
> return ret;

Applied to hid.git#for-7.0/upstream-fixes, thanks.

--
Jiri Kosina
SUSE Labs