N Nikolai Kostrigin #
Message details and related content
Hi, List!
I'd like to draw attention of Elantech and Lenovo engineers to an issue
of a non-working trackpoint.
Earlier this month I've discovered that Lenovo Thinkpad L13 trackpoint
doesn't work on Linux while touchpad does.
Both use elan_i2c + i2c_i801 drivers. The issue is confirmed for 5.4 and
5.10 kernels.
I had a preliminary discussion with Benjamin Tissoires and according to
our agreement I repost it for wider audience.
Blacklisting the device was decided to be a bad idea.
But actually I managed to get touchpad totally operational via SMBus
using a following hack:
providing a parameter to i2c_i801 driver:
modprobe i2c_i801 disable_features=0x2 (i.e. disable the block buffer).
If any additional information is needed I'm ready to provide it.
Some technical details on the issue we've managed to figure out by now
are here-in-after:
19.02.2021 11:30, Benjamin Tissoires пишет:Hi Nikolai, On Thu, Feb 18, 2021 at 6:05 PM Nikolai Kostrigin [off-list ref] wrote:quoted
Hi, Benjamin! Sorry for bothering you directly. I have a question concerning the work on the issue we were discussing on linux-input mailing list. https://patchwork.kernel.org/project/linux-input/patch/20210208075205.3784059-1-nickel@altlinux.org/
[...]
quoted
With elantech-smbus protocol I was getting persistent messages in dmesg: elan_i2c [...] 0000:00:1f.4 failed to read report data: -71 I managed to track -71 (-EPROTO) error code to drivers/i2c/busses/i2c-i801.c Actually I managed to get Touchpad totally operational via SMBus using a following hack: providing a parameter to i2c_i801 driver: modprobe i2c_i801 disable_features=0x2 (i.e. disable the block buffer).ooh...quoted
This makes code operating in other way and recover from illegal SMBus block read size (giving warning messages in dmesg though). [ 1270.105103] i801_smbus 0000:00:1f.4: Illegal SMBus block read size from i801_isr_byte_done 93 [ 1270.119337] i801_smbus 0000:00:1f.4: Illegal SMBus block read size from i801_isr_byte_done 93 [ 1270.133108] i801_smbus 0000:00:1f.4: Illegal SMBus block read size from i801_isr_byte_done 93 <- theese are from trackpoint [ 1270.167344] i801_smbus 0000:00:1f.4: Illegal SMBus block read size from i801_isr_byte_done 93 [ 1399.869023] i801_smbus 0000:00:1f.4: SMBus block read size is 32 [ 1399.882266] i801_smbus 0000:00:1f.4: SMBus block read size is 32 [ 1399.896619] i801_smbus 0000:00:1f.4: SMBus block read size is 32 [ 1399.909850] i801_smbus 0000:00:1f.4: SMBus block read size is 32 <- these are from touchpad [ 1399.924117] i801_smbus 0000:00:1f.4: SMBus block read size is 32 We end up in this piece of code that has a built-in workaround and makes Trackpoint work with SMBus NB: pay attention to /* FIXME: Recover */ priv->len = I2C_SMBUS_BLOCK_MAX; All code snippets are from drivers/i2c/busses/i2c-i801.c here-in-after (with some debug messages of mine).
[...]
quoted
Please help me to decide what way to choose while developing a workaround. Should I correct trackpoint features list to not mess with 32-byte buffer, or should I force it not to use SMBus at all and use only I2C (if this at all possible).I think 2 types of people could help us there: - the elan engineers to give us the 'how this trackpoint is supposed to behave'. We can involve them in the public thread on linux-input - the i2c folks on how we can add a special quirk for these trackpoints.
[...]
Cheers, Benjaminquoted
-- Best regards, Nikolai Kostrigin ALT Linux Team
-- Best regards, Nikolai Kostrigin