diff options
author | Éric Piel <E.A.B.Piel@tudelft.nl> | 2010-08-06 02:51:49 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-08-06 02:53:22 -0400 |
commit | 22462d9fcf5b29184716aca486058943b2d6995f (patch) | |
tree | 3ecb9d165826eef15fa200dea4397eac46a97204 /drivers/input | |
parent | 7f29f17b57255b6395046805a98bc663ded63fb8 (diff) |
Input: elantech - report position also with 3 fingers
The 6-byte protocol supports reporting the position when three fingers
are pressed, exactly like when one finger is pressed. Report this.
In addition, it is also distinguishes between 3 and 4 fingers pressed.
Signed-off-by: Éric Piel <eric.piel@tremplin-utc.net>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/mouse/elantech.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c index bd5b91da169..48311204ba5 100644 --- a/drivers/input/mouse/elantech.c +++ b/drivers/input/mouse/elantech.c | |||
@@ -257,6 +257,14 @@ static void elantech_report_absolute_v2(struct psmouse *psmouse) | |||
257 | input_report_key(dev, BTN_TOUCH, fingers != 0); | 257 | input_report_key(dev, BTN_TOUCH, fingers != 0); |
258 | 258 | ||
259 | switch (fingers) { | 259 | switch (fingers) { |
260 | case 3: | ||
261 | /* | ||
262 | * Same as one finger, except report of more than 3 fingers: | ||
263 | * byte 3: n4 . w1 w0 . . . . | ||
264 | */ | ||
265 | if (packet[3] & 0x80) | ||
266 | fingers = 4; | ||
267 | /* pass through... */ | ||
260 | case 1: | 268 | case 1: |
261 | /* | 269 | /* |
262 | * byte 1: . . . . . x10 x9 x8 | 270 | * byte 1: . . . . . x10 x9 x8 |
@@ -309,6 +317,7 @@ static void elantech_report_absolute_v2(struct psmouse *psmouse) | |||
309 | input_report_key(dev, BTN_TOOL_FINGER, fingers == 1); | 317 | input_report_key(dev, BTN_TOOL_FINGER, fingers == 1); |
310 | input_report_key(dev, BTN_TOOL_DOUBLETAP, fingers == 2); | 318 | input_report_key(dev, BTN_TOOL_DOUBLETAP, fingers == 2); |
311 | input_report_key(dev, BTN_TOOL_TRIPLETAP, fingers == 3); | 319 | input_report_key(dev, BTN_TOOL_TRIPLETAP, fingers == 3); |
320 | input_report_key(dev, BTN_TOOL_QUADTAP, fingers == 4); | ||
312 | input_report_key(dev, BTN_LEFT, packet[0] & 0x01); | 321 | input_report_key(dev, BTN_LEFT, packet[0] & 0x01); |
313 | input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); | 322 | input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); |
314 | 323 | ||
@@ -466,6 +475,7 @@ static void elantech_set_input_params(struct psmouse *psmouse) | |||
466 | break; | 475 | break; |
467 | 476 | ||
468 | case 2: | 477 | case 2: |
478 | __set_bit(BTN_TOOL_QUADTAP, dev->keybit); | ||
469 | input_set_abs_params(dev, ABS_X, ETP_XMIN_V2, ETP_XMAX_V2, 0, 0); | 479 | input_set_abs_params(dev, ABS_X, ETP_XMIN_V2, ETP_XMAX_V2, 0, 0); |
470 | input_set_abs_params(dev, ABS_Y, ETP_YMIN_V2, ETP_YMAX_V2, 0, 0); | 480 | input_set_abs_params(dev, ABS_Y, ETP_YMIN_V2, ETP_YMAX_V2, 0, 0); |
471 | input_set_abs_params(dev, ABS_HAT0X, ETP_2FT_XMIN, ETP_2FT_XMAX, 0, 0); | 481 | input_set_abs_params(dev, ABS_HAT0X, ETP_2FT_XMIN, ETP_2FT_XMAX, 0, 0); |