Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 154091 Details for
Bug 223379
x11-drivers/linuxwacom - add USB TabletPC support
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Wacom module patch for linuxwacom by Andrew Zappacky
wacom-tpc-usb.patch (text/plain), 6.58 KB, created by
Michal Pytasz
on 2008-05-23 19:10:56 UTC
(
hide
)
Description:
Wacom module patch for linuxwacom by Andrew Zappacky
Filename:
MIME Type:
Creator:
Michal Pytasz
Created:
2008-05-23 19:10:56 UTC
Size:
6.58 KB
patch
obsolete
>diff -uNr src/2.6.22/wacom_wac.h src/2.6.22/wacom_wac.h >--- src/2.6.22/wacom_wac.h 2008-04-11 18:11:30.000000000 -0400 >+++ src/2.6.22/wacom_wac.h 2008-04-18 07:21:55.000000000 -0400 >@@ -27,6 +27,7 @@ > CINTIQ, > WACOM_BEE, > WACOM_MO, >+ TABLETPC, > MAX_TYPE > }; > >diff -uNr src/2.6.24/wacom_sys.c src/2.6.24/wacom_sys.c >--- src/2.6.24/wacom_sys.c 2008-04-11 18:11:30.000000000 -0400 >+++ src/2.6.24/wacom_sys.c 2008-04-18 07:21:55.000000000 -0400 >@@ -219,6 +219,12 @@ > input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER); > } > >+void >+input_dev_tpc (struct input_dev *input_dev, struct wacom_wac *wacom_wac) >+{ >+ input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER); >+} >+ > static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *id) > { > struct usb_device *dev = interface_to_usbdev(intf); >@@ -286,12 +292,17 @@ > goto fail3; > > /* Ask the tablet to report tablet data. Repeat until it succeeds */ >- do { >- rep_data[0] = rep_data[1] = 2; >- if(usb_set_report(intf, 3, 2, rep_data, 2) >= 0) >- error = usb_get_report(intf, 3, 2, rep_data, 2); >- } while ((error <= 0 || rep_data[1] != 2) && limit++ < 5); >- >+ if (wacom_wac->features->type == TABLETPC) { /* USB ISDv4 (TabletPC) doesn't support SetReport */ >+ usb_get_report(intf, 3, 2, rep_data, 2); >+ if (rep_data[0] != 2 || rep_data[1] != 0) >+ info("Got bad report from TabletPC, may not work properly"); >+ } else { >+ do { >+ rep_data[0] = rep_data[1] = 2; >+ if(usb_set_report(intf, 3, 2, rep_data, 2) >= 0) >+ error = usb_get_report(intf, 3, 2, rep_data, 2); >+ } while ((error <= 0 || rep_data[1] != 2) && limit++ < 5); >+ } > usb_set_intfdata(intf, wacom); > return 0; > >diff -uNr src/2.6.19/wacom.h src/2.6.19/wacom.h >--- src/2.6.19/wacom.h 2008-04-11 18:11:30.000000000 -0400 >+++ src/2.6.19/wacom.h 2008-04-18 07:21:55.000000000 -0400 >@@ -125,6 +125,7 @@ > extern void input_dev_i(struct input_dev *input_dev, struct wacom_wac *wacom_wac); > extern void input_dev_pl(struct input_dev *input_dev, struct wacom_wac *wacom_wac); > extern void input_dev_pt(struct input_dev *input_dev, struct wacom_wac *wacom_wac); >+extern void input_dev_tpc(struct input_dev *input_dev, struct wacom_wac *wacom_wac); > extern __u16 wacom_le16_to_cpu(unsigned char *data); > extern __u16 wacom_be16_to_cpu(unsigned char *data); > extern struct wacom_features * get_wacom_feature(const struct usb_device_id *id); >diff -uNr src/2.6.19/wacom_wac.c src/2.6.19/wacom_wac.c >--- src/2.6.19/wacom_wac.c 2008-04-11 18:11:30.000000000 -0400 >+++ src/2.6.19/wacom_wac.c 2008-04-18 11:10:48.000000000 -0400 >@@ -535,6 +535,92 @@ > return 1; > } > >+int wacom_tpc_irq (struct wacom_wac *wacom_wac, void *wcombo) >+{ >+ static int stylus_inrange; >+ char *data = wacom_wac->data; >+ struct wacom_combo *combo = wcombo; >+ struct urb *urb = combo->urb; >+ if (urb->actual_length == 5) { /* Finger */ >+ int absx = ((data[2] << 8) & 0xff00) + (data[1] & 0xff); >+ int absy = ((data[4] << 8) & 0xff00) + (data[3] & 0xff); >+ >+ if (stylus_inrange) { >+ if (wacom_wac->tool[1]) { >+ return 0; >+ } else { >+ wacom_report_key (wcombo, BTN_TOOL_PEN, 0); >+ wacom_report_key (wcombo, BTN_TOUCH, 0); >+ wacom_report_abs (wcombo, ABS_PRESSURE, 0); >+ wacom_wac->tool[1] = 1; >+ goto end; >+ } >+ } >+ wacom_wac->tool[1] = 0; >+ >+ absx = (absx * wacom_wac->features->x_max) / 4096; >+ absy = (absy * wacom_wac->features->y_max) / 4096; >+ wacom_report_key (wcombo, ABS_MISC, STYLUS_DEVICE_ID); >+ wacom_report_key (wcombo, BTN_TOOL_PEN, data[0] & 0x1); >+ wacom_report_key (wcombo, BTN_TOUCH, data[0] & 0x1); >+ wacom_report_abs (wcombo, ABS_X, absx); >+ wacom_report_abs (wcombo, ABS_Y, absy); >+ if (data[0] & 0x1) >+ wacom_report_abs (wcombo, ABS_PRESSURE, 255); >+ else >+ wacom_report_abs (wcombo, ABS_PRESSURE, 0); >+ } else { /* Stylus */ >+ int absx = ((data[3] << 8) & 0xff00) + (data[2] & 0xff); >+ int absy = ((data[5] << 8) & 0xff00) + (data[4] & 0xff); >+ int absp = ((data[7] << 8) & 0x0100) + (data[6] & 0xff); >+ int oldtool = wacom_wac->tool[0]; >+ stylus_inrange = data[1] & 0x20; >+ >+ if (data[1] == 0) { /* Out of range */ >+ wacom_wac->tool[0] = 0; >+ wacom_report_key (wcombo, BTN_TOOL_RUBBER, 0); >+ wacom_report_key (wcombo, BTN_TOOL_PEN, 0); >+ wacom_report_key (wcombo, BTN_TOUCH, 0); >+ wacom_report_key (wcombo, BTN_STYLUS, 0); >+ wacom_report_key (wcombo, BTN_STYLUS2, 0); >+ goto end; >+ } else if (data[1] & 0x8) { /* Eraser */ >+ wacom_wac->tool[0] = BTN_TOOL_RUBBER; >+ >+ if (oldtool == BTN_TOOL_PEN) { >+ wacom_report_key (wcombo, BTN_TOOL_PEN, 0); >+ wacom_report_key (wcombo, BTN_TOUCH, 0); >+ wacom_report_key (wcombo, BTN_STYLUS, 0); >+ wacom_report_key (wcombo, BTN_STYLUS2, 0); >+ goto end; >+ } >+ wacom_report_key (wcombo, BTN_TOOL_RUBBER, data[1] & 0x20); >+ wacom_report_key (wcombo, BTN_TOUCH, (data[1] & 0x4)); >+ wacom_report_abs (wcombo, ABS_MISC, STYLUS_DEVICE_ID); >+ } else { /* Pen */ >+ wacom_wac->tool[0] = BTN_TOOL_PEN; >+ >+ if (oldtool == BTN_TOOL_RUBBER) { >+ wacom_report_key (wcombo, BTN_TOOL_RUBBER, 0); >+ wacom_report_key (wcombo, BTN_TOUCH, 0); >+ goto end; >+ } >+ wacom_report_key (wcombo, BTN_TOOL_PEN, data[1] & 0x20); >+ wacom_report_key (wcombo, BTN_TOUCH, (data[1] & 0x1)); >+ wacom_report_abs (wcombo, ABS_MISC, STYLUS_DEVICE_ID); >+ } >+ >+ wacom_report_key (wcombo, BTN_STYLUS, data[1] & 0x2); >+ wacom_report_key (wcombo, BTN_STYLUS2, data[1] & 0x10); >+ wacom_report_abs (wcombo, ABS_X, absx); >+ wacom_report_abs (wcombo, ABS_Y, absy); >+ wacom_report_abs (wcombo, ABS_PRESSURE, absp); >+ } >+end: >+ wacom_input_sync(wcombo); >+ return 0; >+} >+ > int wacom_wac_irq(struct wacom_wac *wacom_wac, void *wcombo) > { > switch (wacom_wac->features->type) { >@@ -560,6 +646,9 @@ > case WACOM_BEE: > return (wacom_intuos_irq(wacom_wac, wcombo)); > break; >+ case TABLETPC: >+ return (wacom_tpc_irq(wacom_wac, wcombo)); >+ break; > default: > return 0; > } >@@ -596,6 +685,9 @@ > case PENPARTNER: > input_dev_pt(input_dev, wacom_wac); > break; >+ case TABLETPC: >+ input_dev_tpc(input_dev, wacom_wac); >+ break; > } > return; > } >@@ -651,6 +743,8 @@ > { "Wacom Cintiq 20WSX", 10, 86680, 54180, 1023, 63, WACOM_BEE }, > { "Wacom Cintiq 12WX", 10, 53020, 33440, 1023, 63, WACOM_BEE }, > { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 31, INTUOS }, >+ { "Wacom ISDv4 USB", 8, 26202, 16325, 255, 0, TABLETPC }, >+ { "Wacom ISDv4 USB", 8, 26202, 16325, 255, 0, TABLETPC }, > { } > }; > >@@ -705,6 +799,8 @@ > { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC5) }, > { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC6) }, > { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x47) }, >+ { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x90) }, >+ { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x93) }, > { } > }; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 223379
:
154087
| 154091 |
154113
|
154119
|
154121
|
154123