Signed-off-by: Ping Cheng <ping.ch...@wacom.com> --- 2.6.32/wacom_wac.c | 31 ++++++++++++++++++++++++++----- 2.6.32/wacom_wac.h | 1 + 2.6.38/wacom_wac.c | 31 ++++++++++++++++++++++++++----- 2.6.38/wacom_wac.h | 1 + 3.7/wacom_wac.c | 31 ++++++++++++++++++++++++++----- 3.7/wacom_wac.h | 1 + 6 files changed, 81 insertions(+), 15 deletions(-)
diff --git a/2.6.32/wacom_wac.c b/2.6.32/wacom_wac.c index c29c75c..c4705f8 100644 --- a/2.6.32/wacom_wac.c +++ b/2.6.32/wacom_wac.c @@ -303,6 +303,20 @@ static int wacom_dth1152_irq(struct wacom_wac *wacom) unsigned short prox, pressure = 0; if (data[0] != WACOM_REPORT_DTUS) { + if (data[0] == WACOM_REPORT_DTUSPAD) { + 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)); + input_report_key(input, BTN_3, (data[1] & 0x08)); + input_report_abs(input, ABS_MISC, + data[1] & 0x0f ? PAD_DEVICE_ID : 0); + /* + * Serial number is required when expresskeys are + * reported through pen interface. + */ + input_event(input, EV_MSC, MSC_SERIAL, 0xf0); + return 1; + } dev_dbg(input->dev.parent, "%s: received unknown report #%d", __func__, data[0]); return 0; @@ -1896,6 +1910,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) sync = wacom_dtus_irq(wacom_wac); break; + case DTUS2: case DTH1152: sync = wacom_dth1152_irq(wacom_wac); break; @@ -2382,14 +2397,16 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev, /* fall through */ case DTUS: - case DTUSX: + case DTUS2: case DTK2451: + input_set_capability(input_dev, EV_MSC, MSC_SERIAL); + + case DTUSX: case PL: case DTU: - __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); - __set_bit(BTN_STYLUS2, input_dev->keybit); - if (features->type == DTUS || features->type == DTK2451) { - input_set_capability(input_dev, EV_MSC, MSC_SERIAL); + if (features->type != DTUS2) { + __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); + __set_bit(BTN_STYLUS2, input_dev->keybit); } /* fall through */ @@ -2991,6 +3008,9 @@ static const struct wacom_features wacom_features_0x357 = static const struct wacom_features wacom_features_0x358 = { "Wacom Intuos Pro L", WACOM_PKGLEN_INTUOSP2, 62200, 43200, 8191, 63, INTUOSP2, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 9, .touch_max = 10 }; +static const struct wacom_features wacom_features_0x359 = + { "Wacom DTU-1141B", WACOM_PKGLEN_DTH1152, 22320, 12555, 1023, 0, + DTUS2, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4 }; static const struct wacom_features wacom_features_0x35A = { "Wacom DTH-1152", WACOM_PKGLEN_DTH1152, 22320, 12555, 1023, 0, DTH1152, WACOM_INTUOS_RES, WACOM_INTUOS_RES, @@ -3205,6 +3225,7 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x356) }, { USB_DEVICE_DETAILED(0x357, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_DETAILED(0x358, USB_CLASS_HID, 0, 0) }, + { USB_DEVICE_WACOM(0x359) }, { USB_DEVICE_WACOM(0x35A) }, { USB_DEVICE_WACOM(0x368) }, { USB_DEVICE_WACOM(0x374) }, diff --git a/2.6.32/wacom_wac.h b/2.6.32/wacom_wac.h index bdefbc1..56dcea3 100755 --- a/2.6.32/wacom_wac.h +++ b/2.6.32/wacom_wac.h @@ -92,6 +92,7 @@ enum { PL, DTU, DTUS, + DTUS2, DTUSX, DTH1152, DTK2451, diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c index ebff932..2e090cf 100644 --- a/2.6.38/wacom_wac.c +++ b/2.6.38/wacom_wac.c @@ -339,6 +339,20 @@ static int wacom_dth1152_irq(struct wacom_wac *wacom) unsigned short prox, pressure = 0; if (data[0] != WACOM_REPORT_DTUS) { + if (data[0] == WACOM_REPORT_DTUSPAD) { + 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)); + input_report_key(input, BTN_3, (data[1] & 0x08)); + input_report_abs(input, ABS_MISC, + data[1] & 0x0f ? PAD_DEVICE_ID : 0); + /* + * Serial number is required when expresskeys are + * reported through pen interface. + */ + input_event(input, EV_MSC, MSC_SERIAL, 0xf0); + return 1; + } dev_dbg(input->dev.parent, "%s: received unknown report #%d", __func__, data[0]); return 0; @@ -2098,6 +2112,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) sync = wacom_dtus_irq(wacom_wac); break; + case DTUS2: case DTH1152: sync = wacom_dth1152_irq(wacom_wac); break; @@ -2668,14 +2683,16 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev, /* fall through */ case DTUS: - case DTUSX: + case DTUS2: case DTK2451: + input_set_capability(input_dev, EV_MSC, MSC_SERIAL); + + case DTUSX: case PL: case DTU: - __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); - __set_bit(BTN_STYLUS2, input_dev->keybit); - if (features->type == DTUS || features->type == DTK2451) { - input_set_capability(input_dev, EV_MSC, MSC_SERIAL); + if (features->type != DTUS2) { + __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); + __set_bit(BTN_STYLUS2, input_dev->keybit); } /* fall through */ @@ -3344,6 +3361,9 @@ static const struct wacom_features wacom_features_0x357 = static const struct wacom_features wacom_features_0x358 = { "Wacom Intuos Pro L", WACOM_PKGLEN_INTUOSP2, 62200, 43200, 8191, 63, INTUOSP2, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 9, .touch_max = 10 }; +static const struct wacom_features wacom_features_0x359 = + { "Wacom DTU-1141B", WACOM_PKGLEN_DTH1152, 22320, 12555, 1023, 0, + DTUS2, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4 }; static const struct wacom_features wacom_features_0x35A = { "Wacom DTH-1152", WACOM_PKGLEN_DTH1152, 22320, 12555, 1023, 0, DTH1152, WACOM_INTUOS_RES, WACOM_INTUOS_RES, @@ -3566,6 +3586,7 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x356) }, { USB_DEVICE_DETAILED(0x357, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_DETAILED(0x358, USB_CLASS_HID, 0, 0) }, + { USB_DEVICE_WACOM(0x359) }, { USB_DEVICE_WACOM(0x35A) }, { USB_DEVICE_WACOM(0x368) }, { USB_DEVICE_WACOM(0x374) }, diff --git a/2.6.38/wacom_wac.h b/2.6.38/wacom_wac.h index bfe0253..08e8261 100644 --- a/2.6.38/wacom_wac.h +++ b/2.6.38/wacom_wac.h @@ -105,6 +105,7 @@ enum { PL, DTU, DTUS, + DTUS2, DTUSX, DTH1152, DTK2451, diff --git a/3.7/wacom_wac.c b/3.7/wacom_wac.c index c544343..f255f8c 100644 --- a/3.7/wacom_wac.c +++ b/3.7/wacom_wac.c @@ -339,6 +339,20 @@ static int wacom_dth1152_irq(struct wacom_wac *wacom) unsigned short prox, pressure = 0; if (data[0] != WACOM_REPORT_DTUS) { + if (data[0] == WACOM_REPORT_DTUSPAD) { + 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)); + input_report_key(input, BTN_3, (data[1] & 0x08)); + input_report_abs(input, ABS_MISC, + data[1] & 0x0f ? PAD_DEVICE_ID : 0); + /* + * Serial number is required when expresskeys are + * reported through pen interface. + */ + input_event(input, EV_MSC, MSC_SERIAL, 0xf0); + return 1; + } dev_dbg(input->dev.parent, "%s: received unknown report #%d", __func__, data[0]); return 0; @@ -2080,6 +2094,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) sync = wacom_dtus_irq(wacom_wac); break; + case DTUS2: case DTH1152: sync = wacom_dth1152_irq(wacom_wac); break; @@ -2613,14 +2628,16 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev, /* fall through */ case DTUS: - case DTUSX: + case DTUS2: case DTK2451: + input_set_capability(input_dev, EV_MSC, MSC_SERIAL); + + case DTUSX: case PL: case DTU: - __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); - __set_bit(BTN_STYLUS2, input_dev->keybit); - if (features->type == DTUS || features->type == DTK2451) { - input_set_capability(input_dev, EV_MSC, MSC_SERIAL); + if (features->type != DTUS2) { + __set_bit(BTN_TOOL_RUBBER, input_dev->keybit); + __set_bit(BTN_STYLUS2, input_dev->keybit); } /* fall through */ @@ -3274,6 +3291,9 @@ static const struct wacom_features wacom_features_0x357 = static const struct wacom_features wacom_features_0x358 = { "Wacom Intuos Pro L", WACOM_PKGLEN_INTUOSP2, 62200, 43200, 8191, 63, INTUOSP2, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 9, .touch_max = 10 }; +static const struct wacom_features wacom_features_0x359 = + { "Wacom DTU-1141B", WACOM_PKGLEN_DTH1152, 22320, 12555, 1023, 0, + DTUS2, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4 }; static const struct wacom_features wacom_features_0x35A = { "Wacom DTH-1152", WACOM_PKGLEN_DTH1152, 22320, 12555, 1023, 0, DTH1152, WACOM_INTUOS_RES, WACOM_INTUOS_RES, @@ -3496,6 +3516,7 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x356) }, { USB_DEVICE_DETAILED(0x357, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_DETAILED(0x358, USB_CLASS_HID, 0, 0) }, + { USB_DEVICE_WACOM(0x359) }, { USB_DEVICE_WACOM(0x35A) }, { USB_DEVICE_WACOM(0x368) }, { USB_DEVICE_WACOM(0x374) }, diff --git a/3.7/wacom_wac.h b/3.7/wacom_wac.h index 5f3fe74..1a8714f 100644 --- a/3.7/wacom_wac.h +++ b/3.7/wacom_wac.h @@ -105,6 +105,7 @@ enum { PL, DTU, DTUS, + DTUS2, DTUSX, DTH1152, DTK2451, -- 2.7.4 _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel