Signed-off-by: Aaron Armstrong Skomra <aaron.sko...@wacom.com>
---
 2.6.32/wacom_sys.c |  6 ++++--
 2.6.32/wacom_wac.c | 13 +++++++++++++
 2.6.32/wacom_wac.h |  1 +
 2.6.38/wacom_sys.c |  6 ++++--
 2.6.38/wacom_wac.c | 13 +++++++++++++
 2.6.38/wacom_wac.h |  1 +
 3.7/wacom_sys.c    |  6 ++++--
 3.7/wacom_wac.c    | 13 +++++++++++++
 3.7/wacom_wac.h    |  1 +
 9 files changed, 54 insertions(+), 6 deletions(-)

diff --git a/2.6.32/wacom_sys.c b/2.6.32/wacom_sys.c
index 84f9d0d04a8e..3ec15802bd84 100644
--- a/2.6.32/wacom_sys.c
+++ b/2.6.32/wacom_sys.c
@@ -223,7 +223,8 @@ static int wacom_parse_hid(struct usb_interface *intf, 
struct hid_descriptor *hi
                        switch (data) {
                        case HID_USAGE_WT_X:
                                features->device_type = BTN_TOOL_TRIPLETAP;
-                               if (features->type == INTUOSP2) {
+                               if (features->type == INTUOSP2 ||
+                                   features->type == INTUOSP2S) {
                                        features->pktlen = 
WACOM_PKGLEN_INTUOSP2T;
                                        features->unit = report[i+4];
                                        features->unitExpo = report[i+6];
@@ -233,7 +234,8 @@ static int wacom_parse_hid(struct usb_interface *intf, 
struct hid_descriptor *hi
                                break;
 
                        case HID_USAGE_WT_Y:
-                               if (features->type == INTUOSP2) {
+                               if (features->type == INTUOSP2 ||
+                                   features->type == INTUOSP2S) {
                                        features->y_phy = 
get_unaligned_le16(&report[i + 4]);
                                        features->y_max = 
get_unaligned_le16(&report[i + 7]);
                                }
diff --git a/2.6.32/wacom_wac.c b/2.6.32/wacom_wac.c
index 3aa3940eb011..4c846f870f6c 100644
--- a/2.6.32/wacom_wac.c
+++ b/2.6.32/wacom_wac.c
@@ -1025,6 +1025,7 @@ static int wacom_multitouch_generic(struct wacom_wac 
*wacom)
                bytes_header = 3;
                break;
        case INTUOSP2:
+       case INTUOSP2S:
                current_num_contacts = data[1];
                contacts_per_packet = 5;
                bytes_per_packet = WACOM_BYTES_PER_INTUOSP2_PACKET;
@@ -1071,6 +1072,7 @@ static int wacom_multitouch_generic(struct wacom_wac 
*wacom)
                        break;
 
                case INTUOSP2:
+               case INTUOSP2S:
                        contact_id = data[offset];
                        prox = data[offset + 1] & 0x01;
                        x = get_unaligned_le16(&data[offset + 2]);
@@ -1700,6 +1702,11 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
                        ring = le16_to_cpup((__le16 *)&data[4]);
                        keys = 0;
                        break;
+               case 7:
+                       buttons = (data[1]) | (data[3] << 6);
+                       ring = le16_to_cpup((__le16 *)&data[4]);
+                       keys = 0;
+                       break;
                case 0:
                        buttons = 0;
                        ring = WACOM_INTUOSP2_RING_UNTOUCHED; /* No ring */
@@ -1937,6 +1944,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
 
        case WACOM_MSPRO:
        case INTUOSP2:
+       case INTUOSP2S:
        case CINTIQ_16:
                if (len == WACOM_PKGLEN_INTUOSP2T &&
                    wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
@@ -2306,6 +2314,7 @@ void wacom_setup_input_capabilities(struct input_dev 
*input_dev,
                break;
 
        case INTUOSP2:
+       case INTUOSP2S:
                if (features->device_type == BTN_TOOL_TRIPLETAP) {
                        for (i = 0; i < 10; i++)
                                wacom_wac->slots[i] = -1;
@@ -3072,6 +3081,9 @@ static const struct wacom_features wacom_features_0x390 =
          WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
          WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
          .oVid = USB_VENDOR_ID_WACOM };
+static const struct wacom_features wacom_features_0x392 =
+       { "Wacom Intuos Pro S", WACOM_PKGLEN_INTUOSP2, 31920, 19950, 8191, 63,
+         INTUOSP2S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 7, .touch_max = 10 };
 
 #define USB_DEVICE_WACOM(prod)                                 \
        USB_DEVICE(USB_VENDOR_ID_WACOM, prod),                  \
@@ -3258,6 +3270,7 @@ const struct usb_device_id wacom_ids[] = {
        { USB_DEVICE_WACOM(0x37E) },
        { USB_DEVICE_WACOM(0x382) },
        { USB_DEVICE_DETAILED(0x390, USB_CLASS_HID, 0, 0) },
+       { USB_DEVICE_DETAILED(0x392, USB_CLASS_HID, 0, 0) },
 #ifndef RHEL6_RELEASE
        { USB_DEVICE_WACOM(0x4001) },
        { USB_DEVICE_WACOM(0x4004) },
diff --git a/2.6.32/wacom_wac.h b/2.6.32/wacom_wac.h
index 45e865bbf5ac..6b4a9fd84d33 100755
--- a/2.6.32/wacom_wac.h
+++ b/2.6.32/wacom_wac.h
@@ -129,6 +129,7 @@ enum {
        WACOM_MSPROT,
        DTH1152T,
        INTUOSP2,
+       INTUOSP2S,
        INTUOSHT3,
        TABLETPC,   /* add new TPC below */
        TABLETPCE,
diff --git a/2.6.38/wacom_sys.c b/2.6.38/wacom_sys.c
index 496f40751dfb..cce702479307 100644
--- a/2.6.38/wacom_sys.c
+++ b/2.6.38/wacom_sys.c
@@ -359,7 +359,8 @@ static int wacom_parse_hid(struct usb_interface *intf,
                        case HID_USAGE_WT_X:
                                if (finger)
                                        features->device_type = BTN_TOOL_FINGER;
-                               if (features->type == INTUOSP2) {
+                               if (features->type == INTUOSP2 ||
+                                   features->type == INTUOSP2S) {
                                        features->touch_max = 10;
                                        features->pktlen = 
WACOM_PKGLEN_INTUOSP2T;
                                        features->unit = report[i+4];
@@ -370,7 +371,8 @@ static int wacom_parse_hid(struct usb_interface *intf,
                                break;
 
                        case HID_USAGE_WT_Y:
-                               if (features->type == INTUOSP2) {
+                               if (features->type == INTUOSP2 ||
+                                   features->type == INTUOSP2S) {
                                        features->y_phy = 
get_unaligned_le16(&report[i + 4]);
                                        features->y_max = 
get_unaligned_le16(&report[i + 7]);
                                }
diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c
index 032e0701b616..a0afc2f4513c 100644
--- a/2.6.38/wacom_wac.c
+++ b/2.6.38/wacom_wac.c
@@ -1250,6 +1250,7 @@ static int wacom_multitouch_generic(struct wacom_wac 
*wacom)
                bytes_header = 3;
                break;
        case INTUOSP2:
+       case INTUOSP2S:
                current_num_contacts = data[1];
                contacts_per_packet = 5;
                bytes_per_packet = WACOM_BYTES_PER_INTUOSP2_PACKET;
@@ -1306,6 +1307,7 @@ static int wacom_multitouch_generic(struct wacom_wac 
*wacom)
                        break;
 
                case INTUOSP2:
+               case INTUOSP2S:
                        contact_id = data[offset];
                        prox = data[offset + 1] & 0x01;
                        x = get_unaligned_le16(&data[offset + 2]);
@@ -1904,6 +1906,11 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
                        ring = le16_to_cpup((__le16 *)&data[4]);
                        keys = 0;
                        break;
+               case 7:
+                       buttons = (data[1]) | (data[3] << 6);
+                       ring = le16_to_cpup((__le16 *)&data[4]);
+                       keys = 0;
+                       break;
                case 0:
                        buttons = 0;
                        ring = WACOM_INTUOSP2_RING_UNTOUCHED; /* No ring */
@@ -2141,6 +2148,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
 
        case WACOM_MSPRO:
        case INTUOSP2:
+       case INTUOSP2S:
        case CINTIQ_16:
                if (len == WACOM_PKGLEN_INTUOSP2T &&
                    wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
@@ -2563,6 +2571,7 @@ int wacom_setup_input_capabilities(struct input_dev 
*input_dev,
                break;
 
        case INTUOSP2:
+       case INTUOSP2S:
                if (features->device_type == BTN_TOOL_PEN) {
                        __set_bit(BTN_STYLUS3, input_dev->keybit);
                        wacom_wac->previous_ring = 
WACOM_INTUOSP2_RING_UNTOUCHED;
@@ -3421,6 +3430,9 @@ static const struct wacom_features wacom_features_0x390 =
          WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
          WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
          .oVid = USB_VENDOR_ID_WACOM };
+static const struct wacom_features wacom_features_0x392 =
+       { "Wacom Intuos Pro S", WACOM_PKGLEN_INTUOSP2, 31920, 19950, 8191, 63,
+         INTUOSP2S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 7, .touch_max = 10 };
 
 #define USB_DEVICE_WACOM(prod)                                 \
        USB_DEVICE(USB_VENDOR_ID_WACOM, prod),                  \
@@ -3611,6 +3623,7 @@ const struct usb_device_id wacom_ids[] = {
        { USB_DEVICE_WACOM(0x37E) },
        { USB_DEVICE_WACOM(0x382) },
        { USB_DEVICE_DETAILED(0x390, USB_CLASS_HID, 0, 0) },
+       { USB_DEVICE_DETAILED(0x392, USB_CLASS_HID, 0, 0) },
        { 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 c2e337d41427..81729d268af3 100644
--- a/2.6.38/wacom_wac.h
+++ b/2.6.38/wacom_wac.h
@@ -143,6 +143,7 @@ enum {
        WACOM_MSPROT,
        DTH1152T,
        INTUOSP2,
+       INTUOSP2S,
        INTUOSHT3,
        WIRELESS,
        REMOTE,
diff --git a/3.7/wacom_sys.c b/3.7/wacom_sys.c
index 4e5288d1571c..2e10783a527a 100644
--- a/3.7/wacom_sys.c
+++ b/3.7/wacom_sys.c
@@ -359,7 +359,8 @@ static int wacom_parse_hid(struct usb_interface *intf,
                        case HID_USAGE_WT_X:
                                if (finger)
                                        features->device_type = BTN_TOOL_FINGER;
-                               if (features->type == INTUOSP2) {
+                               if (features->type == INTUOSP2 ||
+                                   features->type == INTUOSP2S) {
                                        features->touch_max = 10;
                                        features->pktlen = 
WACOM_PKGLEN_INTUOSP2T;
                                        features->unit = report[i+4];
@@ -370,7 +371,8 @@ static int wacom_parse_hid(struct usb_interface *intf,
                                break;
 
                        case HID_USAGE_WT_Y:
-                               if (features->type == INTUOSP2) {
+                               if (features->type == INTUOSP2 ||
+                                   features->type == INTUOSP2S) {
                                        features->y_phy = 
get_unaligned_le16(&report[i + 4]);
                                        features->y_max = 
get_unaligned_le16(&report[i + 7]);
                                }
diff --git a/3.7/wacom_wac.c b/3.7/wacom_wac.c
index 3eacf483aac2..f2e191debeda 100644
--- a/3.7/wacom_wac.c
+++ b/3.7/wacom_wac.c
@@ -1230,6 +1230,7 @@ static int wacom_multitouch_generic(struct wacom_wac 
*wacom)
                bytes_header = 3;
                break;
        case INTUOSP2:
+       case INTUOSP2S:
                current_num_contacts = data[1];
                contacts_per_packet = 5;
                bytes_per_packet = WACOM_BYTES_PER_INTUOSP2_PACKET;
@@ -1286,6 +1287,7 @@ static int wacom_multitouch_generic(struct wacom_wac 
*wacom)
                        break;
 
                case INTUOSP2:
+               case INTUOSP2S:
                        contact_id = data[offset];
                        prox = data[offset + 1] & 0x01;
                        x = get_unaligned_le16(&data[offset + 2]);
@@ -1886,6 +1888,11 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
                        ring = le16_to_cpup((__le16 *)&data[4]);
                        keys = 0;
                        break;
+               case 7:
+                       buttons = (data[1]) | (data[3] << 6);
+                       ring = le16_to_cpup((__le16 *)&data[4]);
+                       keys = 0;
+                       break;
                case 0:
                        buttons = 0;
                        ring = WACOM_INTUOSP2_RING_UNTOUCHED; /* No ring */
@@ -2123,6 +2130,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
 
        case WACOM_MSPRO:
        case INTUOSP2:
+       case INTUOSP2S:
        case CINTIQ_16:
                if (len == WACOM_PKGLEN_INTUOSP2T &&
                    wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
@@ -2534,6 +2542,7 @@ int wacom_setup_input_capabilities(struct input_dev 
*input_dev,
                break;
 
        case INTUOSP2:
+       case INTUOSP2S:
                if (features->device_type == BTN_TOOL_PEN) {
                        __set_bit(BTN_STYLUS3, input_dev->keybit);
                        wacom_wac->previous_ring = 
WACOM_INTUOSP2_RING_UNTOUCHED;
@@ -3351,6 +3360,9 @@ static const struct wacom_features wacom_features_0x390 =
          WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
          WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
          .oVid = USB_VENDOR_ID_WACOM };
+static const struct wacom_features wacom_features_0x392 =
+       { "Wacom Intuos Pro S", WACOM_PKGLEN_INTUOSP2, 31920, 19950, 8191, 63,
+         INTUOSP2S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 7, .touch_max = 10 };
 
 #define USB_DEVICE_WACOM(prod)                                 \
        USB_DEVICE(USB_VENDOR_ID_WACOM, prod),                  \
@@ -3541,6 +3553,7 @@ const struct usb_device_id wacom_ids[] = {
        { USB_DEVICE_WACOM(0x37E) },
        { USB_DEVICE_WACOM(0x382) },
        { USB_DEVICE_DETAILED(0x390, USB_CLASS_HID, 0, 0) },
+       { USB_DEVICE_DETAILED(0x392, USB_CLASS_HID, 0, 0) },
        { 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 da7387a3bee2..b25b41fd7f37 100644
--- a/3.7/wacom_wac.h
+++ b/3.7/wacom_wac.h
@@ -143,6 +143,7 @@ enum {
        WACOM_MSPROT,
        DTH1152T,
        INTUOSP2,
+       INTUOSP2S,
        INTUOSHT3,
        WIRELESS,
        REMOTE,
-- 
2.7.4



_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to