On Tuesday 25 July 2006 00:50, Pete Zaitcev wrote:
> Hi, Dmitry:
>
Hi Pete,
> 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]);
This change does indeed look suspicious, we used to report wheel without
negation pretty much since dawn of times and I am not sure why it was
changed. I am CCing Ping Cheng - he should know why this change was
necessary.
> /* 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
>
--
Dmitry
-------------------------------------------------------------------------
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
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel