summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpingc <pingc>2006-05-01 17:49:43 +0000
committerpingc <pingc>2006-05-01 17:49:43 +0000
commitefcc12bd4d5c8fd83b0bcfb78107a9e764baf842 (patch)
treede0f7689bc681c373216070a094a79dbe9059418
parentb7049bfad7e7127b207383eb7a81d7f9803e9ccb (diff)
downloadxf86-input-wacom-efcc12bd4d5c8fd83b0bcfb78107a9e764baf842.tar.gz
Support X.Org 7pre-oldkremoval
-rw-r--r--ChangeLog6
-rw-r--r--acinclude.m469
-rw-r--r--configure.in18
-rw-r--r--src/2.4.22/hid-core.c4
-rw-r--r--src/2.4.22/wacom.c57
-rw-r--r--src/2.4.30x86-64/hid-core.c4
-rw-r--r--src/2.4.30x86-64/wacom.c55
-rw-r--r--src/2.4/hid-core.c4
-rw-r--r--src/2.4/wacom.c56
-rw-r--r--src/2.6.10/hid-core.c2
-rw-r--r--src/2.6.10/wacom.c56
-rw-r--r--src/2.6.11/hid-core.c2
-rw-r--r--src/2.6.11/wacom.c56
-rw-r--r--src/2.6.13/hid-core.c2
-rw-r--r--src/2.6.13/wacom.c56
-rw-r--r--src/2.6.14/hid-core.c2
-rw-r--r--src/2.6.14/wacom.c56
-rw-r--r--src/2.6.15/hid-core.c3
-rw-r--r--src/2.6.15/wacom.c59
-rw-r--r--src/2.6.16/hid-core.c5
-rw-r--r--src/2.6.16/wacom.c59
-rw-r--r--src/2.6.8/wacom.c56
-rw-r--r--src/2.6.9/wacom.c56
-rw-r--r--src/2.6/hid-core.c2
-rw-r--r--src/2.6/wacom.c54
-rw-r--r--src/Makefile.am8
-rw-r--r--src/wacdump.c16
-rw-r--r--src/wactablet.h20
-rw-r--r--src/wacusb.c2
-rw-r--r--src/wcmISDV4.c8
-rw-r--r--src/wcmSerial.c62
-rw-r--r--src/wcmUSB.c2
-rw-r--r--src/xf86Wacom.h15
33 files changed, 628 insertions, 304 deletions
diff --git a/ChangeLog b/ChangeLog
index aebb7f6..afdc31e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);