]> git.karo-electronics.de Git - linux-beck.git/commitdiff
HID: uclogic: Add support for UC-Logic TWHA60 v3
authorNikolai Kondrashov <spbnick@gmail.com>
Wed, 14 Sep 2016 18:38:20 +0000 (21:38 +0300)
committerJiri Kosina <jkosina@suse.cz>
Mon, 19 Sep 2016 12:32:24 +0000 (14:32 +0200)
Add support for the third version of UC-Logic TWHA60, which has
three interfaces and responds to initialization.

Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-uclogic.c

index 64abd8d731250f9ceddacc41675a3079feb80b51..1509d7287ff3e60e79c845214e47e901fae650f8 100644 (file)
@@ -938,6 +938,7 @@ static int uclogic_probe(struct hid_device *hdev,
 {
        int rc;
        struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
+       struct usb_device *udev = hid_to_usb_dev(hdev);
        struct uclogic_drvdata *drvdata;
 
        /*
@@ -988,6 +989,28 @@ static int uclogic_probe(struct hid_device *hdev,
                        drvdata->ignore_pen_usage = true;
                }
                break;
+       case USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60:
+               /*
+                * If it is the three-interface version, which is known to
+                * respond to initialization.
+                */
+               if (udev->config->desc.bNumInterfaces == 3) {
+                       /* If it is the pen interface */
+                       if (intf->cur_altsetting->desc.bInterfaceNumber == 0) {
+                               rc = uclogic_tablet_enable(hdev);
+                               if (rc) {
+                                       hid_err(hdev, "tablet enabling failed\n");
+                                       return rc;
+                               }
+                               drvdata->invert_pen_inrange = true;
+
+                               rc = uclogic_button_enable(hdev);
+                               drvdata->has_virtual_pad_interface = !rc;
+                       } else {
+                               drvdata->ignore_pen_usage = true;
+                       }
+               }
+               break;
        }
 
        rc = hid_parse(hdev);