Following up on the prior patch, we add the code necessary for the 2.6.30 and 2.6.36 trees to properly handle touch sensors from the WACOM_24HDT and WACOM_27QHDT classes (e.g. Cintiq 24HDT, Cintiq 13HDT, DTH2242).
Signed-off-by: Jason Gerecke <jason.gere...@wacom.com> --- 2.6.30/wacom_sys.c | 50 +++++++++++++++++++++++++++++++++++--- 2.6.30/wacom_wac.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 2.6.30/wacom_wac.h | 5 ++++ 2.6.36/wacom_sys.c | 46 +++++++++++++++++++++++++++++++---- 2.6.36/wacom_wac.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++---- 2.6.36/wacom_wac.h | 4 ++++ 6 files changed, 229 insertions(+), 14 deletions(-) diff --git a/2.6.30/wacom_sys.c b/2.6.30/wacom_sys.c index b8c048a..92da296 100644 --- a/2.6.30/wacom_sys.c +++ b/2.6.30/wacom_sys.c @@ -263,17 +263,22 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi features->type == MTTPC || features->type == MTTPC_B || features->type == MTTPC_C || + features->type == WACOM_24HDT || features->type == WACOM_MSPROT || - features->type == DTH1152T) { + features->type == DTH1152T || + features->type == WACOM_27QHDT) { /* need to reset back */ features->pktlen = WACOM_PKGLEN_TPC2FG; if (features->type == MTTPC || features->type == MTTPC_B || features->type == MTTPC_C) features->pktlen = WACOM_PKGLEN_MTTPC; + else if (features->type == WACOM_24HDT) + features->pktlen = WACOM_PKGLEN_MTOUCH; else if (features->type == WACOM_MSPROT) features->pktlen = WACOM_PKGLEN_MSPROT; - else if (features->type == DTH1152T) + else if (features->type == DTH1152T || + features->type == WACOM_27QHDT) features->pktlen = WACOM_PKGLEN_27QHDT; features->device_type = BTN_TOOL_TRIPLETAP; } @@ -290,6 +295,7 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi break; case DTH1152T: + case WACOM_24HDT: features->x_max = get_unaligned_le16(&report[i + 3]); features->x_phy = @@ -298,6 +304,17 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi features->unitExpo = report[i - 3]; break; + case WACOM_27QHDT: + if (!features->x_max) { + features->x_max = + get_unaligned_le16(&report[i - 4]); + features->x_phy = + get_unaligned_le16(&report[i - 7]); + features->unit = report[i - 13]; + features->unitExpo = report[i - 11]; + } + break; + case WACOM_MSPROT: case MTTPC_B: features->x_max = @@ -351,6 +368,7 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi break; case DTH1152T: + case WACOM_24HDT: case MTTPC_C: features->y_max = get_unaligned_le16(&report[i + 3]); @@ -358,6 +376,15 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi get_unaligned_le16(&report[i - 2]); break; + case WACOM_27QHDT: + if (!features->y_max) { + features->y_max = + get_unaligned_le16(&report[i - 2]); + features->y_phy = + get_unaligned_le16(&report[i - 5]); + } + break; + case BAMBOO_PT: features->y_phy = get_unaligned_le16(&report[i + 3]); @@ -466,7 +493,24 @@ static int wacom_query_tablet_data(struct usb_interface *intf, struct wacom_feat error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT, report_id, rep_data, 4, 1); } while ((error < 0 || rep_data[1] != 4) && limit++ < 5); - + } + else if (features->type == WACOM_24HDT) { + do { + rep_data[0] = 18; + rep_data[1] = 2; + report_id = 18; + error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT, + report_id, rep_data, 3, 1); + } while ((error < 0 || rep_data[1] != 2) && limit++ < 5); + } + else if (features->type == WACOM_27QHDT) { + do { + rep_data[0] = 131; + rep_data[1] = 2; + report_id = 131; + error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT, + report_id, rep_data, 3, 1); + } while ((error < 0 || rep_data[1] != 2) && limit++ < 5); } else if (features->type == WACOM_MSPROT || features->type == DTH1152T) { do { diff --git a/2.6.30/wacom_wac.c b/2.6.30/wacom_wac.c index b110a7d..037c740 100644 --- a/2.6.30/wacom_wac.c +++ b/2.6.30/wacom_wac.c @@ -936,19 +936,39 @@ static int wacom_multitouch_generic(struct wacom_wac *wacom) struct wacom_features *features = &wacom->features; struct input_dev *input = wacom->input; unsigned char *data = wacom->data; - int i, current_num_contacts, contacts_to_send; + int current_num_contacts, contacts_to_send, contacts_per_packet; + int bytes_per_packet, bytes_header; + int i; wacom->tool[1] = BTN_TOOL_DOUBLETAP; wacom->id[0] = TOUCH_DEVICE_ID; wacom->tool[2] = BTN_TOOL_TRIPLETAP; switch (features->type) { + case WACOM_24HDT: + current_num_contacts = data[61]; + contacts_per_packet = 4; + bytes_per_packet = WACOM_BYTES_PER_24HDT_PACKET; + bytes_header = 1; + break; + case WACOM_27QHDT: + current_num_contacts = data[63]; + contacts_per_packet = 10; + bytes_per_packet = WACOM_BYTES_PER_QHDTHID_PACKET; + bytes_header = 1; + break; case WACOM_MSPROT: case DTH1152T: current_num_contacts = data[2]; + contacts_per_packet = 5; + bytes_per_packet = WACOM_BYTES_PER_MSPROT_PACKET; + bytes_header = 3; break; case INTUOSP2: current_num_contacts = data[1]; + contacts_per_packet = 5; + bytes_per_packet = WACOM_BYTES_PER_INTUOSP2_PACKET; + bytes_header = 2; break; default: return 0; @@ -957,7 +977,7 @@ static int wacom_multitouch_generic(struct wacom_wac *wacom) if (current_num_contacts) wacom->num_contacts_left = current_num_contacts; - contacts_to_send = min(5, wacom->num_contacts_left); + contacts_to_send = min(contacts_per_packet, wacom->num_contacts_left); for (i = 0; i < contacts_to_send; i++) { int contact_id = -1; @@ -967,6 +987,20 @@ static int wacom_multitouch_generic(struct wacom_wac *wacom) int offset = bytes_per_packet * i + bytes_header; switch (features->type) { + case WACOM_24HDT: + prox = data[offset] & 0x01; + contact_id = data[offset + 1]; + x = get_unaligned_le16(&data[offset + 2]); + y = get_unaligned_le16(&data[offset + 6]); + break; + + case WACOM_27QHDT: + prox = data[offset] & 0x01; + contact_id = data[offset + 1]; + x = get_unaligned_le16(&data[offset + 2]); + y = get_unaligned_le16(&data[offset + 4]); + break; + case WACOM_MSPROT: prox = data[offset] & 0x1; contact_id = get_unaligned_le16(&data[offset + 1]); @@ -1762,6 +1796,8 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) sync = wacom_mspro_irq(wacom_wac); break; + case WACOM_24HDT: + case WACOM_27QHDT: case DTH1152T: case WACOM_MSPROT: sync = wacom_multitouch_generic(wacom_wac); @@ -2141,11 +2177,19 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev, wacom_setup_intuos(wacom_wac); break; + case WACOM_24HDT: + if (features->device_type == BTN_TOOL_FINGER) { + input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, features->x_max, 0, 0); + input_set_abs_params(input_dev, ABS_MT_WIDTH_MINOR, 0, features->y_max, 0, 0); + } + /* fall through */ + case WACOM_MSPROT: case MTTPC: case MTTPC_B: case MTTPC_C: case DTH1152T: + case WACOM_27QHDT: if (features->device_type == BTN_TOOL_TRIPLETAP) { for (i = 0; i < 10; i++) wacom_wac->slots[i] = -1; @@ -2439,6 +2483,9 @@ static const struct wacom_features wacom_features_0xF8 = WACOM_24HD, 16, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0xF6 = + { "Wacom Cintiq 24HD touch", .type = WACOM_24HDT, /* Touch */ + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0xf8, .touch_max = 10 }; static const struct wacom_features wacom_features_0x32A = { "Wacom Cintiq 27QHD", WACOM_PKGLEN_INTUOS, 119740, 67520, 2047, 63, WACOM_27QHD, 0, @@ -2449,6 +2496,9 @@ static const struct wacom_features wacom_features_0x32B = WACOM_27QHD, 0, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0x32C = + { "Wacom Cintiq 27QHD touch", .type = WACOM_27QHDT, + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x32B, .touch_max = 10 }; static const struct wacom_features wacom_features_0x3F = { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023, 63, CINTIQ, 8 }; @@ -2468,6 +2518,9 @@ static const struct wacom_features wacom_features_0x333 = WACOM_13HD, 9, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0x335 = + { "Wacom Cintiq 13HD touch", .type = WACOM_24HDT, /* Touch */ + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x333, .touch_max = 10 }; static const struct wacom_features wacom_features_0xC7 = { "Wacom DTU1931", WACOM_PKGLEN_GRAPHIRE, 37832, 30305, 511, 0, PL }; @@ -2507,6 +2560,9 @@ static const struct wacom_features wacom_features_0x59 = /* Pen */ DTK, 6, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0x5D = /* Touch */ + { "Wacom DTH2242", .type = WACOM_24HDT, + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x59, .touch_max = 10 }; static const struct wacom_features wacom_features_0xCC = { "Wacom Cintiq 21UX2", WACOM_PKGLEN_INTUOS, 86800, 65200, 2047, 63, WACOM_21UX2, 18, @@ -2522,6 +2578,9 @@ static const struct wacom_features wacom_features_0x5B = WACOM_22HD, 18, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0x5E = + { "Wacom Cintiq 22HDT", .type = WACOM_24HDT, + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x5b, .touch_max = 10 }; static const struct wacom_features wacom_features_0x90 = { "Wacom ISDv4 90", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC }; @@ -2716,7 +2775,7 @@ static const struct wacom_features wacom_features_0x35A = DTH1152, .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x368 }; static const struct wacom_features wacom_features_0x368 = { "Wacom DTH-1152 Touch", WACOM_PKGLEN_27QHDT, - .type = DTH1152T, .oVid = USB_VENDOR_ID_WACOM, + .type = DTH1152T, .touch_max = 10, .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x35A }; /* Touch */ #define USB_DEVICE_WACOM(prod) \ @@ -2774,6 +2833,8 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x57) }, { USB_DEVICE_WACOM(0x59) }, { USB_DEVICE_WACOM(0x5B) }, + { USB_DEVICE_DETAILED(0x5D, USB_CLASS_HID, 0, 0) }, + { USB_DEVICE_DETAILED(0x5E, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_WACOM(0x60) }, { USB_DEVICE_WACOM(0x61) }, { USB_DEVICE_WACOM(0x62) }, @@ -2833,6 +2894,7 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0xE6) }, { USB_DEVICE_WACOM(0xF0) }, { USB_DEVICE_WACOM(0xF4) }, + { USB_DEVICE_DETAILED(0xF6, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_WACOM(0xF8) }, { USB_DEVICE_WACOM(0xFA) }, { USB_DEVICE_WACOM(0xFB) }, @@ -2854,8 +2916,10 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_DETAILED(0x323, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_WACOM(0x32A) }, { USB_DEVICE_WACOM(0x32B) }, + { USB_DEVICE_WACOM(0x32C) }, { USB_DEVICE_WACOM(0x32F) }, { USB_DEVICE_WACOM(0x333) }, + { USB_DEVICE_WACOM(0x335) }, { USB_DEVICE_WACOM(0x336) }, { USB_DEVICE_DETAILED(0x33B, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_DETAILED(0x33C, USB_CLASS_HID, 0, 0) }, diff --git a/2.6.30/wacom_wac.h b/2.6.30/wacom_wac.h index c2cb837..d22048b 100755 --- a/2.6.30/wacom_wac.h +++ b/2.6.30/wacom_wac.h @@ -25,6 +25,7 @@ #define WACOM_PKGLEN_TPC1FG_B 10 #define WACOM_PKGLEN_TPC2FG 14 #define WACOM_PKGLEN_BBTOUCH 20 +#define WACOM_PKGLEN_MTOUCH 62 #define WACOM_PKGLEN_BBTOUCH3 64 #define WACOM_PKGLEN_BBPEN 10 #define WACOM_PKGLEN_MTTPC 40 @@ -39,6 +40,8 @@ /* wacom data size per MT contact */ #define WACOM_BYTES_PER_MT_PACKET 11 +#define WACOM_BYTES_PER_24HDT_PACKET 14 +#define WACOM_BYTES_PER_QHDTHID_PACKET 6 #define WACOM_BYTES_PER_MSPROT_PACKET 9 #define WACOM_BYTES_PER_INTUOSP2_PACKET 8 @@ -112,6 +115,8 @@ enum { INTUOSHT, INTUOSHT2, BAMBOO_PT, + WACOM_24HDT, + WACOM_27QHDT, WACOM_MSPROT, DTH1152T, INTUOSP2, diff --git a/2.6.36/wacom_sys.c b/2.6.36/wacom_sys.c index 8a52c62..5c62615 100644 --- a/2.6.36/wacom_sys.c +++ b/2.6.36/wacom_sys.c @@ -271,11 +271,13 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi features->touch_max = 2; } - if (features->type == MTSCREEN) + if (features->type == MTSCREEN || + features->type == WACOM_24HDT) features->pktlen = WACOM_PKGLEN_MTOUCH; else if (features->type == WACOM_MSPROT) features->pktlen = WACOM_PKGLEN_MSPROT; - else if (features->type == DTH1152T) + else if (features->type == DTH1152T || + features->type == WACOM_27QHDT) features->pktlen = WACOM_PKGLEN_27QHDT; if (features->type == BAMBOO_PT) { @@ -293,13 +295,23 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi get_unaligned_le16(&report[i + 6]); features->unit = report[i - 5]; features->unitExpo = report[i - 3]; - } else if (features->type == DTH1152T) { + } else if (features->type == DTH1152T || + features->type == WACOM_24HDT) { features->x_max = get_unaligned_le16(&report[i + 3]); features->x_phy = get_unaligned_le16(&report[i + 8]); features->unit = report[i - 1]; features->unitExpo = report[i - 3]; + } else if (features->type == WACOM_27QHDT) { + if (!features->x_max) { + features->x_max = + get_unaligned_le16(&report[i - 4]); + features->x_phy = + get_unaligned_le16(&report[i - 7]); + features->unit = report[i - 13]; + features->unitExpo = report[i - 11]; + } } else { features->touch_max = 1; features->x_max = @@ -336,11 +348,19 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi get_unaligned_le16(&report[i + 3]); features->y_phy = get_unaligned_le16(&report[i + 6]); - } else if (features->type == DTH1152T) { + } else if (features->type == DTH1152T || + features->type == WACOM_24HDT) { features->y_max = get_unaligned_le16(&report[i + 3]); features->y_phy = get_unaligned_le16(&report[i - 2]); + } else if (features->type == WACOM_27QHDT) { + if (!features->y_max) { + features->y_max = + get_unaligned_le16(&report[i - 2]); + features->y_phy = + get_unaligned_le16(&report[i - 5]); + } } else { features->y_max = features->x_max; @@ -441,6 +461,24 @@ static int wacom_query_tablet_data(struct usb_interface *intf, struct wacom_feat report_id, rep_data, 2, 1); } while ((error < 0 || rep_data[1] != 2) && limit++ < WAC_MSG_RETRIES); } + else if (features->type == WACOM_24HDT) { + do { + rep_data[0] = 18; + rep_data[1] = 2; + report_id = 18; + error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT, + report_id, rep_data, 3, 1); + } while ((error < 0 || rep_data[1] != 2) && limit++ < 5); + } + else if (features->type == WACOM_27QHDT) { + do { + rep_data[0] = 131; + rep_data[1] = 2; + report_id = 131; + error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT, + report_id, rep_data, 3, 1); + } while ((error < 0 || rep_data[1] != 2) && limit++ < 5); + } kfree(rep_data); diff --git a/2.6.36/wacom_wac.c b/2.6.36/wacom_wac.c index cc76104..391f78c 100644 --- a/2.6.36/wacom_wac.c +++ b/2.6.36/wacom_wac.c @@ -1289,15 +1289,35 @@ static int wacom_multitouch_generic(struct wacom_wac *wacom) { struct wacom_features *features = &wacom->features; unsigned char *data = wacom->data; - int i, current_num_contacts, contacts_to_send; + int current_num_contacts, contacts_to_send, contacts_per_packet; + int bytes_per_packet, bytes_header; + int i; switch (features->type) { - case DTH1152T: + case WACOM_24HDT: + current_num_contacts = data[61]; + contacts_per_packet = 4; + bytes_per_packet = WACOM_BYTES_PER_24HDT_PACKET; + bytes_header = 1; + break; + case WACOM_27QHDT: + current_num_contacts = data[63]; + contacts_per_packet = 10; + bytes_per_packet = WACOM_BYTES_PER_QHDTHID_PACKET; + bytes_header = 1; + break; case WACOM_MSPROT: + case DTH1152T: current_num_contacts = data[2]; + contacts_per_packet = 5; + bytes_per_packet = WACOM_BYTES_PER_MSPROT_PACKET; + bytes_header = 3; break; case INTUOSP2: current_num_contacts = data[1]; + contacts_per_packet = 5; + bytes_per_packet = WACOM_BYTES_PER_INTUOSP2_PACKET; + bytes_header = 2; break; default: return 0; @@ -1308,7 +1328,7 @@ static int wacom_multitouch_generic(struct wacom_wac *wacom) features->num_contacts_left = current_num_contacts; } - contacts_to_send = min(5, features->num_contacts_left); + contacts_to_send = min(contacts_per_packet, features->num_contacts_left); for (i = 0; i < contacts_to_send; i++) { int contact_id = -1; @@ -1318,6 +1338,20 @@ static int wacom_multitouch_generic(struct wacom_wac *wacom) int offset = bytes_per_packet * i + bytes_header; switch (features->type) { + case WACOM_24HDT: + prox = data[offset] & 0x01; + contact_id = data[offset + 1]; + x = get_unaligned_le16(&data[offset + 2]); + y = get_unaligned_le16(&data[offset + 6]); + break; + + case WACOM_27QHDT: + prox = data[offset] & 0x01; + contact_id = data[offset + 1]; + x = get_unaligned_le16(&data[offset + 2]); + y = get_unaligned_le16(&data[offset + 4]); + break; + case WACOM_MSPROT: prox = data[offset] & 0x1; contact_id = get_unaligned_le16(&data[offset + 1]); @@ -1604,6 +1638,8 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) sync = wacom_mspro_irq(wacom_wac); break; + case WACOM_24HDT: + case WACOM_27QHDT: case DTH1152T: case WACOM_MSPROT: sync = wacom_multitouch_generic(wacom_wac); @@ -1910,10 +1946,18 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev, wacom_setup_intuos(wacom_wac); break; + case WACOM_24HDT: + if (features->device_type == BTN_TOOL_FINGER) { + input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, features->x_max, 0, 0); + input_set_abs_params(input_dev, ABS_MT_WIDTH_MINOR, 0, features->y_max, 0, 0); + } + /* fall through */ + case DTH1152T: case WACOM_MSPROT: case TABLETPC2FG: case MTSCREEN: + case WACOM_27QHDT: if (features->device_type == BTN_TOOL_FINGER) { input_mt_create_slots(input_dev, features->touch_max); input_set_abs_params(input_dev, ABS_MT_POSITION_X, @@ -2195,6 +2239,9 @@ static const struct wacom_features wacom_features_0xF8 = 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 16, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0xF6 = + { "Wacom Cintiq 24HD touch", .type = WACOM_24HDT, /* Touch */ + .touch_max = 10 }; static const struct wacom_features wacom_features_0x57 = { "Wacom DTK2241", WACOM_PKGLEN_INTUOS, 95640, 54060, 2047, 63, DTK, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 6, @@ -2205,6 +2252,9 @@ static const struct wacom_features wacom_features_0x59 = 63, DTK, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 6, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0x5D = /* Touch */ + { "Wacom DTH2242", .type = WACOM_24HDT, + .touch_max = 10 }; static const struct wacom_features wacom_features_0x3F = { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023, 63, CINTIQ, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 8 }; @@ -2224,6 +2274,9 @@ static const struct wacom_features wacom_features_0x333 = 63, WACOM_13HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 9, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0x335 = + { "Wacom Cintiq 13HD touch", .type = WACOM_24HDT, /* Touch */ + .touch_max = 10 }; static const struct wacom_features wacom_features_0xC7 = { "Wacom DTU1931", WACOM_PKGLEN_GRAPHIRE, 37832, 30305, 511, 0, PL, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; @@ -2263,6 +2316,9 @@ static const struct wacom_features wacom_features_0x5B = 63, WACOM_22HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 18, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; +static const struct wacom_features wacom_features_0x5E = + { "Wacom Cintiq 22HDT", .type = WACOM_24HDT, + .touch_max = 10 }; static const struct wacom_features wacom_features_0x90 = { "Wacom ISDv4 90", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; @@ -2380,7 +2436,7 @@ static const struct wacom_features wacom_features_0x35A = 0, DTH1152, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; static const struct wacom_features wacom_features_0x368 = { "Wacom DTH-1152 Touch", WACOM_PKGLEN_27QHDT, - .type = DTH1152T }; /* Touch */ + .type = DTH1152T, .touch_max = 10 }; /* Touch */ static const struct wacom_features wacom_features_0x6004 = { "ISD-V4", WACOM_PKGLEN_GRAPHIRE, 12800, 8000, 255, 0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; @@ -2445,6 +2501,8 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x57) }, { USB_DEVICE_WACOM(0x59) }, { USB_DEVICE_WACOM(0x5B) }, + { USB_DEVICE_DETAILED(0x5D, USB_CLASS_HID, 0, 0) }, + { USB_DEVICE_DETAILED(0x5E, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_WACOM(0xB0) }, { USB_DEVICE_WACOM(0xB1) }, { USB_DEVICE_WACOM(0xB2) }, @@ -2500,9 +2558,11 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_DETAILED(0x315, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_DETAILED(0x317, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_WACOM(0x333) }, + { USB_DEVICE_WACOM(0x335) }, { USB_DEVICE_WACOM(0x336) }, { USB_DEVICE_WACOM(0x47) }, { USB_DEVICE_WACOM(0xF4) }, + { USB_DEVICE_DETAILED(0xF6, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_WACOM(0xF8) }, { USB_DEVICE_WACOM(0xFA) }, { USB_DEVICE_WACOM(0xFB) }, diff --git a/2.6.36/wacom_wac.h b/2.6.36/wacom_wac.h index d420769..caf89c1 100644 --- a/2.6.36/wacom_wac.h +++ b/2.6.36/wacom_wac.h @@ -60,6 +60,8 @@ /* wacom data size per MT contact */ #define WACOM_BYTES_PER_MT_PACKET 11 +#define WACOM_BYTES_PER_24HDT_PACKET 14 +#define WACOM_BYTES_PER_QHDTHID_PACKET 6 #define WACOM_BYTES_PER_MSPROT_PACKET 9 #define WACOM_BYTES_PER_INTUOSP2_PACKET 8 @@ -103,6 +105,8 @@ enum { WACOM_BEE, WACOM_13HD, WACOM_MO, + WACOM_24HDT, + WACOM_27QHDT, WACOM_MSPROT, DTH1152T, INTUOSP2, -- 2.15.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel