Add preliminary support for Wacom Bamboo pen and touch devices.
This commit is contained in:
parent
db42d7353c
commit
1d13b01aba
23
kernel.spec
23
kernel.spec
@ -698,6 +698,17 @@ Patch12020: alsa-fix-substream-proc-status-read.patch
|
|||||||
|
|
||||||
Patch12030: tpm-fix-stall-on-boot.patch
|
Patch12030: tpm-fix-stall-on-boot.patch
|
||||||
|
|
||||||
|
# Wacom Bamboo
|
||||||
|
Patch12100: wacom-01-add-fuzz-parameters-to-features.patch
|
||||||
|
Patch12105: wacom-02-parse-the-bamboo-device-family.patch
|
||||||
|
Patch12110: wacom-03-collect-device-quirks-into-single-function.patch
|
||||||
|
Patch12115: wacom-04-add-support-for-the-bamboo-touch-trackpad.patch
|
||||||
|
Patch12120: wacom-05-add-a-quirk-for-low-resolution-bamboo-devices.patch
|
||||||
|
Patch12125: wacom-06-request-tablet-data-for-bamboo-pens.patch
|
||||||
|
Patch12130: wacom-07-move-bamboo-touch-irq-to-its-own-function.patch
|
||||||
|
Patch12035: wacom-08-add-support-for-bamboo-pen.patch
|
||||||
|
Patch12040: wacom-09-disable-bamboo-touchpad-when-pen-is-being-used.patch
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
|
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
|
||||||
@ -1275,6 +1286,17 @@ ApplyPatch neuter_intel_microcode_load.patch
|
|||||||
# try to fix stalls during boot (#530393)
|
# try to fix stalls during boot (#530393)
|
||||||
ApplyPatch tpm-fix-stall-on-boot.patch
|
ApplyPatch tpm-fix-stall-on-boot.patch
|
||||||
|
|
||||||
|
# Wacom Bamboo
|
||||||
|
ApplyPatch wacom-01-add-fuzz-parameters-to-features.patch
|
||||||
|
ApplyPatch wacom-02-parse-the-bamboo-device-family.patch
|
||||||
|
ApplyPatch wacom-03-collect-device-quirks-into-single-function.patch
|
||||||
|
ApplyPatch wacom-04-add-support-for-the-bamboo-touch-trackpad.patch
|
||||||
|
ApplyPatch wacom-05-add-a-quirk-for-low-resolution-bamboo-devices.patch
|
||||||
|
ApplyPatch wacom-06-request-tablet-data-for-bamboo-pens.patch
|
||||||
|
ApplyPatch wacom-07-move-bamboo-touch-irq-to-its-own-function.patch
|
||||||
|
ApplyPatch wacom-08-add-support-for-bamboo-pen.patch
|
||||||
|
ApplyPatch wacom-09-disable-bamboo-touchpad-when-pen-is-being-used.patch
|
||||||
|
|
||||||
# END OF PATCH APPLICATIONS
|
# END OF PATCH APPLICATIONS
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
@ -1884,6 +1906,7 @@ fi
|
|||||||
%changelog
|
%changelog
|
||||||
* Sat Sep 11 2010 Chuck Ebbert <cebbert@redhat.com>
|
* Sat Sep 11 2010 Chuck Ebbert <cebbert@redhat.com>
|
||||||
- Linux 2.6.36-rc4
|
- Linux 2.6.36-rc4
|
||||||
|
- Add preliminary support for Wacom Bamboo pen and touch devices.
|
||||||
|
|
||||||
* Sat Sep 11 2010 Chuck Ebbert <cebbert@redhat.com> - 2.6.36-0.20.rc3.git4
|
* Sat Sep 11 2010 Chuck Ebbert <cebbert@redhat.com> - 2.6.36-0.20.rc3.git4
|
||||||
- Linux 2.6.36-rc3-git4
|
- Linux 2.6.36-rc3-git4
|
||||||
|
69
wacom-01-add-fuzz-parameters-to-features.patch
Normal file
69
wacom-01-add-fuzz-parameters-to-features.patch
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
From: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Date: Sun, 5 Sep 2010 19:25:11 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - add fuzz parameters to features
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=fed87e655a2c20468d628b37424af58287803afe
|
||||||
|
|
||||||
|
Input: wacom - add fuzz parameters to features
|
||||||
|
|
||||||
|
The signal-to-noise ratio varies between devices, but currently all
|
||||||
|
devices are treated the same way. Add fuzz parameters to the feature
|
||||||
|
struct, allowing for tailored treatment of devices.
|
||||||
|
|
||||||
|
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
|
||||||
|
index 42ba369..e510e4f 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_sys.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_sys.c
|
||||||
|
@@ -333,8 +333,12 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf,
|
||||||
|
struct usb_host_interface *interface = intf->cur_altsetting;
|
||||||
|
struct hid_descriptor *hid_desc;
|
||||||
|
|
||||||
|
- /* default device to penabled */
|
||||||
|
+ /* default features */
|
||||||
|
features->device_type = BTN_TOOL_PEN;
|
||||||
|
+ features->x_fuzz = 4;
|
||||||
|
+ features->y_fuzz = 4;
|
||||||
|
+ features->pressure_fuzz = 0;
|
||||||
|
+ features->distance_fuzz = 0;
|
||||||
|
|
||||||
|
/* only Tablet PCs need to retrieve the info */
|
||||||
|
if ((features->type != TABLETPC) && (features->type != TABLETPC2FG))
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
||||||
|
index 6e29bad..6d7e164 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.c
|
||||||
|
@@ -951,9 +951,12 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
|
|
||||||
|
__set_bit(BTN_TOUCH, input_dev->keybit);
|
||||||
|
|
||||||
|
- input_set_abs_params(input_dev, ABS_X, 0, features->x_max, 4, 0);
|
||||||
|
- input_set_abs_params(input_dev, ABS_Y, 0, features->y_max, 4, 0);
|
||||||
|
- input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max, 0, 0);
|
||||||
|
+ input_set_abs_params(input_dev, ABS_X, 0, features->x_max,
|
||||||
|
+ features->x_fuzz, 0);
|
||||||
|
+ input_set_abs_params(input_dev, ABS_Y, 0, features->y_max,
|
||||||
|
+ features->y_fuzz, 0);
|
||||||
|
+ input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max,
|
||||||
|
+ features->pressure_fuzz, 0);
|
||||||
|
|
||||||
|
__set_bit(ABS_MISC, input_dev->absbit);
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h
|
||||||
|
index 99e1a54..d769e9a 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.h
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.h
|
||||||
|
@@ -73,6 +73,10 @@ struct wacom_features {
|
||||||
|
int y_phy;
|
||||||
|
unsigned char unit;
|
||||||
|
unsigned char unitExpo;
|
||||||
|
+ int x_fuzz;
|
||||||
|
+ int y_fuzz;
|
||||||
|
+ int pressure_fuzz;
|
||||||
|
+ int distance_fuzz;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct wacom_shared {
|
122
wacom-02-parse-the-bamboo-device-family.patch
Normal file
122
wacom-02-parse-the-bamboo-device-family.patch
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
From: Ping Cheng <pinglinux@gmail.com>
|
||||||
|
Date: Sun, 5 Sep 2010 19:25:40 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - parse the Bamboo device family
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=4a88081e739a41d6d70bace7e0a027f9054ab540
|
||||||
|
|
||||||
|
Input: wacom - parse the Bamboo device family
|
||||||
|
|
||||||
|
The Bamboo devices have multiple interfaces which need to be setup
|
||||||
|
separately. Use the HID parsing mechanism to achieve that.
|
||||||
|
|
||||||
|
Signed-off-by: Ping Cheng <pinglinux@gmail.com>
|
||||||
|
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
|
||||||
|
index e510e4f..98cba08 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_sys.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_sys.c
|
||||||
|
@@ -195,17 +195,30 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
|
||||||
|
features->pktlen = WACOM_PKGLEN_TPC2FG;
|
||||||
|
features->device_type = BTN_TOOL_TRIPLETAP;
|
||||||
|
}
|
||||||
|
- 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];
|
||||||
|
- i += 12;
|
||||||
|
+ if (features->type == BAMBOO_PT) {
|
||||||
|
+ /* need to reset back */
|
||||||
|
+ features->pktlen = WACOM_PKGLEN_BBTOUCH;
|
||||||
|
+ features->device_type = BTN_TOOL_TRIPLETAP;
|
||||||
|
+ features->x_phy =
|
||||||
|
+ get_unaligned_le16(&report[i + 5]);
|
||||||
|
+ features->x_max =
|
||||||
|
+ get_unaligned_le16(&report[i + 8]);
|
||||||
|
+ i += 15;
|
||||||
|
+ } else {
|
||||||
|
+ 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];
|
||||||
|
+ i += 12;
|
||||||
|
+ }
|
||||||
|
} else if (pen) {
|
||||||
|
/* penabled only accepts exact bytes of data */
|
||||||
|
if (features->type == TABLETPC2FG)
|
||||||
|
features->pktlen = WACOM_PKGLEN_GRAPHIRE;
|
||||||
|
+ if (features->type == BAMBOO_PT)
|
||||||
|
+ features->pktlen = WACOM_PKGLEN_BBFUN;
|
||||||
|
features->device_type = BTN_TOOL_PEN;
|
||||||
|
features->x_max =
|
||||||
|
get_unaligned_le16(&report[i + 3]);
|
||||||
|
@@ -234,6 +247,15 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
|
||||||
|
features->y_phy =
|
||||||
|
get_unaligned_le16(&report[i + 6]);
|
||||||
|
i += 7;
|
||||||
|
+ } else if (features->type == BAMBOO_PT) {
|
||||||
|
+ /* need to reset back */
|
||||||
|
+ features->pktlen = WACOM_PKGLEN_BBTOUCH;
|
||||||
|
+ features->device_type = BTN_TOOL_TRIPLETAP;
|
||||||
|
+ features->y_phy =
|
||||||
|
+ get_unaligned_le16(&report[i + 3]);
|
||||||
|
+ features->y_max =
|
||||||
|
+ get_unaligned_le16(&report[i + 6]);
|
||||||
|
+ i += 12;
|
||||||
|
} else {
|
||||||
|
features->y_max =
|
||||||
|
features->x_max;
|
||||||
|
@@ -245,6 +267,8 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
|
||||||
|
/* penabled only accepts exact bytes of data */
|
||||||
|
if (features->type == TABLETPC2FG)
|
||||||
|
features->pktlen = WACOM_PKGLEN_GRAPHIRE;
|
||||||
|
+ if (features->type == BAMBOO_PT)
|
||||||
|
+ features->pktlen = WACOM_PKGLEN_BBFUN;
|
||||||
|
features->device_type = BTN_TOOL_PEN;
|
||||||
|
features->y_max =
|
||||||
|
get_unaligned_le16(&report[i + 3]);
|
||||||
|
@@ -341,7 +365,8 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf,
|
||||||
|
features->distance_fuzz = 0;
|
||||||
|
|
||||||
|
/* only Tablet PCs need to retrieve the info */
|
||||||
|
- if ((features->type != TABLETPC) && (features->type != TABLETPC2FG))
|
||||||
|
+ if ((features->type != TABLETPC) && (features->type != TABLETPC2FG) &&
|
||||||
|
+ (features->type != BAMBOO_PT))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) {
|
||||||
|
@@ -499,7 +524,8 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
|
||||||
|
|
||||||
|
strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name));
|
||||||
|
|
||||||
|
- if (features->type == TABLETPC || features->type == TABLETPC2FG) {
|
||||||
|
+ if (features->type == TABLETPC || features->type == TABLETPC2FG ||
|
||||||
|
+ features->type == BAMBOO_PT) {
|
||||||
|
/* Append the device type to the name */
|
||||||
|
strlcat(wacom_wac->name,
|
||||||
|
features->device_type == BTN_TOOL_PEN ?
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h
|
||||||
|
index d769e9a..fb30895 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.h
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.h
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
#define WACOM_PKGLEN_INTUOS 10
|
||||||
|
#define WACOM_PKGLEN_TPC1FG 5
|
||||||
|
#define WACOM_PKGLEN_TPC2FG 14
|
||||||
|
+#define WACOM_PKGLEN_BBTOUCH 20
|
||||||
|
|
||||||
|
/* device IDs */
|
||||||
|
#define STYLUS_DEVICE_ID 0x02
|
||||||
|
@@ -44,6 +45,7 @@ enum {
|
||||||
|
PTU,
|
||||||
|
PL,
|
||||||
|
DTU,
|
||||||
|
+ BAMBOO_PT,
|
||||||
|
INTUOS,
|
||||||
|
INTUOS3S,
|
||||||
|
INTUOS3,
|
107
wacom-03-collect-device-quirks-into-single-function.patch
Normal file
107
wacom-03-collect-device-quirks-into-single-function.patch
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
From: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Date: Sun, 5 Sep 2010 19:26:16 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - collect device quirks into single function
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=bc73dd39e78dd6e5b34cd938b7f037a8bc041bdd
|
||||||
|
|
||||||
|
Input: wacom - collect device quirks into single function
|
||||||
|
|
||||||
|
Collect device-specific code into a single function, and use quirks to
|
||||||
|
flag specific behavior instead.
|
||||||
|
|
||||||
|
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom.h b/drivers/input/tablet/wacom.h
|
||||||
|
index 284dfaa..de5adb1 100644
|
||||||
|
--- a/drivers/input/tablet/wacom.h
|
||||||
|
+++ b/drivers/input/tablet/wacom.h
|
||||||
|
@@ -118,6 +118,7 @@ struct wacom {
|
||||||
|
extern const struct usb_device_id wacom_ids[];
|
||||||
|
|
||||||
|
void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len);
|
||||||
|
+void wacom_setup_device_quirks(struct wacom_features *features);
|
||||||
|
void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
|
struct wacom_wac *wacom_wac);
|
||||||
|
#endif
|
||||||
|
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
|
||||||
|
index 98cba08..fc6fd53 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_sys.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_sys.c
|
||||||
|
@@ -381,12 +381,6 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf,
|
||||||
|
if (error)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
- /* touch device found but size is not defined. use default */
|
||||||
|
- if (features->device_type == BTN_TOOL_DOUBLETAP && !features->x_max) {
|
||||||
|
- features->x_max = 1023;
|
||||||
|
- features->y_max = 1023;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
out:
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
@@ -522,10 +516,11 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
|
||||||
|
if (error)
|
||||||
|
goto fail2;
|
||||||
|
|
||||||
|
+ wacom_setup_device_quirks(features);
|
||||||
|
+
|
||||||
|
strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name));
|
||||||
|
|
||||||
|
- if (features->type == TABLETPC || features->type == TABLETPC2FG ||
|
||||||
|
- features->type == BAMBOO_PT) {
|
||||||
|
+ if (features->quirks & WACOM_QUIRK_MULTI_INPUT) {
|
||||||
|
/* Append the device type to the name */
|
||||||
|
strlcat(wacom_wac->name,
|
||||||
|
features->device_type == BTN_TOOL_PEN ?
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
||||||
|
index 6d7e164..44b4a59 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.c
|
||||||
|
@@ -941,6 +941,22 @@ static void wacom_setup_intuos(struct wacom_wac *wacom_wac)
|
||||||
|
input_set_abs_params(input_dev, ABS_THROTTLE, -1023, 1023, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
+void wacom_setup_device_quirks(struct wacom_features *features)
|
||||||
|
+{
|
||||||
|
+
|
||||||
|
+ /* touch device found but size is not defined. use default */
|
||||||
|
+ if (features->device_type == BTN_TOOL_DOUBLETAP && !features->x_max) {
|
||||||
|
+ features->x_max = 1023;
|
||||||
|
+ features->y_max = 1023;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* these device have multiple inputs */
|
||||||
|
+ if (features->type == TABLETPC || features->type == TABLETPC2FG ||
|
||||||
|
+ features->type == BAMBOO_PT)
|
||||||
|
+ features->quirks |= WACOM_QUIRK_MULTI_INPUT;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
|
struct wacom_wac *wacom_wac)
|
||||||
|
{
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h
|
||||||
|
index fb30895..6a1ff10 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.h
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.h
|
||||||
|
@@ -38,6 +38,9 @@
|
||||||
|
#define WACOM_REPORT_TPC1FG 6
|
||||||
|
#define WACOM_REPORT_TPC2FG 13
|
||||||
|
|
||||||
|
+/* device quirks */
|
||||||
|
+#define WACOM_QUIRK_MULTI_INPUT 0x0001
|
||||||
|
+
|
||||||
|
enum {
|
||||||
|
PENPARTNER = 0,
|
||||||
|
GRAPHIRE,
|
||||||
|
@@ -79,6 +82,7 @@ struct wacom_features {
|
||||||
|
int y_fuzz;
|
||||||
|
int pressure_fuzz;
|
||||||
|
int distance_fuzz;
|
||||||
|
+ unsigned quirks;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct wacom_shared {
|
172
wacom-04-add-support-for-the-bamboo-touch-trackpad.patch
Normal file
172
wacom-04-add-support-for-the-bamboo-touch-trackpad.patch
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
From: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Date: Sun, 5 Sep 2010 19:53:16 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - add support for the Bamboo Touch trackpad
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=cb734c03680eaaad64a20a666300eafd1ac260b2
|
||||||
|
|
||||||
|
Input: wacom - add support for the Bamboo Touch trackpad
|
||||||
|
|
||||||
|
Add support for the Bamboo Touch trackpad, and make it work with
|
||||||
|
both the Synaptics X Driver and the Multitouch X Driver. The device
|
||||||
|
uses MT slots internally, so the choice of protocol is a given.
|
||||||
|
|
||||||
|
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
||||||
|
index 44b4a59..4e9b1dd 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.c
|
||||||
|
@@ -855,6 +855,53 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
+{
|
||||||
|
+ struct input_dev *input = wacom->input;
|
||||||
|
+ unsigned char *data = wacom->data;
|
||||||
|
+ int sp = 0, sx = 0, sy = 0, count = 0;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ if (len != WACOM_PKGLEN_BBTOUCH)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < 2; i++) {
|
||||||
|
+ int p = data[9 * i + 2];
|
||||||
|
+ input_mt_slot(input, i);
|
||||||
|
+ if (p) {
|
||||||
|
+ int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff;
|
||||||
|
+ int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff;
|
||||||
|
+ input_report_abs(input, ABS_MT_PRESSURE, p);
|
||||||
|
+ input_report_abs(input, ABS_MT_POSITION_X, x);
|
||||||
|
+ input_report_abs(input, ABS_MT_POSITION_Y, y);
|
||||||
|
+ if (wacom->id[i] < 0)
|
||||||
|
+ wacom->id[i] = wacom->trk_id++ & MAX_TRACKING_ID;
|
||||||
|
+ if (!count++)
|
||||||
|
+ sp = p, sx = x, sy = y;
|
||||||
|
+ } else {
|
||||||
|
+ wacom->id[i] = -1;
|
||||||
|
+ }
|
||||||
|
+ input_report_abs(input, ABS_MT_TRACKING_ID, wacom->id[i]);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ input_report_key(input, BTN_TOUCH, count > 0);
|
||||||
|
+ input_report_key(input, BTN_TOOL_FINGER, count == 1);
|
||||||
|
+ input_report_key(input, BTN_TOOL_DOUBLETAP, count == 2);
|
||||||
|
+
|
||||||
|
+ input_report_abs(input, ABS_PRESSURE, sp);
|
||||||
|
+ input_report_abs(input, ABS_X, sx);
|
||||||
|
+ input_report_abs(input, ABS_Y, sy);
|
||||||
|
+
|
||||||
|
+ 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;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
|
||||||
|
{
|
||||||
|
bool sync;
|
||||||
|
@@ -900,6 +947,10 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
|
||||||
|
sync = wacom_tpc_irq(wacom_wac, len);
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case BAMBOO_PT:
|
||||||
|
+ sync = wacom_bpt_irq(wacom_wac, len);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
default:
|
||||||
|
sync = false;
|
||||||
|
break;
|
||||||
|
@@ -955,6 +1006,13 @@ void wacom_setup_device_quirks(struct wacom_features *features)
|
||||||
|
if (features->type == TABLETPC || features->type == TABLETPC2FG ||
|
||||||
|
features->type == BAMBOO_PT)
|
||||||
|
features->quirks |= WACOM_QUIRK_MULTI_INPUT;
|
||||||
|
+
|
||||||
|
+ /* quirks for bamboo touch */
|
||||||
|
+ if (features->type == BAMBOO_PT &&
|
||||||
|
+ features->device_type == BTN_TOOL_TRIPLETAP) {
|
||||||
|
+ features->pressure_max = 256;
|
||||||
|
+ features->pressure_fuzz = 16;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
|
@@ -1095,6 +1153,33 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
|
case PENPARTNER:
|
||||||
|
__set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
|
||||||
|
break;
|
||||||
|
+
|
||||||
|
+ case BAMBOO_PT:
|
||||||
|
+ __clear_bit(ABS_MISC, input_dev->absbit);
|
||||||
|
+
|
||||||
|
+ if (features->device_type == BTN_TOOL_TRIPLETAP) {
|
||||||
|
+ __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);
|
||||||
|
+
|
||||||
|
+ input_mt_create_slots(input_dev, 2);
|
||||||
|
+ input_set_abs_params(input_dev, ABS_MT_POSITION_X,
|
||||||
|
+ 0, features->x_max,
|
||||||
|
+ features->x_fuzz, 0);
|
||||||
|
+ input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
|
||||||
|
+ 0, features->y_max,
|
||||||
|
+ features->y_fuzz, 0);
|
||||||
|
+ input_set_abs_params(input_dev, ABS_MT_PRESSURE,
|
||||||
|
+ 0, features->pressure_max,
|
||||||
|
+ features->pressure_fuzz, 0);
|
||||||
|
+ input_set_abs_params(input_dev, ABS_MT_TRACKING_ID, 0,
|
||||||
|
+ MAX_TRACKING_ID, 0, 0);
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1232,6 +1317,8 @@ static const struct wacom_features wacom_features_0xE3 =
|
||||||
|
{ "Wacom ISDv4 E3", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0, TABLETPC2FG };
|
||||||
|
static const struct wacom_features wacom_features_0x47 =
|
||||||
|
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS };
|
||||||
|
+static struct wacom_features wacom_features_0xD0 =
|
||||||
|
+ { "Wacom Bamboo 2FG", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
|
||||||
|
|
||||||
|
#define USB_DEVICE_WACOM(prod) \
|
||||||
|
USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \
|
||||||
|
@@ -1296,6 +1383,7 @@ const struct usb_device_id wacom_ids[] = {
|
||||||
|
{ USB_DEVICE_WACOM(0xC6) },
|
||||||
|
{ USB_DEVICE_WACOM(0xC7) },
|
||||||
|
{ USB_DEVICE_WACOM(0xCE) },
|
||||||
|
+ { USB_DEVICE_WACOM(0xD0) },
|
||||||
|
{ USB_DEVICE_WACOM(0xF0) },
|
||||||
|
{ USB_DEVICE_WACOM(0xCC) },
|
||||||
|
{ USB_DEVICE_WACOM(0x90) },
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h
|
||||||
|
index 6a1ff10..a23d6a5 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.h
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.h
|
||||||
|
@@ -41,6 +41,9 @@
|
||||||
|
/* device quirks */
|
||||||
|
#define WACOM_QUIRK_MULTI_INPUT 0x0001
|
||||||
|
|
||||||
|
+/* largest reported tracking id */
|
||||||
|
+#define MAX_TRACKING_ID 0xfff
|
||||||
|
+
|
||||||
|
enum {
|
||||||
|
PENPARTNER = 0,
|
||||||
|
GRAPHIRE,
|
||||||
|
@@ -96,6 +99,7 @@ struct wacom_wac {
|
||||||
|
int id[3];
|
||||||
|
__u32 serial[2];
|
||||||
|
int last_finger;
|
||||||
|
+ int trk_id;
|
||||||
|
struct wacom_features features;
|
||||||
|
struct wacom_shared *shared;
|
||||||
|
struct input_dev *input;
|
69
wacom-05-add-a-quirk-for-low-resolution-bamboo-devices.patch
Normal file
69
wacom-05-add-a-quirk-for-low-resolution-bamboo-devices.patch
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
From: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Date: Sun, 5 Sep 2010 19:57:13 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - add a quirk for low resolution Bamboo devices
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=f4ccbef2886968ed409939531f6dd0474d53a12a
|
||||||
|
|
||||||
|
Input: wacom - add a quirk for low resolution Bamboo devices
|
||||||
|
|
||||||
|
The Bamboo Touch reports a sub-screen resolution of 480x320. The
|
||||||
|
signal-to-noise ratio is only about 100, so filtering is needed in
|
||||||
|
order to reduce the jitter to a usable level. However, the low
|
||||||
|
resolution leads to round-off errors in the EWMA filter, resulting in
|
||||||
|
extremely jerky pointer motion. This patch explicitly sets a higher
|
||||||
|
resolution for those devices, and tells this to the completion handler
|
||||||
|
via a low-resolution quirk.
|
||||||
|
|
||||||
|
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
||||||
|
index 4e9b1dd..2f4411a 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.c
|
||||||
|
@@ -857,6 +857,7 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
|
||||||
|
static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
{
|
||||||
|
+ struct wacom_features *features = &wacom->features;
|
||||||
|
struct input_dev *input = wacom->input;
|
||||||
|
unsigned char *data = wacom->data;
|
||||||
|
int sp = 0, sx = 0, sy = 0, count = 0;
|
||||||
|
@@ -871,6 +872,10 @@ static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
if (p) {
|
||||||
|
int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff;
|
||||||
|
int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff;
|
||||||
|
+ if (features->quirks & WACOM_QUIRK_BBTOUCH_LOWRES) {
|
||||||
|
+ x <<= 5;
|
||||||
|
+ y <<= 5;
|
||||||
|
+ }
|
||||||
|
input_report_abs(input, ABS_MT_PRESSURE, p);
|
||||||
|
input_report_abs(input, ABS_MT_POSITION_X, x);
|
||||||
|
input_report_abs(input, ABS_MT_POSITION_Y, y);
|
||||||
|
@@ -1010,8 +1015,13 @@ void wacom_setup_device_quirks(struct wacom_features *features)
|
||||||
|
/* quirks for bamboo touch */
|
||||||
|
if (features->type == BAMBOO_PT &&
|
||||||
|
features->device_type == BTN_TOOL_TRIPLETAP) {
|
||||||
|
+ features->x_max <<= 5;
|
||||||
|
+ features->y_max <<= 5;
|
||||||
|
+ features->x_fuzz <<= 5;
|
||||||
|
+ features->y_fuzz <<= 5;
|
||||||
|
features->pressure_max = 256;
|
||||||
|
features->pressure_fuzz = 16;
|
||||||
|
+ features->quirks |= WACOM_QUIRK_BBTOUCH_LOWRES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h
|
||||||
|
index a23d6a5..00ca015 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.h
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.h
|
||||||
|
@@ -40,6 +40,7 @@
|
||||||
|
|
||||||
|
/* device quirks */
|
||||||
|
#define WACOM_QUIRK_MULTI_INPUT 0x0001
|
||||||
|
+#define WACOM_QUIRK_BBTOUCH_LOWRES 0x0002
|
||||||
|
|
||||||
|
/* largest reported tracking id */
|
||||||
|
#define MAX_TRACKING_ID 0xfff
|
55
wacom-06-request-tablet-data-for-bamboo-pens.patch
Normal file
55
wacom-06-request-tablet-data-for-bamboo-pens.patch
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
From: Chris Bagwell <chris@cnpbagwell.com>
|
||||||
|
Date: Sun, 12 Sep 2010 07:08:40 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - request tablet data for Bamboo Pens
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=3dc9f40de4dddf9147b80cf15be633189a2b70f4
|
||||||
|
|
||||||
|
Input: wacom - request tablet data for Bamboo Pens
|
||||||
|
|
||||||
|
Bamboo P&T need to use second form of usb_set_report() to
|
||||||
|
ask to report tablet data.
|
||||||
|
|
||||||
|
With previous addition of Bamboo Touch, BTN_TOOL_TRIPLETAP is now used
|
||||||
|
for both TABLETPC2FG and BAMBOO_PT types. So reduced check to
|
||||||
|
match type=TABLETPC2FG.
|
||||||
|
|
||||||
|
This change shows redundant check for !TABLETPC2FG in else statement.
|
||||||
|
|
||||||
|
Signed-off-by: Chris Bagwell <chris@cnpbagwell.com>
|
||||||
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
|
||||||
|
index fc6fd53..1e3af29 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_sys.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_sys.c
|
||||||
|
@@ -319,8 +319,9 @@ static int wacom_query_tablet_data(struct usb_interface *intf, struct wacom_feat
|
||||||
|
if (!rep_data)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
- /* ask to report tablet data if it is 2FGT or not a Tablet PC */
|
||||||
|
- if (features->device_type == BTN_TOOL_TRIPLETAP) {
|
||||||
|
+ /* ask to report tablet data if it is 2FGT Tablet PC or
|
||||||
|
+ * not a Tablet PC */
|
||||||
|
+ if (features->type == TABLETPC2FG) {
|
||||||
|
do {
|
||||||
|
rep_data[0] = 3;
|
||||||
|
rep_data[1] = 4;
|
||||||
|
@@ -332,7 +333,7 @@ static int wacom_query_tablet_data(struct usb_interface *intf, struct wacom_feat
|
||||||
|
WAC_HID_FEATURE_REPORT, report_id,
|
||||||
|
rep_data, 3);
|
||||||
|
} while ((error < 0 || rep_data[1] != 4) && limit++ < 5);
|
||||||
|
- } else if (features->type != TABLETPC && features->type != TABLETPC2FG) {
|
||||||
|
+ } else if (features->type != TABLETPC) {
|
||||||
|
do {
|
||||||
|
rep_data[0] = 2;
|
||||||
|
rep_data[1] = 2;
|
||||||
|
@@ -364,7 +365,7 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf,
|
||||||
|
features->pressure_fuzz = 0;
|
||||||
|
features->distance_fuzz = 0;
|
||||||
|
|
||||||
|
- /* only Tablet PCs need to retrieve the info */
|
||||||
|
+ /* only Tablet PCs and Bamboo P&T need to retrieve the info */
|
||||||
|
if ((features->type != TABLETPC) && (features->type != TABLETPC2FG) &&
|
||||||
|
(features->type != BAMBOO_PT))
|
||||||
|
goto out;
|
52
wacom-07-move-bamboo-touch-irq-to-its-own-function.patch
Normal file
52
wacom-07-move-bamboo-touch-irq-to-its-own-function.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
From: Chris Bagwell <chris@cnpbagwell.com>
|
||||||
|
Date: Sun, 12 Sep 2010 07:09:27 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - move Bamboo Touch irq to its own function
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=e1d38e49ad97eec5024342e1244279b645e36688
|
||||||
|
|
||||||
|
Input: wacom - move Bamboo Touch irq to its own function
|
||||||
|
|
||||||
|
This is in preparation of pen support in same irq handler.
|
||||||
|
|
||||||
|
Signed-off-by: Chris Bagwell <chris@cnpbagwell.com>
|
||||||
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
||||||
|
index 2f4411a..2f7ed9a 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.c
|
||||||
|
@@ -855,7 +855,7 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
+static int wacom_bpt_touch(struct wacom_wac *wacom)
|
||||||
|
{
|
||||||
|
struct wacom_features *features = &wacom->features;
|
||||||
|
struct input_dev *input = wacom->input;
|
||||||
|
@@ -863,9 +863,6 @@ static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
int sp = 0, sx = 0, sy = 0, count = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
- if (len != WACOM_PKGLEN_BBTOUCH)
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
int p = data[9 * i + 2];
|
||||||
|
input_mt_slot(input, i);
|
||||||
|
@@ -907,6 +904,14 @@ static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
+{
|
||||||
|
+ if (len == WACOM_PKGLEN_BBTOUCH)
|
||||||
|
+ return wacom_bpt_touch(wacom);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
|
||||||
|
{
|
||||||
|
bool sync;
|
130
wacom-08-add-support-for-bamboo-pen.patch
Normal file
130
wacom-08-add-support-for-bamboo-pen.patch
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
From: Chris Bagwell <chris@cnpbagwell.com>
|
||||||
|
Date: Sun, 12 Sep 2010 07:11:35 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - add support for Bamboo Pen
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=2aaacb153689dbe9064e4db7e9d00de0edfc1fa0
|
||||||
|
|
||||||
|
Input: wacom - add support for Bamboo Pen
|
||||||
|
|
||||||
|
This adds support for Pen on Bamboo Pen and Bamboo Pen&Touch devices.
|
||||||
|
Touchpad is handled by previous Bamboo Touch logic.
|
||||||
|
|
||||||
|
Signed-off-by: Chris Bagwell <chris@cnpbagwell.com>
|
||||||
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
||||||
|
index 2f7ed9a..536156b 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.c
|
||||||
|
@@ -904,10 +904,75 @@ static int wacom_bpt_touch(struct wacom_wac *wacom)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int wacom_bpt_pen(struct wacom_wac *wacom)
|
||||||
|
+{
|
||||||
|
+ 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;
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Similar to Graphire protocol, data[1] & 0x20 is proximity and
|
||||||
|
+ * data[1] & 0x18 is tool ID. 0x30 is safety check to ignore
|
||||||
|
+ * 2 unused tool ID's.
|
||||||
|
+ */
|
||||||
|
+ prox = (data[1] & 0x30) == 0x30;
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * 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 (prox) {
|
||||||
|
+ 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;
|
||||||
|
+ }
|
||||||
|
+ x = le16_to_cpup((__le16 *)&data[2]);
|
||||||
|
+ y = le16_to_cpup((__le16 *)&data[4]);
|
||||||
|
+ p = le16_to_cpup((__le16 *)&data[6]);
|
||||||
|
+ d = data[8];
|
||||||
|
+ pen = data[1] & 0x01;
|
||||||
|
+ btn1 = data[1] & 0x02;
|
||||||
|
+ btn2 = data[1] & 0x04;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ 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);
|
||||||
|
+
|
||||||
|
+ if (!prox) {
|
||||||
|
+ wacom->id[0] = 0;
|
||||||
|
+ wacom->shared->stylus_in_proximity = false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ input_report_key(input, wacom->tool[0], prox); /* PEN or RUBBER */
|
||||||
|
+ input_report_abs(input, ABS_MISC, wacom->id[0]); /* TOOL ID */
|
||||||
|
+
|
||||||
|
+ return 1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
|
||||||
|
{
|
||||||
|
if (len == WACOM_PKGLEN_BBTOUCH)
|
||||||
|
return wacom_bpt_touch(wacom);
|
||||||
|
+ else if (len == WACOM_PKGLEN_BBFUN)
|
||||||
|
+ return wacom_bpt_pen(wacom);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -1193,6 +1258,11 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||||
|
features->pressure_fuzz, 0);
|
||||||
|
input_set_abs_params(input_dev, ABS_MT_TRACKING_ID, 0,
|
||||||
|
MAX_TRACKING_ID, 0, 0);
|
||||||
|
+ } else if (features->device_type == BTN_TOOL_PEN) {
|
||||||
|
+ __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);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -1334,6 +1404,12 @@ static const struct wacom_features wacom_features_0x47 =
|
||||||
|
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS };
|
||||||
|
static struct wacom_features wacom_features_0xD0 =
|
||||||
|
{ "Wacom Bamboo 2FG", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
|
||||||
|
+static struct wacom_features wacom_features_0xD1 =
|
||||||
|
+ { "Wacom Bamboo 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
|
||||||
|
+static struct wacom_features wacom_features_0xD2 =
|
||||||
|
+ { "Wacom Bamboo Craft", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
|
||||||
|
+static struct wacom_features wacom_features_0xD3 =
|
||||||
|
+ { "Wacom Bamboo 2FG 6x8", WACOM_PKGLEN_BBFUN, 21648, 13530, 1023, 63, BAMBOO_PT };
|
||||||
|
|
||||||
|
#define USB_DEVICE_WACOM(prod) \
|
||||||
|
USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \
|
||||||
|
@@ -1399,6 +1475,9 @@ const struct usb_device_id wacom_ids[] = {
|
||||||
|
{ USB_DEVICE_WACOM(0xC7) },
|
||||||
|
{ USB_DEVICE_WACOM(0xCE) },
|
||||||
|
{ USB_DEVICE_WACOM(0xD0) },
|
||||||
|
+ { USB_DEVICE_WACOM(0xD1) },
|
||||||
|
+ { USB_DEVICE_WACOM(0xD2) },
|
||||||
|
+ { USB_DEVICE_WACOM(0xD3) },
|
||||||
|
{ USB_DEVICE_WACOM(0xF0) },
|
||||||
|
{ USB_DEVICE_WACOM(0xCC) },
|
||||||
|
{ USB_DEVICE_WACOM(0x90) },
|
@ -0,0 +1,31 @@
|
|||||||
|
From: Chris Bagwell <chris@cnpbagwell.com>
|
||||||
|
Date: Sun, 12 Sep 2010 07:12:28 +0000 (-0700)
|
||||||
|
Subject: Input: wacom - disable Bamboo touchpad when pen is being used
|
||||||
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdtor%2Finput.git;a=commitdiff_plain;h=33d5f713a19b0f5cb93e0594f7206d2730cf39da
|
||||||
|
|
||||||
|
Input: wacom - disable Bamboo touchpad when pen is being used
|
||||||
|
|
||||||
|
Signed-off-by: Chris Bagwell <chris@cnpbagwell.com>
|
||||||
|
Acked-by: Ping Cheng <pingc@wacom.com>
|
||||||
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
||||||
|
index 536156b..e1b65ba 100644
|
||||||
|
--- a/drivers/input/tablet/wacom_wac.c
|
||||||
|
+++ b/drivers/input/tablet/wacom_wac.c
|
||||||
|
@@ -866,7 +866,13 @@ static int wacom_bpt_touch(struct wacom_wac *wacom)
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
int p = data[9 * i + 2];
|
||||||
|
input_mt_slot(input, i);
|
||||||
|
- if (p) {
|
||||||
|
+ /*
|
||||||
|
+ * 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.
|
||||||
|
+ */
|
||||||
|
+ if (p && !wacom->shared->stylus_in_proximity) {
|
||||||
|
int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff;
|
||||||
|
int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff;
|
||||||
|
if (features->quirks & WACOM_QUIRK_BBTOUCH_LOWRES) {
|
Loading…
Reference in New Issue
Block a user