HID: lenovo: Detect quirk-free fw on cptkbd and stop applying workaround
authorMikhail Khvainitski <me@khvoinitsky.org>
Sat, 23 Sep 2023 22:58:30 +0000 (01:58 +0300)
committerJiri Kosina <jkosina@suse.cz>
Wed, 4 Oct 2023 19:01:39 +0000 (21:01 +0200)
commit46a0a2c96f0f47628190f122c2e3d879e590bcbe
tree50017e34dfd9db99c04f177cff4e07d5008d1a9d
parent29aa98d0fe013e2ab62aae4266231b7fb05d47a2
HID: lenovo: Detect quirk-free fw on cptkbd and stop applying workaround

Built-in firmware of cptkbd handles scrolling by itself (when middle
button is pressed) but with issues: it does not support horizontal and
hi-res scrolling and upon middle button release it sends middle button
click even if there was a scrolling event. Commit 3cb5ff0220e3 ("HID:
lenovo: Hide middle-button press until release") workarounds last
issue but it's impossible to workaround scrolling-related issues
without firmware modification.

Likely, Dennis Schneider has reverse engineered the firmware and
provided an instruction on how to patch it [1]. However,
aforementioned workaround prevents userspace (libinput) from knowing
exact moment when middle button has been pressed down and performing
"On-Button scrolling". This commit detects correctly-behaving patched
firmware if cursor movement events has been received during middle
button being pressed and stops applying workaround for this device.

Link: https://hohlerde.org/rauch/en/elektronik/projekte/tpkbd-fix/
Signed-off-by: Mikhail Khvainitski <me@khvoinitsky.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-lenovo.c