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

Reply via email to