[patch] input: Implement HID quirk for A4Tech mice [3/13]

Vojtech Pavlik (vojtech@suse.cz)
Sat, 14 Jun 2003 22:37:08 +0200


You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input

===================================================================

ChangeSet@1.1215.104.20, 2003-06-09 13:52:46+02:00, warp@mercury.d2dc.net
input: Implement a HID quirk for 2-wheel A4Tech mice.

hid-core.c | 4 ++++
hid-input.c | 19 +++++++++++++++++++
hid.h | 16 +++++++++-------
3 files changed, 32 insertions(+), 7 deletions(-)

===================================================================

diff -Nru a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
--- a/drivers/usb/input/hid-core.c Sat Jun 14 22:22:02 2003
+++ b/drivers/usb/input/hid-core.c Sat Jun 14 22:22:02 2003
@@ -1351,6 +1351,9 @@
#define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f
#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100

+#define USB_VENDOR_ID_A4TECH 0x09DA
+#define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006
+
struct hid_blacklist {
__u16 idVendor;
__u16 idProduct;
@@ -1398,6 +1401,7 @@
{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_TANGTOP, USB_DEVICE_ID_TANGTOP_USBPS2, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5, HID_QUIRK_IGNORE },
+ { USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU, HID_QUIRK_2WHEEL_MOUSE_HACK },
{ 0, 0 }
};

diff -Nru a/drivers/usb/input/hid-input.c b/drivers/usb/input/hid-input.c
--- a/drivers/usb/input/hid-input.c Sat Jun 14 22:22:02 2003
+++ b/drivers/usb/input/hid-input.c Sat Jun 14 22:22:02 2003
@@ -376,6 +376,11 @@
}

set_bit(usage->type, input->evbit);
+ if ((usage->type == EV_REL)
+ && (device->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK)
+ && (usage->code == REL_WHEEL)) {
+ set_bit(REL_HWHEEL, bit);
+ }

while (usage->code <= max && test_and_set_bit(usage->code, bit)) {
usage->code = find_next_zero_bit(bit, max + 1, usage->code);
@@ -425,6 +430,20 @@
return;

input_regs(input, regs);
+
+ if ((hid->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK)
+ && (usage->code == BTN_BACK)) {
+ if (value)
+ hid->quirks |= HID_QUIRK_2WHEEL_MOUSE_HACK_ON;
+ else
+ hid->quirks &= ~HID_QUIRK_2WHEEL_MOUSE_HACK_ON;
+ return;
+ }
+ if ((hid->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_ON)
+ && (usage->code == REL_WHEEL)) {
+ input_event(input, usage->type, REL_HWHEEL, value);
+ return;
+ }

if (usage->hat_min != usage->hat_max) {
value = (value - usage->hat_min) * 8 / (usage->hat_max - usage->hat_min + 1) + 1;
diff -Nru a/drivers/usb/input/hid.h b/drivers/usb/input/hid.h
--- a/drivers/usb/input/hid.h Sat Jun 14 22:22:01 2003
+++ b/drivers/usb/input/hid.h Sat Jun 14 22:22:01 2003
@@ -201,13 +201,15 @@
* HID device quirks.
*/

-#define HID_QUIRK_INVERT 0x01
-#define HID_QUIRK_NOTOUCH 0x02
-#define HID_QUIRK_IGNORE 0x04
-#define HID_QUIRK_NOGET 0x08
-#define HID_QUIRK_HIDDEV 0x10
-#define HID_QUIRK_BADPAD 0x20
-#define HID_QUIRK_MULTI_INPUT 0x40
+#define HID_QUIRK_INVERT 0x001
+#define HID_QUIRK_NOTOUCH 0x002
+#define HID_QUIRK_IGNORE 0x004
+#define HID_QUIRK_NOGET 0x008
+#define HID_QUIRK_HIDDEV 0x010
+#define HID_QUIRK_BADPAD 0x020
+#define HID_QUIRK_MULTI_INPUT 0x040
+#define HID_QUIRK_2WHEEL_MOUSE_HACK 0x080
+#define HID_QUIRK_2WHEEL_MOUSE_HACK_ON 0x100

/*
* This is the global environment of the parser. This information is
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/