Skip to contentSkip to conversation

input: wacom - retrieve maximum number of touch points

PATCH Applied Ping Cheng 2 participants 2 messages Apr 26, 2012 – Apr 30, 2012

Subsystems (2)
lore
Share & tools
lore

Ping Cheng

author
#0 lore raw

PATCH 1/2 input: wacom - retrieve maximum number of touch points

Quoted 1 line

From the HID usage table when it is supported.

---
 drivers/input/tablet/wacom_sys.c |   29 ++++++++++++++++++-
 drivers/input/tablet/wacom_wac.c |   59 +++++++++++++++++++++++---------------
 drivers/input/tablet/wacom_wac.h |    1 +
 3 files changed, 65 insertions(+), 24 deletions(-)
drivers/input/tablet/wacom_sys.c +28 -1
index 98e9dd6..347026b 100644
@@ -28,6 +28,7 @@
 #define HID_USAGE_Y_TILT		0x3e
 #define HID_USAGE_FINGER		0x22
 #define HID_USAGE_STYLUS		0x20
+#define HID_USAGE_CONTACTMAX		0x55
 #define HID_COLLECTION			0xa1
 #define HID_COLLECTION_LOGICAL		0x02
 #define HID_COLLECTION_END		0xc0
@@ -201,6 +202,27 @@ static int wacom_parse_logical_collection(unsigned char *report,
 	return length;
 }
 
+static void wacom_retrieve_report_data(struct usb_interface *intf,
+				       struct wacom_features *features)
+{
+	int result = 0;
+	unsigned char *rep_data;
+
+	rep_data = kmalloc(2, GFP_KERNEL);
+
+	if (rep_data) {
+
+		rep_data[0] = 12;
+		result = wacom_get_report(intf, WAC_HID_FEATURE_REPORT,
+			 rep_data[0], &rep_data, 2, WAC_MSG_RETRIES);
+
+		if ((result >= 0) && (rep_data[1] > 2))
+			features->touch_max = rep_data[1];
+
+		kfree(rep_data);
+	}
+}
+
 /*
  * Interface Descriptor of wacom devices can be incomplete and
  * inconsistent so wacom_features table is used to store stylus
@@ -377,6 +399,11 @@ static int wacom_parse_hid(struct usb_interface *intf,
 				pen = 1;
 				i++;
 				break;
+
+			case HID_USAGE_CONTACTMAX:
+				wacom_retrieve_report_data(intf, features);
+				i++;
+				break;
 			}
 			break;
 
@@ -1085,7 +1112,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
 
 	endpoint = &intf->cur_altsetting->endpoint[0].desc;
 
-	/* Retrieve the physical and logical size for OEM devices */
+	/* Retrieve the physical and logical size for touch devices */
 	error = wacom_retrieve_hid_descriptor(intf, features);
 	if (error)
 		goto fail3;
drivers/input/tablet/wacom_wac.c +36 -23

142 lines not on this page · raw message

drivers/input/tablet/wacom_wac.h +1 -0
index 17ba186..321269c 100644
@@ -99,6 +99,7 @@ struct wacom_features {
 	int pressure_fuzz;
 	int distance_fuzz;
 	unsigned quirks;
+	unsigned touch_max;
 };
 
 struct wacom_shared {
Signature · 1 line
1.7.5.4