73 lines
2.9 KiB
Diff
73 lines
2.9 KiB
Diff
From: Chris Bagwell <chris@cnpbagwell.com>
|
|
Date: Wed, 26 Oct 2011 22:26:59 -0700
|
|
Subject: Input: wacom - add some comments to wacom_parse_hid
|
|
|
|
commit 428f85884bb4a88737e5fa76535ede06a33fe162 upstream.
|
|
|
|
Signed-off-by: Chris Bagwell <chris@cnpbagwell.com>
|
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
|
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
|
|
---
|
|
drivers/input/tablet/wacom_sys.c | 37 ++++++++++++++++++++++++++++++++++++-
|
|
1 file changed, 36 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
|
|
index f3dfb827437a..e648f9ac4d82 100644
|
|
--- a/drivers/input/tablet/wacom_sys.c
|
|
+++ b/drivers/input/tablet/wacom_sys.c
|
|
@@ -165,7 +165,37 @@ static void wacom_close(struct input_dev *dev)
|
|
usb_autopm_put_interface(wacom->intf);
|
|
}
|
|
|
|
-static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc,
|
|
+/*
|
|
+ * Interface Descriptor of wacom devices can be incomplete and
|
|
+ * inconsistent so wacom_features table is used to store stylus
|
|
+ * device's packet lengths, various maximum values, and tablet
|
|
+ * resolution based on product ID's.
|
|
+ *
|
|
+ * For devices that contain 2 interfaces, wacom_features table is
|
|
+ * inaccurate for the touch interface. Since the Interface Descriptor
|
|
+ * for touch interfaces has pretty complete data, this function exists
|
|
+ * to query tablet for this missing information instead of hard coding in
|
|
+ * an additional table.
|
|
+ *
|
|
+ * A typical Interface Descriptor for a stylus will contain a
|
|
+ * boot mouse application collection that is not of interest and this
|
|
+ * function will ignore it.
|
|
+ *
|
|
+ * It also contains a digitizer application collection that also is not
|
|
+ * of interest since any information it contains would be duplicate
|
|
+ * of what is in wacom_features. Usually it defines a report of an array
|
|
+ * of bytes that could be used as max length of the stylus packet returned.
|
|
+ * If it happens to define a Digitizer-Stylus Physical Collection then
|
|
+ * the X and Y logical values contain valid data but it is ignored.
|
|
+ *
|
|
+ * A typical Interface Descriptor for a touch interface will contain a
|
|
+ * Digitizer-Finger Physical Collection which will define both logical
|
|
+ * X/Y maximum as well as the physical size of tablet. Since touch
|
|
+ * interfaces haven't supported pressure or distance, this is enough
|
|
+ * information to override invalid values in the wacom_features table.
|
|
+ */
|
|
+static int wacom_parse_hid(struct usb_interface *intf,
|
|
+ struct hid_descriptor *hid_desc,
|
|
struct wacom_features *features)
|
|
{
|
|
struct usb_device *dev = interface_to_usbdev(intf);
|
|
@@ -299,6 +329,11 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
|
|
i++;
|
|
break;
|
|
|
|
+ /*
|
|
+ * Requiring Stylus Usage will ignore boot mouse
|
|
+ * X/Y values and some cases of invalid Digitizer X/Y
|
|
+ * values commonly reported.
|
|
+ */
|
|
case HID_USAGE_STYLUS:
|
|
pen = 1;
|
|
i++;
|
|
--
|
|
1.7.10.1
|
|
|