A number of minor changes have either been unintentionally made to the
2.6.30 tree or occurred as a result of not backporting all upstream changes.
These differences do not affect driver operation, but the clutter they
produce in the output of `diff` does serve to hide a number of "real"
semantic differences. They also make it more difficult to backport
upstream patches, as the patch command will fail if the context does
not exactly match.
To resolve these issues, this commit pulls in as many trivial changes
from 2.6.38 (which itself was synchronized in the prior patch) as possible.
Notable changes include:
* Linebreak in each 'struct wacom_features' definition moved to occur
after the 'distance_max' field like upstream does
* The 'wacom_ids' table is reordered by PID like upstream
* Maximum tablet coordinates of DTH2242 and DTK2241 corrected
* Several cases inside 'wacom_setup_input_capabilities' are moved to
match their position within 2.6.38. Where fallthroughs are affected,
identical behavior has been confirmed.
* The chain of 'if' statements inside 'wacom_parse_hid' have been
replaced with 'switch'/'case' statements.
* Use of 'printk' and 'dbg' functions has been replaced with 'dev_dbg'
Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
---
2.6.30/wacom.h | 11 +-
2.6.30/wacom_sys.c | 233 ++++----
2.6.30/wacom_w8001.c | 38 +-
2.6.30/wacom_wac.c | 1501 ++++++++++++++++++++++++++++----------------------
2.6.30/wacom_wac.h | 32 +-
5 files changed, 1017 insertions(+), 798 deletions(-)
diff --git a/2.6.30/wacom.h b/2.6.30/wacom.h
index 65ead0b..b023fdb 100755
--- a/2.6.30/wacom.h
+++ b/2.6.30/wacom.h
@@ -89,6 +89,9 @@
#include <linux/init.h>
#include <linux/usb/input.h>
#include <asm/unaligned.h>
+# ifndef LINUX_VERSION_CODE
+# include <linux/version.h>
+# endif
/*
* Version Information
@@ -96,7 +99,7 @@
#ifndef WACOM_VERSION_SUFFIX
#define WACOM_VERSION_SUFFIX ""
#endif
-#define DRIVER_VERSION "v1.52"WACOM_VERSION_SUFFIX
+#define DRIVER_VERSION "v1.53"WACOM_VERSION_SUFFIX
#define DRIVER_AUTHOR "Vojtech Pavlik <vojt...@ucw.cz>"
#define DRIVER_DESC "USB Wacom tablet driver"
#define DRIVER_LICENSE "GPL"
@@ -118,9 +121,9 @@ struct wacom {
bool open;
char phys[32];
struct wacom_led {
- u8 select[2]; /* status led selector (0...3) */
- u8 llv; /* status led brightness no button */
- u8 hlv; /* status led brightness button pressed */
+ u8 select[2]; /* status led selector (0..3) */
+ u8 llv; /* status led brightness no button (1..127) */
+ u8 hlv; /* status led brightness button pressed (1..127)
*/
} led;
};
diff --git a/2.6.30/wacom_sys.c b/2.6.30/wacom_sys.c
index ef07953..b8c048a 100644
--- a/2.6.30/wacom_sys.c
+++ b/2.6.30/wacom_sys.c
@@ -14,10 +14,6 @@
#include "wacom_wac.h"
#include "wacom.h"
-# ifndef LINUX_VERSION_CODE
-# include <linux/version.h>
-# endif
-
/* defines to get HID report descriptor */
#define HID_DEVICET_HID (USB_TYPE_CLASS | 0x01)
#define HID_DEVICET_REPORT (USB_TYPE_CLASS | 0x02)
@@ -62,10 +58,12 @@ struct hid_descriptor {
/* defines to get/set USB message */
#define USB_REQ_GET_REPORT 0x01
#define USB_REQ_SET_REPORT 0x09
+
#define WAC_HID_FEATURE_REPORT 0x03
+#define WAC_MSG_RETRIES 5
#define WAC_CMD_LED_CONTROL 0x20
-#define WAC_CMD_RETRIES 10
+#define WAC_CMD_RETRIES 10
static int wacom_get_report(struct usb_interface *intf, u8 type, u8 id,
void *buf, size_t size, unsigned int retries)
@@ -113,6 +111,7 @@ static int wacom_set_report(struct usb_interface *intf, u8
type, u8 id,
static void wacom_sys_irq(struct urb *urb)
{
struct wacom *wacom = urb->context;
+ struct device *dev = &wacom->intf->dev;
int retval;
switch (urb->status) {
@@ -123,10 +122,12 @@ static void wacom_sys_irq(struct urb *urb)
case -ENOENT:
case -ESHUTDOWN:
/* this urb is terminated, clean up */
- dbg("%s - urb shutting down with status: %d", __func__,
urb->status);
+ dev_dbg(dev, "%s - urb shutting down with status: %d\n",
+ __func__, urb->status);
return;
default:
- dbg("%s - nonzero urb status received: %d", __func__,
urb->status);
+ dev_dbg(dev, "%s - nonzero urb status received: %d\n",
+ __func__, urb->status);
goto exit;
}
@@ -136,8 +137,8 @@ static void wacom_sys_irq(struct urb *urb)
usb_mark_last_busy(wacom->usbdev);
retval = usb_submit_urb(urb, GFP_ATOMIC);
if (retval)
- err ("%s - usb_submit_urb failed with result %d",
- __func__, retval);
+ dev_err(dev, "%s - usb_submit_urb failed with result %d\n",
+ __func__, retval);
}
static int wacom_open(struct input_dev *dev)
@@ -201,7 +202,7 @@ static int wacom_parse_hid(struct usb_interface *intf,
struct hid_descriptor *hi
report,
hid_desc->wDescriptorLength,
5000); /* 5 secs */
- } while (result < 0 && limit++ < 5);
+ } while (result < 0 && limit++ < WAC_MSG_RETRIES);
/* No need to parse the Descriptor. It isn't an error though */
if (result < 0)
@@ -276,7 +277,9 @@ static int wacom_parse_hid(struct usb_interface *intf,
struct hid_descriptor *hi
features->pktlen =
WACOM_PKGLEN_27QHDT;
features->device_type =
BTN_TOOL_TRIPLETAP;
}
- if (features->type == BAMBOO_PT) {
+
+ switch (features->type) {
+ case BAMBOO_PT:
/* need to reset back */
features->pktlen =
WACOM_PKGLEN_BBTOUCH;
features->device_type =
BTN_TOOL_TRIPLETAP;
@@ -284,35 +287,44 @@ static int wacom_parse_hid(struct usb_interface *intf,
struct hid_descriptor *hi
get_unaligned_le16(&report[i + 5]);
features->x_max =
get_unaligned_le16(&report[i + 8]);
- } else if (features->type ==
WACOM_MSPROT ||
- features->type == MTTPC_B) {
+ break;
+
+ case DTH1152T:
features->x_max =
get_unaligned_le16(&report[i + 3]);
features->x_phy =
-
get_unaligned_le16(&report[i + 6]);
- features->unit = report[i - 5];
+
get_unaligned_le16(&report[i + 8]);
+ features->unit = report[i - 1];
features->unitExpo = report[i -
3];
- } else if (features->type == MTTPC_C) {
+ break;
+
+ case WACOM_MSPROT:
+ case MTTPC_B:
features->x_max =
get_unaligned_le16(&report[i + 3]);
features->x_phy =
-
get_unaligned_le16(&report[i + 8]);
- features->unit = report[i - 1];
+
get_unaligned_le16(&report[i + 6]);
+ features->unit = report[i - 5];
features->unitExpo = report[i -
3];
- } else if (features->type == DTH1152T) {
+ break;
+
+ case MTTPC_C:
features->x_max =
get_unaligned_le16(&report[i + 3]);
features->x_phy =
get_unaligned_le16(&report[i + 8]);
features->unit = report[i - 1];
features->unitExpo = report[i -
3];
- } else {
+ break;
+
+ default:
features->x_max =
get_unaligned_le16(&report[i + 3]);
features->x_phy =
get_unaligned_le16(&report[i + 6]);
features->unit = report[i + 9];
features->unitExpo = report[i +
11];
+ break;
}
} else if (pen) {
/* penabled only accepts exact bytes of
data */
@@ -329,38 +341,44 @@ static int wacom_parse_hid(struct usb_interface *intf,
struct hid_descriptor *hi
case HID_USAGE_Y:
if (finger) {
- if (features->type == TABLETPC2FG ||
- features->type ==
MTTPC) {
+ switch (features->type) {
+ case TABLETPC2FG:
+ case MTTPC:
features->y_max =
get_unaligned_le16(&report[i + 3]);
features->y_phy =
get_unaligned_le16(&report[i + 6]);
- } else if (features->type ==
WACOM_MSPROT ||
- features->type == MTTPC_B) {
- features->y_max =
-
get_unaligned_le16(&report[i + 3]);
- features->y_phy =
-
get_unaligned_le16(&report[i + 6]);
- } else if (features->type == MTTPC_C) {
+ break;
+
+ case DTH1152T:
+ case MTTPC_C:
features->y_max =
get_unaligned_le16(&report[i + 3]);
features->y_phy =
get_unaligned_le16(&report[i - 2]);
- } else if (features->type == BAMBOO_PT)
{
+ break;
+
+ case BAMBOO_PT:
features->y_phy =
get_unaligned_le16(&report[i + 3]);
features->y_max =
get_unaligned_le16(&report[i + 6]);
- } else if (features->type == DTH1152T) {
+ break;
+
+ case WACOM_MSPROT:
+ case MTTPC_B:
features->y_max =
get_unaligned_le16(&report[i + 3]);
features->y_phy =
-
get_unaligned_le16(&report[i - 2]);
- } else {
+
get_unaligned_le16(&report[i + 6]);
+ break;
+
+ default:
features->y_max =
features->x_max;
features->y_phy =
get_unaligned_le16(&report[i + 3]);
+ break;
}
} else if (pen) {
features->y_max =
@@ -405,6 +423,7 @@ static int wacom_parse_hid(struct usb_interface *intf,
struct hid_descriptor *hi
break;
}
break;
+
case HID_LONGITEM:
/*
* HID "Long Items" can contain up to 255 bytes
@@ -473,7 +492,7 @@ static int wacom_query_tablet_data(struct usb_interface
*intf, struct wacom_feat
}
static int wacom_retrieve_hid_descriptor(struct usb_interface *intf,
- struct wacom_features *features)
+ struct wacom_features *features)
{
int error = 0;
struct usb_host_interface *interface = intf->cur_altsetting;
@@ -488,14 +507,17 @@ static int wacom_retrieve_hid_descriptor(struct
usb_interface *intf,
features->tilt_fuzz = 1;
/* only devices that support touch need to retrieve the info */
- if (features->type < BAMBOO_PT)
+ if (features->type < BAMBOO_PT) {
goto out;
+ }
- if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) {
- if (usb_get_extra_descriptor(&interface->endpoint[0],
- HID_DEVICET_REPORT, &hid_desc)) {
- printk("wacom: can not retrieve extra class
descriptor\n");
- error = 1;
+ error = usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc);
+ if (error) {
+ error = usb_get_extra_descriptor(&interface->endpoint[0],
+ HID_DEVICET_REPORT, &hid_desc);
+ if (error) {
+ dev_err(&intf->dev,
+ "can not retrieve extra class descriptor\n");
goto out;
}
}
@@ -535,14 +557,12 @@ static struct usb_device *wacom_get_sibling(struct
usb_device *dev, int vendor,
for (i = 0 ; i < dev->parent->maxchild; i++) {
struct usb_device *sibling = dev->parent->children[i];
- struct usb_device_descriptor d;
-
+ struct usb_device_descriptor *d;
if (sibling == NULL)
continue;
- d = sibling->descriptor;
-
- if (d.idVendor == vendor && d.idProduct == product)
+ d = &sibling->descriptor;
+ if (d->idVendor == vendor && d->idProduct == product)
return sibling;
}
@@ -563,6 +583,29 @@ static struct wacom_usbdev_data
*wacom_get_usbdev_data(struct usb_device *dev)
return NULL;
}
+static void wacom_release_shared_data(struct kref *kref)
+{
+ struct wacom_usbdev_data *data =
+ container_of(kref, struct wacom_usbdev_data, kref);
+
+ mutex_lock(&wacom_udev_list_lock);
+ list_del(&data->list);
+ mutex_unlock(&wacom_udev_list_lock);
+
+ kfree(data);
+}
+
+static void wacom_remove_shared_data(struct wacom_wac *wacom)
+{
+ struct wacom_usbdev_data *data;
+
+ if (wacom->shared) {
+ data = container_of(wacom->shared, struct wacom_usbdev_data,
shared);
+ kref_put(&data->kref, wacom_release_shared_data);
+ wacom->shared = NULL;
+ }
+}
+
static int wacom_add_shared_data(struct wacom_wac *wacom,
struct usb_device *dev)
{
@@ -591,37 +634,17 @@ out:
return retval;
}
-static void wacom_release_shared_data(struct kref *kref)
-{
- struct wacom_usbdev_data *data =
- container_of(kref, struct wacom_usbdev_data, kref);
-
- mutex_lock(&wacom_udev_list_lock);
- list_del(&data->list);
- mutex_unlock(&wacom_udev_list_lock);
-
- kfree(data);
-}
-
-static void wacom_remove_shared_data(struct wacom_wac *wacom)
-{
- struct wacom_usbdev_data *data;
-
- if (wacom->shared) {
- data = container_of(wacom->shared, struct wacom_usbdev_data,
shared);
- kref_put(&data->kref, wacom_release_shared_data);
- wacom->shared = NULL;
- }
-}
-
static int wacom_led_control(struct wacom *wacom)
{
unsigned char *buf;
int retval;
+ unsigned char report_id = WAC_CMD_LED_CONTROL;
+ int buf_size = 9;
- buf = kzalloc(9, GFP_KERNEL);
+ buf = kzalloc(buf_size, GFP_KERNEL);
if (!buf)
return -ENOMEM;
+
if (wacom->wacom_wac.features.type == INTUOSP2) {
buf[0] = WAC_CMD_LED_CONTROL_GENERIC;
@@ -629,8 +652,9 @@ static int wacom_led_control(struct wacom *wacom)
buf[2] = wacom->led.select[0] & 0x03;
} else if (wacom->wacom_wac.features.type >= INTUOS5S &&
- wacom->wacom_wac.features.type <= INTUOSPL) {
- /* Touch Ring and crop mark LED luminance may take on
+ wacom->wacom_wac.features.type <= INTUOSPL) {
+ /*
+ * Touch Ring and crop mark LED luminance may take on
* one of four values:
* 0 = Low; 1 = Medium; 2 = High; 3 = Off
*/
@@ -638,8 +662,10 @@ static int wacom_led_control(struct wacom *wacom)
int ring_lum = (((wacom->led.llv & 0x60) >> 5) - 1) & 0x03;
int crop_lum = 0;
- buf[0] = WAC_CMD_LED_CONTROL;
- buf[1] = (crop_lum << 4) | (ring_lum << 2) | (ring_led);
+ unsigned char led_bits = (crop_lum << 4) | (ring_lum << 2) |
(ring_led);
+
+ buf[0] = report_id;
+ buf[1] = led_bits;
}
else {
int led = wacom->led.select[0] | 0x4;
@@ -648,14 +674,14 @@ static int wacom_led_control(struct wacom *wacom)
wacom->wacom_wac.features.type == WACOM_24HD)
led |= (wacom->led.select[1] << 4) | 0x40;
- buf[0] = WAC_CMD_LED_CONTROL;
+ buf[0] = report_id;
buf[1] = led;
buf[2] = wacom->led.llv;
buf[3] = wacom->led.hlv;
}
- retval = wacom_set_report(wacom->intf, 0x03, WAC_CMD_LED_CONTROL,
- buf, 9, WAC_CMD_RETRIES);
+ retval = wacom_set_report(wacom->intf, 0x03, report_id,
+ buf, buf_size, WAC_CMD_RETRIES);
kfree(buf);
return retval;
@@ -665,11 +691,12 @@ static ssize_t wacom_led_select_store(struct device *dev,
int set_id,
const char *buf, size_t count)
{
struct wacom *wacom = dev_get_drvdata(dev);
- u8 id = 0;
- int err, i;
+ unsigned long id;
+ int err;
- for (i = 0; i < count; i++)
- id = id * 10 + buf[i] - '0';
+ err = strict_strtoul(buf, 10, &id);
+ if (err)
+ return err;
mutex_lock(&wacom->lock);
@@ -681,22 +708,22 @@ static ssize_t wacom_led_select_store(struct device *dev,
int set_id,
return err < 0 ? err : count;
}
-#define DEVICE_LED_SELECT_ATTR(SET_ID) \
-static ssize_t wacom_led##SET_ID##_select_store(struct device *dev, \
- struct device_attribute *attr, const char *buf, size_t count) \
-{ \
- return wacom_led_select_store(dev, SET_ID, buf, count); \
-} \
-static ssize_t wacom_led##SET_ID##_select_show(struct device *dev, \
- struct device_attribute *attr, char *buf) \
-{ \
- struct wacom *wacom = dev_get_drvdata(dev); \
- return snprintf(buf, PAGE_SIZE, "%d\n", \
- wacom->led.select[SET_ID]); \
-} \
-static DEVICE_ATTR(status_led##SET_ID##_select, S_IWUSR | S_IRUSR, \
- wacom_led##SET_ID##_select_show, \
- wacom_led##SET_ID##_select_store)
+#define DEVICE_LED_SELECT_ATTR(SET_ID) \
+static ssize_t wacom_led##SET_ID##_select_store(struct device *dev, \
+ struct device_attribute *attr, const char *buf, size_t count) \
+{ \
+ return wacom_led_select_store(dev, SET_ID, buf, count); \
+} \
+static ssize_t wacom_led##SET_ID##_select_show(struct device *dev, \
+ struct device_attribute *attr, char *buf) \
+{ \
+ struct wacom *wacom = dev_get_drvdata(dev); \
+ return snprintf(buf, PAGE_SIZE, "%d\n", \
+ wacom->led.select[SET_ID]); \
+} \
+static DEVICE_ATTR(status_led##SET_ID##_select, S_IWUSR | S_IRUSR, \
+ wacom_led##SET_ID##_select_show, \
+ wacom_led##SET_ID##_select_store)
DEVICE_LED_SELECT_ATTR(0);
DEVICE_LED_SELECT_ATTR(1);
@@ -747,8 +774,9 @@ static void wacom_devm_sysfs_group_release(struct device
*dev, void *res)
sysfs_remove_group(kobj, devres->group);
}
-static int wacom_devm_sysfs_create_group(struct wacom *wacom,
- struct attribute_group *group)
+static int __wacom_devm_sysfs_create_group(struct wacom *wacom,
+ struct kobject *root,
+ struct attribute_group *group)
{
struct wacom_sysfs_group_devres *devres;
int error;
@@ -760,7 +788,7 @@ static int wacom_devm_sysfs_create_group(struct wacom
*wacom,
return -ENOMEM;
devres->group = group;
- devres->root = &wacom->intf->dev.kobj;
+ devres->root = root;
error = sysfs_create_group(devres->root, group);
if (error)
@@ -771,6 +799,13 @@ static int wacom_devm_sysfs_create_group(struct wacom
*wacom,
return 0;
}
+static int wacom_devm_sysfs_create_group(struct wacom *wacom,
+ struct attribute_group *group)
+{
+ return __wacom_devm_sysfs_create_group(wacom, &wacom->intf->dev.kobj,
+ group);
+}
+
static int wacom_initialize_leds(struct wacom *wacom)
{
int error;
diff --git a/2.6.30/wacom_w8001.c b/2.6.30/wacom_w8001.c
index 134dac5..7594a3e 100755
--- a/2.6.30/wacom_w8001.c
+++ b/2.6.30/wacom_w8001.c
@@ -54,12 +54,12 @@ MODULE_LICENSE("GPL");
#define W8001_TOUCH_RESOLUTION 10
struct w8001_coord {
- u16 x;
- u16 y;
u8 rdy;
u8 tsw;
u8 f1;
u8 f2;
+ u16 x;
+ u16 y;
u16 pen_pressure;
u8 tilt_x;
u8 tilt_y;
@@ -67,11 +67,11 @@ struct w8001_coord {
/* touch query reply packet */
struct w8001_touch_query {
+ u16 x;
+ u16 y;
u8 panel_res;
u8 capacity_res;
u8 sensor_id;
- u16 x;
- u16 y;
};
/*
@@ -125,7 +125,17 @@ static void parse_single_touch(u8 *data, struct
w8001_coord *coord)
{
coord->x = (data[1] << 7) | data[2];
coord->y = (data[3] << 7) | data[4];
- coord->tsw = data[0] & 0x1;
+ coord->tsw = data[0] & 0x01;
+}
+
+static void scale_touch_coordinates(struct w8001 *w8001,
+ unsigned int *x, unsigned int *y)
+{
+ if (w8001->max_pen_x && w8001->max_touch_x)
+ *x = *x * w8001->max_pen_x / w8001->max_touch_x;
+
+ if (w8001->max_pen_y && w8001->max_touch_y)
+ *y = *y * w8001->max_pen_y / w8001->max_touch_y;
}
static void parse_touchquery(u8 *data, struct w8001_touch_query *query)
@@ -144,7 +154,7 @@ static void parse_touchquery(u8 *data, struct
w8001_touch_query *query)
query->y |= data[6] << 2;
query->y |= (data[2] >> 3) & 0x3;
- /* Early days' one finger touch models need the following defaults */
+ /* Early days' single-finger touch models need the following defaults */
if (!query->x && !query->y) {
query->x = 1024;
query->y = 1024;
@@ -164,7 +174,7 @@ static void report_pen_events(struct w8001 *w8001, struct
w8001_coord *coord)
/*
* We have 1 bit for proximity (rdy) and 3 bits for tip, side,
* side2/eraser. If rdy && f2 are set, this can be either pen + side2,
- * or eraser. Assume
+ * or eraser. Assume:
* - if dev is already in proximity and f2 is toggled ??? pen + side2
* - if dev comes into proximity with f2 set ??? eraser
* If f2 disappears after assuming eraser, fake proximity out for
@@ -196,6 +206,7 @@ static void report_pen_events(struct w8001 *w8001, struct
w8001_coord *coord)
default:
input_report_key(dev, BTN_STYLUS2, coord->f2);
+ break;
}
input_report_abs(dev, ABS_X, coord->x);
@@ -217,11 +228,7 @@ static void report_single_touch(struct w8001 *w8001,
struct w8001_coord *coord)
unsigned int y = coord->y;
/* scale to pen maximum */
- if (w8001->max_pen_x && w8001->max_touch_x)
- x = x * w8001->max_pen_x / w8001->max_touch_x;
-
- if (w8001->max_pen_y && w8001->max_touch_y)
- y = y * w8001->max_pen_y / w8001->max_touch_y;
+ scale_touch_coordinates(w8001, &x, &y);
input_report_abs(dev, ABS_X, x);
input_report_abs(dev, ABS_Y, y);
@@ -251,7 +258,7 @@ static irqreturn_t w8001_interrupt(struct serio *serio,
case W8001_PKTLEN_TOUCH93 - 1:
case W8001_PKTLEN_TOUCH9A - 1:
- tmp = (w8001->data[0] & W8001_TOUCH_BYTE);
+ tmp = w8001->data[0] & W8001_TOUCH_BYTE;
if (tmp != W8001_TOUCH_BYTE)
break;
@@ -271,7 +278,7 @@ static irqreturn_t w8001_interrupt(struct serio *serio,
if (unlikely(tmp == W8001_TAB_BYTE))
break;
- tmp = (w8001->data[0] & W8001_TOUCH_BYTE);
+ tmp = w8001->data[0] & W8001_TOUCH_BYTE;
if (tmp == W8001_TOUCH_BYTE)
break;
@@ -282,7 +289,7 @@ static irqreturn_t w8001_interrupt(struct serio *serio,
/* control packet */
case W8001_PKTLEN_TPCCTL - 1:
- tmp = (w8001->data[0] & W8001_TOUCH_MASK);
+ tmp = w8001->data[0] & W8001_TOUCH_MASK;
if (tmp == W8001_TOUCH_BYTE)
break;
@@ -306,6 +313,7 @@ static int w8001_command(struct w8001 *w8001, unsigned char
command,
rc = serio_write(w8001->serio, command);
if (rc == 0 && wait_response) {
+
wait_for_completion_timeout(&w8001->cmd_done, HZ);
if (w8001->response_type != W8001_QUERY_PACKET)
rc = -EIO;
diff --git a/2.6.30/wacom_wac.c b/2.6.30/wacom_wac.c
index 679c4d8..ae3e1b4 100644
--- a/2.6.30/wacom_wac.c
+++ b/2.6.30/wacom_wac.c
@@ -16,13 +16,9 @@
#include "wacom.h"
#include <linux/hid.h>
-# ifndef LINUX_VERSION_CODE
-# include <linux/version.h>
-# endif
-
/* Newer Cintiq and DTU have an offset between tablet and screen areas */
-#define WACOM_DTU_OFFSET 200
-#define WACOM_CINTIQ_OFFSET 400
+#define WACOM_DTU_OFFSET 200
+#define WACOM_CINTIQ_OFFSET 400
static void wacom_report_numbered_buttons(struct input_dev *input_dev,
int button_count, int mask);
@@ -65,44 +61,13 @@ static int wacom_penpartner_irq(struct wacom_wac *wacom)
break;
default:
- printk(KERN_INFO "wacom_penpartner_irq: received unknown report
#%d\n", data[0]);
+ dev_dbg(input->dev.parent,
+ "%s: received unknown report #%d\n", __func__, data[0]);
return 0;
}
return 1;
}
-static int wacom_dtu_irq(struct wacom_wac *wacom)
-{
- unsigned char *data = wacom->data;
- struct input_dev *input = wacom->input;
- int prox = data[1] & 0x20;
-
- dbg("wacom_dtu_irq: received report #%d", data[0]);
-
- if (prox) {
- /* Going into proximity select tool */
- wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER :
BTN_TOOL_PEN;
- if (wacom->tool[0] == BTN_TOOL_PEN)
- wacom->id[0] = STYLUS_DEVICE_ID;
- else
- wacom->id[0] = ERASER_DEVICE_ID;
- }
- input_report_key(input, BTN_STYLUS, data[1] & 0x02);
- input_report_key(input, BTN_STYLUS2, data[1] & 0x10);
- input_report_abs(input, ABS_PRESSURE, ((data[7] & 0x01) << 8) |
data[6]);
- input_report_key(input, BTN_TOUCH, data[1] & 0x05);
- if (!prox) { /* out-prox */
- wacom->id[0] = 0;
- input_report_abs(input, ABS_X, 0);
- input_report_abs(input, ABS_Y, 0);
- } else {
- input_report_abs(input, ABS_X, le16_to_cpup((__le16
*)&data[2]));
- input_report_abs(input, ABS_Y, le16_to_cpup((__le16
*)&data[4]));
- }
- input_report_key(input, wacom->tool[0], prox);
- input_report_abs(input, ABS_MISC, wacom->id[0]);
- return 1;
-}
static int wacom_pl_irq(struct wacom_wac *wacom)
{
@@ -112,7 +77,8 @@ static int wacom_pl_irq(struct wacom_wac *wacom)
int prox, pressure;
if (data[0] != WACOM_REPORT_PENABLED) {
- dbg("wacom_pl_irq: received unknown report #%d", data[0]);
+ dev_dbg(input->dev.parent,
+ "%s: received unknown report #%d\n", __func__, data[0]);
return 0;
}
@@ -184,7 +150,8 @@ static int wacom_ptu_irq(struct wacom_wac *wacom)
struct input_dev *input = wacom->input;
if (data[0] != WACOM_REPORT_PENABLED) {
- printk(KERN_INFO "wacom_ptu_irq: received unknown report
#%d\n", data[0]);
+ dev_dbg(input->dev.parent,
+ "%s: received unknown report #%d\n", __func__, data[0]);
return 0;
}
@@ -206,205 +173,37 @@ static int wacom_ptu_irq(struct wacom_wac *wacom)
return 1;
}
-static int wacom_bpt_touch(struct wacom_wac *wacom)
-{
- struct input_dev *input = wacom->input;
- unsigned char *data = wacom->data;
- int i, touch_count = 0;
-
- if (data[0] != 0x02)
- return 0;
-
- for (i = 0; i < 1; i++) {
- int offset = (data[1] & 0x80) ? (8 * 0) : (9 * 0);
- bool touch = data[offset + 3] & 0x80;
-
- /*
- * Touch events need to be disabled while stylus is
- * in proximity because user's hand is resting on touchpad
- * and sending unwanted events. User expects tablet buttons
- * to continue working though.
- */
- touch = touch && !wacom->shared->stylus_in_proximity;
-
- if (touch)
- touch_count++;
-
- /* Only 1st touch is supported in kernels without MT */
- if (i > 0)
- continue;
-
- if (touch) {
- int x = get_unaligned_be16(&data[offset + 3]) & 0x7ff;
- int y = get_unaligned_be16(&data[offset + 5]) & 0x7ff;
- x <<= 5;
- y <<= 5;
- input_report_abs(input, ABS_X, x);
- input_report_abs(input, ABS_Y, y);
- }
- }
-
- wacom->shared->touch_down = touch_count > 0;
- input_report_key(input, BTN_TOUCH, touch_count);
- input_report_key(input, BTN_TOOL_FINGER, touch_count == 1);
- input_report_key(input, BTN_TOOL_DOUBLETAP, touch_count == 2);
-
- input_report_key(input, BTN_LEFT, (data[1] & 0x08) != 0);
- input_report_key(input, BTN_FORWARD, (data[1] & 0x04) != 0);
- input_report_key(input, BTN_BACK, (data[1] & 0x02) != 0);
- input_report_key(input, BTN_RIGHT, (data[1] & 0x01) != 0);
-
- input_sync(input);
-
- return 0;
-}
-
-static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
-{
- struct input_dev *input = wacom->input;
- bool touch = data[1] & 0x80;
-
- touch = touch && !wacom->shared->stylus_in_proximity;
-
- if (touch) {
- int x = (data[2] << 4) | (data[4] >> 4);
- int y = (data[3] << 4) | (data[4] & 0x0f);
- int w = data[6] * 100;
-
- input_report_abs(input, ABS_X, x);
- input_report_abs(input, ABS_Y, y);
- input_report_abs(input, ABS_TOOL_WIDTH, w);
- }
-}
-
-static void wacom_bpt3_button_msg(struct wacom_wac *wacom, unsigned char *data)
-{
- struct input_dev *input = wacom->input;
- struct wacom_features *features = &wacom->features;
-
- if (features->type == INTUOSHT || features->type == INTUOSHT2) {
- input_report_key(input, BTN_LEFT, (data[1] & 0x02) != 0);
- input_report_key(input, BTN_BACK, (data[1] & 0x08) != 0);
- } else {
- input_report_key(input, BTN_BACK, (data[1] & 0x02) != 0);
- input_report_key(input, BTN_LEFT, (data[1] & 0x08) != 0);
- }
- input_report_key(input, BTN_FORWARD, (data[1] & 0x04) != 0);
- input_report_key(input, BTN_RIGHT, (data[1] & 0x01) != 0);
-}
-
-static int wacom_bpt3_touch(struct wacom_wac *wacom)
+static int wacom_dtu_irq(struct wacom_wac *wacom)
{
- struct input_dev *input = wacom->input;
unsigned char *data = wacom->data;
- int count = data[1] & 0x07;
- int i, saw_touch = 0, touch_count = 0;
-
- if (data[0] != 0x02)
- return 0;
-
- /* data has up to 7 fixed sized 8-byte messages starting at data[2] */
- for (i = 0; i < count; i++) {
- int offset = (8 * i) + 2;
- int msg_id = data[offset];
-
- if (msg_id >= 2 && msg_id <= 17)
- {
- bool touch = data[offset+1] & 0x80 &&
!wacom->shared->stylus_in_proximity;
- if (touch)
- touch_count++;
-
- /* Only 1st touch support on kernels without MT */
- if (msg_id == 2)
- wacom_bpt3_touch_msg(wacom, data + offset);
- saw_touch++;
- } else if (msg_id == 128)
- wacom_bpt3_button_msg(wacom, data + offset);
-
- }
-
- if (saw_touch) {
- input_report_key(input, BTN_TOUCH, touch_count);
- input_report_key(input, BTN_TOOL_FINGER, touch_count == 1);
- input_report_key(input, BTN_TOOL_DOUBLETAP, touch_count == 2);
- input_report_key(input, BTN_TOOL_TRIPLETAP, touch_count == 3);
- input_report_key(input, BTN_TOOL_QUADTAP, touch_count >= 4);
- }
- wacom->shared->touch_down = touch_count > 0;
-
- input_sync(input);
-
- return 0;
-}
-
-static int wacom_bpt_pen(struct wacom_wac *wacom)
-{
- struct wacom_features *features = &wacom->features;
struct input_dev *input = wacom->input;
- unsigned char *data = wacom->data;
- int prox = 0, x = 0, y = 0, p = 0, d = 0, pen = 0, btn1 = 0, btn2 = 0;
-
- if (data[0] != WACOM_REPORT_PENABLED)
- return 0;
+ int prox = data[1] & 0x20;
- prox = (data[1] & 0x20) == 0x20;
+ dev_dbg(input->dev.parent,
+ "%s: received report #%d", __func__, data[0]);
- /*
- * All reports shared between PEN and RUBBER tool must be
- * forced to a known starting value (zero) when transitioning to
- * out-of-prox.
- *
- * If not reset then, to userspace, it will look like lost events
- * if new tool comes in-prox with same values as previous tool sent.
- *
- * Hardware does report zero in most out-of-prox cases but not all.
- */
- if (!wacom->shared->stylus_in_proximity) {
- if (data[1] & 0x08) {
- wacom->tool[0] = BTN_TOOL_RUBBER;
- wacom->id[0] = ERASER_DEVICE_ID;
- } else {
- wacom->tool[0] = BTN_TOOL_PEN;
+ if (prox) {
+ /* Going into proximity select tool */
+ wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER :
BTN_TOOL_PEN;
+ if (wacom->tool[0] == BTN_TOOL_PEN)
wacom->id[0] = STYLUS_DEVICE_ID;
- }
- wacom->shared->stylus_in_proximity = true;
+ else
+ wacom->id[0] = ERASER_DEVICE_ID;
}
-
- wacom->shared->stylus_in_proximity = prox;
- if (wacom->shared->touch_down)
- return 0;
-
- if (prox) {
- x = le16_to_cpup((__le16 *)&data[2]);
- y = le16_to_cpup((__le16 *)&data[4]);
- p = le16_to_cpup((__le16 *)&data[6]);
- /*
- * Convert distance from out prox to distance from tablet.
- * distance will be greater than distance_max once
- * touching and applying pressure; do not report negative
- * distance.
- */
- if (data[8] <= features->distance_max)
- d = features->distance_max - data[8];
-
- pen = data[1] & 0x01;
- btn1 = data[1] & 0x02;
- btn2 = data[1] & 0x04;
- } else {
+ input_report_key(input, BTN_STYLUS, data[1] & 0x02);
+ input_report_key(input, BTN_STYLUS2, data[1] & 0x10);
+ input_report_abs(input, ABS_PRESSURE, ((data[7] & 0x01) << 8) |
data[6]);
+ input_report_key(input, BTN_TOUCH, data[1] & 0x05);
+ if (!prox) { /* out-prox */
wacom->id[0] = 0;
+ input_report_abs(input, ABS_X, 0);
+ input_report_abs(input, ABS_Y, 0);
+ } else {
+ input_report_abs(input, ABS_X, le16_to_cpup((__le16
*)&data[2]));
+ input_report_abs(input, ABS_Y, le16_to_cpup((__le16
*)&data[4]));
}
-
- input_report_key(input, BTN_TOUCH, pen);
- input_report_key(input, BTN_STYLUS, btn1);
- input_report_key(input, BTN_STYLUS2, btn2);
-
- input_report_abs(input, ABS_X, x);
- input_report_abs(input, ABS_Y, y);
- input_report_abs(input, ABS_PRESSURE, p);
- input_report_abs(input, ABS_DISTANCE, d);
-
- input_report_key(input, wacom->tool[0], prox); /* PEN or RUBBER */
-
+ input_report_key(input, wacom->tool[0], prox);
+ input_report_abs(input, ABS_MISC, wacom->id[0]);
return 1;
}
@@ -505,7 +304,8 @@ static int wacom_graphire_irq(struct wacom_wac *wacom)
int retval = 0;
if (data[0] != WACOM_REPORT_PENABLED) {
- dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
+ dev_dbg(input->dev.parent,
+ "%s: received unknown report #%d\n", __func__, data[0]);
goto exit;
}
@@ -606,97 +406,6 @@ exit:
return retval;
}
-static int wacom_intuos_id_mangle(int tool_id)
-{
- return (tool_id & ~0xFFF) << 4 | (tool_id & 0xFFF);
-}
-
-static int wacom_intuos_get_tool_type(int tool_id)
-{
- int tool_type;
-
- switch (tool_id) {
- case 0x812: /* Inking pen */
- case 0x801: /* Intuos3 Inking pen */
- case 0x12802: /* Intuos4/5 Inking Pen */
- case 0x012:
- tool_type = BTN_TOOL_PENCIL;
- break;
-
- case 0x822: /* Pen */
- case 0x842:
- case 0x852:
- case 0x823: /* Intuos3 Grip Pen */
- case 0x813: /* Intuos3 Classic Pen */
- case 0x885: /* Intuos3 Marker Pen */
- case 0x802: /* Intuos4/5 13HD/24HD General Pen */
- case 0x804: /* Intuos4/5 13HD/24HD Marker Pen */
- case 0x8e2: /* IntuosHT2 pen */
- case 0x022:
- case 0x10804: /* Intuos4/5 13HD/24HD Art Pen */
- case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
- case 0x16802: /* Cintiq 13HD Pro Pen */
- case 0x18802: /* DTH2242 Pen */
- case 0x10802: /* Intuos4/5 13HD/24HD General Pen */
- tool_type = BTN_TOOL_PEN;
- break;
-
- case 0x832: /* Stroke pen */
- case 0x032:
- tool_type = BTN_TOOL_BRUSH;
- break;
-
- case 0x007: /* Mouse 4D and 2D */
- case 0x09c:
- case 0x094:
- case 0x017: /* Intuos3 2D Mouse */
- case 0x806: /* Intuos4 Mouse */
- tool_type = BTN_TOOL_MOUSE;
- break;
-
- case 0x096: /* Lens cursor */
- case 0x097: /* Intuos3 Lens cursor */
- case 0x006: /* Intuos4 Lens cursor */
- tool_type = BTN_TOOL_LENS;
- break;
-
- case 0x82a: /* Eraser */
- case 0x84a:
- case 0x85a:
- case 0x91a:
- case 0xd1a:
- case 0x0fa:
- case 0x82b: /* Intuos3 Grip Pen Eraser */
- case 0x81b: /* Intuos3 Classic Pen Eraser */
- case 0x91b: /* Intuos3 Airbrush Eraser */
- case 0x80c: /* Intuos4/5 13HD/24HD Marker Pen Eraser */
- case 0x80a: /* Intuos4/5 13HD/24HD General Pen Eraser */
- case 0x90a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
- case 0x1480a: /* Intuos4/5 13HD/24HD Classic Pen Eraser */
- case 0x1090a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
- case 0x1080c: /* Intuos4/5 13HD/24HD Art Pen Eraser */
- case 0x1680a: /* Cintiq 13HD Pro Pen Eraser */
- case 0x1880a: /* DTH2242 Eraser */
- case 0x1080a: /* Intuos4/5 13HD/24HD General Pen Eraser */
- tool_type = BTN_TOOL_RUBBER;
- break;
-
- case 0xd12:
- case 0x912:
- case 0x112:
- case 0x913: /* Intuos3 Airbrush */
- case 0x902: /* Intuos4/5 13HD/24HD Airbrush */
- case 0x10902: /* Intuos4/5 13HD/24HD Airbrush */
- tool_type = BTN_TOOL_AIRBRUSH;
- break;
-
- default: /* Unknown tool */
- tool_type = BTN_TOOL_PEN;
- break;
- }
- return tool_type;
-}
-
static int wacom_intuos_pad(struct wacom_wac *wacom)
{
struct wacom_features *features = &wacom->features;
@@ -800,6 +509,97 @@ static int wacom_intuos_pad(struct wacom_wac *wacom)
return 1;
}
+static int wacom_intuos_id_mangle(int tool_id)
+{
+ return (tool_id & ~0xFFF) << 4 | (tool_id & 0xFFF);
+}
+
+static int wacom_intuos_get_tool_type(int tool_id)
+{
+ int tool_type;
+
+ switch (tool_id) {
+ case 0x812: /* Inking pen */
+ case 0x801: /* Intuos3 Inking pen */
+ case 0x12802: /* Intuos4/5 Inking Pen */
+ case 0x012:
+ tool_type = BTN_TOOL_PENCIL;
+ break;
+
+ case 0x822: /* Pen */
+ case 0x842:
+ case 0x852:
+ case 0x823: /* Intuos3 Grip Pen */
+ case 0x813: /* Intuos3 Classic Pen */
+ case 0x885: /* Intuos3 Marker Pen */
+ case 0x802: /* Intuos4/5 13HD/24HD General Pen */
+ case 0x804: /* Intuos4/5 13HD/24HD Marker Pen */
+ case 0x8e2: /* IntuosHT2 pen */
+ case 0x022:
+ case 0x10804: /* Intuos4/5 13HD/24HD Art Pen */
+ case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
+ case 0x16802: /* Cintiq 13HD Pro Pen */
+ case 0x18802: /* DTH2242 Pen */
+ case 0x10802: /* Intuos4/5 13HD/24HD General Pen */
+ tool_type = BTN_TOOL_PEN;
+ break;
+
+ case 0x832: /* Stroke pen */
+ case 0x032:
+ tool_type = BTN_TOOL_BRUSH;
+ break;
+
+ case 0x007: /* Mouse 4D and 2D */
+ case 0x09c:
+ case 0x094:
+ case 0x017: /* Intuos3 2D Mouse */
+ case 0x806: /* Intuos4 Mouse */
+ tool_type = BTN_TOOL_MOUSE;
+ break;
+
+ case 0x096: /* Lens cursor */
+ case 0x097: /* Intuos3 Lens cursor */
+ case 0x006: /* Intuos4 Lens cursor */
+ tool_type = BTN_TOOL_LENS;
+ break;
+
+ case 0x82a: /* Eraser */
+ case 0x84a:
+ case 0x85a:
+ case 0x91a:
+ case 0xd1a:
+ case 0x0fa:
+ case 0x82b: /* Intuos3 Grip Pen Eraser */
+ case 0x81b: /* Intuos3 Classic Pen Eraser */
+ case 0x91b: /* Intuos3 Airbrush Eraser */
+ case 0x80c: /* Intuos4/5 13HD/24HD Marker Pen Eraser */
+ case 0x80a: /* Intuos4/5 13HD/24HD General Pen Eraser */
+ case 0x90a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
+ case 0x1480a: /* Intuos4/5 13HD/24HD Classic Pen Eraser */
+ case 0x1090a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
+ case 0x1080c: /* Intuos4/5 13HD/24HD Art Pen Eraser */
+ case 0x1680a: /* Cintiq 13HD Pro Pen Eraser */
+ case 0x1880a: /* DTH2242 Eraser */
+ case 0x1080a: /* Intuos4/5 13HD/24HD General Pen Eraser */
+ tool_type = BTN_TOOL_RUBBER;
+ break;
+
+ case 0xd12:
+ case 0x912:
+ case 0x112:
+ case 0x913: /* Intuos3 Airbrush */
+ case 0x902: /* Intuos4/5 13HD/24HD Airbrush */
+ case 0x10902: /* Intuos4/5 13HD/24HD Airbrush */
+ tool_type = BTN_TOOL_AIRBRUSH;
+ break;
+
+ default: /* Unknown tool */
+ tool_type = BTN_TOOL_PEN;
+ break;
+ }
+ return tool_type;
+}
+
static int wacom_intuos_inout(struct wacom_wac *wacom)
{
struct wacom_features *features = &wacom->features;
@@ -856,9 +656,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
* Reset all states otherwise we lose the initial states
* when in-prox next time
*/
- input_report_abs(input, ABS_DISTANCE, 0);
input_report_abs(input, ABS_X, 0);
input_report_abs(input, ABS_Y, 0);
+ input_report_abs(input, ABS_DISTANCE, 0);
input_report_abs(input, ABS_TILT_X, 0);
input_report_abs(input, ABS_TILT_Y, 0);
if (wacom->tool[idx] >= BTN_TOOL_MOUSE) {
@@ -951,9 +751,9 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
t >>= 1;
input_report_abs(input, ABS_PRESSURE, t);
if (features->type != INTUOSHT2) {
- input_report_abs(input, ABS_TILT_X,
+ input_report_abs(input, ABS_TILT_X,
((data[7] << 1) & 0x7e) | (data[8] >> 7));
- input_report_abs(input, ABS_TILT_Y, data[8] & 0x7f);
+ input_report_abs(input, ABS_TILT_Y, data[8] & 0x7f);
}
input_report_key(input, BTN_STYLUS, data[1] & 2);
input_report_key(input, BTN_STYLUS2, data[1] & 4);
@@ -985,7 +785,6 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
}
break;
- /* 4D mouse, 2D mouse, marker pen rotation, tilt mouse, or Lens cursor
packets */
case 0x04:
/* 4D mouse 1st packet */
input_report_key(input, BTN_LEFT, data[8] & 0x01);
@@ -1007,6 +806,7 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
- ((data[7] & 0x40) >> 6));
input_report_key(input, BTN_SIDE, data[6] & 0x08);
input_report_key(input, BTN_EXTRA, data[6] & 0x10);
+
input_report_abs(input, ABS_TILT_X,
(((data[7] << 1) & 0x7e) | (data[8] >> 7)) - 64);
input_report_abs(input, ABS_TILT_Y, (data[8] & 0x7f) - 64);
@@ -1059,14 +859,19 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
static int wacom_intuos_irq(struct wacom_wac *wacom)
{
unsigned char *data = wacom->data;
+ struct input_dev *input = wacom->input;
int result;
- if (data[0] != WACOM_REPORT_PENABLED && data[0] !=
WACOM_REPORT_INTUOS_ID1
- && data[0] != WACOM_REPORT_INTUOS_ID2 && data[0] !=
WACOM_REPORT_INTUOSPAD
- && data[0] != WACOM_REPORT_INTUOS_PEN
- && data[0] != WACOM_REPORT_CINTIQ && data[0] !=
WACOM_REPORT_CINTIQPAD
- && data[0] != WACOM_REPORT_INTUOS5PAD) {
- dbg("wacom_intuos_irq: received unknown report #%d", data[0]);
+ if (data[0] != WACOM_REPORT_PENABLED &&
+ data[0] != WACOM_REPORT_INTUOS_ID1 &&
+ data[0] != WACOM_REPORT_INTUOS_ID2 &&
+ data[0] != WACOM_REPORT_INTUOSPAD &&
+ data[0] != WACOM_REPORT_INTUOS_PEN &&
+ data[0] != WACOM_REPORT_CINTIQ &&
+ data[0] != WACOM_REPORT_CINTIQPAD &&
+ data[0] != WACOM_REPORT_INTUOS5PAD) {
+ dev_dbg(input->dev.parent,
+ "%s: received unknown report #%d\n", __func__, data[0]);
return 0;
}
@@ -1078,7 +883,7 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
/* process in/out prox events */
result = wacom_intuos_inout(wacom);
if (result)
- return result - 1;
+ return result - 1;
/* process general packets */
result = wacom_intuos_general(wacom);
@@ -1128,8 +933,8 @@ static void wacom_multitouch_generic_finger(struct
wacom_wac *wacom,
static int wacom_multitouch_generic(struct wacom_wac *wacom)
{
- struct input_dev *input = wacom->input;
struct wacom_features *features = &wacom->features;
+ struct input_dev *input = wacom->input;
unsigned char *data = wacom->data;
int i, current_num_contacts, contacts_to_send;
@@ -1164,7 +969,7 @@ static int wacom_multitouch_generic(struct wacom_wac
*wacom)
switch (features->type) {
case WACOM_MSPROT:
offset = WACOM_BYTES_PER_MSPROT_PACKET * i + 3;
- prox = data[offset] & 0x01;
+ prox = data[offset] & 0x1;
contact_id = get_unaligned_le16(&data[offset + 1]);
x = get_unaligned_le16(&data[offset + 3]);
y = get_unaligned_le16(&data[offset + 5]);
@@ -1203,23 +1008,6 @@ static int wacom_multitouch_generic(struct wacom_wac
*wacom)
return 0;
}
-static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
-{
- struct wacom_features *features = &wacom->features;
-
- if ((features->type == INTUOSHT2) &&
- (features->device_type == BTN_TOOL_PEN))
- return wacom_intuos_irq(wacom);
- else if (len == WACOM_PKGLEN_BBTOUCH)
- return wacom_bpt_touch(wacom);
- else if (len == WACOM_PKGLEN_BBTOUCH3)
- return wacom_bpt3_touch(wacom);
- else if (len == WACOM_PKGLEN_BBFUN || len == WACOM_PKGLEN_BBPEN)
- return wacom_bpt_pen(wacom);
-
- return 0;
-}
-
static void wacom_tpc_finger_in(struct wacom_wac *wacom, unsigned char *data,
int idx)
{
struct input_dev *input = wacom->input;
@@ -1335,10 +1123,10 @@ static int find_slot_from_contactid(struct wacom_wac
*wacom, int contactid)
static void wacom_tpc_mt(struct wacom_wac *wacom)
{
- unsigned char *data = wacom->data;
struct input_dev *input = wacom->input;
- int current_num_contacts = data[2];
+ unsigned char *data = wacom->data;
int i = 0;
+ int current_num_contacts = data[2];
int x_offset = 0;
int number_touch = 0;
@@ -1514,6 +1302,225 @@ static int wacom_tpc_irq(struct wacom_wac *wacom,
size_t len)
return retval;
}
+static int wacom_bpt_touch(struct wacom_wac *wacom)
+{
+ struct input_dev *input = wacom->input;
+ unsigned char *data = wacom->data;
+ int i, touch_count = 0;
+
+ if (data[0] != 0x02)
+ return 0;
+
+ for (i = 0; i < 1; i++) {
+ int offset = (data[1] & 0x80) ? (8 * i) : (9 * i);
+ bool touch = data[offset + 3] & 0x80;
+
+ /*
+ * Touch events need to be disabled while stylus is
+ * in proximity because user's hand is resting on touchpad
+ * and sending unwanted events. User expects tablet buttons
+ * to continue working though.
+ */
+ touch = touch && !wacom->shared->stylus_in_proximity;
+
+ if (touch)
+ touch_count++;
+
+ /* Only 1st touch is supported in kernels without MT */
+ if (i > 0)
+ continue;
+
+ if (touch) {
+ int x = get_unaligned_be16(&data[offset + 3]) & 0x7ff;
+ int y = get_unaligned_be16(&data[offset + 5]) & 0x7ff;
+ x <<= 5;
+ y <<= 5;
+ input_report_abs(input, ABS_X, x);
+ input_report_abs(input, ABS_Y, y);
+ }
+ }
+
+ wacom->shared->touch_down = touch_count > 0;
+ input_report_key(input, BTN_TOUCH, touch_count);
+ input_report_key(input, BTN_TOOL_FINGER, touch_count == 1);
+ input_report_key(input, BTN_TOOL_DOUBLETAP, touch_count == 2);
+
+ input_report_key(input, BTN_LEFT, (data[1] & 0x08) != 0);
+ input_report_key(input, BTN_FORWARD, (data[1] & 0x04) != 0);
+ input_report_key(input, BTN_BACK, (data[1] & 0x02) != 0);
+ input_report_key(input, BTN_RIGHT, (data[1] & 0x01) != 0);
+
+ input_sync(input);
+
+ return 0;
+}
+
+static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
+{
+ struct input_dev *input = wacom->input;
+ bool touch = data[1] & 0x80;
+
+ touch = touch && !wacom->shared->stylus_in_proximity;
+
+ if (touch) {
+ int x = (data[2] << 4) | (data[4] >> 4);
+ int y = (data[3] << 4) | (data[4] & 0x0f);
+ int w = data[6] * 100;
+
+ input_report_abs(input, ABS_X, x);
+ input_report_abs(input, ABS_Y, y);
+ input_report_abs(input, ABS_TOOL_WIDTH, w);
+ }
+}
+
+static void wacom_bpt3_button_msg(struct wacom_wac *wacom, unsigned char *data)
+{
+ struct input_dev *input = wacom->input;
+ struct wacom_features *features = &wacom->features;
+
+ if (features->type == INTUOSHT || features->type == INTUOSHT2) {
+ input_report_key(input, BTN_LEFT, (data[1] & 0x02) != 0);
+ input_report_key(input, BTN_BACK, (data[1] & 0x08) != 0);
+ } else {
+ input_report_key(input, BTN_BACK, (data[1] & 0x02) != 0);
+ input_report_key(input, BTN_LEFT, (data[1] & 0x08) != 0);
+ }
+ input_report_key(input, BTN_FORWARD, (data[1] & 0x04) != 0);
+ input_report_key(input, BTN_RIGHT, (data[1] & 0x01) != 0);
+}
+
+static int wacom_bpt3_touch(struct wacom_wac *wacom)
+{
+ struct input_dev *input = wacom->input;
+ unsigned char *data = wacom->data;
+ int count = data[1] & 0x07;
+ int i, saw_touch = 0, touch_count = 0;
+
+ if (data[0] != 0x02)
+ return 0;
+
+ /* data has up to 7 fixed sized 8-byte messages starting at data[2] */
+ for (i = 0; i < count; i++) {
+ int offset = (8 * i) + 2;
+ int msg_id = data[offset];
+
+ if (msg_id >= 2 && msg_id <= 17)
+ {
+ bool touch = data[offset+1] & 0x80 &&
!wacom->shared->stylus_in_proximity;
+ if (touch)
+ touch_count++;
+
+ /* Only 1st touch support on kernels without MT */
+ if (msg_id == 2)
+ wacom_bpt3_touch_msg(wacom, data + offset);
+ saw_touch++;
+ } else if (msg_id == 128)
+ wacom_bpt3_button_msg(wacom, data + offset);
+
+ }
+
+ if (saw_touch) {
+ input_report_key(input, BTN_TOUCH, touch_count);
+ input_report_key(input, BTN_TOOL_FINGER, touch_count == 1);
+ input_report_key(input, BTN_TOOL_DOUBLETAP, touch_count == 2);
+ input_report_key(input, BTN_TOOL_TRIPLETAP, touch_count == 3);
+ input_report_key(input, BTN_TOOL_QUADTAP, touch_count >= 4);
+ }
+ wacom->shared->touch_down = touch_count > 0;
+
+ input_sync(input);
+
+ return 0;
+}
+
+static int wacom_bpt_pen(struct wacom_wac *wacom)
+{
+ struct wacom_features *features = &wacom->features;
+ struct input_dev *input = wacom->input;
+ unsigned char *data = wacom->data;
+ int prox = 0, x = 0, y = 0, p = 0, d = 0, pen = 0, btn1 = 0, btn2 = 0;
+
+ if (data[0] != WACOM_REPORT_PENABLED)
+ return 0;
+
+ prox = (data[1] & 0x20) == 0x20;
+
+ /*
+ * All reports shared between PEN and RUBBER tool must be
+ * forced to a known starting value (zero) when transitioning to
+ * out-of-prox.
+ *
+ * If not reset then, to userspace, it will look like lost events
+ * if new tool comes in-prox with same values as previous tool sent.
+ *
+ * Hardware does report zero in most out-of-prox cases but not all.
+ */
+ if (!wacom->shared->stylus_in_proximity) {
+ if (data[1] & 0x08) {
+ wacom->tool[0] = BTN_TOOL_RUBBER;
+ wacom->id[0] = ERASER_DEVICE_ID;
+ } else {
+ wacom->tool[0] = BTN_TOOL_PEN;
+ wacom->id[0] = STYLUS_DEVICE_ID;
+ }
+ wacom->shared->stylus_in_proximity = true;
+ }
+
+ wacom->shared->stylus_in_proximity = prox;
+ if (wacom->shared->touch_down)
+ return 0;
+
+ if (prox) {
+ x = le16_to_cpup((__le16 *)&data[2]);
+ y = le16_to_cpup((__le16 *)&data[4]);
+ p = le16_to_cpup((__le16 *)&data[6]);
+ /*
+ * Convert distance from out prox to distance from tablet.
+ * distance will be greater than distance_max once
+ * touching and applying pressure; do not report negative
+ * distance.
+ */
+ if (data[8] <= features->distance_max)
+ d = features->distance_max - data[8];
+
+ pen = data[1] & 0x01;
+ btn1 = data[1] & 0x02;
+ btn2 = data[1] & 0x04;
+ } else {
+ wacom->id[0] = 0;
+ }
+
+ input_report_key(input, BTN_TOUCH, pen);
+ input_report_key(input, BTN_STYLUS, btn1);
+ input_report_key(input, BTN_STYLUS2, btn2);
+
+ input_report_abs(input, ABS_X, x);
+ input_report_abs(input, ABS_Y, y);
+ input_report_abs(input, ABS_PRESSURE, p);
+ input_report_abs(input, ABS_DISTANCE, d);
+
+ input_report_key(input, wacom->tool[0], prox); /* PEN or RUBBER */
+
+ return 1;
+}
+
+static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
+{
+ struct wacom_features *features = &wacom->features;
+
+ if ((features->type == INTUOSHT2) &&
+ (features->device_type == BTN_TOOL_PEN))
+ return wacom_intuos_irq(wacom);
+ else if (len == WACOM_PKGLEN_BBTOUCH)
+ return wacom_bpt_touch(wacom);
+ else if (len == WACOM_PKGLEN_BBTOUCH3)
+ return wacom_bpt3_touch(wacom);
+ else if (len == WACOM_PKGLEN_BBFUN || len == WACOM_PKGLEN_BBPEN)
+ return wacom_bpt_pen(wacom);
+
+ return 0;
+}
+
static int wacom_mspro_pad_irq(struct wacom_wac *wacom)
{
struct wacom_features *features = &wacom->features;
@@ -1700,20 +1707,10 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t
len)
sync = wacom_penpartner_irq(wacom_wac);
break;
- case DTU:
- sync = wacom_dtu_irq(wacom_wac);
- break;
-
case PL:
sync = wacom_pl_irq(wacom_wac);
break;
- case BAMBOO_PT:
- case INTUOSHT:
- case INTUOSHT2:
- sync = wacom_bpt_irq(wacom_wac, len);
- break;
-
case WACOM_G4:
case GRAPHIRE:
case WACOM_MO:
@@ -1724,6 +1721,10 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t
len)
sync = wacom_ptu_irq(wacom_wac);
break;
+ case DTU:
+ sync = wacom_dtu_irq(wacom_wac);
+ break;
+
case DTUS:
case DTUSX:
sync = wacom_dtus_irq(wacom_wac);
@@ -1785,6 +1786,12 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t
len)
sync = wacom_tpc_irq(wacom_wac, len);
break;
+ case BAMBOO_PT:
+ case INTUOSHT:
+ case INTUOSHT2:
+ sync = wacom_bpt_irq(wacom_wac, len);
+ break;
+
default:
sync = false;
break;
@@ -1840,6 +1847,7 @@ static void wacom_setup_intuos(struct wacom_wac
*wacom_wac)
__set_bit(BTN_EXTRA, input_dev->keybit);
__set_bit(BTN_TOOL_MOUSE, input_dev->keybit);
__set_bit(BTN_TOOL_LENS, input_dev->keybit);
+
input_set_abs_params(input_dev, ABS_RZ, -900, 899, 0, 0);
input_set_abs_params(input_dev, ABS_THROTTLE, -1023, 1023, 0, 0);
}
@@ -1856,7 +1864,8 @@ void wacom_setup_device_quirks(struct wacom *wacom)
features->y_max = 1023;
}
- /* Intuos5/Pro and Bamboo 3rd gen have no useful data about its
+ /*
+ * Intuos5/Pro and Bamboo 3rd gen have no useful data about its
* touch interface in its HID descriptor. If this is the touch
* interface (wMaxPacketSize of WACOM_PKGLEN_BBTOUCH3), override
* the tablet values.
@@ -1864,11 +1873,11 @@ void wacom_setup_device_quirks(struct wacom *wacom)
if ((features->type >= INTUOS5S && features->type <= INTUOSPL) ||
(features->type >= INTUOSHT && features->type <= BAMBOO_PT)) {
if (endpoint->wMaxPacketSize == WACOM_PKGLEN_BBTOUCH3) {
- features->device_type = BTN_TOOL_DOUBLETAP;
- features->pktlen = WACOM_PKGLEN_BBTOUCH3;
+ features->device_type = BTN_TOOL_DOUBLETAP;
+ features->pktlen = WACOM_PKGLEN_BBTOUCH3;
- features->x_max = 4096;
- features->y_max = 4096;
+ features->x_max = 4096;
+ features->y_max = 4096;
} else {
features->device_type = BTN_TOOL_PEN;
}
@@ -1962,55 +1971,17 @@ void wacom_setup_input_capabilities(struct input_dev
*input_dev,
struct wacom_wac *wacom_wac)
{
struct wacom_features *features = &wacom_wac->features;
+ int numbered_buttons = features->numbered_buttons;
int i;
- input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
-
- __set_bit(BTN_TOUCH, input_dev->keybit);
- __set_bit(ABS_MISC, input_dev->absbit);
-
- wacom_abs_set_axis(input_dev, wacom_wac);
-
- switch (features->type) {
- case INTUOSHT:
- case BAMBOO_PT:
- case INTUOSHT2:
- __clear_bit(ABS_MISC, input_dev->absbit);
-
- if (features->device_type == BTN_TOOL_DOUBLETAP) {
+ input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
- __set_bit(BTN_LEFT, input_dev->keybit);
- __set_bit(BTN_FORWARD, input_dev->keybit);
- __set_bit(BTN_RIGHT, input_dev->keybit);
- __set_bit(BTN_BACK, input_dev->keybit);
+ __set_bit(BTN_TOUCH, input_dev->keybit);
+ __set_bit(ABS_MISC, input_dev->absbit);
- __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
- __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
- if (features->pktlen == WACOM_PKGLEN_BBTOUCH3) {
- __set_bit(BTN_TOOL_TRIPLETAP,
- input_dev->keybit);
- __set_bit(BTN_TOOL_QUADTAP,
- input_dev->keybit);
- input_set_abs_params(input_dev, ABS_TOOL_WIDTH,
- 0, 255, 0, 0);
- }
- }
- if (features->device_type == BTN_TOOL_PEN) {
- if (features->type == INTUOSHT2) {
- __set_bit(ABS_MISC, input_dev->absbit);
- wacom_setup_basic_pro_pen(wacom_wac);
- } else {
- __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
- __set_bit(BTN_TOOL_PEN, input_dev->keybit);
- __set_bit(BTN_STYLUS, input_dev->keybit);
- __set_bit(BTN_STYLUS2, input_dev->keybit);
- input_set_abs_params(input_dev, ABS_DISTANCE, 0,
- features->distance_max,
- features->distance_fuzz,
0);
- }
- }
- break;
+ wacom_abs_set_axis(input_dev, wacom_wac);
+ switch (features->type) {
case WACOM_MO:
__set_bit(BTN_1, input_dev->keybit);
__set_bit(BTN_5, input_dev->keybit);
@@ -2047,10 +2018,15 @@ void wacom_setup_input_capabilities(struct input_dev
*input_dev,
__set_bit(KEY_PROG1, input_dev->keybit);
__set_bit(KEY_PROG2, input_dev->keybit);
__set_bit(KEY_PROG3, input_dev->keybit);
- input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
+
input_set_abs_params(input_dev, ABS_THROTTLE, 0, 71, 0, 0);
/* fall through */
+ case WACOM_13HD:
+ case WACOM_MSPRO:
+ input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
+ /* fall through */
+
case DTK:
wacom_setup_cintiq(wacom_wac);
break;
@@ -2094,14 +2070,6 @@ void wacom_setup_input_capabilities(struct input_dev
*input_dev,
input_set_abs_params(input_dev, ABS_RX, 0, 4096, 0, 0);
input_set_abs_params(input_dev, ABS_RY, 0, 4096, 0, 0);
input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
- wacom_setup_cintiq(wacom_wac);
- break;
-
- case WACOM_MSPRO:
- case WACOM_13HD:
- input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
- wacom_setup_cintiq(wacom_wac);
- break;
case INTUOS3:
case INTUOS3L:
@@ -2172,11 +2140,11 @@ void wacom_setup_input_capabilities(struct input_dev
*input_dev,
wacom_setup_intuos(wacom_wac);
break;
+ case WACOM_MSPROT:
case MTTPC:
case MTTPC_B:
case MTTPC_C:
case DTH1152T:
- case WACOM_MSPROT:
if (features->device_type == BTN_TOOL_TRIPLETAP) {
for (i = 0; i < 10; i++)
wacom_wac->slots[i] = -1;
@@ -2220,6 +2188,45 @@ void wacom_setup_input_capabilities(struct input_dev
*input_dev,
case PENPARTNER:
__set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
break;
+
+ case INTUOSHT:
+ case INTUOSHT2:
+ case BAMBOO_PT:
+ __clear_bit(ABS_MISC, input_dev->absbit);
+
+ if (features->device_type == BTN_TOOL_DOUBLETAP) {
+
+ __set_bit(BTN_LEFT, input_dev->keybit);
+ __set_bit(BTN_FORWARD, input_dev->keybit);
+ __set_bit(BTN_BACK, input_dev->keybit);
+ __set_bit(BTN_RIGHT, input_dev->keybit);
+
+ __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
+ __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
+ if (features->pktlen == WACOM_PKGLEN_BBTOUCH3) {
+ __set_bit(BTN_TOOL_TRIPLETAP,
+ input_dev->keybit);
+ __set_bit(BTN_TOOL_QUADTAP,
+ input_dev->keybit);
+ input_set_abs_params(input_dev, ABS_TOOL_WIDTH,
+ 0, 255, 0, 0);
+ }
+ }
+ if (features->device_type == BTN_TOOL_PEN) {
+ if (features->type == INTUOSHT2) {
+ __set_bit(ABS_MISC, input_dev->absbit);
+ wacom_setup_basic_pro_pen(wacom_wac);
+ } else {
+ __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
+ __set_bit(BTN_TOOL_PEN, input_dev->keybit);
+ __set_bit(BTN_STYLUS, input_dev->keybit);
+ __set_bit(BTN_STYLUS2, input_dev->keybit);
+ input_set_abs_params(input_dev, ABS_DISTANCE, 0,
+ features->distance_max,
+ features->distance_fuzz, 0);
+ }
+ }
+ break;
}
/*
@@ -2229,306 +2236,467 @@ void wacom_setup_input_capabilities(struct input_dev
*input_dev,
* check.
*/
if (features->device_type == BTN_TOOL_PEN)
- wacom_setup_numbered_buttons(input_dev,
- features->numbered_buttons);
+ wacom_setup_numbered_buttons(input_dev, numbered_buttons);
}
static const struct wacom_features wacom_features_0x00 =
- { "Wacom Penpartner", WACOM_PKGLEN_PENPRTN, 5040, 3780, 255,
0, PENPARTNER };
+ { "Wacom Penpartner", WACOM_PKGLEN_PENPRTN, 5040, 3780, 255, 0,
+ PENPARTNER };
static const struct wacom_features wacom_features_0x10 =
- { "Wacom Graphire", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511,
63, GRAPHIRE };
+ { "Wacom Graphire", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x11 =
- { "Wacom Graphire2 4x5", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511,
63, GRAPHIRE };
+ { "Wacom Graphire2 4x5", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x12 =
- { "Wacom Graphire2 5x7", WACOM_PKGLEN_GRAPHIRE, 13918, 10206, 511,
63, GRAPHIRE };
+ { "Wacom Graphire2 5x7", WACOM_PKGLEN_GRAPHIRE, 13918, 10206, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x13 =
- { "Wacom Graphire3", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511,
63, GRAPHIRE };
+ { "Wacom Graphire3", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x14 =
- { "Wacom Graphire3 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511,
63, GRAPHIRE };
+ { "Wacom Graphire3 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x15 =
- { "Wacom Graphire4 4x5", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511,
63, WACOM_G4 };
+ { "Wacom Graphire4 4x5", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511, 63,
+ WACOM_G4 };
static const struct wacom_features wacom_features_0x16 =
- { "Wacom Graphire4 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511,
63, WACOM_G4 };
+ { "Wacom Graphire4 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63,
+ WACOM_G4 };
static const struct wacom_features wacom_features_0x17 =
- { "Wacom BambooFun 4x5", WACOM_PKGLEN_BBFUN, 14760, 9225, 511,
63, WACOM_MO };
+ { "Wacom BambooFun 4x5", WACOM_PKGLEN_BBFUN, 14760, 9225, 511, 63,
+ WACOM_MO };
static const struct wacom_features wacom_features_0x18 =
- { "Wacom BambooFun 6x8", WACOM_PKGLEN_BBFUN, 21648, 13530, 511,
63, WACOM_MO };
+ { "Wacom BambooFun 6x8", WACOM_PKGLEN_BBFUN, 21648, 13530, 511, 63,
+ WACOM_MO };
static const struct wacom_features wacom_features_0x19 =
- { "Wacom Bamboo1 Medium", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511,
63, GRAPHIRE };
+ { "Wacom Bamboo1 Medium", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x60 =
- { "Wacom Volito", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511,
63, GRAPHIRE };
+ { "Wacom Volito", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x61 =
- { "Wacom PenStation2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 255,
63, GRAPHIRE };
+ { "Wacom PenStation2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 255, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x62 =
- { "Wacom Volito2 4x5", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511,
63, GRAPHIRE };
+ { "Wacom Volito2 4x5", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x63 =
- { "Wacom Volito2 2x3", WACOM_PKGLEN_GRAPHIRE, 3248, 2320, 511,
63, GRAPHIRE };
+ { "Wacom Volito2 2x3", WACOM_PKGLEN_GRAPHIRE, 3248, 2320, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x64 =
- { "Wacom PenPartner2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 511,
63, GRAPHIRE };
+ { "Wacom PenPartner2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x65 =
- { "Wacom Bamboo", WACOM_PKGLEN_BBFUN, 14760, 9225, 511,
63, WACOM_MO };
+ { "Wacom Bamboo", WACOM_PKGLEN_BBFUN, 14760, 9225, 511, 63,
+ WACOM_MO };
static const struct wacom_features wacom_features_0x69 =
- { "Wacom Bamboo1", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511,
63, GRAPHIRE };
+ { "Wacom Bamboo1", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x6A =
- { "Wacom Bamboo1 4x6", WACOM_PKGLEN_GRAPHIRE, 14760, 9225, 1023,
63, GRAPHIRE };
+ { "Wacom Bamboo1 4x6", WACOM_PKGLEN_GRAPHIRE, 14760, 9225, 1023, 63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x6B =
- { "Wacom Bamboo1 5x8", WACOM_PKGLEN_GRAPHIRE, 21648, 13530, 1023,
63, GRAPHIRE };
-static const struct wacom_features wacom_features_0xD1 =
- { "Wacom BambooFun 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xD4 =
- { "Wacom Bamboo Pen 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xD2 =
- { "Wacom Bamboo Craft", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xD3 =
- { "Wacom BambooFun 2FG 6x8", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xD0 =
- { "Wacom Bamboo 2FG", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xD5 =
- { "Wacom Bamboo Pen 6x8", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xD6 =
- { "Wacom BambooPT 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xD7 =
- { "Wacom BambooPT 2FG Small", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xD8 =
- { "Wacom Bamboo Comic 2FG", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xDA =
- { "Wacom Bamboo 2FG 4x5 SE", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xDB =
- { "Wacom Bamboo 2FG 6x8 SE", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023,
63, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xDD =
- { "Wacom Bamboo Connect", WACOM_PKGLEN_BBPEN, 14720, 9200, 1023,
- 31, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xDE =
- { "Wacom Bamboo 16FG 4x5", WACOM_PKGLEN_BBPEN, 14720, 9200, 1023,
- 31, BAMBOO_PT };
-static const struct wacom_features wacom_features_0xDF =
- { "Wacom Bamboo 16FG 6x8", WACOM_PKGLEN_BBPEN, 21648, 13700, 1023,
- 31, BAMBOO_PT } ;
-static const struct wacom_features wacom_features_0x300 =
- { "Wacom Bamboo One S", WACOM_PKGLEN_BBPEN, 14720, 9225, 1023,
31, BAMBOO_PT };
-static const struct wacom_features wacom_features_0x301 =
- { "Wacom Bamboo One M", WACOM_PKGLEN_BBPEN, 21648, 13530, 1023,
31, BAMBOO_PT };
-static const struct wacom_features wacom_features_0x302 =
- { "Wacom Intuos PT S", WACOM_PKGLEN_BBPEN, 15200, 9500, 1023,
31, INTUOSHT };
-static const struct wacom_features wacom_features_0x303 =
- { "Wacom Intuos PT M", WACOM_PKGLEN_BBPEN, 21600, 13500, 1023,
31, INTUOSHT };
-static const struct wacom_features wacom_features_0x30E =
- { "Wacom Intuos S", WACOM_PKGLEN_BBPEN, 15200, 9500, 1023,
31, INTUOSHT };
-static const struct wacom_features wacom_features_0x323 =
- { "Wacom Intuos P M", WACOM_PKGLEN_BBPEN, 21600, 13500, 1023,
31, INTUOSHT };
-static const struct wacom_features wacom_features_0x33B =
- { "Wacom Intuos S 2", WACOM_PKGLEN_INTUOS, 15200, 9500, 2047,
63, INTUOSHT2 };
-static const struct wacom_features wacom_features_0x33C =
- { "Wacom Intuos PT S 2", WACOM_PKGLEN_INTUOS, 15200, 9500, 2047,
63, INTUOSHT2 };
-static const struct wacom_features wacom_features_0x33D =
- { "Wacom Intuos P M 2", WACOM_PKGLEN_INTUOS, 21600, 13500, 2047,
63, INTUOSHT2 };
-static const struct wacom_features wacom_features_0x33E =
- { "Wacom Intuos PT M 2", WACOM_PKGLEN_INTUOS, 21600, 13500, 2047,
63, INTUOSHT2 };
+ { "Wacom Bamboo1 5x8", WACOM_PKGLEN_GRAPHIRE, 21648, 13530, 1023,
63,
+ GRAPHIRE };
static const struct wacom_features wacom_features_0x20 =
- { "Wacom Intuos 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023,
31, INTUOS };
+ { "Wacom Intuos 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x21 =
- { "Wacom Intuos 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
31, INTUOS };
+ { "Wacom Intuos 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x22 =
- { "Wacom Intuos 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023,
31, INTUOS };
+ { "Wacom Intuos 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x23 =
- { "Wacom Intuos 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023,
31, INTUOS };
+ { "Wacom Intuos 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x24 =
- { "Wacom Intuos 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023,
31, INTUOS };
+ { "Wacom Intuos 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x30 =
- { "Wacom PL400", WACOM_PKGLEN_GRAPHIRE, 5408, 4056, 255,
0, PL };
+ { "Wacom PL400", WACOM_PKGLEN_GRAPHIRE, 5408, 4056, 255, 0,
+ PL };
static const struct wacom_features wacom_features_0x31 =
- { "Wacom PL500", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 255,
0, PL };
+ { "Wacom PL500", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 255, 0,
+ PL };
static const struct wacom_features wacom_features_0x32 =
- { "Wacom PL600", WACOM_PKGLEN_GRAPHIRE, 6126, 4604, 255,
0, PL };
+ { "Wacom PL600", WACOM_PKGLEN_GRAPHIRE, 6126, 4604, 255, 0,
+ PL };
static const struct wacom_features wacom_features_0x33 =
- { "Wacom PL600SX", WACOM_PKGLEN_GRAPHIRE, 6260, 5016, 255,
0, PL };
+ { "Wacom PL600SX", WACOM_PKGLEN_GRAPHIRE, 6260, 5016, 255, 0,
+ PL };
static const struct wacom_features wacom_features_0x34 =
- { "Wacom PL550", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 511,
0, PL };
+ { "Wacom PL550", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0x35 =
- { "Wacom PL800", WACOM_PKGLEN_GRAPHIRE, 7220, 5780, 511,
0, PL };
+ { "Wacom PL800", WACOM_PKGLEN_GRAPHIRE, 7220, 5780, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0x37 =
- { "Wacom PL700", WACOM_PKGLEN_GRAPHIRE, 6758, 5406, 511,
0, PL };
+ { "Wacom PL700", WACOM_PKGLEN_GRAPHIRE, 6758, 5406, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0x38 =
- { "Wacom PL510", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511,
0, PL };
+ { "Wacom PL510", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0x39 =
- { "Wacom DTU710", WACOM_PKGLEN_GRAPHIRE, 34080, 27660, 511,
0, PL };
+ { "Wacom DTU710", WACOM_PKGLEN_GRAPHIRE, 34080, 27660, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0xC4 =
- { "Wacom DTF521", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511,
0, PL };
+ { "Wacom DTF521", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0xC0 =
- { "Wacom DTF720", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511,
0, PL };
+ { "Wacom DTF720", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0xC2 =
- { "Wacom DTF720a", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511,
0, PL };
+ { "Wacom DTF720a", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0x03 =
- { "Wacom Cintiq Partner", WACOM_PKGLEN_GRAPHIRE, 20480, 15360, 511,
0, PTU };
+ { "Wacom Cintiq Partner", WACOM_PKGLEN_GRAPHIRE, 20480, 15360, 511, 0,
+ PTU };
static const struct wacom_features wacom_features_0x41 =
- { "Wacom Intuos2 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023,
31, INTUOS };
+ { "Wacom Intuos2 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x42 =
- { "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
31, INTUOS };
+ { "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x43 =
- { "Wacom Intuos2 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023,
31, INTUOS };
+ { "Wacom Intuos2 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x44 =
- { "Wacom Intuos2 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023,
31, INTUOS };
+ { "Wacom Intuos2 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0x45 =
- { "Wacom Intuos2 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023,
31, INTUOS };
+ { "Wacom Intuos2 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023,
31,
+ INTUOS };
static const struct wacom_features wacom_features_0xB0 =
- { "Wacom Intuos3 4x5", WACOM_PKGLEN_INTUOS, 25400, 20320, 1023,
63, INTUOS3S, 4 };
+ { "Wacom Intuos3 4x5", WACOM_PKGLEN_INTUOS, 25400, 20320, 1023,
63,
+ INTUOS3S, 4 };
static const struct wacom_features wacom_features_0xB1 =
- { "Wacom Intuos3 6x8", WACOM_PKGLEN_INTUOS, 40640, 30480, 1023,
63, INTUOS3, 8 };
+ { "Wacom Intuos3 6x8", WACOM_PKGLEN_INTUOS, 40640, 30480, 1023,
63,
+ INTUOS3, 8 };
static const struct wacom_features wacom_features_0xB2 =
- { "Wacom Intuos3 9x12", WACOM_PKGLEN_INTUOS, 60960, 45720, 1023,
63, INTUOS3, 8 };
+ { "Wacom Intuos3 9x12", WACOM_PKGLEN_INTUOS, 60960, 45720, 1023,
63,
+ INTUOS3, 8 };
static const struct wacom_features wacom_features_0xB3 =
- { "Wacom Intuos3 12x12", WACOM_PKGLEN_INTUOS, 60960, 60960, 1023,
63, INTUOS3L, 8 };
+ { "Wacom Intuos3 12x12", WACOM_PKGLEN_INTUOS, 60960, 60960, 1023,
63,
+ INTUOS3L, 8 };
static const struct wacom_features wacom_features_0xB4 =
- { "Wacom Intuos3 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 1023,
63, INTUOS3L, 8 };
+ { "Wacom Intuos3 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 1023,
63,
+ INTUOS3L, 8 };
static const struct wacom_features wacom_features_0xB5 =
- { "Wacom Intuos3 6x11", WACOM_PKGLEN_INTUOS, 54204, 31750, 1023,
63, INTUOS3, 8 };
+ { "Wacom Intuos3 6x11", WACOM_PKGLEN_INTUOS, 54204, 31750, 1023,
63,
+ INTUOS3, 8 };
static const struct wacom_features wacom_features_0xB7 =
- { "Wacom Intuos3 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 1023,
63, INTUOS3S, 4 };
+ { "Wacom Intuos3 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 1023,
63,
+ INTUOS3S, 4 };
static const struct wacom_features wacom_features_0xB8 =
- { "Wacom Intuos4 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047,
63, INTUOS4S, 7 };
+ { "Wacom Intuos4 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047,
63,
+ INTUOS4S, 7 };
static const struct wacom_features wacom_features_0xB9 =
- { "Wacom Intuos4 6x9", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047,
63, INTUOS4, 9 };
+ { "Wacom Intuos4 6x9", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047,
63,
+ INTUOS4, 9 };
static const struct wacom_features wacom_features_0xBA =
- { "Wacom Intuos4 8x13", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047,
63, INTUOS4L, 9 };
+ { "Wacom Intuos4 8x13", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047,
63,
+ INTUOS4L, 9 };
static const struct wacom_features wacom_features_0xBB =
- { "Wacom Intuos4 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 2047,
63, INTUOS4L, 9 };
+ { "Wacom Intuos4 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 2047,
63,
+ INTUOS4L, 9 };
static const struct wacom_features wacom_features_0xBC =
- { "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40640, 25400, 2047,
63, INTUOS4, 9 };
+ { "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40640, 25400, 2047,
63,
+ INTUOS4, 9 };
static const struct wacom_features wacom_features_0x26 =
- { "Wacom Intuos5 touch S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047,
63, INTUOS5S, 7 };
+ { "Wacom Intuos5 touch S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, 63,
+ INTUOS5S, 7 };
static const struct wacom_features wacom_features_0x27 =
- { "Wacom Intuos5 touch M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047,
63, INTUOS5, 9 };
+ { "Wacom Intuos5 touch M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, 63,
+ INTUOS5, 9 };
static const struct wacom_features wacom_features_0x28 =
- { "Wacom Intuos5 touch L", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047,
63, INTUOS5L, 9 };
+ { "Wacom Intuos5 touch L", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047, 63,
+ INTUOS5L, 9 };
static const struct wacom_features wacom_features_0x29 =
- { "Wacom Intuos5 S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, 63,
INTUOS5S, 7 };
+ { "Wacom Intuos5 S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, 63,
+ INTUOS5S, 7 };
static const struct wacom_features wacom_features_0x2A =
- { "Wacom Intuos5 M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, 63,
INTUOS5, 9 };
+ { "Wacom Intuos5 M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, 63,
+ INTUOS5, 9 };
static const struct wacom_features wacom_features_0x314 =
- { "Wacom Intuos Pro S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, 63,
INTUOSPS, 7 };
+ { "Wacom Intuos Pro S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, 63,
+ INTUOSPS, 7 };
static const struct wacom_features wacom_features_0x315 =
- { "Wacom Intuos Pro M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, 63,
INTUOSPM, 9 };
+ { "Wacom Intuos Pro M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, 63,
+ INTUOSPM, 9 };
static const struct wacom_features wacom_features_0x317 =
- { "Wacom Intuos Pro L", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047, 63,
INTUOSPL, 9 };
+ { "Wacom Intuos Pro L", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047, 63,
+ INTUOSPL, 9 };
static const struct wacom_features wacom_features_0xF4 =
- { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104080, 65200, 2047,
63,
- WACOM_24HD, 16, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104080, 65200,
2047, 63,
+ WACOM_24HD, 16,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0xF8 =
- { "Wacom Cintiq 24HD touch", WACOM_PKGLEN_INTUOS, 104080, 65200, 2047,
63,
- WACOM_24HD, 16, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ { "Wacom Cintiq 24HD touch", WACOM_PKGLEN_INTUOS, 104080, 65200,
2047, 63, /* Pen */
+ WACOM_24HD, 16,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0x32A =
{ "Wacom Cintiq 27QHD", WACOM_PKGLEN_INTUOS, 119740, 67520, 2047, 63,
- WACOM_27QHD, 0, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ WACOM_27QHD, 0,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0x32B =
{ "Wacom Cintiq 27QHD touch", WACOM_PKGLEN_INTUOS, 119740, 67520, 2047,
63,
- WACOM_27QHD, 0, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ WACOM_27QHD, 0,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0x3F =
- { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023,
63, CINTIQ, 8 };
+ { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023,
63,
+ CINTIQ, 8 };
static const struct wacom_features wacom_features_0xC5 =
- { "Wacom Cintiq 20WSX", WACOM_PKGLEN_INTUOS, 86680, 54180, 1023,
63, WACOM_BEE, 10 };
+ { "Wacom Cintiq 20WSX", WACOM_PKGLEN_INTUOS, 86680, 54180, 1023,
63,
+ WACOM_BEE, 10 };
static const struct wacom_features wacom_features_0xC6 =
- { "Wacom Cintiq 12WX", WACOM_PKGLEN_INTUOS, 53020, 33440, 1023,
63, WACOM_BEE, 10 };
+ { "Wacom Cintiq 12WX", WACOM_PKGLEN_INTUOS, 53020, 33440, 1023,
63,
+ WACOM_BEE, 10 };
static const struct wacom_features wacom_features_0x304 =
{ "Wacom Cintiq 13HD", WACOM_PKGLEN_INTUOS, 59152, 33448, 1023,
63,
- WACOM_13HD, 9, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ WACOM_13HD, 9,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0x333 =
{ "Wacom Cintiq 13HD touch", WACOM_PKGLEN_INTUOS, 59152, 33448, 2047,
63,
- WACOM_13HD, 9, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ WACOM_13HD, 9,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0xC7 =
- { "Wacom DTU1931", WACOM_PKGLEN_GRAPHIRE, 37832, 30305, 511,
0, PL };
+ { "Wacom DTU1931", WACOM_PKGLEN_GRAPHIRE, 37832, 30305, 511, 0,
+ PL };
static const struct wacom_features wacom_features_0xCE =
- { "Wacom DTU2231", WACOM_PKGLEN_GRAPHIRE, 47864, 27011, 511,
0, DTU };
+ { "Wacom DTU2231", WACOM_PKGLEN_GRAPHIRE, 47864, 27011, 511, 0,
+ DTU };
static const struct wacom_features wacom_features_0xF0 =
- { "Wacom DTU1631", WACOM_PKGLEN_GRAPHIRE, 34623, 19553, 511,
0, DTU };
+ { "Wacom DTU1631", WACOM_PKGLEN_GRAPHIRE, 34623, 19553, 511, 0,
+ DTU };
static const struct wacom_features wacom_features_0xFB =
- { "Wacom DTU1031", WACOM_PKGLEN_DTUS, 21896, 13760, 511,
0, DTUS, 4, WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, WACOM_DTU_OFFSET,
WACOM_DTU_OFFSET };
+ { "Wacom DTU1031", WACOM_PKGLEN_DTUS, 21896, 13760, 511, 0,
+ DTUS, 4,
+ WACOM_DTU_OFFSET, WACOM_DTU_OFFSET,
+ WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
static const struct wacom_features wacom_features_0x32F =
- { "Wacom DTU1031X", WACOM_PKGLEN_DTUS, 22472, 12728, 511,
0, DTUSX, 0, WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, WACOM_DTU_OFFSET,
WACOM_DTU_OFFSET };
+ { "Wacom DTU1031X", WACOM_PKGLEN_DTUS, 22472, 12728, 511, 0,
+ DTUSX, 0,
+ WACOM_DTU_OFFSET, WACOM_DTU_OFFSET,
+ WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
static const struct wacom_features wacom_features_0x336 =
- { "Wacom DTU1141", WACOM_PKGLEN_DTUS, 23472, 13203, 1023,
0, DTUS, 6, WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, WACOM_DTU_OFFSET,
WACOM_DTU_OFFSET };
+ { "Wacom DTU1141", WACOM_PKGLEN_DTUS, 23472, 13203, 1023,
0,
+ DTUS, 6,
+ WACOM_DTU_OFFSET, WACOM_DTU_OFFSET,
+ WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
static const struct wacom_features wacom_features_0x343 =
- { "Wacom DTK1651", WACOM_PKGLEN_DTUS, 34616, 19559, 1023,
0, DTUS, 4, WACOM_DTU_OFFSET, WACOM_DTU_OFFSET, WACOM_DTU_OFFSET,
WACOM_DTU_OFFSET };
+ { "Wacom DTK1651", WACOM_PKGLEN_DTUS, 34616, 19559, 1023, 0,
+ DTUS, 4,
+ WACOM_DTU_OFFSET, WACOM_DTU_OFFSET,
+ WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
static const struct wacom_features wacom_features_0x57 =
- { "Wacom DTK2241", WACOM_PKGLEN_INTUOS, 95640, 54060, 2047,
63, DTK, 6, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET };
-static const struct wacom_features wacom_features_0x59 =
- { "Wacom DTH2242", WACOM_PKGLEN_INTUOS, 95640, 54060, 2047,
63, DTK, 6, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET };
+ { "Wacom DTK2241", WACOM_PKGLEN_INTUOS, 95840, 54260, 2047,
63,
+ DTK, 6,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+static const struct wacom_features wacom_features_0x59 = /* Pen */
+ { "Wacom DTH2242", WACOM_PKGLEN_INTUOS, 95840, 54260, 2047,
63,
+ DTK, 6,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0xCC =
- { "Wacom Cintiq 21UX2", WACOM_PKGLEN_INTUOS, 86800, 65200, 2047,
63, WACOM_21UX2, 18, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ { "Wacom Cintiq 21UX2", WACOM_PKGLEN_INTUOS, 86800, 65200, 2047,
63,
+ WACOM_21UX2, 18,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0xFA =
- { "Wacom Cintiq 22HD", WACOM_PKGLEN_INTUOS, 95440, 53860, 2047,
63, WACOM_22HD, 18, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ { "Wacom Cintiq 22HD", WACOM_PKGLEN_INTUOS, 95440, 53860, 2047,
63,
+ WACOM_22HD, 18,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0x5B =
- { "Wacom Cintiq 22HDT", WACOM_PKGLEN_INTUOS, 95440, 53860, 2047,
63, WACOM_22HD, 18, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
+ { "Wacom Cintiq 22HDT", WACOM_PKGLEN_INTUOS, 95440, 53860, 2047,
63,
+ WACOM_22HD, 18,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET };
static const struct wacom_features wacom_features_0x90 =
- { "Wacom ISDv4 90", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
0, TABLETPC };
+ { "Wacom ISDv4 90", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0,
+ TABLETPC };
static const struct wacom_features wacom_features_0x93 =
- { "Wacom ISDv4 93", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
0, TABLETPC };
+ { "Wacom ISDv4 93", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0,
+ TABLETPC };
static const struct wacom_features wacom_features_0x97 =
- { "Wacom ISDv4 97", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 511,
0, TABLETPC };
+ { "Wacom ISDv4 97", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 511, 0,
+ TABLETPC };
static const struct wacom_features wacom_features_0x9A =
- { "Wacom ISDv4 9A", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
0, TABLETPC };
+ { "Wacom ISDv4 9A", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0,
+ TABLETPC };
static const struct wacom_features wacom_features_0x9F =
- { "Wacom ISDv4 9F", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
0, TABLETPC };
+ { "Wacom ISDv4 9F", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0,
+ TABLETPC };
static const struct wacom_features wacom_features_0xE2 =
- { "Wacom ISDv4 E2", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255,
0, TABLETPC2FG };
+ { "Wacom ISDv4 E2", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0,
+ TABLETPC2FG };
static const struct wacom_features wacom_features_0xE3 =
- { "Wacom ISDv4 E3", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255,
0, TABLETPC2FG };
+ { "Wacom ISDv4 E3", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0,
+ TABLETPC2FG };
static const struct wacom_features wacom_features_0xE6 =
- { "Wacom ISDv4 E6", WACOM_PKGLEN_TPC2FG, 27760, 15694, 255,
0, TABLETPC2FG };
+ { "Wacom ISDv4 E6", WACOM_PKGLEN_TPC2FG, 27760, 15694, 255, 0,
+ TABLETPC2FG };
static const struct wacom_features wacom_features_0x100 =
- { "Wacom ISDv4 100", WACOM_PKGLEN_MTTPC, 26202, 16325, 255,
0, MTTPC };
+ { "Wacom ISDv4 100", WACOM_PKGLEN_MTTPC, 26202, 16325, 255, 0,
+ MTTPC };
static const struct wacom_features wacom_features_0x101 =
- { "Wacom ISDv4 101", WACOM_PKGLEN_MTTPC, 26202, 16325, 255,
0, MTTPC };
+ { "Wacom ISDv4 101", WACOM_PKGLEN_MTTPC, 26202, 16325, 255, 0,
+ MTTPC };
static const struct wacom_features wacom_features_0x10D =
- { "Wacom ISDv4 10D", WACOM_PKGLEN_MTTPC, 26202, 16325, 255,
0, MTTPC };
+ { "Wacom ISDv4 10D", WACOM_PKGLEN_MTTPC, 26202, 16325, 255, 0,
+ MTTPC };
static const struct wacom_features wacom_features_0x10F =
- { "Wacom ISDv4 10F", WACOM_PKGLEN_MTTPC, 27760, 15694, 255,
0, MTTPC };
+ { "Wacom ISDv4 10F", WACOM_PKGLEN_MTTPC, 27760, 15694, 255, 0,
+ MTTPC };
static const struct wacom_features wacom_features_0x116 =
- { "Wacom ISDv4 116", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
0, TABLETPC };
+ { "Wacom ISDv4 116", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0,
+ TABLETPC };
static const struct wacom_features wacom_features_0x12C =
- { "Wacom ISDv4 12C", WACOM_PKGLEN_GRAPHIRE, 27848, 15752, 2047,
0, TABLETPC };
+ { "Wacom ISDv4 12C", WACOM_PKGLEN_GRAPHIRE, 27848, 15752, 2047, 0,
+ TABLETPC };
static const struct wacom_features wacom_features_0x4001 =
- { "Wacom ISDv4 4001", WACOM_PKGLEN_MTTPC, 26202, 16325, 255,
0, MTTPC };
+ { "Wacom ISDv4 4001", WACOM_PKGLEN_MTTPC, 26202, 16325, 255, 0,
+ MTTPC };
static const struct wacom_features wacom_features_0x4004 =
- { "Wacom ISDv4 4004", WACOM_PKGLEN_MTTPC, 11060, 6220, 255,
0, MTTPC_B };
+ { "Wacom ISDv4 4004", WACOM_PKGLEN_MTTPC, 11060, 6220, 255, 0,
+ MTTPC_B };
static const struct wacom_features wacom_features_0x5000 =
- { "Wacom ISDv4 5000", WACOM_PKGLEN_MTTPC, 27848, 15752, 255,
0, MTTPC_B };
+ { "Wacom ISDv4 5000", WACOM_PKGLEN_MTTPC, 27848, 15752, 255, 0,
+ MTTPC_B };
static const struct wacom_features wacom_features_0x5002 =
- { "Wacom ISDv4 5002", WACOM_PKGLEN_MTTPC, 29576, 16724, 1023,
0, MTTPC_B };
+ { "Wacom ISDv4 5002", WACOM_PKGLEN_MTTPC, 29576, 16724, 1023,
0,
+ MTTPC_B };
static const struct wacom_features wacom_features_0x5010 =
- { "Wacom ISDv4 5010", WACOM_PKGLEN_MTTPC, 13756, 7736, 1023,
0, MTTPC_B };
+ { "Wacom ISDv4 5010", WACOM_PKGLEN_MTTPC, 13756, 7736, 1023,
0,
+ MTTPC_B };
static const struct wacom_features wacom_features_0x5013 =
- { "Wacom ISDv4 5013", WACOM_PKGLEN_MTTPC, 11752, 6612, 1023,
0, MTTPC_B };
+ { "Wacom ISDv4 5013", WACOM_PKGLEN_MTTPC, 11752, 6612, 1023,
0,
+ MTTPC_B };
static const struct wacom_features wacom_features_0x5044 =
- { "Wacom ISDv4 5044", WACOM_PKGLEN_MTTPC, 27648, 15552, 2047,
0, MTTPC_C };
+ { "Wacom ISDv4 5044", WACOM_PKGLEN_MTTPC, 27648, 15552, 2047,
0,
+ MTTPC_C };
static const struct wacom_features wacom_features_0x5048 =
- { "Wacom ISDv4 5048", WACOM_PKGLEN_MTTPC, 27648, 15552, 2047,
0, MTTPC_C };
+ { "Wacom ISDv4 5048", WACOM_PKGLEN_MTTPC, 27648, 15552, 2047,
0,
+ MTTPC_C };
static const struct wacom_features wacom_features_0x5090 =
- { "Wacom ISDv4 5090", WACOM_PKGLEN_MTTPC, 27648, 15552, 2047,
0, MTTPC_C };
+ { "Wacom ISDv4 5090", WACOM_PKGLEN_MTTPC, 27648, 15552, 2047,
0,
+ MTTPC_C };
static const struct wacom_features wacom_features_0x47 =
- { "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
31, INTUOS };
+ { "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
31,
+ INTUOS };
+static const struct wacom_features wacom_features_0xD1 =
+ { "Wacom BambooFun 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xD4 =
+ { "Wacom Bamboo Pen 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xD2 =
+ { "Wacom Bamboo Craft", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xD3 =
+ { "Wacom BambooFun 2FG 6x8", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023,
63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xD0 =
+ { "Wacom Bamboo 2FG", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xD5 =
+ { "Wacom Bamboo Pen 6x8", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023, 63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xD6 =
+ { "Wacom BambooPT 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xD7 =
+ { "Wacom BambooPT 2FG Small", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xD8 =
+ { "Wacom Bamboo Comic 2FG", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023,
63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xDA =
+ { "Wacom Bamboo 2FG 4x5 SE", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xDB =
+ { "Wacom Bamboo 2FG 6x8 SE", WACOM_PKGLEN_BBFUN, 21648, 13700, 1023,
63,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xDD =
+ { "Wacom Bamboo Connect", WACOM_PKGLEN_BBPEN, 14720, 9200, 1023,
31,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xDE =
+ { "Wacom Bamboo 16FG 4x5", WACOM_PKGLEN_BBPEN, 14720, 9200, 1023,
31,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0xDF =
+ { "Wacom Bamboo 16FG 6x8", WACOM_PKGLEN_BBPEN, 21648, 13700, 1023,
31,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0x300 =
+ { "Wacom Bamboo One S", WACOM_PKGLEN_BBPEN, 14720, 9225, 1023, 31,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0x301 =
+ { "Wacom Bamboo One M", WACOM_PKGLEN_BBPEN, 21648, 13530, 1023,
31,
+ BAMBOO_PT };
+static const struct wacom_features wacom_features_0x302 =
+ { "Wacom Intuos PT S", WACOM_PKGLEN_BBPEN, 15200, 9500, 1023, 31,
+ INTUOSHT };
+static const struct wacom_features wacom_features_0x303 =
+ { "Wacom Intuos PT M", WACOM_PKGLEN_BBPEN, 21600, 13500, 1023,
31,
+ INTUOSHT };
+static const struct wacom_features wacom_features_0x30E =
+ { "Wacom Intuos S", WACOM_PKGLEN_BBPEN, 15200, 9500, 1023, 31,
+ INTUOSHT };
static const struct wacom_features wacom_features_0x6004 =
- { "ISD-V4", WACOM_PKGLEN_GRAPHIRE, 12800, 8000, 255, 0,
TABLETPC };
+ { "ISD-V4", WACOM_PKGLEN_GRAPHIRE, 12800, 8000, 255, 0,
+ TABLETPC };
+static const struct wacom_features wacom_features_0x323 =
+ { "Wacom Intuos P M", WACOM_PKGLEN_BBPEN, 21600, 13500, 1023, 31,
+ INTUOSHT };
+static const struct wacom_features wacom_features_0x33B =
+ { "Wacom Intuos S 2", WACOM_PKGLEN_INTUOS, 15200, 9500, 2047, 63,
+ INTUOSHT2 };
+static const struct wacom_features wacom_features_0x33C =
+ { "Wacom Intuos PT S 2", WACOM_PKGLEN_INTUOS, 15200, 9500, 2047, 63,
+ INTUOSHT2 };
+static const struct wacom_features wacom_features_0x33D =
+ { "Wacom Intuos P M 2", WACOM_PKGLEN_INTUOS, 21600, 13500, 2047, 63,
+ INTUOSHT2 };
+static const struct wacom_features wacom_features_0x33E =
+ { "Wacom Intuos PT M 2", WACOM_PKGLEN_INTUOS, 21600, 13500, 2047, 63,
+ INTUOSHT2 };
static const struct wacom_features wacom_features_0x34A =
- { "Wacom MobileStudio Pro 13 Touch", WACOM_PKGLEN_MSPROT, .type =
WACOM_MSPROT,
- .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x34d }; /* Touch */
+ { "Wacom MobileStudio Pro 13 Touch", WACOM_PKGLEN_MSPROT, .type =
WACOM_MSPROT, /* Touch */
+ .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x34D };
static const struct wacom_features wacom_features_0x34B =
- { "Wacom MobileStudio Pro 16 Touch", WACOM_PKGLEN_MSPROT, .type =
WACOM_MSPROT,
- .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x34e }; /* Touch */
+ { "Wacom MobileStudio Pro 16 Touch", WACOM_PKGLEN_MSPROT, .type =
WACOM_MSPROT, /* Touch */
+ .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x34E };
static const struct wacom_features wacom_features_0x34D =
{ "Wacom MobileStudio Pro 13", WACOM_PKGLEN_MSPRO, 59552, 33848, 8191,
63,
- WACOM_MSPRO, 11, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
- .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x34a };
+ WACOM_MSPRO, 11,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x34A };
static const struct wacom_features wacom_features_0x34E =
{ "Wacom MobileStudio Pro 16", WACOM_PKGLEN_MSPRO, 69920, 39680, 8191,
63,
- WACOM_MSPRO, 13, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
- .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x34b };
+ WACOM_MSPRO, 13,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x34B };
static const struct wacom_features wacom_features_0x34F =
- { "Wacom Cintiq Pro 13FHD", WACOM_PKGLEN_MSPRO, 59552, 33848, 8191, 63,
- WACOM_MSPRO, 0, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ { "Wacom Cintiq Pro 13 FHD", WACOM_PKGLEN_MSPRO, 59552, 33848, 8191, 63,
+ WACOM_MSPRO, 0,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
.oVid = USB_VENDOR_ID_WACOM, .oPid = 0x353 };
static const struct wacom_features wacom_features_0x350 =
{ "Wacom Cintiq Pro 16UHD", WACOM_PKGLEN_MSPRO, 69920, 39680, 8191, 63,
- WACOM_MSPRO, 0, WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_MSPRO, 0,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+ WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
.oVid = USB_VENDOR_ID_WACOM, .oPid = 0x354 };
static const struct wacom_features wacom_features_0x353 =
{ "Wacom Cintiq Pro 13FHD Touch", WACOM_PKGLEN_MSPROT, .type =
WACOM_MSPROT,
@@ -2537,15 +2705,18 @@ static const struct wacom_features wacom_features_0x354
=
{ "Wacom Cintiq Pro 16UHD Touch", WACOM_PKGLEN_MSPROT, .type =
WACOM_MSPROT,
.oVid = USB_VENDOR_ID_WACOM, .oPid = 0x350 }; /* Touch */
static const struct wacom_features wacom_features_0x357 =
- { "Wacom Intuos Pro M", WACOM_PKGLEN_INTUOSP2, 44800, 29600, 8191, 63,
INTUOSP2, 9 };
+ { "Wacom Intuos Pro M", WACOM_PKGLEN_INTUOSP2, 44800, 29600, 8191, 63,
+ INTUOSP2, 9 };
static const struct wacom_features wacom_features_0x358 =
- { "Wacom Intuos Pro L", WACOM_PKGLEN_INTUOSP2, 62200, 43200, 8191, 63,
INTUOSP2, 9 };
+ { "Wacom Intuos Pro L", WACOM_PKGLEN_INTUOSP2, 62200, 43200, 8191, 63,
+ INTUOSP2, 9 };
static const struct wacom_features wacom_features_0x35A =
- { "Wacom DTH-1152", WACOM_PKGLEN_DTH1152, 22320, 12555, 1024,
- 0, DTH1152, .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x368 };
+ { "Wacom DTH-1152", WACOM_PKGLEN_DTH1152, 22320, 12555, 1024, 0,
+ DTH1152, .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x368 };
static const struct wacom_features wacom_features_0x368 =
- { "Wacom DTH-1152 Touch", WACOM_PKGLEN_27QHDT, .type = DTH1152T,
- .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x35a }; /* Touch */
+ { "Wacom DTH-1152 Touch", WACOM_PKGLEN_27QHDT,
+ .type = DTH1152T, .oVid = USB_VENDOR_ID_WACOM,
+ .oPid = 0x35A }; /* Touch */
#define USB_DEVICE_WACOM(prod) \
USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \
@@ -2562,6 +2733,7 @@ static const struct wacom_features wacom_features_0x368 =
const struct usb_device_id wacom_ids[] = {
{ USB_DEVICE_WACOM(0x00) },
+ { USB_DEVICE_WACOM(0x03) },
{ USB_DEVICE_WACOM(0x10) },
{ USB_DEVICE_WACOM(0x11) },
{ USB_DEVICE_WACOM(0x12) },
@@ -2572,20 +2744,16 @@ const struct usb_device_id wacom_ids[] = {
{ USB_DEVICE_WACOM(0x17) },
{ USB_DEVICE_WACOM(0x18) },
{ USB_DEVICE_WACOM(0x19) },
- { USB_DEVICE_WACOM(0x60) },
- { USB_DEVICE_WACOM(0x61) },
- { USB_DEVICE_WACOM(0x62) },
- { USB_DEVICE_WACOM(0x63) },
- { USB_DEVICE_WACOM(0x64) },
- { USB_DEVICE_WACOM(0x65) },
- { USB_DEVICE_WACOM(0x69) },
- { USB_DEVICE_WACOM(0x6A) },
- { USB_DEVICE_WACOM(0x6B) },
{ USB_DEVICE_WACOM(0x20) },
{ USB_DEVICE_WACOM(0x21) },
{ USB_DEVICE_WACOM(0x22) },
{ USB_DEVICE_WACOM(0x23) },
{ USB_DEVICE_WACOM(0x24) },
+ { USB_DEVICE_WACOM(0x26) },
+ { USB_DEVICE_WACOM(0x27) },
+ { USB_DEVICE_WACOM(0x28) },
+ { USB_DEVICE_WACOM(0x29) },
+ { USB_DEVICE_WACOM(0x2A) },
{ USB_DEVICE_WACOM(0x30) },
{ USB_DEVICE_WACOM(0x31) },
{ USB_DEVICE_WACOM(0x32) },
@@ -2595,32 +2763,30 @@ const struct usb_device_id wacom_ids[] = {
{ USB_DEVICE_WACOM(0x37) },
{ USB_DEVICE_WACOM(0x38) },
{ USB_DEVICE_WACOM(0x39) },
- { USB_DEVICE_WACOM(0xC4) },
- { USB_DEVICE_WACOM(0xC0) },
- { USB_DEVICE_WACOM(0xC2) },
- { USB_DEVICE_WACOM(0x03) },
- { USB_DEVICE_WACOM(0xD1) },
- { USB_DEVICE_WACOM(0xD4) },
- { USB_DEVICE_WACOM(0xD2) },
- { USB_DEVICE_WACOM(0xD3) },
- { USB_DEVICE_WACOM(0xD0) },
- { USB_DEVICE_WACOM(0xD5) },
- { USB_DEVICE_WACOM(0xD6) },
- { USB_DEVICE_WACOM(0xD7) },
- { USB_DEVICE_WACOM(0xD8) },
- { USB_DEVICE_WACOM(0xDA) },
- { USB_DEVICE_WACOM(0xDB) },
- { USB_DEVICE_WACOM(0xDD) },
- { USB_DEVICE_WACOM(0xDE) },
- { USB_DEVICE_WACOM(0xDF) },
+ { USB_DEVICE_WACOM(0x3F) },
{ USB_DEVICE_WACOM(0x41) },
{ USB_DEVICE_WACOM(0x42) },
{ USB_DEVICE_WACOM(0x43) },
{ USB_DEVICE_WACOM(0x44) },
{ USB_DEVICE_WACOM(0x45) },
+ { USB_DEVICE_WACOM(0x47) },
{ USB_DEVICE_WACOM(0x57) },
{ USB_DEVICE_WACOM(0x59) },
{ USB_DEVICE_WACOM(0x5B) },
+ { USB_DEVICE_WACOM(0x60) },
+ { USB_DEVICE_WACOM(0x61) },
+ { USB_DEVICE_WACOM(0x62) },
+ { USB_DEVICE_WACOM(0x63) },
+ { USB_DEVICE_WACOM(0x64) },
+ { USB_DEVICE_WACOM(0x65) },
+ { USB_DEVICE_WACOM(0x69) },
+ { USB_DEVICE_WACOM(0x6A) },
+ { USB_DEVICE_WACOM(0x6B) },
+ { USB_DEVICE_WACOM(0x90) },
+ { USB_DEVICE_WACOM(0x93) },
+ { USB_DEVICE_WACOM(0x97) },
+ { USB_DEVICE_WACOM(0x9A) },
+ { USB_DEVICE_WACOM(0x9F) },
{ USB_DEVICE_WACOM(0xB0) },
{ USB_DEVICE_WACOM(0xB1) },
{ USB_DEVICE_WACOM(0xB2) },
@@ -2633,15 +2799,13 @@ const struct usb_device_id wacom_ids[] = {
{ USB_DEVICE_WACOM(0xBA) },
{ USB_DEVICE_WACOM(0xBB) },
{ USB_DEVICE_WACOM(0xBC) },
- { USB_DEVICE_WACOM(0x26) },
- { USB_DEVICE_WACOM(0x27) },
- { USB_DEVICE_WACOM(0x28) },
- { USB_DEVICE_WACOM(0x29) },
- { USB_DEVICE_WACOM(0x2A) },
- { USB_DEVICE_WACOM(0x3F) },
+ { USB_DEVICE_WACOM(0xC0) },
+ { USB_DEVICE_WACOM(0xC2) },
+ { USB_DEVICE_WACOM(0xC4) },
{ USB_DEVICE_WACOM(0xC5) },
{ USB_DEVICE_WACOM(0xC6) },
{ USB_DEVICE_WACOM(0xC7) },
+ { USB_DEVICE_WACOM(0xCC) },
/*
* DTU-2231 has two interfaces on the same configuration,
* only one is used.
@@ -2649,55 +2813,53 @@ const struct usb_device_id wacom_ids[] = {
{ USB_DEVICE_DETAILED(0xCE, USB_CLASS_HID,
USB_INTERFACE_SUBCLASS_BOOT,
USB_INTERFACE_PROTOCOL_MOUSE) },
- { USB_DEVICE_WACOM(0xF0) },
- { USB_DEVICE_WACOM(0xCC) },
- { USB_DEVICE_WACOM(0x90) },
- { USB_DEVICE_WACOM(0x93) },
- { USB_DEVICE_WACOM(0x97) },
- { USB_DEVICE_WACOM(0x9A) },
- { USB_DEVICE_WACOM(0x9F) },
+ { USB_DEVICE_WACOM(0xD0) },
+ { USB_DEVICE_WACOM(0xD1) },
+ { USB_DEVICE_WACOM(0xD2) },
+ { USB_DEVICE_WACOM(0xD3) },
+ { USB_DEVICE_WACOM(0xD4) },
+ { USB_DEVICE_WACOM(0xD5) },
+ { USB_DEVICE_WACOM(0xD6) },
+ { USB_DEVICE_WACOM(0xD7) },
+ { USB_DEVICE_WACOM(0xD8) },
+ { USB_DEVICE_WACOM(0xDA) },
+ { USB_DEVICE_WACOM(0xDB) },
+ { USB_DEVICE_WACOM(0xDD) },
+ { USB_DEVICE_WACOM(0xDE) },
+ { USB_DEVICE_WACOM(0xDF) },
{ USB_DEVICE_WACOM(0xE2) },
{ USB_DEVICE_WACOM(0xE3) },
{ USB_DEVICE_WACOM(0xE6) },
+ { USB_DEVICE_WACOM(0xF0) },
+ { USB_DEVICE_WACOM(0xF4) },
+ { USB_DEVICE_WACOM(0xF8) },
+ { USB_DEVICE_WACOM(0xFA) },
+ { USB_DEVICE_WACOM(0xFB) },
{ USB_DEVICE_WACOM(0x100) },
{ USB_DEVICE_WACOM(0x101) },
{ USB_DEVICE_WACOM(0x10D) },
{ USB_DEVICE_WACOM(0x10F) },
{ USB_DEVICE_WACOM(0x116) },
{ USB_DEVICE_WACOM(0x12C) },
- { USB_DEVICE_WACOM(0x4001) },
- { USB_DEVICE_WACOM(0x4004) },
- { USB_DEVICE_WACOM(0x5000) },
- { USB_DEVICE_WACOM(0x5002) },
- { USB_DEVICE_WACOM(0x5010) },
- { USB_DEVICE_WACOM(0x5013) },
- { USB_DEVICE_WACOM(0x5044) },
- { USB_DEVICE_WACOM(0x5048) },
- { USB_DEVICE_WACOM(0x5090) },
{ USB_DEVICE_WACOM(0x300) },
{ USB_DEVICE_WACOM(0x301) },
{ USB_DEVICE_DETAILED(0x302, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_DETAILED(0x303, USB_CLASS_HID, 0, 0) },
- { USB_DEVICE_DETAILED(0x30E, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_WACOM(0x304) },
- { USB_DEVICE_DETAILED(0x323, USB_CLASS_HID, 0, 0) },
+ { USB_DEVICE_DETAILED(0x30E, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_DETAILED(0x314, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_DETAILED(0x315, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_DETAILED(0x317, USB_CLASS_HID, 0, 0) },
+ { USB_DEVICE_DETAILED(0x323, USB_CLASS_HID, 0, 0) },
+ { USB_DEVICE_WACOM(0x32A) },
+ { USB_DEVICE_WACOM(0x32B) },
+ { USB_DEVICE_WACOM(0x32F) },
{ USB_DEVICE_WACOM(0x333) },
{ USB_DEVICE_WACOM(0x336) },
{ USB_DEVICE_DETAILED(0x33B, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_DETAILED(0x33C, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_DETAILED(0x33D, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_DETAILED(0x33E, USB_CLASS_HID, 0, 0) },
- { USB_DEVICE_WACOM(0x47) },
- { USB_DEVICE_WACOM(0xF4) },
- { USB_DEVICE_WACOM(0xF8) },
- { USB_DEVICE_WACOM(0xFA) },
- { USB_DEVICE_WACOM(0xFB) },
- { USB_DEVICE_WACOM(0x32A) },
- { USB_DEVICE_WACOM(0x32B) },
- { USB_DEVICE_WACOM(0x32F) },
{ USB_DEVICE_WACOM(0x343) },
{ USB_DEVICE_WACOM(0x34A) },
{ USB_DEVICE_WACOM(0x34B) },
@@ -2711,6 +2873,15 @@ const struct usb_device_id wacom_ids[] = {
{ USB_DEVICE_DETAILED(0x358, USB_CLASS_HID, 0, 0) },
{ USB_DEVICE_WACOM(0x35A) },
{ USB_DEVICE_WACOM(0x368) },
+ { USB_DEVICE_WACOM(0x4001) },
+ { USB_DEVICE_WACOM(0x4004) },
+ { USB_DEVICE_WACOM(0x5000) },
+ { USB_DEVICE_WACOM(0x5002) },
+ { USB_DEVICE_WACOM(0x5010) },
+ { USB_DEVICE_WACOM(0x5013) },
+ { USB_DEVICE_WACOM(0x5044) },
+ { USB_DEVICE_WACOM(0x5048) },
+ { USB_DEVICE_WACOM(0x5090) },
{ USB_DEVICE_LENOVO(0x6004) },
{ }
};
diff --git a/2.6.30/wacom_wac.h b/2.6.30/wacom_wac.h
index cfbf37a..c2cb837 100755
--- a/2.6.30/wacom_wac.h
+++ b/2.6.30/wacom_wac.h
@@ -14,31 +14,33 @@
/* maximum packet length for USB devices */
#define WACOM_PKGLEN_MAX 192
+#define WACOM_NAME_MAX 64
+
/* packet length for individual models */
#define WACOM_PKGLEN_PENPRTN 7
#define WACOM_PKGLEN_GRAPHIRE 8
#define WACOM_PKGLEN_BBFUN 9
#define WACOM_PKGLEN_INTUOS 10
#define WACOM_PKGLEN_TPC1FG 5
+#define WACOM_PKGLEN_TPC1FG_B 10
#define WACOM_PKGLEN_TPC2FG 14
-#define WACOM_PKGLEN_TPC1FG_B 10
#define WACOM_PKGLEN_BBTOUCH 20
-#define WACOM_PKGLEN_BBTOUCH3 64
+#define WACOM_PKGLEN_BBTOUCH3 64
+#define WACOM_PKGLEN_BBPEN 10
#define WACOM_PKGLEN_MTTPC 40
-#define WACOM_PKGLEN_BBPEN 10
#define WACOM_PKGLEN_DTUS 68
-#define WACOM_PKGLEN_PENABLED 8
-#define WACOM_PKGLEN_MSPRO 64
-#define WACOM_PKGLEN_INTUOSP2 64
-#define WACOM_PKGLEN_INTUOSP2T 44
-#define WACOM_PKGLEN_MSPROT 50
-#define WACOM_PKGLEN_27QHDT 64
-#define WACOM_PKGLEN_DTH1152 16
+#define WACOM_PKGLEN_PENABLED 8
+#define WACOM_PKGLEN_27QHDT 64
+#define WACOM_PKGLEN_MSPRO 64
+#define WACOM_PKGLEN_MSPROT 50
+#define WACOM_PKGLEN_INTUOSP2 64
+#define WACOM_PKGLEN_INTUOSP2T 44
+#define WACOM_PKGLEN_DTH1152 16
/* wacom data size per MT contact */
#define WACOM_BYTES_PER_MT_PACKET 11
-#define WACOM_BYTES_PER_MSPROT_PACKET 9
-#define WACOM_BYTES_PER_INTUOSP2_PACKET 8
+#define WACOM_BYTES_PER_MSPROT_PACKET 9
+#define WACOM_BYTES_PER_INTUOSP2_PACKET 8
/* device IDs */
#define STYLUS_DEVICE_ID 0x02
@@ -52,16 +54,16 @@
#define WACOM_REPORT_INTUOS_ID1 5
#define WACOM_REPORT_INTUOS_ID2 6
#define WACOM_REPORT_INTUOSPAD 12
-#define WACOM_REPORT_INTUOS5PAD 3
+#define WACOM_REPORT_INTUOS5PAD 3
#define WACOM_REPORT_DTUSPAD 21
#define WACOM_REPORT_TPC1FG 6
#define WACOM_REPORT_TPC2FG 13
#define WACOM_REPORT_TPCMT2 3
-#define WACOM_REPORT_DTUS 17
#define WACOM_REPORT_CINTIQ 16
#define WACOM_REPORT_MSPRO 16
#define WACOM_REPORT_INTUOS_PEN 16
#define WACOM_REPORT_CINTIQPAD 17
+#define WACOM_REPORT_DTUS 17
#define WACOM_REPORT_MSPROPAD 17
#define WACOM_REPORT_MSPRODEVICE 19
#define WACOM_REPORT_VENDOR_DEF_TOUCH 33
@@ -156,7 +158,7 @@ struct wacom_shared {
};
struct wacom_wac {
- char name[64];
+ char name[WACOM_NAME_MAX];
unsigned char *data;
int tool[3];
int id[3];
--
2.14.3
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel