Input: trackpoint - force 3 buttons if 0 button is reported

Lenovo introduced trackpoint compatible sticks with minimum PS/2 commands.
They supposed to reply with 0x02, 0x03, or 0x04 in response to the
"Read Extended ID" command, so we would know not to try certain extended
commands. Unfortunately even some trackpoints reporting the original IBM
version (0x01 firmware 0x0e) now respond with incorrect data to the "Get
Extended Buttons" command:

thinkpad_acpi: ThinkPad BIOS R0DET87W (1.87 ), EC unknown
thinkpad_acpi: Lenovo ThinkPad E470, model 20H1004SGE

psmouse serio2: trackpoint: IBM TrackPoint firmware: 0x0e, buttons: 0/0

Since there are no trackpoints without buttons, let's assume the trackpoint
has 3 buttons when we get 0 response to the extended buttons query.

Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=196253
Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by Aaron Ma and committed by Dmitry Torokhov f5d07b9e e5c9c6a8

Changed files
+3
drivers
input
mouse
+3
drivers/input/mouse/trackpoint.c
··· 383 383 if (trackpoint_read(ps2dev, TP_EXT_BTN, &button_info)) { 384 384 psmouse_warn(psmouse, "failed to get extended button data, assuming 3 buttons\n"); 385 385 button_info = 0x33; 386 + } else if (!button_info) { 387 + psmouse_warn(psmouse, "got 0 in extended button data, assuming 3 buttons\n"); 388 + button_info = 0x33; 386 389 } 387 390 388 391 psmouse->private = kzalloc(sizeof(struct trackpoint_data), GFP_KERNEL);