diff options
Diffstat (limited to 'src/2.4.30x86-64/wacom.c')
-rw-r--r-- | src/2.4.30x86-64/wacom.c | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/src/2.4.30x86-64/wacom.c b/src/2.4.30x86-64/wacom.c index 50444d1..bc14c03 100644 --- a/src/2.4.30x86-64/wacom.c +++ b/src/2.4.30x86-64/wacom.c @@ -1,5 +1,5 @@ /* - * $Id: wacom.c,v 1.6 2006/02/13 05:24:23 pingc Exp $ + * $Id: wacom.c,v 1.7 2006/03/07 00:29:04 pingc Exp $ * * Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz> * Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk> @@ -287,6 +287,8 @@ static void wacom_graphire_irq(struct urb *urb) if (urb->status) return; + if (data[0] == 99) return; /* for Volito tablets */ + if (data[0] != 2) { printk(KERN_INFO "wacom_graphire_irq: received unknown report #%d\n", data[0]); @@ -310,10 +312,10 @@ static void wacom_graphire_irq(struct urb *urb) case 2: /* Mouse with wheel */ input_report_key(dev, BTN_MIDDLE, data[1] & 0x04); if ( strstr(wacom->features->name, "Graphire4") ) { - 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 */ @@ -352,34 +354,19 @@ static void wacom_graphire_irq(struct urb *urb) /* send pad data */ if ( strstr(wacom->features->name, "Graphire4") ) { - /* fist tine 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); } } @@ -632,8 +619,8 @@ static void wacom_intuos_irq(struct urb *urb) input_report_key(dev, BTN_MIDDLE, data[8] & 0x08); input_report_key(dev, BTN_RIGHT, data[8] & 0x10); /* mouse wheel is positive when rolled backwards */ - input_report_rel(dev, REL_WHEEL, (__u32)((data[8] & 0x02) >> 1) - - (__u32)(data[8] & 0x01)); + input_report_rel(dev, REL_WHEEL, (__u32)(data[8] & 0x01) + - (__u32)((data[8] & 0x02) >> 1)); /* I3 2D mouse side buttons */ if (strstr(wacom->features->name, "Intuos3")) |