Message ID | 1313194205-5098-1-git-send-email-pinglinux@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Aug 12, 2011 at 7:10 PM, Ping Cheng <pinglinux@gmail.com> wrote:
> Retrieve it from the HID descriptor when it is available
Were you going to use touch_max for something (since its not referenced)?
Related to Bamboo's and pressure, does this happen to report 4 touches
on the newer Bamboo's that do not support pressure? I haven't looked
at my 0xd1 Bamboo but I suspect either contact count is not returned
or returns 2 (or maybe 3) contacts.
I'm hoping there is a way to detect differences in touch packet format
besides resorting to a quirks list.
Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Aug 15, 2011 at 09:12:16PM -0700, Ping Cheng wrote: > On Sun, Aug 14, 2011 at 8:37 PM, Chris Bagwell <chris@cnpbagwell.com> wrote: > > > On Fri, Aug 12, 2011 at 7:10 PM, Ping Cheng <pinglinux@gmail.com> wrote: > > > Retrieve it from the HID descriptor when it is available > > > > Were you going to use touch_max for something (since its not referenced)? > > > > This set of patches is only a clean-up and preparation for the coming set of > patches. The value will be used then. OK, then I think it is best to submit this one with that set. I applied the other 3 patches, but not the 'pressure' one.
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index 958b4eb..6fb292d 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c @@ -28,6 +28,7 @@ #define HID_USAGE_Y_TILT 0x3e #define HID_USAGE_FINGER 0x22 #define HID_USAGE_STYLUS 0x20 +#define HID_MT_CONTACTMAX 0x55 #define HID_COLLECTION 0xc0 enum { @@ -151,11 +152,16 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi int result = 0; int i = 0, usage = WCM_UNDEFINED, finger = 0, pen = 0; unsigned char *report; + unsigned char *rep_data; report = kzalloc(hid_desc->wDescriptorLength, GFP_KERNEL); if (!report) return -ENOMEM; + rep_data = kmalloc(2, GFP_KERNEL); + if (!rep_data) + return -ENOMEM; + /* retrive report descriptors */ do { result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), @@ -284,6 +290,19 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi pen = 1; i++; break; + + case HID_MT_CONTACTMAX: + do { + rep_data[0] = 12; + result = usb_get_report(intf, + WAC_HID_FEATURE_REPORT, rep_data[0], + rep_data, 2); + } while ((result < 0) && (limit++ < WAC_MSG_RETRIES)); + + if ((result >= 0) && (rep_data[1] > 2)) + features->touch_max = rep_data[1]; + i++; + break; } break; @@ -297,6 +316,7 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi out: result = 0; kfree(report); + kfree(rep_data); return result; } @@ -505,7 +525,8 @@ 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 */ + features->touch_max = 0; error = wacom_retrieve_hid_descriptor(intf, features); if (error) goto fail3; diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h index 53eb71b..e19e435 100644 --- a/drivers/input/tablet/wacom_wac.h +++ b/drivers/input/tablet/wacom_wac.h @@ -86,6 +86,7 @@ struct wacom_features { int pressure_fuzz; int distance_fuzz; unsigned quirks; + unsigned touch_max; }; struct wacom_shared {
Retrieve it from the HID descriptor when it is available Signed-off-by: Ping Cheng <pingc@wacom.com> --- drivers/input/tablet/wacom_sys.c | 23 ++++++++++++++++++++++- drivers/input/tablet/wacom_wac.h | 1 + 2 files changed, 23 insertions(+), 1 deletions(-)