Commit f386474e12a560e005ec7899e78f51f6bdc3cf41

Authored by Ulrik De Bie
Committed by Dmitry Torokhov
1 parent a7ef82aee9

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);