Commit d1ef7a9c authored by Maxim Levitsky's avatar Maxim Levitsky Committed by Andi Shyti
Browse files

i2c: i801: Fix a refactoring that broke a touchpad on Lenovo P1



Commit 857cc04c ("i2c: i801: Add helper i801_get_block_len")
introduced a slight functional change: the status variable is now
overwritten with the length of an SMBUS tranasaction,
even in case of success.

This breaks the touchpad on at least my Lenovo P1:

rmi4_physical rmi4-00: Read PDT entry at 0x00e9 failed, code: -6.
rmi4_physical rmi4-00: RMI initial reset failed! Continuing in spite of this.
rmi4_physical rmi4-00: Read PDT entry at 0x00e9 failed, code: -6.
rmi4_physical rmi4-00: IRQ counting failed with code -6.

Fixes: 857cc04c ("i2c: i801: Add helper i801_get_block_len")
Signed-off-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarAndi Shyti <andi.shyti@kernel.org>
parent 4cece764
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -536,11 +536,12 @@ static int i801_block_transaction_by_block(struct i801_priv *priv,

	if (read_write == I2C_SMBUS_READ ||
	    command == I2C_SMBUS_BLOCK_PROC_CALL) {
		status = i801_get_block_len(priv);
		if (status < 0)
		len = i801_get_block_len(priv);
		if (len < 0) {
			status = len;
			goto out;
		}

		len = status;
		data->block[0] = len;
		inb_p(SMBHSTCNT(priv));	/* reset the data buffer index */
		for (i = 0; i < len; i++)