| From 1d0d6df02750b4a6f466768cbfbf860e24f4c8d4 Mon Sep 17 00:00:00 2001 |
| From: Ping Cheng <pinglinux@gmail.com> |
| Date: Mon, 25 Nov 2013 18:43:45 -0800 |
| Subject: Input: wacom - make sure touch_max is set for touch devices |
| |
| From: Ping Cheng <pinglinux@gmail.com> |
| |
| commit 1d0d6df02750b4a6f466768cbfbf860e24f4c8d4 upstream. |
| |
| Old single touch Tablet PCs do not have touch_max set at |
| wacom_features. Since touch device at lease supports one |
| finger, assign touch_max to 1 when touch usage is defined |
| in its HID Descriptor and touch_max is not pre-defined. |
| |
| Tested-by: Jason Gerecke <killertofu@gmail.com> |
| Signed-off-by: Ping Cheng <pingc@wacom.com> |
| Reviewed-by: Chris Bagwell <chris@cnpbagwell.com> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Cc: Josh Boyer <jwboyer@fedoraproject.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/input/tablet/wacom_sys.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/input/tablet/wacom_sys.c |
| +++ b/drivers/input/tablet/wacom_sys.c |
| @@ -304,7 +304,7 @@ static int wacom_parse_hid(struct usb_in |
| struct usb_device *dev = interface_to_usbdev(intf); |
| char limit = 0; |
| /* result has to be defined as int for some devices */ |
| - int result = 0; |
| + int result = 0, touch_max = 0; |
| int i = 0, usage = WCM_UNDEFINED, finger = 0, pen = 0; |
| unsigned char *report; |
| |
| @@ -351,7 +351,8 @@ static int wacom_parse_hid(struct usb_in |
| if (usage == WCM_DESKTOP) { |
| if (finger) { |
| features->device_type = BTN_TOOL_FINGER; |
| - |
| + /* touch device at least supports one touch point */ |
| + touch_max = 1; |
| switch (features->type) { |
| case TABLETPC2FG: |
| features->pktlen = WACOM_PKGLEN_TPC2FG; |
| @@ -504,6 +505,8 @@ static int wacom_parse_hid(struct usb_in |
| } |
| |
| out: |
| + if (!features->touch_max && touch_max) |
| + features->touch_max = touch_max; |
| result = 0; |
| kfree(report); |
| return result; |