Commit f386474e12a560e005ec7899e78f51f6bdc3cf41
Committed by
Dmitry Torokhov
1 parent
a7ef82aee9
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
Input: elantech - report the middle button of the touchpad
In the past, no elantech was known with 3 touchpad mouse buttons. Fujitsu H730 is the first known elantech with a middle button. This commit enables this middle button. For backwards compatibility, the Fujitsu is detected via DMI, and only for this one 3 buttons will be announced. Reported-by: Stefan Valouch <stefan@valouch.com> Signed-off-by: Ulrik De Bie <ulrik.debie-os@e2big.org> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Showing 1 changed file with 19 additions and 0 deletions Side-by-side Diff
drivers/input/mouse/elantech.c
... | ... | @@ -563,6 +563,7 @@ |
563 | 563 | } else { |
564 | 564 | input_report_key(dev, BTN_LEFT, packet[0] & 0x01); |
565 | 565 | input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); |
566 | + input_report_key(dev, BTN_MIDDLE, packet[0] & 0x04); | |
566 | 567 | } |
567 | 568 | |
568 | 569 | input_mt_report_pointer_emulation(dev, true); |
... | ... | @@ -1132,6 +1133,22 @@ |
1132 | 1133 | } |
1133 | 1134 | |
1134 | 1135 | /* |
1136 | + * Some hw_version 4 models do have a middle button | |
1137 | + */ | |
1138 | +static const struct dmi_system_id elantech_dmi_has_middle_button[] = { | |
1139 | +#if defined(CONFIG_DMI) && defined(CONFIG_X86) | |
1140 | + { | |
1141 | + /* Fujitsu H730 has a middle button */ | |
1142 | + .matches = { | |
1143 | + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), | |
1144 | + DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H730"), | |
1145 | + }, | |
1146 | + }, | |
1147 | +#endif | |
1148 | + { } | |
1149 | +}; | |
1150 | + | |
1151 | +/* | |
1135 | 1152 | * Set the appropriate event bits for the input subsystem |
1136 | 1153 | */ |
1137 | 1154 | static int elantech_set_input_params(struct psmouse *psmouse) |
... | ... | @@ -1150,6 +1167,8 @@ |
1150 | 1167 | __clear_bit(EV_REL, dev->evbit); |
1151 | 1168 | |
1152 | 1169 | __set_bit(BTN_LEFT, dev->keybit); |
1170 | + if (dmi_check_system(elantech_dmi_has_middle_button)) | |
1171 | + __set_bit(BTN_MIDDLE, dev->keybit); | |
1153 | 1172 | __set_bit(BTN_RIGHT, dev->keybit); |
1154 | 1173 | |
1155 | 1174 | __set_bit(BTN_TOUCH, dev->keybit); |