Looks good, thanks! Reviewed-by: Jason Gerecke <jason.gere...@wacom.com>
Jason --- Now instead of four in the eights place / you’ve got three, ‘Cause you added one / (That is to say, eight) to the two, / But you can’t take seven from three, / So you look at the sixty-fours.... On Fri, Jan 26, 2018 at 3:25 PM, Ping Cheng <pingli...@gmail.com> wrote: > Signed-off-by: Ping Cheng <ping.ch...@wacom.com> > --- > 2.6.30/wacom_sys.c | 8 ++++++-- > 2.6.30/wacom_wac.c | 45 +++++++++++++++++++++++++++++++++++++++------ > 2.6.30/wacom_wac.h | 3 +++ > 2.6.38/wacom_sys.c | 3 +++ > 2.6.38/wacom_wac.c | 45 +++++++++++++++++++++++++++++++++++++++------ > 2.6.38/wacom_wac.h | 3 +++ > 3.7/wacom_sys.c | 3 +++ > 3.7/wacom_wac.c | 45 +++++++++++++++++++++++++++++++++++++++------ > 3.7/wacom_wac.h | 3 +++ > 9 files changed, 138 insertions(+), 20 deletions(-) > > diff --git a/2.6.30/wacom_sys.c b/2.6.30/wacom_sys.c > index ba17b1b..bdb1eb8 100644 > --- a/2.6.30/wacom_sys.c > +++ b/2.6.30/wacom_sys.c > @@ -266,7 +266,8 @@ static int wacom_parse_hid(struct usb_interface *intf, > struct hid_descriptor *hi > features->type == > WACOM_24HDT || > features->type == > WACOM_MSPROT || > features->type == > DTH1152T || > - features->type == > WACOM_27QHDT) { > + features->type == > WACOM_27QHDT || > + features->type == > DTH2452T) { > /* need to reset back */ > features->pktlen = > WACOM_PKGLEN_TPC2FG; > if (features->type == MTTPC || > @@ -275,7 +276,8 @@ static int wacom_parse_hid(struct usb_interface *intf, > struct hid_descriptor *hi > features->pktlen = > WACOM_PKGLEN_MTTPC; > else if (features->type == > WACOM_24HDT) > features->pktlen = > WACOM_PKGLEN_MTOUCH; > - else if (features->type == > WACOM_MSPROT) > + else if (features->type == > WACOM_MSPROT || > + features->type == > DTH2452T) > features->pktlen = > WACOM_PKGLEN_MSPROT; > else if (features->type == > DTH1152T || > features->type == > WACOM_27QHDT) > @@ -317,6 +319,7 @@ static int wacom_parse_hid(struct usb_interface *intf, > struct hid_descriptor *hi > > case WACOM_MSPROT: > case MTTPC_B: > + case DTH2452T: > features->x_max = > > get_unaligned_le16(&report[i + 3]); > features->x_phy = > @@ -394,6 +397,7 @@ static int wacom_parse_hid(struct usb_interface *intf, > struct hid_descriptor *hi > > case WACOM_MSPROT: > case MTTPC_B: > + case DTH2452T: > features->y_max = > > get_unaligned_le16(&report[i + 3]); > features->y_phy = > diff --git a/2.6.30/wacom_wac.c b/2.6.30/wacom_wac.c > index 90c5c2b..4d4f924 100644 > --- a/2.6.30/wacom_wac.c > +++ b/2.6.30/wacom_wac.c > @@ -227,13 +227,16 @@ static int wacom_dtus_irq(struct wacom_wac *wacom) > { > unsigned char *data = wacom->data; > struct input_dev *input = wacom->input; > + struct wacom_features *features = &wacom->features; > unsigned short prox, pressure = 0; > > - if (data[0] != WACOM_REPORT_DTUS && data[0] != WACOM_REPORT_DTUSPAD) { > + if (data[0] != WACOM_REPORT_DTUS && data[0] != WACOM_REPORT_DTUSPAD > + && data[0] != WACOM_REPORT_DTK2451PAD) { > dev_dbg(input->dev.parent, > "%s: received unknown report #%d", __func__, data[0]); > return 0; > - } else if (data[0] == WACOM_REPORT_DTUSPAD) { > + } else if (data[0] == WACOM_REPORT_DTUSPAD > + || data[0] == WACOM_REPORT_DTK2451PAD) { > input_report_key(input, BTN_0, (data[1] & 0x01)); > input_report_key(input, BTN_1, (data[1] & 0x02)); > input_report_key(input, BTN_2, (data[1] & 0x04)); > @@ -264,9 +267,15 @@ static int wacom_dtus_irq(struct wacom_wac *wacom) > > input_report_key(input, BTN_STYLUS, data[1] & 0x20); > input_report_key(input, BTN_STYLUS2, data[1] & 0x40); > - input_report_abs(input, ABS_X, get_unaligned_be16(&data[3])); > - input_report_abs(input, ABS_Y, get_unaligned_be16(&data[5])); > - pressure = ((data[1] & 0x03) << 8) | (data[2] & 0xff); > + if (features->type == DTK2451) { > + pressure = get_unaligned_le16(&data[2]); > + input_report_abs(input, ABS_X, > get_unaligned_le16(&data[4])); > + input_report_abs(input, ABS_Y, > get_unaligned_le16(&data[6])); > + } else { > + pressure = ((data[1] & 0x03) << 8) | (data[2] & 0xff); > + input_report_abs(input, ABS_X, > get_unaligned_be16(&data[3])); > + input_report_abs(input, ABS_Y, > get_unaligned_be16(&data[5])); > + } > input_report_abs(input, ABS_PRESSURE, pressure); > input_report_key(input, BTN_TOUCH, pressure > 10); > > @@ -988,6 +997,7 @@ static int wacom_multitouch_generic(struct wacom_wac > *wacom) > break; > case WACOM_MSPROT: > case DTH1152T: > + case DTH2452T: > current_num_contacts = data[2]; > contacts_per_packet = 5; > bytes_per_packet = WACOM_BYTES_PER_MSPROT_PACKET; > @@ -1032,6 +1042,7 @@ static int wacom_multitouch_generic(struct wacom_wac > *wacom) > > case WACOM_MSPROT: > case DTH1152T: > + case DTH2452T: > prox = data[offset] & 0x1; > contact_id = get_unaligned_le16(&data[offset + 1]); > x = get_unaligned_le16(&data[offset + 3]); > @@ -1853,6 +1864,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t > len) > > case DTUS: > case DTUSX: > + case DTK2451: > sync = wacom_dtus_irq(wacom_wac); > break; > > @@ -1890,6 +1902,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t > len) > case WACOM_24HDT: > case WACOM_27QHDT: > case DTH1152T: > + case DTH2452T: > case WACOM_MSPROT: > sync = wacom_multitouch_generic(wacom_wac); > break; > @@ -2279,6 +2292,7 @@ void wacom_setup_input_capabilities(struct input_dev > *input_dev, > case MTTPC_B: > case MTTPC_C: > case DTH1152T: > + case DTH2452T: > case WACOM_27QHDT: > if (features->device_type == BTN_TOOL_TRIPLETAP) { > for (i = 0; i < 10; i++) > @@ -2315,11 +2329,12 @@ void wacom_setup_input_capabilities(struct input_dev > *input_dev, > > case DTUS: > case DTUSX: > + case DTK2451: > case PL: > case DTU: > __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); > __set_bit(BTN_STYLUS2, input_dev->keybit); > - if (features->type == DTUS) { > + if (features->type == DTUS || features->type == DTK2451) { > input_set_capability(input_dev, EV_MSC, MSC_SERIAL); > } > /* fall through */ > @@ -2907,6 +2922,21 @@ static const struct wacom_features > wacom_features_0x368 = > static const struct wacom_features wacom_features_0x37C = > { "Wacom Cintiq Pro 24", WACOM_PKGLEN_MSPRO, 105286, 59574, 8191, 63, > /* Pen-only */ > WACOM_MSPRO, 0, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, > WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; > +static const struct wacom_features wacom_features_0x37D = > + { "Wacom DTH-2452", WACOM_PKGLEN_DTH1152, 53104, 30046, 2047, 0, > + DTK2451, 4, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x37E }; > +static const struct wacom_features wacom_features_0x37E = > + { "Wacom DTH-2452 Touch", WACOM_PKGLEN_MSPROT, > + .type = DTH2452T, .touch_max = 10, .oVid = USB_VENDOR_ID_WACOM, > + .oPid = 0x37D }; /* Touch */ > +static const struct wacom_features wacom_features_0x382 = > + { "Wacom DTK-2451", WACOM_PKGLEN_DTH1152, 53104, 30046, 2047, 0, > + DTK2451, 4, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET }; > > #define USB_DEVICE_WACOM(prod) \ > USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \ > @@ -3073,6 +3103,9 @@ const struct usb_device_id wacom_ids[] = { > { USB_DEVICE_WACOM(0x35A) }, > { USB_DEVICE_WACOM(0x368) }, > { USB_DEVICE_WACOM(0x37C) }, > + { USB_DEVICE_WACOM(0x37D) }, > + { USB_DEVICE_WACOM(0x37E) }, > + { USB_DEVICE_WACOM(0x382) }, > { USB_DEVICE_WACOM(0x4001) }, > { USB_DEVICE_WACOM(0x4004) }, > { USB_DEVICE_WACOM(0x5000) }, > diff --git a/2.6.30/wacom_wac.h b/2.6.30/wacom_wac.h > index 10ec2e6..0b128e3 100755 > --- a/2.6.30/wacom_wac.h > +++ b/2.6.30/wacom_wac.h > @@ -69,6 +69,7 @@ > #define WACOM_REPORT_DTUS 17 > #define WACOM_REPORT_MSPROPAD 17 > #define WACOM_REPORT_MSPRODEVICE 19 > +#define WACOM_REPORT_DTK2451PAD 21 > #define WACOM_REPORT_USB 192 > #define WACOM_REPORT_VENDOR_DEF_TOUCH 33 > #define WAC_CMD_LED_CONTROL_GENERIC 50 > @@ -93,6 +94,7 @@ enum { > DTUS, > DTUSX, > DTH1152, > + DTK2451, > INTUOS, > INTUOS3S, > INTUOS3, > @@ -127,6 +129,7 @@ enum { > INTUOSP2, > TABLETPC, > TABLETPC2FG, > + DTH2452T, > MTTPC, > MTTPC_B, > MTTPC_C, > diff --git a/2.6.38/wacom_sys.c b/2.6.38/wacom_sys.c > index cbf36b5..c181907 100644 > --- a/2.6.38/wacom_sys.c > +++ b/2.6.38/wacom_sys.c > @@ -416,6 +416,7 @@ static int wacom_parse_hid(struct usb_interface *intf, > break; > > case WACOM_MSPROT: > + case DTH2452T: > features->pktlen = > WACOM_PKGLEN_MSPROT; > break; > > @@ -455,6 +456,7 @@ static int wacom_parse_hid(struct usb_interface *intf, > > case WACOM_MSPROT: > case MTTPC_B: > + case DTH2452T: > features->x_max = > > get_unaligned_le16(&report[i + 3]); > features->x_phy = > @@ -530,6 +532,7 @@ static int wacom_parse_hid(struct usb_interface *intf, > > case WACOM_MSPROT: > case MTTPC_B: > + case DTH2452T: > features->y_max = > > get_unaligned_le16(&report[i + 3]); > features->y_phy = > diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c > index 066c948..fa22356 100644 > --- a/2.6.38/wacom_wac.c > +++ b/2.6.38/wacom_wac.c > @@ -271,13 +271,16 @@ static int wacom_dtus_irq(struct wacom_wac *wacom) > { > unsigned char *data = wacom->data; > struct input_dev *input = wacom->input; > + struct wacom_features *features = &wacom->features; > unsigned short prox, pressure = 0; > > - if (data[0] != WACOM_REPORT_DTUS && data[0] != WACOM_REPORT_DTUSPAD) { > + if (data[0] != WACOM_REPORT_DTUS && data[0] != WACOM_REPORT_DTUSPAD > + && data[0] != WACOM_REPORT_DTK2451PAD) { > dev_dbg(input->dev.parent, > "%s: received unknown report #%d", __func__, data[0]); > return 0; > - } else if (data[0] == WACOM_REPORT_DTUSPAD) { > + } else if (data[0] == WACOM_REPORT_DTUSPAD > + || data[0] == WACOM_REPORT_DTK2451PAD) { > input_report_key(input, BTN_0, (data[1] & 0x01)); > input_report_key(input, BTN_1, (data[1] & 0x02)); > input_report_key(input, BTN_2, (data[1] & 0x04)); > @@ -308,9 +311,15 @@ static int wacom_dtus_irq(struct wacom_wac *wacom) > > input_report_key(input, BTN_STYLUS, data[1] & 0x20); > input_report_key(input, BTN_STYLUS2, data[1] & 0x40); > - input_report_abs(input, ABS_X, get_unaligned_be16(&data[3])); > - input_report_abs(input, ABS_Y, get_unaligned_be16(&data[5])); > - pressure = ((data[1] & 0x03) << 8) | (data[2] & 0xff); > + if (features->type == DTK2451) { > + pressure = get_unaligned_le16(&data[2]); > + input_report_abs(input, ABS_X, > get_unaligned_le16(&data[4])); > + input_report_abs(input, ABS_Y, > get_unaligned_le16(&data[6])); > + } else { > + pressure = ((data[1] & 0x03) << 8) | (data[2] & 0xff); > + input_report_abs(input, ABS_X, > get_unaligned_be16(&data[3])); > + input_report_abs(input, ABS_Y, > get_unaligned_be16(&data[5])); > + } > input_report_abs(input, ABS_PRESSURE, pressure); > input_report_key(input, BTN_TOUCH, pressure > 10); > > @@ -1218,6 +1227,7 @@ static int wacom_multitouch_generic(struct wacom_wac > *wacom) > break; > case WACOM_MSPROT: > case DTH1152T: > + case DTH2452T: > current_num_contacts = data[2]; > contacts_per_packet = 5; > bytes_per_packet = WACOM_BYTES_PER_MSPROT_PACKET; > @@ -1270,6 +1280,7 @@ static int wacom_multitouch_generic(struct wacom_wac > *wacom) > > case WACOM_MSPROT: > case DTH1152T: > + case DTH2452T: > prox = data[offset] & 0x1; > contact_id = get_unaligned_le16(&data[offset + 1]); > x = get_unaligned_le16(&data[offset + 3]); > @@ -2060,6 +2071,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t > len) > > case DTUS: > case DTUSX: > + case DTK2451: > sync = wacom_dtus_irq(wacom_wac); > break; > > @@ -2099,6 +2111,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t > len) > case WACOM_24HDT: > case WACOM_27QHDT: > case DTH1152T: > + case DTH2452T: > case WACOM_MSPROT: > sync = wacom_multitouch_generic(wacom_wac); > break; > @@ -2570,6 +2583,7 @@ int wacom_setup_input_capabilities(struct input_dev > *input_dev, > /* fall through */ > > case DTH1152T: > + case DTH2452T: > case WACOM_MSPROT: > if (features->device_type == BTN_TOOL_FINGER) { > input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, > 0, features->x_max, 0, 0); > @@ -2622,11 +2636,12 @@ int wacom_setup_input_capabilities(struct input_dev > *input_dev, > > case DTUS: > case DTUSX: > + case DTK2451: > case PL: > case DTU: > __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); > __set_bit(BTN_STYLUS2, input_dev->keybit); > - if (features->type == DTUS) { > + if (features->type == DTUS || features->type == DTK2451) { > input_set_capability(input_dev, EV_MSC, MSC_SERIAL); > } > /* fall through */ > @@ -3308,6 +3323,21 @@ static const struct wacom_features > wacom_features_0x37C = > WACOM_MSPRO, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 0, > WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, > WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; > +static const struct wacom_features wacom_features_0x37D = > + { "Wacom DTH-2452", WACOM_PKGLEN_DTH1152, 53104, 30046, 2047, > + 0, DTK2451, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x37E }; > +static const struct wacom_features wacom_features_0x37E = > + { "Wacom DTH-2452 Touch", WACOM_PKGLEN_MSPROT, > + .type = DTH2452T, .touch_max = 10, .oVid = USB_VENDOR_ID_WACOM, > + .oPid = 0x37D }; /* Touch */ > +static const struct wacom_features wacom_features_0x382 = > + { "Wacom DTK-2451", WACOM_PKGLEN_DTH1152, 53104, 30046, 2047, > + 0, DTK2451, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET }; > > #define USB_DEVICE_WACOM(prod) \ > USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \ > @@ -3487,6 +3517,9 @@ const struct usb_device_id wacom_ids[] = { > { USB_DEVICE_WACOM(0x35A) }, > { USB_DEVICE_WACOM(0x368) }, > { USB_DEVICE_WACOM(0x37C) }, > + { USB_DEVICE_WACOM(0x37D) }, > + { USB_DEVICE_WACOM(0x37E) }, > + { USB_DEVICE_WACOM(0x382) }, > { USB_DEVICE_WACOM(0x4001) }, > { USB_DEVICE_WACOM(0x4004) }, > { USB_DEVICE_WACOM(0x5000) }, > diff --git a/2.6.38/wacom_wac.h b/2.6.38/wacom_wac.h > index 0b7f1d5..cb9d37b 100644 > --- a/2.6.38/wacom_wac.h > +++ b/2.6.38/wacom_wac.h > @@ -76,6 +76,7 @@ > #define WACOM_REPORT_MSPROPAD 17 > #define WACOM_REPORT_TPC1FGE 18 > #define WACOM_REPORT_MSPRODEVICE 19 > +#define WACOM_REPORT_DTK2451PAD 21 > #define WACOM_REPORT_24HDT 1 > #define WACOM_REPORT_WL 128 > #define WACOM_REPORT_USB 192 > @@ -106,6 +107,7 @@ enum { > DTUS, > DTUSX, > DTH1152, > + DTK2451, > INTUOS, > INTUOS3S, > INTUOS3, > @@ -144,6 +146,7 @@ enum { > TABLETPC, /* add new TPC below */ > TABLETPCE, > TABLETPC2FG, > + DTH2452T, > MTSCREEN, > MTTPC, > MTTPC_B, > diff --git a/3.7/wacom_sys.c b/3.7/wacom_sys.c > index e07d131..ef880dc 100644 > --- a/3.7/wacom_sys.c > +++ b/3.7/wacom_sys.c > @@ -416,6 +416,7 @@ static int wacom_parse_hid(struct usb_interface *intf, > break; > > case WACOM_MSPROT: > + case DTH2452T: > features->pktlen = > WACOM_PKGLEN_MSPROT; > break; > > @@ -455,6 +456,7 @@ static int wacom_parse_hid(struct usb_interface *intf, > > case WACOM_MSPROT: > case MTTPC_B: > + case DTH2452T: > features->x_max = > > get_unaligned_le16(&report[i + 3]); > features->x_phy = > @@ -530,6 +532,7 @@ static int wacom_parse_hid(struct usb_interface *intf, > > case WACOM_MSPROT: > case MTTPC_B: > + case DTH2452T: > features->y_max = > > get_unaligned_le16(&report[i + 3]); > features->y_phy = > diff --git a/3.7/wacom_wac.c b/3.7/wacom_wac.c > index 0a2e535..1f225db 100644 > --- a/3.7/wacom_wac.c > +++ b/3.7/wacom_wac.c > @@ -271,13 +271,16 @@ static int wacom_dtus_irq(struct wacom_wac *wacom) > { > char *data = wacom->data; > struct input_dev *input = wacom->input; > + struct wacom_features *features = &wacom->features; > unsigned short prox, pressure = 0; > > - if (data[0] != WACOM_REPORT_DTUS && data[0] != WACOM_REPORT_DTUSPAD) { > + if (data[0] != WACOM_REPORT_DTUS && data[0] != WACOM_REPORT_DTUSPAD > + && data[0] != WACOM_REPORT_DTK2451PAD) { > dev_dbg(input->dev.parent, > "%s: received unknown report #%d", __func__, data[0]); > return 0; > - } else if (data[0] == WACOM_REPORT_DTUSPAD) { > + } else if (data[0] == WACOM_REPORT_DTUSPAD > + || data[0] == WACOM_REPORT_DTK2451PAD) { > input_report_key(input, BTN_0, (data[1] & 0x01)); > input_report_key(input, BTN_1, (data[1] & 0x02)); > input_report_key(input, BTN_2, (data[1] & 0x04)); > @@ -308,9 +311,15 @@ static int wacom_dtus_irq(struct wacom_wac *wacom) > > input_report_key(input, BTN_STYLUS, data[1] & 0x20); > input_report_key(input, BTN_STYLUS2, data[1] & 0x40); > - input_report_abs(input, ABS_X, get_unaligned_be16(&data[3])); > - input_report_abs(input, ABS_Y, get_unaligned_be16(&data[5])); > - pressure = ((data[1] & 0x03) << 8) | (data[2] & 0xff); > + if (features->type == DTK2451) { > + pressure = get_unaligned_le16(&data[2]); > + input_report_abs(input, ABS_X, > get_unaligned_le16(&data[4])); > + input_report_abs(input, ABS_Y, > get_unaligned_le16(&data[6])); > + } else { > + pressure = ((data[1] & 0x03) << 8) | (data[2] & 0xff); > + input_report_abs(input, ABS_X, > get_unaligned_be16(&data[3])); > + input_report_abs(input, ABS_Y, > get_unaligned_be16(&data[5])); > + } > input_report_abs(input, ABS_PRESSURE, pressure); > input_report_key(input, BTN_TOUCH, pressure > 10); > > @@ -1198,6 +1207,7 @@ static int wacom_multitouch_generic(struct wacom_wac > *wacom) > break; > case WACOM_MSPROT: > case DTH1152T: > + case DTH2452T: > current_num_contacts = data[2]; > contacts_per_packet = 5; > bytes_per_packet = WACOM_BYTES_PER_MSPROT_PACKET; > @@ -1250,6 +1260,7 @@ static int wacom_multitouch_generic(struct wacom_wac > *wacom) > > case WACOM_MSPROT: > case DTH1152T: > + case DTH2452T: > prox = data[offset] & 0x1; > contact_id = get_unaligned_le16(&data[offset + 1]); > x = get_unaligned_le16(&data[offset + 3]); > @@ -2042,6 +2053,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t > len) > > case DTUS: > case DTUSX: > + case DTK2451: > sync = wacom_dtus_irq(wacom_wac); > break; > > @@ -2081,6 +2093,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t > len) > case WACOM_24HDT: > case WACOM_27QHDT: > case DTH1152T: > + case DTH2452T: > case WACOM_MSPROT: > sync = wacom_multitouch_generic(wacom_wac); > break; > @@ -2526,6 +2539,7 @@ int wacom_setup_input_capabilities(struct input_dev > *input_dev, > /* fall through */ > > case DTH1152T: > + case DTH2452T: > case WACOM_MSPROT: > if (features->device_type == BTN_TOOL_FINGER) { > input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, > 0, features->x_max, 0, 0); > @@ -2567,11 +2581,12 @@ int wacom_setup_input_capabilities(struct input_dev > *input_dev, > > case DTUS: > case DTUSX: > + case DTK2451: > case PL: > case DTU: > __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); > __set_bit(BTN_STYLUS2, input_dev->keybit); > - if (features->type == DTUS) { > + if (features->type == DTUS || features->type == DTK2451) { > input_set_capability(input_dev, EV_MSC, MSC_SERIAL); > } > /* fall through */ > @@ -3238,6 +3253,21 @@ static const struct wacom_features > wacom_features_0x37C = > WACOM_MSPRO, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 0, > WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, > WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET }; > +static const struct wacom_features wacom_features_0x37D = > + { "Wacom DTH-2452", WACOM_PKGLEN_DTH1152, 53104, 30046, 2047, > + 0, DTK2451, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x37E }; > +static const struct wacom_features wacom_features_0x37E = > + { "Wacom DTH-2452 Touch", WACOM_PKGLEN_MSPROT, > + .type = DTH2452T, .touch_max = 10, .oVid = USB_VENDOR_ID_WACOM, > + .oPid = 0x37D }; /* Touch */ > +static const struct wacom_features wacom_features_0x382 = > + { "Wacom DTK-2451", WACOM_PKGLEN_DTH1152, 53104, 30046, 2047, > + 0, DTK2451, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, > + WACOM_DTU_OFFSET, WACOM_DTU_OFFSET }; > > #define USB_DEVICE_WACOM(prod) \ > USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \ > @@ -3417,6 +3447,9 @@ const struct usb_device_id wacom_ids[] = { > { USB_DEVICE_WACOM(0x35A) }, > { USB_DEVICE_WACOM(0x368) }, > { USB_DEVICE_WACOM(0x37C) }, > + { USB_DEVICE_WACOM(0x37D) }, > + { USB_DEVICE_WACOM(0x37E) }, > + { USB_DEVICE_WACOM(0x382) }, > { USB_DEVICE_WACOM(0x4001) }, > { USB_DEVICE_WACOM(0x4004) }, > { USB_DEVICE_WACOM(0x5000) }, > diff --git a/3.7/wacom_wac.h b/3.7/wacom_wac.h > index ce9b5dd..3bfdf04 100644 > --- a/3.7/wacom_wac.h > +++ b/3.7/wacom_wac.h > @@ -76,6 +76,7 @@ > #define WACOM_REPORT_MSPROPAD 17 > #define WACOM_REPORT_TPC1FGE 18 > #define WACOM_REPORT_MSPRODEVICE 19 > +#define WACOM_REPORT_DTK2451PAD 21 > #define WACOM_REPORT_24HDT 1 > #define WACOM_REPORT_WL 128 > #define WACOM_REPORT_USB 192 > @@ -106,6 +107,7 @@ enum { > DTUS, > DTUSX, > DTH1152, > + DTK2451, > INTUOS, > INTUOS3S, > INTUOS3, > @@ -144,6 +146,7 @@ enum { > TABLETPC, /* add new TPC below */ > TABLETPCE, > TABLETPC2FG, > + DTH2452T, > MTSCREEN, > MTTPC, > MTTPC_B, > -- > 2.14.3 > ------------------------------------------------------------------------------ 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