HID: wacom: Add 2nd gen Intuos Pro Small support
authorAaron Armstrong Skomra <skomra@gmail.com>
Wed, 12 Jun 2019 21:19:28 +0000 (14:19 -0700)
committerJiri Kosina <jkosina@suse.cz>
Thu, 13 Jun 2019 14:48:49 +0000 (16:48 +0200)
The existing INTUOSP2_BT device class supports LEDs and this device
does not. A new device class enum entry, "INTUOSP2S_BT", is created
to avoid the INTUOSP2_BT LED code.

Signed-off-by: Aaron Armstrong Skomra <aaron.skomra@wacom.com>
Reviewed-by: Jason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/wacom_wac.c
drivers/hid/wacom_wac.h

index a98ad4fdcf9ec972248a249a763849f42681094b..b764e9d72b5b2dada267311e8a45e08be9132162 100644 (file)
@@ -1220,7 +1220,8 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
        unsigned char *data = wacom->data;
        int i;
 
-       if (wacom->features.type == INTUOSP2_BT) {
+       if (wacom->features.type == INTUOSP2_BT ||
+           wacom->features.type == INTUOSP2S_BT) {
                wacom->serial[0] = get_unaligned_le64(&data[99]);
                wacom->id[0]     = get_unaligned_le16(&data[107]);
                pen_frame_len = 14;
@@ -1257,7 +1258,8 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
                        input_report_abs(pen_input, ABS_X, get_unaligned_le16(&frame[1]));
                        input_report_abs(pen_input, ABS_Y, get_unaligned_le16(&frame[3]));
 
-                       if (wacom->features.type == INTUOSP2_BT) {
+                       if (wacom->features.type == INTUOSP2_BT ||
+                           wacom->features.type == INTUOSP2S_BT) {
                                /* Fix rotation alignment: userspace expects zero at left */
                                int16_t rotation =
                                        (int16_t)get_unaligned_le16(&frame[9]);
@@ -1276,7 +1278,8 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
                        }
                }
                input_report_abs(pen_input, ABS_PRESSURE, get_unaligned_le16(&frame[5]));
-               if (wacom->features.type == INTUOSP2_BT) {
+               if (wacom->features.type == INTUOSP2_BT ||
+                   wacom->features.type == INTUOSP2S_BT) {
                        input_report_abs(pen_input, ABS_DISTANCE,
                                         range ? frame[13] : wacom->features.distance_max);
                } else {
@@ -1436,7 +1439,8 @@ static int wacom_intuos_pro2_bt_irq(struct wacom_wac *wacom, size_t len)
        }
 
        wacom_intuos_pro2_bt_pen(wacom);
-       if (wacom->features.type == INTUOSP2_BT) {
+       if (wacom->features.type == INTUOSP2_BT ||
+           wacom->features.type == INTUOSP2S_BT) {
                wacom_intuos_pro2_bt_touch(wacom);
                wacom_intuos_pro2_bt_pad(wacom);
                wacom_intuos_pro2_bt_battery(wacom);
@@ -3204,6 +3208,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
                break;
 
        case INTUOSP2_BT:
+       case INTUOSP2S_BT:
        case INTUOSHT3_BT:
                sync = wacom_intuos_pro2_bt_irq(wacom_wac, len);
                break;
@@ -3384,7 +3389,8 @@ void wacom_setup_device_quirks(struct wacom *wacom)
        if (features->type == REMOTE)
                features->device_type = WACOM_DEVICETYPE_PAD;
 
-       if (features->type == INTUOSP2_BT) {
+       if (features->type == INTUOSP2_BT ||
+           features->type == INTUOSP2S_BT) {
                features->device_type |= WACOM_DEVICETYPE_PEN |
                                         WACOM_DEVICETYPE_PAD |
                                         WACOM_DEVICETYPE_TOUCH;
@@ -3565,6 +3571,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
        case INTUOS5S:
        case INTUOSPS:
        case INTUOSP2_BT:
+       case INTUOSP2S_BT:
                input_set_abs_params(input_dev, ABS_DISTANCE, 0,
                                      features->distance_max,
                                      features->distance_fuzz, 0);
@@ -3676,6 +3683,7 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
 
        switch (features->type) {
        case INTUOSP2_BT:
+       case INTUOSP2S_BT:
                input_dev->evbit[0] |= BIT_MASK(EV_SW);
                __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
 
@@ -3691,6 +3699,12 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
                        input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
                                             0, 5920, 4, 0);
                }
+               else if (wacom_wac->shared->touch->product == 0x393) {
+                       input_set_abs_params(input_dev, ABS_MT_POSITION_X,
+                                            0, 6400, 4, 0);
+                       input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
+                                            0, 4000, 4, 0);
+               }
                input_abs_set_res(input_dev, ABS_MT_POSITION_X, 40);
                input_abs_set_res(input_dev, ABS_MT_POSITION_Y, 40);
 
@@ -3997,6 +4011,7 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
        case INTUOS5S:
        case INTUOSPS:
        case INTUOSP2_BT:
+       case INTUOSP2S_BT:
                input_set_abs_params(input_dev, ABS_WHEEL, 0, 71, 0, 0);
                break;
 
@@ -4574,6 +4589,10 @@ static const struct wacom_features wacom_features_0x37A =
 static const struct wacom_features wacom_features_0x37B =
        { "Wacom One by Wacom M", 21600, 13500, 2047, 63,
          BAMBOO_PEN, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
+static const struct wacom_features wacom_features_0x393 =
+       { "Wacom Intuos Pro S", 31920, 19950, 8191, 63,
+         INTUOSP2S_BT, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 7,
+         .touch_max = 10 };
 
 static const struct wacom_features wacom_features_HID_ANY_ID =
        { "Wacom HID", .type = HID_GENERIC, .oVid = HID_ANY_ID, .oPid = HID_ANY_ID };
@@ -4746,6 +4765,7 @@ const struct hid_device_id wacom_ids[] = {
        { BT_DEVICE_WACOM(0x379) },
        { USB_DEVICE_WACOM(0x37A) },
        { USB_DEVICE_WACOM(0x37B) },
+       { BT_DEVICE_WACOM(0x393) },
        { USB_DEVICE_WACOM(0x4001) },
        { USB_DEVICE_WACOM(0x4004) },
        { USB_DEVICE_WACOM(0x5000) },
index f67d871841c0c62859a963e2566b23835b7e2b27..48f08f8a556d5cc33de168d1da13f54ef1fa7afa 100644 (file)
@@ -215,6 +215,7 @@ enum {
        INTUOSPM,
        INTUOSPL,
        INTUOSP2_BT,
+       INTUOSP2S_BT,
        INTUOSHT3_BT,
        WACOM_21UX2,
        WACOM_22HD,