These three devices share very similar pad report formats, so there is
little reason to have a near-duplicate IRQ handler specific for the Intuos
Pro. This commit merges the wacom_mspro_pad_irq and wacom_intuosp2_pad_irq
functions into one.

Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
---
 2.6.30/wacom_wac.c | 106 ++++++++++++-----------------------------------------
 2.6.36/wacom_wac.c | 103 +++++++++++----------------------------------------
 2.6.38/wacom_wac.c | 103 +++++++++++----------------------------------------
 3.7/wacom_wac.c    | 103 +++++++++++----------------------------------------
 4 files changed, 90 insertions(+), 325 deletions(-)

diff --git a/2.6.30/wacom_wac.c b/2.6.30/wacom_wac.c
index 31629c7..78d6858 100644
--- a/2.6.30/wacom_wac.c
+++ b/2.6.30/wacom_wac.c
@@ -1516,11 +1516,13 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, 
size_t len)
 
 static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
 {
+       struct wacom_features *features = &wacom->features;
        unsigned char *data = wacom->data;
        struct input_dev *input = wacom->input;
-       int nbuttons = wacom->features.numbered_buttons;
-       bool prox, ringstatus;
-       int buttons, ring;
+       int nbuttons = features->numbered_buttons;
+       bool prox;
+       int buttons, ring, ringvalue;
+       bool active = false;
 
        switch (nbuttons) {
                case 11:
@@ -1529,53 +1531,6 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
                case 13:
                        buttons = data[1] | (data[3] << 8);
                        break;
-               default:
-                       if (nbuttons)
-                               dev_warn(input->dev.parent, "%s: unsupported 
device #%d\n", __func__, data[0]);
-                       return 0;
-       }
-
-       ring = le16_to_cpup((__le16 *)&data[4]);
-       ringstatus = ring & 0x80;
-
-       if (input->id.product == 0x34d || input->id.product == 0x34e) {
-               /* MobileStudio Pro */
-               ring = 35 - (ring & 0x7F);
-               ring += 36/2;
-               if (ring > 35)
-                       ring -= 36;
-       }
-       else {
-               /* "Standard" devices */
-               ring = 71 - (ring & 0x7F);
-               ring += 72/4;
-               if (ring > 71)
-                       ring -= 72;
-       }
-
-       prox = buttons || ringstatus;
-
-       wacom_report_numbered_buttons(input, nbuttons, buttons);
-       input_report_abs(input, ABS_WHEEL, ringstatus ? ring : 0);
-
-       input_report_key(input, wacom->tool[1], prox ? 1 : 0);
-       input_report_abs(input, ABS_MISC, prox ? PAD_DEVICE_ID : 0);
-
-       input_event(input, EV_MSC, MSC_SERIAL, 0xffffffff);
-
-       return 1;
-}
-
-static int wacom_intuosp2_pad_irq(struct wacom_wac *wacom)
-{
-       unsigned char *data = wacom->data;
-       struct input_dev *input = wacom->input;
-       int nbuttons = wacom->features.numbered_buttons;
-       bool prox;
-       int buttons, ring, ringvalue;
-       bool active = false;
-
-       switch (nbuttons) {
                case 9:
                        buttons = (data[1]) | (data[3] << 8);
                        break;
@@ -1586,17 +1541,27 @@ static int wacom_intuosp2_pad_irq(struct wacom_wac 
*wacom)
 
        ring = le16_to_cpup((__le16 *)&data[4]);
        /* Fix touchring data: userspace expects 0 at left and increasing 
clockwise */
-       ringvalue = 71 - (ring & 0x7F);
        if (input->id.product == 0x357 || input->id.product == 0x358) {
                /* 2nd-gen Intuos Pro */
+               ringvalue = 71 - (ring & 0x7F);
                ringvalue += 3*72/16;
+               if (ringvalue > 71)
+                       ringvalue -= 72;
+       }
+       else if (input->id.product == 0x34d || input->id.product == 0x34e) {
+               /* MobileStudio Pro */
+               ringvalue = 35 - (ring & 0x7F);
+               ringvalue += 36/2;
+               if (ringvalue > 35)
+                       ringvalue -= 36;
        }
        else {
                /* "Standard" devices */
+               ringvalue = 71 - (ring & 0x7F);
                ringvalue += 72/4;
+               if (ringvalue > 71)
+                       ringvalue -= 72;
        }
-       if (ringvalue > 71)
-               ringvalue -= 72;
 
        if (ring != WACOM_INTUOSP2_RING_UNTOUCHED)
                prox = buttons || ring;
@@ -1726,26 +1691,6 @@ static int wacom_mspro_irq(struct wacom_wac *wacom)
        return 0;
 }
 
-static int wacom_intuosp2_irq(struct wacom_wac *wacom)
-{
-       unsigned char *data = wacom->data;
-       struct input_dev *input = wacom->input;
-
-       switch (data[0]) {
-               case WACOM_REPORT_MSPRO:
-                       return wacom_mspro_pen_irq(wacom);
-               case WACOM_REPORT_MSPROPAD:
-                       return wacom_intuosp2_pad_irq(wacom);
-               case WACOM_REPORT_MSPRODEVICE:
-                       return 0;
-               default:
-                       dev_dbg(input->dev.parent,
-                               "%s: received unknown report #%d\n", __func__, 
data[0]);
-                       break;
-       }
-       return 0;
-}
-
 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
 {
        bool sync;
@@ -1807,7 +1752,12 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
                break;
 
        case WACOM_MSPRO:
-               sync = wacom_mspro_irq(wacom_wac);
+       case INTUOSP2:
+               if (len == WACOM_PKGLEN_INTUOSP2T &&
+                   wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
+                       sync = wacom_multitouch_generic(wacom_wac);
+               else
+                       sync = wacom_mspro_irq(wacom_wac);
                break;
 
        case DTH1152T:
@@ -1827,14 +1777,6 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
                        sync = wacom_intuos_irq(wacom_wac);
                break;
 
-       case INTUOSP2:
-               if (len == WACOM_PKGLEN_INTUOSP2T &&
-                   wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
-                       sync = wacom_multitouch_generic(wacom_wac);
-               else
-                       sync = wacom_intuosp2_irq(wacom_wac);
-               break;
-
        case TABLETPC:
        case TABLETPC2FG:
        case MTTPC:
diff --git a/2.6.36/wacom_wac.c b/2.6.36/wacom_wac.c
index 0339618..9be5390 100644
--- a/2.6.36/wacom_wac.c
+++ b/2.6.36/wacom_wac.c
@@ -1366,8 +1366,9 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
        unsigned char *data = wacom->data;
        struct input_dev *input = wacom->input;
        int nbuttons = features->numbered_buttons;
-       bool prox, ringstatus;
-       int buttons, ring;
+       bool prox;
+       int buttons, ring, ringvalue;
+       bool active = false;
 
        switch (nbuttons) {
                case 11:
@@ -1376,53 +1377,6 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
                case 13:
                        buttons = data[1] | (data[3] << 8);
                        break;
-               default:
-                       if (nbuttons)
-                               dev_warn(input->dev.parent, "%s: unsupported 
device #%d\n", __func__, data[0]);
-                       return 0;
-       }
-
-       ring = le16_to_cpup((__le16 *)&data[4]);
-       ringstatus = ring & 0x80;
-
-       if (input->id.product == 0x34d || input->id.product == 0x34e) {
-               /* MobileStudio Pro */
-               ring = 35 - (ring & 0x7F);
-               ring += 36/2;
-               if (ring > 35)
-                       ring -= 36;
-       }
-       else {
-               /* "Standard" devices */
-               ring = 71 - (ring & 0x7F);
-               ring += 72/4;
-               if (ring > 71)
-                       ring -= 72;
-       }
-
-       prox = buttons || ringstatus;
-
-       wacom_report_numbered_buttons(input, nbuttons, buttons);
-       input_report_abs(input, ABS_WHEEL, ringstatus ? ring : 0);
-
-       input_report_key(input, wacom->tool[1], prox ? 1 : 0);
-       input_report_abs(input, ABS_MISC, prox ? PAD_DEVICE_ID : 0);
-
-       input_event(input, EV_MSC, MSC_SERIAL, 0xffffffff);
-
-       return 1;
-}
-
-static int wacom_intuosp2_pad_irq(struct wacom_wac *wacom)
-{
-       unsigned char *data = wacom->data;
-       struct input_dev *input = wacom->input;
-       int nbuttons = wacom->features.numbered_buttons;
-       bool prox;
-       int buttons, ring, ringvalue;
-       bool active = false;
-
-       switch (nbuttons) {
                case 9:
                        buttons = (data[1]) | (data[3] << 8);
                        break;
@@ -1433,17 +1387,27 @@ static int wacom_intuosp2_pad_irq(struct wacom_wac 
*wacom)
 
        ring = le16_to_cpup((__le16 *)&data[4]);
        /* Fix touchring data: userspace expects 0 at left and increasing 
clockwise */
-       ringvalue = 71 - (ring & 0x7F);
        if (input->id.product == 0x357 || input->id.product == 0x358) {
                /* 2nd-gen Intuos Pro */
+               ringvalue = 71 - (ring & 0x7F);
                ringvalue += 3*72/16;
+               if (ringvalue > 71)
+                       ringvalue -= 72;
+       }
+       else if (input->id.product == 0x34d || input->id.product == 0x34e) {
+               /* MobileStudio Pro */
+               ringvalue = 35 - (ring & 0x7F);
+               ringvalue += 36/2;
+               if (ringvalue > 35)
+                       ringvalue -= 36;
        }
        else {
                /* "Standard" devices */
+               ringvalue = 71 - (ring & 0x7F);
                ringvalue += 72/4;
+               if (ringvalue > 71)
+                       ringvalue -= 72;
        }
-       if (ringvalue > 71)
-               ringvalue -= 72;
 
        if (ring != WACOM_INTUOSP2_RING_UNTOUCHED)
                prox = buttons || ring;
@@ -1571,26 +1535,6 @@ static int wacom_mspro_irq(struct wacom_wac *wacom)
        return 0;
 }
 
-static int wacom_intuosp2_irq(struct wacom_wac *wacom)
-{
-       unsigned char *data = wacom->data;
-       struct input_dev *input = wacom->input;
-
-       switch (data[0]) {
-               case WACOM_REPORT_MSPRO:
-                       return wacom_mspro_pen_irq(wacom);
-               case WACOM_REPORT_MSPROPAD:
-                       return wacom_intuosp2_pad_irq(wacom);
-               case WACOM_REPORT_MSPRODEVICE:
-                       return 0;
-               default:
-                       dev_dbg(input->dev.parent,
-                               "%s: received unknown report #%d\n", __func__, 
data[0]);
-                       break;
-       }
-       return 0;
-}
-
 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
 {
        bool sync;
@@ -1651,20 +1595,17 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
                break;
 
        case WACOM_MSPRO:
-               sync = wacom_mspro_irq(wacom_wac);
-               break;
-
-       case DTH1152T:
-       case WACOM_MSPROT:
-               sync = wacom_multitouch_generic(wacom_wac);
-               break;
-
        case INTUOSP2:
                if (len == WACOM_PKGLEN_INTUOSP2T &&
                    wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
                        sync = wacom_multitouch_generic(wacom_wac);
                else
-                       sync = wacom_intuosp2_irq(wacom_wac);
+                       sync = wacom_mspro_irq(wacom_wac);
+               break;
+
+       case DTH1152T:
+       case WACOM_MSPROT:
+               sync = wacom_multitouch_generic(wacom_wac);
                break;
 
        case TABLETPC:
diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c
index 6454465..c7ceb3d 100644
--- a/2.6.38/wacom_wac.c
+++ b/2.6.38/wacom_wac.c
@@ -1828,8 +1828,9 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
        unsigned char *data = wacom->data;
        struct input_dev *input = wacom->input;
        int nbuttons = features->numbered_buttons;
-       bool prox, ringstatus;
-       int buttons, ring;
+       bool prox;
+       int buttons, ring, ringvalue;
+       bool active = false;
 
        switch (nbuttons) {
                case 11:
@@ -1838,53 +1839,6 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
                case 13:
                        buttons = data[1] | (data[3] << 8);
                        break;
-               default:
-                       if (nbuttons)
-                               dev_warn(input->dev.parent, "%s: unsupported 
device #%d\n", __func__, data[0]);
-                       return 0;
-       }
-
-       ring = le16_to_cpup((__le16 *)&data[4]);
-       ringstatus = ring & 0x80;
-
-       if (input->id.product == 0x34d || input->id.product == 0x34e) {
-               /* MobileStudio Pro */
-               ring = 35 - (ring & 0x7F);
-               ring += 36/2;
-               if (ring > 35)
-                       ring -= 36;
-       }
-       else {
-               /* "Standard" devices */
-               ring = 71 - (ring & 0x7F);
-               ring += 72/4;
-               if (ring > 71)
-                       ring -= 72;
-       }
-
-       prox = buttons || ringstatus;
-
-       wacom_report_numbered_buttons(input, nbuttons, buttons);
-       input_report_abs(input, ABS_WHEEL, ringstatus ? ring : 0);
-
-       input_report_key(input, wacom->tool[1], prox ? 1 : 0);
-       input_report_abs(input, ABS_MISC, prox ? PAD_DEVICE_ID : 0);
-
-       input_event(input, EV_MSC, MSC_SERIAL, 0xffffffff);
-
-       return 1;
-}
-
-static int wacom_intuosp2_pad_irq(struct wacom_wac *wacom)
-{
-       unsigned char *data = wacom->data;
-       struct input_dev *input = wacom->input;
-       int nbuttons = wacom->features.numbered_buttons;
-       bool prox;
-       int buttons, ring, ringvalue;
-       bool active = false;
-
-       switch (nbuttons) {
                case 9:
                        buttons = (data[1]) | (data[3] << 8);
                        break;
@@ -1895,17 +1849,27 @@ static int wacom_intuosp2_pad_irq(struct wacom_wac 
*wacom)
 
        ring = le16_to_cpup((__le16 *)&data[4]);
        /* Fix touchring data: userspace expects 0 at left and increasing 
clockwise */
-       ringvalue = 71 - (ring & 0x7F);
        if (input->id.product == 0x357 || input->id.product == 0x358) {
                /* 2nd-gen Intuos Pro */
+               ringvalue = 71 - (ring & 0x7F);
                ringvalue += 3*72/16;
+               if (ringvalue > 71)
+                       ringvalue -= 72;
+       }
+       else if (input->id.product == 0x34d || input->id.product == 0x34e) {
+               /* MobileStudio Pro */
+               ringvalue = 35 - (ring & 0x7F);
+               ringvalue += 36/2;
+               if (ringvalue > 35)
+                       ringvalue -= 36;
        }
        else {
                /* "Standard" devices */
+               ringvalue = 71 - (ring & 0x7F);
                ringvalue += 72/4;
+               if (ringvalue > 71)
+                       ringvalue -= 72;
        }
-       if (ringvalue > 71)
-               ringvalue -= 72;
 
        if (ring != WACOM_INTUOSP2_RING_UNTOUCHED)
                prox = buttons || ring;
@@ -2033,26 +1997,6 @@ static int wacom_mspro_irq(struct wacom_wac *wacom)
        return 0;
 }
 
-static int wacom_intuosp2_irq(struct wacom_wac *wacom)
-{
-       unsigned char *data = wacom->data;
-       struct input_dev *input = wacom->input;
-
-       switch (data[0]) {
-               case WACOM_REPORT_MSPRO:
-                       return wacom_mspro_pen_irq(wacom);
-               case WACOM_REPORT_MSPROPAD:
-                       return wacom_intuosp2_pad_irq(wacom);
-               case WACOM_REPORT_MSPRODEVICE:
-                       return 0;
-               default:
-                       dev_dbg(input->dev.parent,
-                               "%s: received unknown report #%d\n", __func__, 
data[0]);
-                       break;
-       }
-       return 0;
-}
-
 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
 {
        bool sync;
@@ -2110,7 +2054,12 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
                break;
 
        case WACOM_MSPRO:
-               sync = wacom_mspro_irq(wacom_wac);
+       case INTUOSP2:
+               if (len == WACOM_PKGLEN_INTUOSP2T &&
+                   wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
+                       sync = wacom_multitouch_generic(wacom_wac);
+               else
+                       sync = wacom_mspro_irq(wacom_wac);
                break;
 
        case DTH1152T:
@@ -2137,14 +2086,6 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
                        sync = wacom_intuos_irq(wacom_wac);
                break;
 
-       case INTUOSP2:
-               if (len == WACOM_PKGLEN_INTUOSP2T &&
-                   wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
-                       sync = wacom_multitouch_generic(wacom_wac);
-               else
-                       sync = wacom_intuosp2_irq(wacom_wac);
-               break;
-
        case TABLETPC:
        case TABLETPCE:
        case TABLETPC2FG:
diff --git a/3.7/wacom_wac.c b/3.7/wacom_wac.c
index 070b07c..14548f1 100644
--- a/3.7/wacom_wac.c
+++ b/3.7/wacom_wac.c
@@ -1808,8 +1808,9 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
        unsigned char *data = wacom->data;
        struct input_dev *input = wacom->input;
        int nbuttons = features->numbered_buttons;
-       bool prox, ringstatus;
-       int buttons, ring;
+       bool prox;
+       int buttons, ring, ringvalue;
+       bool active = false;
 
        switch (nbuttons) {
                case 11:
@@ -1818,53 +1819,6 @@ static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
                case 13:
                        buttons = data[1] | (data[3] << 8);
                        break;
-               default:
-                       if (nbuttons)
-                               dev_warn(input->dev.parent, "%s: unsupported 
device #%d\n", __func__, data[0]);
-                       return 0;
-       }
-
-       ring = le16_to_cpup((__le16 *)&data[4]);
-       ringstatus = ring & 0x80;
-
-       if (input->id.product == 0x34d || input->id.product == 0x34e) {
-               /* MobileStudio Pro */
-               ring = 35 - (ring & 0x7F);
-               ring += 36/2;
-               if (ring > 35)
-                       ring -= 36;
-       }
-       else {
-               /* "Standard" devices */
-               ring = 71 - (ring & 0x7F);
-               ring += 72/4;
-               if (ring > 71)
-                       ring -= 72;
-       }
-
-       prox = buttons || ringstatus;
-
-       wacom_report_numbered_buttons(input, nbuttons, buttons);
-       input_report_abs(input, ABS_WHEEL, ringstatus ? ring : 0);
-
-       input_report_key(input, wacom->tool[1], prox ? 1 : 0);
-       input_report_abs(input, ABS_MISC, prox ? PAD_DEVICE_ID : 0);
-
-       input_event(input, EV_MSC, MSC_SERIAL, 0xffffffff);
-
-       return 1;
-}
-
-static int wacom_intuosp2_pad_irq(struct wacom_wac *wacom)
-{
-       unsigned char *data = wacom->data;
-       struct input_dev *input = wacom->input;
-       int nbuttons = wacom->features.numbered_buttons;
-       bool prox;
-       int buttons, ring, ringvalue;
-       bool active = false;
-
-       switch (nbuttons) {
                case 9:
                        buttons = (data[1]) | (data[3] << 8);
                        break;
@@ -1875,17 +1829,27 @@ static int wacom_intuosp2_pad_irq(struct wacom_wac 
*wacom)
 
        ring = le16_to_cpup((__le16 *)&data[4]);
        /* Fix touchring data: userspace expects 0 at left and increasing 
clockwise */
-       ringvalue = 71 - (ring & 0x7F);
        if (input->id.product == 0x357 || input->id.product == 0x358) {
                /* 2nd-gen Intuos Pro */
+               ringvalue = 71 - (ring & 0x7F);
                ringvalue += 3*72/16;
+               if (ringvalue > 71)
+                       ringvalue -= 72;
+       }
+       else if (input->id.product == 0x34d || input->id.product == 0x34e) {
+               /* MobileStudio Pro */
+               ringvalue = 35 - (ring & 0x7F);
+               ringvalue += 36/2;
+               if (ringvalue > 35)
+                       ringvalue -= 36;
        }
        else {
                /* "Standard" devices */
+               ringvalue = 71 - (ring & 0x7F);
                ringvalue += 72/4;
+               if (ringvalue > 71)
+                       ringvalue -= 72;
        }
-       if (ringvalue > 71)
-               ringvalue -= 72;
 
        if (ring != WACOM_INTUOSP2_RING_UNTOUCHED)
                prox = buttons || ring;
@@ -2013,26 +1977,6 @@ static int wacom_mspro_irq(struct wacom_wac *wacom)
        return 0;
 }
 
-static int wacom_intuosp2_irq(struct wacom_wac *wacom)
-{
-       unsigned char *data = wacom->data;
-       struct input_dev *input = wacom->input;
-
-       switch (data[0]) {
-               case WACOM_REPORT_MSPRO:
-                       return wacom_mspro_pen_irq(wacom);
-               case WACOM_REPORT_MSPROPAD:
-                       return wacom_intuosp2_pad_irq(wacom);
-               case WACOM_REPORT_MSPRODEVICE:
-                       return 0;
-               default:
-                       dev_dbg(input->dev.parent,
-                               "%s: received unknown report #%d\n", __func__, 
data[0]);
-                       break;
-       }
-       return 0;
-}
-
 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
 {
        bool sync;
@@ -2090,7 +2034,12 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
                break;
 
        case WACOM_MSPRO:
-               sync = wacom_mspro_irq(wacom_wac);
+       case INTUOSP2:
+               if (len == WACOM_PKGLEN_INTUOSP2T &&
+                   wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
+                       sync = wacom_multitouch_generic(wacom_wac);
+               else
+                       sync = wacom_mspro_irq(wacom_wac);
                break;
 
        case DTH1152T:
@@ -2117,14 +2066,6 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t 
len)
                        sync = wacom_intuos_irq(wacom_wac);
                break;
 
-       case INTUOSP2:
-               if (len == WACOM_PKGLEN_INTUOSP2T &&
-                   wacom_wac->data[0] == WACOM_REPORT_VENDOR_DEF_TOUCH)
-                       sync = wacom_multitouch_generic(wacom_wac);
-               else
-                       sync = wacom_intuosp2_irq(wacom_wac);
-               break;
-
        case TABLETPC:
        case TABLETPCE:
        case TABLETPC2FG:
-- 
2.14.2


------------------------------------------------------------------------------
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