[ re-introduced original CC list, please don't drop it, thanks ] On Mon, 14 Feb 2011, kholis wrote: > > Thanks for the output. Looks like the keyboard has wrong report > > descriptor. > > > > Could you please annotate the last output (the one from 'events' file in > > debugfs) with information such as 'this happened when I pressed "X" key', > > 'this happened when I released "X" key', etc? > > > Here is the annotated output of all keyboard's characters. > http://pastebin.com/btj8g8cd > > LeftShift,LeftControl, LeftMeta, LeftAlt, RightAlt, and RightShift > button print 8 lines each while others print 9 lines. Please apply the patch below, compile your kernel with CONFIG_HID_KEYTOUCH enabled, retest, and report back the results. If the problem is still not fixed, I'd need the exact same output you already provided in the previous round, plus dmesg output. Thanks! From: Jiri Kosina <jkosina@xxxxxxx> Subject: [PATCH] HID: add support for Keytouch IEC 60945 This device has wrong Logical Min and Logical Max in its report descriptor. Signed-off-by: Jiri Kosina <jkosina@xxxxxxx> --- drivers/hid/Kconfig | 8 +++++ drivers/hid/Makefile | 1 + drivers/hid/hid-ids.h | 3 ++ drivers/hid/hid-keytouch.c | 62 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 0 deletions(-) create mode 100644 drivers/hid/hid-keytouch.c diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index 322f918..b152c91 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -180,6 +180,14 @@ config HID_EZKEY ---help--- Support for Ezkey BTC 8193 keyboard. +config HID_KEYTOUCH + tristate "Keyoutch HID devices" + depends on USB_HID + ---help--- + Support for Keytouch HID devices not fully compliant with + the specification. Currently supported: + - Keytouch IEC 60945 + config HID_KYE tristate "Kye/Genius Ergo Mouse" if EMBEDDED depends on USB_HID diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index f3ea4b8..04496ab 100644 --- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile @@ -41,6 +41,7 @@ obj-$(CONFIG_HID_ELECOM) += hid-elecom.o obj-$(CONFIG_HID_EZKEY) += hid-ezkey.o obj-$(CONFIG_HID_GYRATION) += hid-gyration.o obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o +obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o obj-$(CONFIG_HID_KYE) += hid-kye.o obj-$(CONFIG_HID_LCPOWER) += hid-lcpower.o obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index ed6cd07..f435252 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -348,6 +348,9 @@ #define USB_VENDOR_ID_KWORLD 0x1b80 #define USB_DEVICE_ID_KWORLD_RADIO_FM700 0xd700 +#define USB_VENDOR_ID_KEYTOUCH 0x0926 +#define USB_DEVICE_ID_KEYTOUCH_IEC 0x3333 + #define USB_VENDOR_ID_KYE 0x0458 #define USB_DEVICE_ID_KYE_ERGO_525V 0x0087 #define USB_DEVICE_ID_KYE_GPEN_560 0x5003 diff --git a/drivers/hid/hid-keytouch.c b/drivers/hid/hid-keytouch.c new file mode 100644 index 0000000..568cebc --- /dev/null +++ b/drivers/hid/hid-keytouch.c @@ -0,0 +1,62 @@ +/* + * HID driver for Keytouch devices not fully compliant with HID standard + * + * Copyright (c) 2011 Jiri Kosina + */ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include <linux/device.h> +#include <linux/hid.h> +#include <linux/module.h> + +#include "hid-ids.h" + +/* The device has wrong Logical Minimum (0x80) and Logical Maximum (0x7f) + * specified for the keyboard usage page + */ +static __u8 *keytouch_report_fixup(struct hid_device *hdev, __u8 *rdesc, + unsigned int *rsize) +{ + if (*rsize >= 53 && + rdesc[49] == 0x15 && rdesc[50] == 0x80 && + rdesc[51] == 0x25 && rdesc[52] == 0x7f) { + hid_info(hdev, + "fixing up Keytouch IEC report descriptor\n"); + rdesc[50] = 0x00; + rdesc[52] = 0x65; + } + return rdesc; +} + +static const struct hid_device_id keytouch_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) }, + { } +}; +MODULE_DEVICE_TABLE(hid, keytouch_devices); + +static struct hid_driver keytouch_driver = { + .name = "keytouch", + .id_table = keytouch_devices, + .report_fixup = keytouch_report_fixup, +}; + +static int __init keytouch_init(void) +{ + return hid_register_driver(&keytouch_driver); +} + +static void __exit keytouch_exit(void) +{ + hid_unregister_driver(&keytouch_driver); +} + +module_init(keytouch_init); +module_exit(keytouch_exit); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Jiri Kosina"); -- 1.7.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html