Hi, Dmitry:

When we pushed a 2.6.17 rebase for Fedora, one of my users complained that
the wheel on this Wacom reversed the direction. Do you know anything
about it? The patch has some suspicious parts:

--- linux-2.6.16-1.2122_FC5/drivers/usb/input/wacom.c   2006-03-19 
21:53:29.000000000 -0800
+++ linux-2.6.17-1.2139_FC5/drivers/usb/input/wacom.c   2006-06-17 
18:49:35.000000000 -0700
@@ -374,10 +397,10 @@ static void wacom_graphire_irq(struct ur
                        case 2: /* Mouse with wheel */
                                input_report_key(dev, BTN_MIDDLE, data[1] & 
0x04);
                                if (wacom->features->type == WACOM_G4) {
-                                       rw = data[7] & 0x04 ? -(data[7] & 0x03) 
: (data[7] & 0x03);
-                                       input_report_rel(dev, REL_WHEEL, rw);
+                                       rw = data[7] & 0x04 ? (data[7] & 
0x03)-4 : (data[7] & 0x03);
+                                       input_report_rel(dev, REL_WHEEL, -rw);
                                } else
-                                       input_report_rel(dev, REL_WHEEL, 
(signed char) data[6]);
+                                       input_report_rel(dev, REL_WHEEL, 
-(signed char) data[6]);
                                /* fall through */
 
                        case 3: /* Mouse without wheel */
@@ -406,39 +429,27 @@ static void wacom_graphire_irq(struct ur
                }
        }
 
-       input_report_key(dev, wacom->tool[0], (data[1] & 0x10) ? id : 0);
+       if (data[1] & 0x10)
+               input_report_abs(dev, ABS_MISC, id); /* report tool id */
+       else
+               input_report_abs(dev, ABS_MISC, 0); /* reset tool id */
+       input_report_key(dev, wacom->tool[0], data[1] & 0x10);
        input_sync(dev);
 
        /* send pad data */
        if (wacom->features->type == WACOM_G4) {
-               /* fist time sending pad data */
-               if (wacom->tool[1] != BTN_TOOL_FINGER) {
-                       wacom->id[1] = 0;
-                       wacom->serial[1] = (data[7] & 0x38) >> 2;
-               }
-               if (data[7] & 0xf8) {
+               if ((wacom->serial[1] & 0xc0) != (data[7] & 0xf8)) {
+                       wacom->id[1] = 1;
+                       wacom->serial[1] = (data[7] & 0xf8);
                        input_report_key(dev, BTN_0, (data[7] & 0x40));
                        input_report_key(dev, BTN_4, (data[7] & 0x80));
-                       if (((data[7] & 0x38) >> 2) == (wacom->serial[1] & 
0x0e))
-                               /* alter REL_WHEEL value so X apps can get it */
-                               wacom->serial[1] += (wacom->serial[1] & 0x01) ? 
-1 : 1;
-                       else
-                                wacom->serial[1] = (data[7] & 0x38 ) >> 2;
-
-                       /* don't alter the value when there is no wheel event */
-                       if (wacom->serial[1] == 1)
-                               wacom->serial[1] = 0;
-                       rw = wacom->serial[1];
-                       rw = (rw & 0x08) ? -(rw & 0x07) : (rw & 0x07);
+                       rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
                        input_report_rel(dev, REL_WHEEL, rw);
-                       wacom->tool[1] = BTN_TOOL_FINGER;
-                       wacom->id[1] = data[7] & 0xf8;
-                       input_report_key(dev, wacom->tool[1], 0xf0);
+                       input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
                        input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
                } else if (wacom->id[1]) {
                        wacom->id[1] = 0;
-                       wacom->serial[1] = 0;
-                       input_report_key(dev, wacom->tool[1], 0);
+                       input_report_key(dev, BTN_TOOL_FINGER, 0);
                        input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
                }
                input_sync(dev);

We change the userland as well, but the bug submitter narrowed it
down to the kernel.

Here's the bug:
 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196565

The bug also mentions a regression with Volito, which seems unrelated.
However, the code contains changes affecting Volito specifically.

-- Pete

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to