diff options
author | pingc <pingc> | 2006-05-01 17:49:43 +0000 |
---|---|---|
committer | pingc <pingc> | 2006-05-01 17:49:43 +0000 |
commit | efcc12bd4d5c8fd83b0bcfb78107a9e764baf842 (patch) | |
tree | de0f7689bc681c373216070a094a79dbe9059418 | |
parent | b7049bfad7e7127b207383eb7a81d7f9803e9ccb (diff) | |
download | xf86-input-wacom-efcc12bd4d5c8fd83b0bcfb78107a9e764baf842.tar.gz |
Support X.Org 7pre-oldkremoval
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | acinclude.m4 | 69 | ||||
-rw-r--r-- | configure.in | 18 | ||||
-rw-r--r-- | src/2.4.22/hid-core.c | 4 | ||||
-rw-r--r-- | src/2.4.22/wacom.c | 57 | ||||
-rw-r--r-- | src/2.4.30x86-64/hid-core.c | 4 | ||||
-rw-r--r-- | src/2.4.30x86-64/wacom.c | 55 | ||||
-rw-r--r-- | src/2.4/hid-core.c | 4 | ||||
-rw-r--r-- | src/2.4/wacom.c | 56 | ||||
-rw-r--r-- | src/2.6.10/hid-core.c | 2 | ||||
-rw-r--r-- | src/2.6.10/wacom.c | 56 | ||||
-rw-r--r-- | src/2.6.11/hid-core.c | 2 | ||||
-rw-r--r-- | src/2.6.11/wacom.c | 56 | ||||
-rw-r--r-- | src/2.6.13/hid-core.c | 2 | ||||
-rw-r--r-- | src/2.6.13/wacom.c | 56 | ||||
-rw-r--r-- | src/2.6.14/hid-core.c | 2 | ||||
-rw-r--r-- | src/2.6.14/wacom.c | 56 | ||||
-rw-r--r-- | src/2.6.15/hid-core.c | 3 | ||||
-rw-r--r-- | src/2.6.15/wacom.c | 59 | ||||
-rw-r--r-- | src/2.6.16/hid-core.c | 5 | ||||
-rw-r--r-- | src/2.6.16/wacom.c | 59 | ||||
-rw-r--r-- | src/2.6.8/wacom.c | 56 | ||||
-rw-r--r-- | src/2.6.9/wacom.c | 56 | ||||
-rw-r--r-- | src/2.6/hid-core.c | 2 | ||||
-rw-r--r-- | src/2.6/wacom.c | 54 | ||||
-rw-r--r-- | src/Makefile.am | 8 | ||||
-rw-r--r-- | src/wacdump.c | 16 | ||||
-rw-r--r-- | src/wactablet.h | 20 | ||||
-rw-r--r-- | src/wacusb.c | 2 | ||||
-rw-r--r-- | src/wcmISDV4.c | 8 | ||||
-rw-r--r-- | src/wcmSerial.c | 62 | ||||
-rw-r--r-- | src/wcmUSB.c | 2 | ||||
-rw-r--r-- | src/xf86Wacom.h | 15 |
33 files changed, 628 insertions, 304 deletions
@@ -1,3 +1,9 @@ +2006-05-01 Ping Cheng <pingc@wacom.com> + * Updated DTF-521 support + * Updated PenPartner code in wacom.c (Nick Lamb) + * Support X.Org 7 wacom driver paths + * Removed SYSCALL for unnecessary statements (Andrew Zabolotny) + 2006-04-06 Ping Cheng <pingc@wacom.com> * Reday to release 0.7.3-1 diff --git a/acinclude.m4 b/acinclude.m4 index 1159b72..b103ac2 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -34,15 +34,22 @@ WCM_ARCH=`uname -m` AC_MSG_RESULT($WCM_ARCH) dnl WCM_XLIBDIR_DEFAULT=/usr/X11R6/lib +WCM_XLIBDIR_DEFAULT2=/usr/lib WCM_OPTION_XSERVER64=no IS64=`echo $WCM_ARCH | grep -c "64"` if test $IS64 != 0; then WCM_XLIBDIR_DEFAULT=/usr/X11R6/lib64 + WCM_XLIBDIR_DEFAULT2=/usr/lib64 WCM_OPTION_XSERVER64=yes fi -WCM_XORGSDK_DEFAULT=$WCM_XLIBDIR_DEFAULT/Server +if test -f "$WCM_XLIBDIR_DEFAULT/Server/xf86Version.h"; then + WCM_XORGSDK_DEFAULT=$WCM_XLIBDIR_DEFAULT/Server +else + WCM_XORGSDK_DEFAULT=/usr +fi + WCM_TCLTKDIR_DEFAULT=/usr -XF86SUBDIR=programs/Xserver/hw/xfree86/common +XF86SUBDIR=programs/Xserver/hw/xfree86 WCM_LINUXWACOMDIR=`pwd` WCM_ENV_NCURSES=no dnl Check kernel type @@ -212,59 +219,39 @@ fi ]) dnl AC_DEFUN([AC_WCM_CHECK_XORG_SDK],[ -dnl Check for Xorg sdk environment +dnl Check for X11 sdk environment +dnl handle default case AC_ARG_WITH(xorg-sdk, AS_HELP_STRING([--with-xorg-sdk=dir], [Specify Xorg SDK directory]), [ WCM_XORGSDK="$withval"; ]) if test x$WCM_ENV_XF86 != xyes; then - dnl handle default case + dnl handle default case if test "$WCM_XORGSDK" = "yes" || test "$WCM_XORGSDK" == ""; then WCM_XORGSDK=$WCM_XORGSDK_DEFAULT fi - if test -n "$WCM_XORGSDK"; then AC_MSG_CHECKING(for valid Xorg SDK) if test -f $WCM_XORGSDK/include/xf86Version.h; then + WCM_XORGSDK=$WCM_XORGSDK/include + WCM_ENV_XORGSDK=yes + AC_MSG_RESULT(ok) + elif test -f $WCM_XORGSDK/include/xorg/xf86Version.h; then WCM_ENV_XORGSDK=yes + WCM_XORGSDK=$WCM_XORGSDK/include/xorg AC_MSG_RESULT(ok) elif test -f $WCM_XORGSDK/xc/include/xf86Version.h; then WCM_ENV_XORGSDK=yes - $WCM_XORGSDK=$WCM_XORGSDK/xc + WCM_XORGSDK=$WCM_XORGSDK/xc/include AC_MSG_RESULT(ok) else + WCM_ENV_XORGSDK=no AC_MSG_RESULT("xf86Version.h missing") - AC_MSG_RESULT("Tried $WCM_XORGSDK/include and WCM_XORGSDK/xc/include") + AC_MSG_RESULT([Tried $WCM_XORGSDK/include, $WCM_XORGSDK/include/xorg and $WCM_XORGSDK/xc/include]) fi - WCM_XORGSDK=`(cd $WCM_XORGSDK; pwd)` fi fi AM_CONDITIONAL(WCM_ENV_XORGSDK, [test x$WCM_ENV_XORGSDK = xyes]) ]) -AC_DEFUN([AC_WCM_CHECK_XFREE86SOURCE],[ -dnl Check for X build environment -if test -d x-includes; then - WCM_XF86DIR=x-includes -fi -AC_ARG_WITH(xf86, -AS_HELP_STRING([--with-xf86=dir], [Specify XF86 build directory]), -[ WCM_XF86DIR="$withval"; ]) -if test -n "$WCM_XF86DIR"; then - AC_MSG_CHECKING(for valid XFree86 build environment) - if test -f $WCM_XF86DIR/xc/$XF86SUBDIR/xf86Version.h; then - WCM_ENV_XF86=yes - WCM_XF86DIR="$WCM_XF86DIR/xc" - AC_MSG_RESULT(ok) - elif test -f $WCM_XF86DIR/$XF86SUBDIR/xf86Version.h; then - WCM_ENV_XF86=yes - AC_MSG_RESULT(ok) - else - AC_MSG_RESULT("xf86Version.h missing") - AC_MSG_RESULT("Tried $WCM_XF86DIR/$XF86SUBDIR and $WCM_XF86DIR/xc/$XF86SUBDIR") - fi - WCM_XF86DIR=`(cd $WCM_XF86DIR; pwd)` -fi -AM_CONDITIONAL(WCM_ENV_XF86, [test x$WCM_ENV_XF86 = xyes]) -]) AC_DEFUN([AC_WCM_CHECK_XSOURCE],[ dnl Check for X build environment if test -d x-includes; then @@ -283,10 +270,10 @@ if test -n "$WCM_XF86DIR"; then WCM_ENV_XF86=yes AC_MSG_RESULT(ok) else - AC_MSG_RESULT("xf86Version.h missing") - AC_MSG_RESULT("Tried $WCM_XF86DIR/$XF86SUBDIR and $WCM_XF86DIR/xc/$XF86SUBDIR") + WCM_ENV_XF86=no + AC_MSG_RESULT(xf86Version.h missing) + AC_MSG_RESULT(Tried $WCM_XF86DIR/$XF86SUBDIR and $WCM_XF86DIR/xc/$XF86SUBDIR) fi - WCM_XF86DIR=`(cd $WCM_XF86DIR; pwd)` fi AM_CONDITIONAL(WCM_ENV_XF86, [test x$WCM_ENV_XF86 = xyes]) ]) @@ -305,15 +292,19 @@ if test "$WCM_XLIBDIR" == "" || test "$WCM_XLIBDIR" == "yes"; then WCM_ENV_XLIB=yes WCM_XLIBDIR=$WCM_XLIBDIR_DEFAULT AC_MSG_RESULT(found) + elif test -a $WCM_XLIBDIR_DEFAULT2/libX11.so; then + WCM_ENV_XLIB=yes + WCM_XLIBDIR=$WCM_XLIBDIR_DEFAULT2 + AC_MSG_RESULT(found) else - AC_MSG_RESULT(not found, tried $WCM_XLIBDIR_DEFAULT/X11) + AC_MSG_RESULT([not found, tried $WCM_XLIBDIR_DEFAULT/X11 and $WCM_XLIBDIR_DEFAULT2]) WCM_ENV_XLIB=no fi elif test -d $WCM_XLIBDIR; then WCM_ENV_XLIB=yes AC_MSG_RESULT(found) else - AC_MSG_RESULT(not found, tried $WCM_XLIBDIR) + AC_MSG_RESULT([not found, tried $WCM_XLIBDIR]) WCM_ENV_XLIB=no fi ]) @@ -428,7 +419,7 @@ elif test "$WCM_TKDIR" != "no"; then CFLAGS="$CFLAGS -I$WCM_TKDIR" fi else - AC_MSG_RESULT(not found; tried $WCM_TKDIR/include/tk.h and $WCM_TKDIR/tk.h) + AC_MSG_RESULT([not found; tried $WCM_TKDIR/include/tk.h and $WCM_TKDIR/tk.h]) echo "***"; echo "*** WARNING:" echo "*** The tk library does not appear to be installed." echo "*** Do you have the tk rpm or equivalent package properly" diff --git a/configure.in b/configure.in index 75d395d..f2e5174 100644 --- a/configure.in +++ b/configure.in @@ -36,12 +36,13 @@ if test x$WCM_ISLINUX = xyes; then AC_WCM_CHECK_MODVER fi -dnl Check for X source +dnl Check for X source or X SDK AC_WCM_CHECK_XSOURCE -if test x$WCM_ENV_XF86 != xyes; then - AC_WCM_CHECK_XFREE86SOURCE -fi AC_WCM_CHECK_XORG_SDK +# Define X_CFLAGS, X_LIBS, X_EXTRA_LIBS and X_PRELIBS as required if X +# is found, else defines X_DISPLAY_MISSING. We need at least X_CFLAGS. +AC_PATH_XTRA + dnl Check for TCL, TK, and XLib AC_WCM_CHECK_XLIB @@ -309,9 +310,13 @@ if test "$enable_tabletdev" != "no"; then fi dnl Check for dlloader +WCM_MODDIR=$WCM_XLIBDIR/modules/input WCM_OPTION_DLLOADER=no if test -f $WCM_XLIBDIR/modules/input/wacom_drv.so; then WCM_OPTION_DLLOADER=yes +elif test -f $WCM_XLIBDIR/xorg/modules/input/mouse_drv.so; then + WCM_OPTION_DLLOADER=yes + WCM_MODDIR=$WCM_XLIBDIR/xorg/modules/input fi AC_ARG_ENABLE(dlloader, AC_HELP_STRING([--enable-dlloader], [Use dlloader [[default=usually]]]), @@ -514,9 +519,10 @@ AC_SUBST(WCM_MODVER) AC_SUBST(WCM_KERNELDIR) AC_SUBST(WCM_KERNEL_VER) AC_SUBST(WCM_LINUXWACOMDIR) -AC_SUBST(WCM_XORGSDK) AC_SUBST(WCM_XF86DIR) +AC_SUBST(WCM_XORGSDK) AC_SUBST(WCM_XLIBDIR) +AC_SUBST(WCM_MODDIR) AC_SUBST(WCM_XSERVER64) #AC_SUBST(WCM_OPTION_DLLOADER) AC_SUBST(WCM_NO_MERGE_CONSTANTS) @@ -564,7 +570,7 @@ echo " linux kernel - $WCM_ISLINUX $WCM_KERNEL_VER" echo " module versioning - $WCM_OPTION_MODVER $WCM_MODVER" echo " kernel source - $WCM_ENV_KERNEL $WCM_KERNELDIR" if test "$WCM_ENV_XF86" == "yes"; then -echo " XFree86 - $WCM_ENV_XF86 $WCM_XF86DIR" +echo " X SOURCE - $WCM_ENV_XF86 $WCM_XF86DIR" else echo " Xorg SDK - $WCM_ENV_XORGSDK $WCM_XORGSDK" fi diff --git a/src/2.4.22/hid-core.c b/src/2.4.22/hid-core.c index 37d201a..752e106 100644 --- a/src/2.4.22/hid-core.c +++ b/src/2.4.22/hid-core.c @@ -1,5 +1,5 @@ /* - * $Id: hid-core.c,v 1.7 2006/02/13 05:24:22 pingc Exp $ + * $Id: hid-core.c,v 1.8 2006/05/01 17:49:43 pingc Exp $ * * Copyright (c) 1999 Andreas Gal * Copyright (c) 2000-2001 Vojtech Pavlik @@ -1246,7 +1246,7 @@ struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, diff --git a/src/2.4.22/wacom.c b/src/2.4.22/wacom.c index 0bcd542..5f02ff1 100644 --- a/src/2.4.22/wacom.c +++ b/src/2.4.22/wacom.c @@ -1,5 +1,5 @@ /* - * $Id: wacom.c,v 1.22 2006/03/28 01:35:06 pingc Exp $ + * $Id: wacom.c,v 1.23 2006/05/01 17:49:43 pingc Exp $ * * Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz> * Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk> @@ -311,28 +311,47 @@ static void wacom_penpartner_irq(struct urb *urb) struct wacom *wacom = urb->context; unsigned char *data = wacom->data; struct input_dev *dev = &wacom->dev; - int leftmb = (((signed char)data[6] > -80) && !(data[5] &0x20)); if (urb->status) return; - if (data[0] != 2 && data[0] != 5) - { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - wacom_request_reset(wacom); - return; - } - - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, data[2] << 8 | data[1]); - input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, leftmb); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - - input_event(dev, EV_MSC, MSC_SERIAL, leftmb); + switch (data[0]) { + case 1: + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, data[2] << 8 | data[1])); + input_report_abs(dev, ABS_Y, data[4] << 8 | data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_event(dev, EV_MSC, MSC_SERIAL, data[5] & 0x80); + break; + case 2: + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, data[2] << 8 | data[1]); + input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_event(dev, EV_MSC, MSC_SERIAL, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } } + static void wacom_graphire_irq(struct urb *urb) { struct wacom *wacom = urb->context; @@ -884,7 +903,7 @@ struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB5), driver_info: 38 }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x3F), driver_info: 39 }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0), driver_info: 40 }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3), driver_info: 41 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4), driver_info: 41 }, /* some Intuos2 6x8's erroneously report as 0x47; * multiple confirmed examples exist. */ diff --git a/src/2.4.30x86-64/hid-core.c b/src/2.4.30x86-64/hid-core.c index 28f9908..baaca31 100644 --- a/src/2.4.30x86-64/hid-core.c +++ b/src/2.4.30x86-64/hid-core.c @@ -1,5 +1,5 @@ /* - * $Id: hid-core.c,v 1.3 2006/02/13 05:24:23 pingc Exp $ + * $Id: hid-core.c,v 1.4 2006/05/01 17:49:43 pingc Exp $ * * Copyright (c) 1999 Andreas Gal * Copyright (c) 2000-2001 Vojtech Pavlik @@ -1277,7 +1277,7 @@ struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, diff --git a/src/2.4.30x86-64/wacom.c b/src/2.4.30x86-64/wacom.c index 5fe3b17..23b58b4 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.8 2006/03/28 01:35:06 pingc Exp $ + * $Id: wacom.c,v 1.9 2006/05/01 17:49:43 pingc Exp $ * * Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz> * Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk> @@ -257,25 +257,44 @@ static void wacom_penpartner_irq(struct urb *urb) struct wacom *wacom = urb->context; unsigned char *data = wacom->data; struct input_dev *dev = &wacom->dev; - int leftmb = (((signed char)data[6] > -80) && !(data[5] &0x20)); if (urb->status) return; - if (data[0] != 2 && data[0] != 5) - { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - return; - } - - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, data[2] << 8 | data[1]); - input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, leftmb); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - - input_event(dev, EV_MSC, MSC_SERIAL, leftmb); + switch (data[0]) { + case 1: + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, data[2] << 8 | data[1])); + input_report_abs(dev, ABS_Y, data[4] << 8 | data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_event(dev, EV_MSC, MSC_SERIAL, data[5] & 0x80); + break; + case 2: + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, data[2] << 8 | data[1]); + input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_event(dev, EV_MSC, MSC_SERIAL, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } } static void wacom_graphire_irq(struct urb *urb) @@ -827,7 +846,7 @@ struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB5), driver_info: 38 }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x3F), driver_info: 39 }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0), driver_info: 40 }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3), driver_info: 41 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4), driver_info: 41 }, /* some Intuos2 6x8's erroneously report as 0x47; * multiple confirmed examples exist. */ diff --git a/src/2.4/hid-core.c b/src/2.4/hid-core.c index ab81d6b..01bf4c7 100644 --- a/src/2.4/hid-core.c +++ b/src/2.4/hid-core.c @@ -1,5 +1,5 @@ /* - * $Id: hid-core.c,v 1.8 2006/02/13 05:24:22 pingc Exp $ + * $Id: hid-core.c,v 1.9 2006/05/01 17:49:43 pingc Exp $ * * Copyright (c) 1999 Andreas Gal * Copyright (c) 2000-2001 Vojtech Pavlik @@ -1184,7 +1184,7 @@ struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, diff --git a/src/2.4/wacom.c b/src/2.4/wacom.c index cd7cf5e..0164f4b 100644 --- a/src/2.4/wacom.c +++ b/src/2.4/wacom.c @@ -1,5 +1,5 @@ /* - * $Id: wacom.c,v 1.23 2006/03/28 01:35:06 pingc Exp $ + * $Id: wacom.c,v 1.24 2006/05/01 17:49:43 pingc Exp $ * * Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz> * Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk> @@ -311,26 +311,44 @@ static void wacom_penpartner_irq(struct urb *urb) struct wacom *wacom = urb->context; unsigned char *data = wacom->data; struct input_dev *dev = &wacom->dev; - int leftmb = (((signed char)data[6] > -80) && !(data[5] &0x20)); if (urb->status) return; - if (data[0] != 2 && data[0] != 5) - { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - wacom_request_reset(wacom); - return; - } - - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, data[2] << 8 | data[1]); - input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, leftmb); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - - input_event(dev, EV_MSC, MSC_SERIAL, leftmb); + switch (data[0]) { + case 1: + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, data[2] << 8 | data[1])); + input_report_abs(dev, ABS_Y, data[4] << 8 | data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_event(dev, EV_MSC, MSC_SERIAL, data[5] & 0x80); + break; + case 2: + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, data[2] << 8 | data[1]); + input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_event(dev, EV_MSC, MSC_SERIAL, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } } static void wacom_graphire_irq(struct urb *urb) @@ -885,7 +903,7 @@ struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB5), driver_info: 38 }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x3F), driver_info: 39 }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0), driver_info: 40 }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3), driver_info: 41 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4), driver_info: 41 }, /* some Intuos2 6x8's erroneously report as 0x47; * multiple confirmed examples exist. */ diff --git a/src/2.6.10/hid-core.c b/src/2.6.10/hid-core.c index 796723c..b3aa49f 100644 --- a/src/2.6.10/hid-core.c +++ b/src/2.6.10/hid-core.c @@ -1541,7 +1541,7 @@ static struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30, HID_QUIRK_IGNORE }, diff --git a/src/2.6.10/wacom.c b/src/2.6.10/wacom.c index 51f47a6..e0ba2cb 100644 --- a/src/2.6.10/wacom.c +++ b/src/2.6.10/wacom.c @@ -337,20 +337,42 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; - } - - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); - input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; + } exit: retval = usb_submit_urb (urb, GFP_ATOMIC); @@ -845,7 +867,7 @@ static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB5) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x3F) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x47) }, { } }; @@ -946,6 +968,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: wacom->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } wacom->dev.absmax[ABS_X] = wacom->features->x_max; diff --git a/src/2.6.11/hid-core.c b/src/2.6.11/hid-core.c index 8f25ef2..eaa2e39 100644 --- a/src/2.6.11/hid-core.c +++ b/src/2.6.11/hid-core.c @@ -1575,7 +1575,7 @@ static struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, diff --git a/src/2.6.11/wacom.c b/src/2.6.11/wacom.c index 4a3996f..0d84805 100644 --- a/src/2.6.11/wacom.c +++ b/src/2.6.11/wacom.c @@ -339,20 +339,42 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; - } - - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); - input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; + } exit: retval = usb_submit_urb (urb, GFP_ATOMIC); @@ -835,7 +857,7 @@ static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, @@ -949,6 +971,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: wacom->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } wacom->dev.absmax[ABS_X] = wacom->features->x_max; diff --git a/src/2.6.13/hid-core.c b/src/2.6.13/hid-core.c index 052c1e8..3151721 100644 --- a/src/2.6.13/hid-core.c +++ b/src/2.6.13/hid-core.c @@ -1547,7 +1547,7 @@ static struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, diff --git a/src/2.6.13/wacom.c b/src/2.6.13/wacom.c index 7b69435..2886058 100644 --- a/src/2.6.13/wacom.c +++ b/src/2.6.13/wacom.c @@ -330,20 +330,42 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; - } - - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); - input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; + } exit: retval = usb_submit_urb (urb, GFP_ATOMIC); @@ -814,7 +836,7 @@ static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, @@ -922,6 +944,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: wacom->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } wacom->dev.absmax[ABS_X] = wacom->features->x_max; diff --git a/src/2.6.14/hid-core.c b/src/2.6.14/hid-core.c index 6328416..5f8fb07 100644 --- a/src/2.6.14/hid-core.c +++ b/src/2.6.14/hid-core.c @@ -1556,7 +1556,7 @@ static struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, diff --git a/src/2.6.14/wacom.c b/src/2.6.14/wacom.c index 5a8b6d4..5549f67 100644 --- a/src/2.6.14/wacom.c +++ b/src/2.6.14/wacom.c @@ -329,20 +329,42 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; - } - - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); - input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; + } exit: retval = usb_submit_urb (urb, GFP_ATOMIC); @@ -811,7 +833,7 @@ static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, @@ -919,6 +941,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: wacom->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } wacom->dev.absmax[ABS_X] = wacom->features->x_max; diff --git a/src/2.6.15/hid-core.c b/src/2.6.15/hid-core.c index 9384ec0..e5d6454 100644 --- a/src/2.6.15/hid-core.c +++ b/src/2.6.15/hid-core.c @@ -9,6 +9,7 @@ * THIS IS FOR TESTING PURPOSES * * v2.6-2.6.15.4-pc-0.1 - initial release based on 2.6.15.4 + * v2.6-2.6.15.4-pc-0.2 - Added DTF521, I3 12x12, and I3 12x19 * */ @@ -1558,7 +1559,7 @@ static struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, diff --git a/src/2.6.15/wacom.c b/src/2.6.15/wacom.c index 1c4b76a..6b3089f 100644 --- a/src/2.6.15/wacom.c +++ b/src/2.6.15/wacom.c @@ -62,6 +62,7 @@ * * v1.44-2.6.15.4-pc-0.1 - initial release based on 2.6.15.4 * v1.44-2.6.15.4-pc-0.2 - Fixed serial id report issue + * v1.44-2.6.15.4-pc-0.3 - Added DTF 521, I3 12x12, and I3 12x19 * */ @@ -85,7 +86,7 @@ /* * Version Information */ -#define DRIVER_VERSION "v1.44-2.6.15.4-pc-0.1" +#define DRIVER_VERSION "v1.44-2.6.15.4-pc-0.3" #define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>" #define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver" #define DRIVER_LICENSE "GPL" @@ -330,20 +331,42 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; - } - - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); - input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; + } exit: retval = usb_submit_urb (urb, GFP_ATOMIC); @@ -812,7 +835,7 @@ static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, @@ -939,6 +962,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } endpoint = &intf->cur_altsetting->endpoint[0].desc; diff --git a/src/2.6.16/hid-core.c b/src/2.6.16/hid-core.c index 9178bfb..5323202 100644 --- a/src/2.6.16/hid-core.c +++ b/src/2.6.16/hid-core.c @@ -9,6 +9,7 @@ * THIS IS FOR TESTING PURPOSES * * v2.6-2.6.16-pc-0.1 - initial release based on 2.6.16 + * v2.6-2.6.16-pc-0.2 - Added DTF 521, I3 12x12, and I3 12x19 */ /* @@ -44,7 +45,7 @@ * Version Information */ -#define DRIVER_VERSION "v2.6-2.6.16-pc-0.1" +#define DRIVER_VERSION "v2.6-2.6.16-pc-0.2" #define DRIVER_AUTHOR "Andreas Gal, Vojtech Pavlik" #define DRIVER_DESC "USB HID core driver" #define DRIVER_LICENSE "GPL" @@ -1570,7 +1571,7 @@ static const struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, diff --git a/src/2.6.16/wacom.c b/src/2.6.16/wacom.c index 83bf026..9e99a6c 100644 --- a/src/2.6.16/wacom.c +++ b/src/2.6.16/wacom.c @@ -61,6 +61,7 @@ * THIS IS FOR TESTING PURPOSES * * v1.44-2.6.16-pc-0.1 - initial release based on 2.6.16 + * v1.44-2.6.16-pc-0.2 - Added DTF 521, I3 12x12, and I3 12x19 */ /* @@ -83,7 +84,7 @@ /* * Version Information */ -#define DRIVER_VERSION "v1.44-2.6.16-pc-0.1" +#define DRIVER_VERSION "v1.44-2.6.16-pc-0.2" #define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>" #define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver" #define DRIVER_LICENSE "GPL" @@ -329,20 +330,42 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; - } - - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); - input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; + } exit: retval = usb_submit_urb (urb, GFP_ATOMIC); @@ -811,7 +834,7 @@ static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, @@ -938,6 +961,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } endpoint = &intf->cur_altsetting->endpoint[0].desc; diff --git a/src/2.6.8/wacom.c b/src/2.6.8/wacom.c index 62846ab..53f6ac9 100644 --- a/src/2.6.8/wacom.c +++ b/src/2.6.8/wacom.c @@ -337,20 +337,42 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; - } - - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, id); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, le16_to_cpu(get_unaligned((u16 *) &data[1]))); - input_report_abs(dev, ABS_Y, le16_to_cpu(get_unaligned((u16 *) &data[3]))); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; + } exit: retval = usb_submit_urb (urb, GFP_ATOMIC); @@ -833,7 +855,7 @@ static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, @@ -947,6 +969,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: wacom->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } wacom->dev.absmax[ABS_X] = wacom->features->x_max; diff --git a/src/2.6.9/wacom.c b/src/2.6.9/wacom.c index 8dd6a4e..71345d3 100644 --- a/src/2.6.9/wacom.c +++ b/src/2.6.9/wacom.c @@ -337,20 +337,42 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; - } - - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); - input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; + } exit: retval = usb_submit_urb (urb, GFP_ATOMIC); @@ -833,7 +855,7 @@ static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, @@ -947,6 +969,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: wacom->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } wacom->dev.absmax[ABS_X] = wacom->features->x_max; diff --git a/src/2.6/hid-core.c b/src/2.6/hid-core.c index 7d5e4d7..1e5b5b1 100644 --- a/src/2.6/hid-core.c +++ b/src/2.6/hid-core.c @@ -1406,7 +1406,7 @@ struct hid_blacklist { { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE }, - { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 4, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_6000, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE }, diff --git a/src/2.6/wacom.c b/src/2.6/wacom.c index a5367fa..9b864b9 100644 --- a/src/2.6/wacom.c +++ b/src/2.6/wacom.c @@ -336,21 +336,43 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs) goto exit; } - if (data[0] != 2) { - printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); - goto exit; + switch (data[0]) { + case 1: + input_regs(dev, regs); + if (data[5] & 0x80) { + wacom->tool[0] = (data[5] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + wacom->id[0] = (data[5] & 0x20) ? ERASER_DEVICE_ID : STYLUS_DEVICE_ID; + input_report_key(dev, wacom->tool[0], 1); + input_report_abs(dev, ABS_MISC, wacom->id[0]); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -127)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + } else { + input_report_key(dev, wacom->tool[0], 0); + input_report_abs(dev, ABS_MISC, 0); /* report tool id */ + input_report_abs(dev, ABS_PRESSURE, -1); + input_report_key(dev, BTN_TOUCH, 0); + } + input_sync(dev); + break; + case 2: + input_regs(dev, regs); + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ + input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); + input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + input_sync(dev); + break; + default: + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + goto exit; } - input_regs(dev, regs); - input_report_key(dev, BTN_TOOL_PEN, 1); - input_report_abs(dev, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */ - input_report_abs(dev, ABS_X, data[2] << 8 | data[1]); - input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]); - input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); - input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20)); - input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); - input_sync(dev); - exit: retval = usb_submit_urb (urb, GFP_ATOMIC); if (retval) @@ -832,7 +854,7 @@ struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) }, - { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC3) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC4) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, @@ -944,6 +966,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i case PL: wacom->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS2) | BIT(BTN_TOOL_RUBBER); break; + + case PENPARTNER: + input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_RUBBER); + break; } wacom->dev.absmax[ABS_X] = wacom->features->x_max; diff --git a/src/Makefile.am b/src/Makefile.am index 6e3ad8d..938d65c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -7,7 +7,7 @@ lib_LTLIBRARIES = libwacomcfg.la wacomcfgdir = $(includedir)/wacomcfg wacomcfg_HEADERS = wacomcfg.h -x86moduledir = @WCM_XLIBDIR@/modules/input +x86moduledir = @WCM_MODDIR@ x86module_DATA = @WCM_XF86MODULES@ AM_CFLAGS = -Wall -pedantic @@ -52,7 +52,7 @@ ARCHITECTURE =@WCM_ARCH@ XSERVER64 =@WCM_XSERVER64@ if WCM_ENV_XORGSDK -DRIVER_INCLUDES = -I$(XORGSDK_DIR)/include +DRIVER_INCLUDES = -I$(XORGSDK_DIR) $(X_CFLAGS) endif if WCM_ENV_XF86 @@ -91,7 +91,7 @@ wcmFilter.o: wcmFilter.c xf86Wacom.h $(XF86OBJS): xf86Wacom.c Makefile $(CC) $(CFLAGS) $(DEPFLAGS) $(DLLOADER) -pipe -ansi \ -pedantic -Wall -Wpointer-arith $(NO_MERGE_CONSTANTS) \ - -I. $(DRIVER_INCLUDES) -Dlinux \ + -I$(srcdir) $(DRIVER_INCLUDES) -Dlinux \ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE \ -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE \ -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP -DXCSECURITY \ @@ -103,7 +103,7 @@ $(XF86OBJS): xf86Wacom.c Makefile -DX_BYTE_ORDER=X_LITTLE_ENDIAN $(XSERVER64) \ -DNDEBUG -DFUNCPROTO=15 \ -DNARROWPROTO -DIN_MODULE -DXFree86Module $(LINUX_INPUT) \ - -o $@ -c $(subst .o,.c,$@) + -o $@ -c $(srcdir)/$(subst .o,.c,$@) if WCM_DLLOADER wacom_drv.so: $(XF86OBJS) diff --git a/src/wacdump.c b/src/wacdump.c index 3b5fa58..6522189 100644 --- a/src/wacdump.c +++ b/src/wacdump.c @@ -78,11 +78,11 @@ struct KEY_STATE int nValue; }; - struct ABS_STATE gAbsState[WACOMFIELD_MAX]; - struct KEY_STATE gKeyState[WACOMBUTTON_MAX]; - int gnSerialDataRow = 0; - int gbCursesRunning = 0; - FILE* gLogFile = NULL; +struct ABS_STATE gAbsState[WACOMFIELD_MAX]; +struct KEY_STATE gKeyState[WACOMBUTTON_MAX]; +int gnSerialDataRow = 0; +int gbCursesRunning = 0; +FILE* gLogFile = NULL; void Usage(void) { @@ -329,7 +329,10 @@ const char* GetSerialButton(unsigned int uButton) { "LEFT", "MIDDLE", "RIGHT", "EXTRA", "SIDE", "TOUCH", "STYLUS", "STYLUS2", "BT0", "BT1", - "BT2", "BT3", "BT4", "BT5", "BT6", "BT7" + "BT2", "BT3", "BT4", "BT5", "BT6", "BT7", + "BT8", "BT9", "BT10", "BT11", "BT12", "BT13", + "BT14", "BT15", "BT16", "BT17", "BT18", "BT19", + "BT20", "BT21", "BT22", "BT23" }; return (uButton >= WACOMBUTTON_MAX) ? "FIELD?" : xszButton[uButton]; @@ -627,4 +630,3 @@ int main(int argc, char** argv) return 0; } - diff --git a/src/wactablet.h b/src/wactablet.h index f3b8805..5827daf 100644 --- a/src/wactablet.h +++ b/src/wactablet.h @@ -2,7 +2,7 @@ ** wactablet.h ** ** Copyright (C) 2002 - 2004 - John E. Joganic -** Copyright (C) 2003 - 2005 - Ping Cheng +** Copyright (C) 2003 - 2006 - Ping Cheng ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -89,7 +89,23 @@ struct _WACOMMODEL #define WACOMBUTTON_BT5 13 #define WACOMBUTTON_BT6 14 #define WACOMBUTTON_BT7 15 -#define WACOMBUTTON_MAX 16 +#define WACOMBUTTON_BT8 16 +#define WACOMBUTTON_BT9 17 +#define WACOMBUTTON_BT10 18 +#define WACOMBUTTON_BT11 19 +#define WACOMBUTTON_BT12 20 +#define WACOMBUTTON_BT13 21 +#define WACOMBUTTON_BT14 22 +#define WACOMBUTTON_BT15 23 +#define WACOMBUTTON_BT16 24 +#define WACOMBUTTON_BT17 25 +#define WACOMBUTTON_BT18 26 +#define WACOMBUTTON_BT19 27 +#define WACOMBUTTON_BT20 28 +#define WACOMBUTTON_BT21 29 +#define WACOMBUTTON_BT22 30 +#define WACOMBUTTON_BT23 31 +#define WACOMBUTTON_MAX 32 #define WACOMFIELD_TOOLTYPE 0 #define WACOMFIELD_SERIAL 1 diff --git a/src/wacusb.c b/src/wacusb.c index 6dcf353..0865ea4 100644 --- a/src/wacusb.c +++ b/src/wacusb.c @@ -198,7 +198,7 @@ static int USBIdentifyModel(USBTABLET* pUSB); { "MODEL_PL510", "Wacom PL510", 8, 0x38 }, { "MODEL_DTU710", "Wacom PL710", 9, 0x39 }, { "MODEL_DTF720", "Wacom DTF720", 10, 0xC0 }, - { "MODEL_DTF521", "Wacom DTF521", 11, 0xC3 }, + { "MODEL_DTF521", "Wacom DTF521", 11, 0xC4 }, { NULL } }; diff --git a/src/wcmISDV4.c b/src/wcmISDV4.c index 1e2a112..a75808e 100644 --- a/src/wcmISDV4.c +++ b/src/wcmISDV4.c @@ -83,7 +83,7 @@ static Bool isdv4Init(LocalDevicePtr local) return !Success; /* Send stop command to the tablet */ - SYSCALL(err = xf86WcmWrite(local->fd, WC_ISDV4_STOP, strlen(WC_ISDV4_STOP))); + err = xf86WcmWrite(local->fd, WC_ISDV4_STOP, strlen(WC_ISDV4_STOP)); if (err == -1) { ErrorF("Wacom xf86WcmWrite error : %s\n", strerror(errno)); @@ -122,7 +122,7 @@ static int isdv4GetRanges(LocalDevicePtr local) /* Send query command to the tablet */ do { - SYSCALL(nr = xf86WcmWrite(local->fd, WC_ISDV4_QUERY, strlen(WC_ISDV4_QUERY))); + nr = xf86WcmWrite(local->fd, WC_ISDV4_QUERY, strlen(WC_ISDV4_QUERY)); if ((nr == -1) && (errno != EAGAIN)) { ErrorF("Wacom xf86WcmWrite error : %s", strerror(errno)); @@ -144,7 +144,7 @@ static int isdv4GetRanges(LocalDevicePtr local) { if ((nr = xf86WcmWaitForTablet(local->fd)) > 0) { - SYSCALL(nr = xf86WcmRead(local->fd, data, 11)); + nr = xf86WcmRead(local->fd, data, 11); if ((nr == -1) && (errno != EAGAIN)) { ErrorF("Wacom xf86WcmRead error : %s\n", strerror(errno)); @@ -183,7 +183,7 @@ static int isdv4StartTablet(LocalDevicePtr local) int err; /* Tell the tablet to start sending coordinates */ - SYSCALL(err = xf86WcmWrite(local->fd, WC_ISDV4_SAMPLING, (strlen(WC_ISDV4_SAMPLING)))); + err = xf86WcmWrite(local->fd, WC_ISDV4_SAMPLING, (strlen(WC_ISDV4_SAMPLING))); if (err == -1) { diff --git a/src/wcmSerial.c b/src/wcmSerial.c index 5b22676..710ef61 100644 --- a/src/wcmSerial.c +++ b/src/wcmSerial.c @@ -265,7 +265,7 @@ char* xf86WcmSendRequest(int fd, const char* request, char* answer, int maxlen) /* send request string */ do { - SYSCALL(len = xf86WcmWrite(fd, request, strlen(request))); + len = xf86WcmWrite(fd, request, strlen(request)); if ((len == -1) && (errno != EAGAIN)) { ErrorF("Wacom xf86WcmWrite error : %s", strerror(errno)); @@ -292,7 +292,7 @@ char* xf86WcmSendRequest(int fd, const char* request, char* answer, int maxlen) { if ((nr = xf86WcmWaitForTablet(fd)) > 0) { - SYSCALL(nr = xf86WcmRead(fd, answer, 1)); + nr = xf86WcmRead(fd, answer, 1); if ((nr == -1) && (errno != EAGAIN)) { ErrorF("Wacom xf86WcmRead error : %s\n", @@ -322,7 +322,7 @@ char* xf86WcmSendRequest(int fd, const char* request, char* answer, int maxlen) { if ((nr = xf86WcmWaitForTablet(fd)) > 0) { - SYSCALL(nr = xf86WcmRead(fd, answer+1, 1)); + nr = xf86WcmRead(fd, answer+1, 1); if ((nr == -1) && (errno != EAGAIN)) { ErrorF("Wacom xf86WcmRead error : %s\n", @@ -361,7 +361,7 @@ char* xf86WcmSendRequest(int fd, const char* request, char* answer, int maxlen) { if ((nr = xf86WcmWaitForTablet(fd)) > 0) { - SYSCALL(nr = xf86WcmRead(fd, answer+len, 1)); + nr = xf86WcmRead(fd, answer+len, 1); if ((nr == -1) && (errno != EAGAIN)) { ErrorF("Wacom xf86WcmRead error : %s\n", strerror(errno)); @@ -418,8 +418,8 @@ static Bool serialInit(LocalDevicePtr local) return !Success; /* Send reset to the tablet */ - SYSCALL(err = xf86WcmWrite(local->fd, WC_RESET_BAUD, - strlen(WC_RESET_BAUD))); + err = xf86WcmWrite(local->fd, WC_RESET_BAUD, + strlen(WC_RESET_BAUD)); if (err == -1) { @@ -432,7 +432,7 @@ static Bool serialInit(LocalDevicePtr local) return !Success; /* Send reset to the tablet */ - SYSCALL(err = xf86WcmWrite(local->fd, WC_RESET, strlen(WC_RESET))); + err = xf86WcmWrite(local->fd, WC_RESET, strlen(WC_RESET)); if (err == -1) { ErrorF("Wacom xf86WcmWrite error : %s\n", strerror(errno)); @@ -448,8 +448,8 @@ static Bool serialInit(LocalDevicePtr local) return !Success; /* Send reset to the tablet */ - SYSCALL(err = xf86WcmWrite(local->fd, WC_RESET_BAUD, - strlen(WC_RESET_BAUD))); + err = xf86WcmWrite(local->fd, WC_RESET_BAUD, + strlen(WC_RESET_BAUD)); if (err == -1) { @@ -462,7 +462,7 @@ static Bool serialInit(LocalDevicePtr local) return !Success; /* Send reset to the tablet */ - SYSCALL(err = xf86WcmWrite(local->fd, WC_RESET, strlen(WC_RESET))); + err = xf86WcmWrite(local->fd, WC_RESET, strlen(WC_RESET)); if (err == -1) { ErrorF("Wacom xf86WcmWrite error : %s\n", strerror(errno)); @@ -478,7 +478,7 @@ static Bool serialInit(LocalDevicePtr local) return !Success; /* Send reset to the tablet */ - SYSCALL(err = xf86WcmWrite(local->fd, WC_RESET_BAUD, strlen(WC_RESET_BAUD))); + err = xf86WcmWrite(local->fd, WC_RESET_BAUD, strlen(WC_RESET_BAUD)); if (err == -1) { ErrorF("Wacom xf86WcmWrite error : %s\n", strerror(errno)); @@ -489,7 +489,7 @@ static Bool serialInit(LocalDevicePtr local) if (xf86WcmWait(250)) return !Success; - SYSCALL(err = xf86WcmWrite(local->fd, WC_STOP, strlen(WC_STOP))); + err = xf86WcmWrite(local->fd, WC_STOP, strlen(WC_STOP)); if (err == -1) { ErrorF("Wacom xf86WcmWrite error : %s\n", strerror(errno)); @@ -504,7 +504,7 @@ static Bool serialInit(LocalDevicePtr local) if (serialInitTablet(local) == !Success) { - SYSCALL(xf86WcmClose(local->fd)); + xf86WcmClose(local->fd); local->fd = -1; return !Success; } @@ -1090,8 +1090,8 @@ static int serialGetRanges(LocalDevicePtr local) static int serialResetIntuos(LocalDevicePtr local) { int err; - SYSCALL(err = xf86WcmWrite(local->fd, intuos_setup_string, - strlen(intuos_setup_string))); + err = xf86WcmWrite(local->fd, intuos_setup_string, + strlen(intuos_setup_string)); return (err == -1) ? !Success : Success; } @@ -1099,16 +1099,16 @@ static int serialResetCintiq(LocalDevicePtr local) { int err; - SYSCALL(err = xf86WcmWrite(local->fd, WC_RESET, strlen(WC_RESET))); + err = xf86WcmWrite(local->fd, WC_RESET, strlen(WC_RESET)); if (xf86WcmWait(75)) return !Success; - SYSCALL(err = xf86WcmWrite(local->fd, pl_setup_string, - strlen(pl_setup_string))); + err = xf86WcmWrite(local->fd, pl_setup_string, + strlen(pl_setup_string)); if (err == -1) return !Success; - SYSCALL(err = xf86WcmWrite(local->fd, penpartner_setup_string, - strlen(penpartner_setup_string))); + err = xf86WcmWrite(local->fd, penpartner_setup_string, + strlen(penpartner_setup_string)); return (err == -1) ? !Success : Success; } @@ -1116,8 +1116,8 @@ static int serialResetCintiq(LocalDevicePtr local) static int serialResetPenPartner(LocalDevicePtr local) { int err; - SYSCALL(err = xf86WcmWrite(local->fd, penpartner_setup_string, - strlen(penpartner_setup_string))); + err = xf86WcmWrite(local->fd, penpartner_setup_string, + strlen(penpartner_setup_string)); return (err == -1) ? !Success : Success; } @@ -1125,16 +1125,16 @@ static int serialResetProtocol4(LocalDevicePtr local) { int err; - SYSCALL(err = xf86WcmWrite(local->fd, WC_RESET, strlen(WC_RESET))); + err = xf86WcmWrite(local->fd, WC_RESET, strlen(WC_RESET)); if (xf86WcmWait(75)) return !Success; - SYSCALL(err = xf86WcmWrite(local->fd, setup_string, - strlen(setup_string))); + err = xf86WcmWrite(local->fd, setup_string, + strlen(setup_string)); if (err == -1) return !Success; - SYSCALL(err = xf86WcmWrite(local->fd, penpartner_setup_string, - strlen(penpartner_setup_string))); + err = xf86WcmWrite(local->fd, penpartner_setup_string, + strlen(penpartner_setup_string)); return (err == -1) ? !Success : Success; } @@ -1150,7 +1150,7 @@ static int serialEnableSuppressProtocol4(LocalDevicePtr local) WacomCommonPtr common = ((WacomDevicePtr)(local->private))->common; sprintf(buf, "%s%d\r", WC_SUPPRESS, common->wcmSuppress); - SYSCALL(err = xf86WcmWrite(local->fd, buf, strlen(buf))); + err = xf86WcmWrite(local->fd, buf, strlen(buf)); if (err == -1) { @@ -1190,8 +1190,8 @@ static int serialSetLinkSpeedProtocol5(LocalDevicePtr local) WC_V_38400 : WC_V_19200; /* Switch the tablet to the requested speed */ - SYSCALL(err = xf86WcmWrite(local->fd, speed_init_string, - strlen(speed_init_string))); + err = xf86WcmWrite(local->fd, speed_init_string, + strlen(speed_init_string)); if (err == -1) { @@ -1215,7 +1215,7 @@ static int serialStartTablet(LocalDevicePtr local) int err; /* Tell the tablet to start sending coordinates */ - SYSCALL(err = xf86WcmWrite(local->fd, WC_START, strlen(WC_START))); + err = xf86WcmWrite(local->fd, WC_START, strlen(WC_START)); if (err == -1) { diff --git a/src/wcmUSB.c b/src/wcmUSB.c index 348ff73..a30a754 100644 --- a/src/wcmUSB.c +++ b/src/wcmUSB.c @@ -373,7 +373,7 @@ static Bool usbInit(LocalDevicePtr local) case 0x37: /* PTU700 */ case 0x38: /* PL510 */ case 0xC0: /* DTF720 */ - case 0xC3: /* DTF521 */ + case 0xC4: /* DTF521 */ model = &usbCintiq; break; case 0x41: /* Intuos2 4x5 */ diff --git a/src/xf86Wacom.h b/src/xf86Wacom.h index 8078bdb..02ff162 100644 --- a/src/xf86Wacom.h +++ b/src/xf86Wacom.h @@ -1,6 +1,6 @@ /* * Copyright 1995-2002 by Frederic Lepied, France. <Lepied@XFree86.org> - * Copyright 2002-2005 by Ping Cheng, Wacom Technology. <pingc@wacom.com> + * Copyright 2002-2006 by Ping Cheng, Wacom Technology. <pingc@wacom.com> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -69,7 +69,7 @@ #include <xf86_OSproc.h> #include <xf86Xinput.h> #include <exevents.h> /* Needed for InitValuator/Proximity stuff */ -#include <keysym.h> +#include <X11/keysym.h> #include <mipointer.h> #ifdef XFree86LOADER @@ -496,8 +496,17 @@ struct _WacomCommonRec /***************************************************************************** * General Inlined functions and Prototypes ****************************************************************************/ - +/* BIG HAIRY WARNING: + * Don't overuse SYSCALL(): use it ONLY when you call low-level functions such + * as ioctl(), read(), write() and such. Otherwise you can easily lock up X11, + * for example: you pull out the USB tablet, the handle becomes invalid, + * xf86WcmRead() returns -1 AND errno is left as EINTR from hell knows where. + * Then you'll loop forever, and even Ctrl+Alt+Backspace doesn't help. + * xf86WcmReadSerial, WriteSerial, CloseSerial & company already use SYSCALL() + * internally; there's no need to duplicate it outside the call. + */ #define SYSCALL(call) while(((call) == -1) && (errno == EINTR)) + #define RESET_RELATIVE(ds) do { (ds).relwheel = 0; } while (0) int xf86WcmWait(int t); |