* [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter @ 2016-12-16 21:31 Tomasz Kramkowski 2016-12-16 21:31 ` [PATCH 1/2] HID: add innomedia INNEX GENESIS/ATARI adapter support Tomasz Kramkowski ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Tomasz Kramkowski @ 2016-12-16 21:31 UTC (permalink / raw) To: Jiri Kosina Cc: Benjamin Tissoires, linux-input, linux-kernel, Tomasz Kramkowski This is a couple of patches which fix issues with the (1292:4745) Innomedia INNEX GENESIS/ATARI controller USB adapter. I've personally tested these patches against the master of the hid tree. Patch 2 depends on patch 1. I wasn't sure if adding a new config symbol meant I needed to add it to some default config so I left that alone. Hopefully I didn't screw anything up. Thanks, -- Tomasz Kramkowski Tomasz Kramkowski (2): HID: add Innomedia INNEX GENESIS/ATARI adapter support HID: usbhid: add quirk for Innomedia INNEX GENESIS/ATARI adapter drivers/hid/Kconfig | 6 ++++ drivers/hid/Makefile | 1 + drivers/hid/hid-core.c | 1 + drivers/hid/hid-ids.h | 3 ++ drivers/hid/hid-innomedia.c | 63 +++++++++++++++++++++++++++++++++++++++++ drivers/hid/usbhid/hid-quirks.c | 1 + 6 files changed, 75 insertions(+) create mode 100644 drivers/hid/hid-innomedia.c -- 2.10.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] HID: add innomedia INNEX GENESIS/ATARI adapter support 2016-12-16 21:31 [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski @ 2016-12-16 21:31 ` Tomasz Kramkowski 2016-12-16 21:31 ` [PATCH 2/2] HID: usbhid: add quirk for innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski 2016-12-19 10:45 ` [PATCH 0/2] patches for Innomedia " Jiri Kosina 2 siblings, 0 replies; 7+ messages in thread From: Tomasz Kramkowski @ 2016-12-16 21:31 UTC (permalink / raw) To: Jiri Kosina Cc: Benjamin Tissoires, linux-input, linux-kernel, Tomasz Kramkowski Add a new module named hid-innomedia which implements support for the (1292:4745) innomedia INNEX GENESIS/ATARI Controller USB adapter. This device mis-reports the X and Y axis on the DPad when up or left are pressed. The value reported is outside the range reported by the report descriptor. The device reports -2 for left or up, 1 for right or down, 0 for nothing pressed and -1 for up and down or left and right pressed simultaneously. This means that when left or up are pressed, the value gets dropped by hid-input. Additionally, when both up and down or left and right are pressed the device incorrectly reports up or left respectively. Signed-off-by: Tomasz Kramkowski <tk@the-tk.com> --- drivers/hid/Kconfig | 6 +++++ drivers/hid/Makefile | 1 + drivers/hid/hid-core.c | 1 + drivers/hid/hid-ids.h | 3 +++ drivers/hid/hid-innomedia.c | 63 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 drivers/hid/hid-innomedia.c diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index 4070b73..2b1829b 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -369,6 +369,12 @@ config HID_ICADE To compile this driver as a module, choose M here: the module will be called hid-icade. +config HID_INNOMEDIA + tristate "Innomedia GENESIS/ATARI Controller USB adapter" + depends on HID + ---help--- + Support for the Innomedia GENESIS/ATARI Controller USB adapter. + config HID_TWINHAN tristate "Twinhan IR remote control" depends on HID diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index 4d111f2..10a802b 100644 --- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile @@ -49,6 +49,7 @@ obj-$(CONFIG_HID_HOLTEK) += hid-holtek-mouse.o obj-$(CONFIG_HID_HOLTEK) += hid-holtekff.o obj-$(CONFIG_HID_HYPERV_MOUSE) += hid-hyperv.o obj-$(CONFIG_HID_ICADE) += hid-icade.o +obj-$(CONFIG_HID_INNOMEDIA) += hid-innomedia.o obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o obj-$(CONFIG_HID_KYE) += hid-kye.o diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index cff060b..e410e75 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1912,6 +1912,7 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) }, { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) }, { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) }, + { HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI) }, { HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) }, { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) }, diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index ec277b9..b0e6f7c 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -537,6 +537,9 @@ #define USB_VENDOR_ID_IRTOUCHSYSTEMS 0x6615 #define USB_DEVICE_ID_IRTOUCH_INFRARED_USB 0x0070 +#define USB_VENDOR_ID_INNOMEDIA 0x1292 +#define USB_DEVICE_ID_INNEX_GENESIS_ATARI 0x4745 + #define USB_VENDOR_ID_ITE 0x048d #define USB_DEVICE_ID_ITE_LENOVO_YOGA 0x8386 #define USB_DEVICE_ID_ITE_LENOVO_YOGA2 0x8350 diff --git a/drivers/hid/hid-innomedia.c b/drivers/hid/hid-innomedia.c new file mode 100644 index 0000000..325cd7e --- /dev/null +++ b/drivers/hid/hid-innomedia.c @@ -0,0 +1,63 @@ +/* + * HID driver for quirky Innomedia devices + * + * Copyright (c) 2016 Tomasz Kramkowski <tk@the-tk.com> + */ + +/* + * 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" + +static inline u8 fixaxis(u8 bits, int shift) +{ + u8 mask = 0x3 << shift; + u8 axis = (bits & mask) >> shift; + + /* + * These controllers report -2 (2) for left/up direction and -1 (3) for + * both up-down or left-right pressed. + */ + if (axis == 3) + axis = 0; + else if (axis == 2) + axis = 3; + + return (bits & ~mask) | (axis << shift); +} + +static int im_raw_event(struct hid_device *hdev, struct hid_report *report, + u8 *data, int size) +{ + if (size == 3 && (data[0] == 1 || data[0] == 2)) { + data[1] = fixaxis(data[1], 0); + data[1] = fixaxis(data[1], 2); + } + + return 0; +} + +static const struct hid_device_id im_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI) }, + { } +}; + +MODULE_DEVICE_TABLE(hid, im_devices); + +static struct hid_driver im_driver = { + .name = "innomedia", + .id_table = im_devices, + .raw_event = im_raw_event, +}; + +module_hid_driver(im_driver); + +MODULE_LICENSE("GPL"); -- 2.10.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] HID: usbhid: add quirk for innomedia INNEX GENESIS/ATARI adapter 2016-12-16 21:31 [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski 2016-12-16 21:31 ` [PATCH 1/2] HID: add innomedia INNEX GENESIS/ATARI adapter support Tomasz Kramkowski @ 2016-12-16 21:31 ` Tomasz Kramkowski 2016-12-19 10:45 ` [PATCH 0/2] patches for Innomedia " Jiri Kosina 2 siblings, 0 replies; 7+ messages in thread From: Tomasz Kramkowski @ 2016-12-16 21:31 UTC (permalink / raw) To: Jiri Kosina Cc: Benjamin Tissoires, linux-input, linux-kernel, Tomasz Kramkowski The (1292:4745) Innomedia INNEX GENESIS/ATARI adapter needs HID_QUIRK_MULTI_INPUT to split the device up into two controllers instead of inputs from both being merged into one. This patch depends on patch 1. Signed-off-by: Tomasz Kramkowski <tk@the-tk.com> --- drivers/hid/usbhid/hid-quirks.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c index b3e01c8..b5e013b 100644 --- a/drivers/hid/usbhid/hid-quirks.c +++ b/drivers/hid/usbhid/hid-quirks.c @@ -165,6 +165,7 @@ static const struct hid_blacklist { { USB_VENDOR_ID_MULTIPLE_1781, USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD, HID_QUIRK_MULTI_INPUT }, { USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_2NES2SNES, HID_QUIRK_MULTI_INPUT }, { USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_4NES4SNES, HID_QUIRK_MULTI_INPUT }, + { USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI, HID_QUIRK_MULTI_INPUT }, { 0, 0 } }; -- 2.10.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter 2016-12-16 21:31 [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski 2016-12-16 21:31 ` [PATCH 1/2] HID: add innomedia INNEX GENESIS/ATARI adapter support Tomasz Kramkowski 2016-12-16 21:31 ` [PATCH 2/2] HID: usbhid: add quirk for innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski @ 2016-12-19 10:45 ` Jiri Kosina 2016-12-19 12:25 ` Tomasz Kramkowski 2016-12-22 21:00 ` Jiri Kosina 2 siblings, 2 replies; 7+ messages in thread From: Jiri Kosina @ 2016-12-19 10:45 UTC (permalink / raw) To: Tomasz Kramkowski; +Cc: Benjamin Tissoires, linux-input, linux-kernel On Fri, 16 Dec 2016, Tomasz Kramkowski wrote: > This is a couple of patches which fix issues with the (1292:4745) > Innomedia INNEX GENESIS/ATARI controller USB adapter. I've personally > tested these patches against the master of the hid tree. > > Patch 2 depends on patch 1. > > I wasn't sure if adding a new config symbol meant I needed to add it to > some default config so I left that alone. > > Hopefully I didn't screw anything up. All looks good, except I'd probably squash both the patches into one 'add adapter support', as I don't really see a value with separating this into two patches. If you agree, I can do that myself and apply. Thanks, -- Jiri Kosina SUSE Labs ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter 2016-12-19 10:45 ` [PATCH 0/2] patches for Innomedia " Jiri Kosina @ 2016-12-19 12:25 ` Tomasz Kramkowski 2016-12-22 21:00 ` Jiri Kosina 1 sibling, 0 replies; 7+ messages in thread From: Tomasz Kramkowski @ 2016-12-19 12:25 UTC (permalink / raw) To: Jiri Kosina; +Cc: Benjamin Tissoires, linux-input, linux-kernel Whoops, forgot to reply all... On Mon, Dec 19, 2016 at 11:45:07AM +0100, Jiri Kosina wrote: > All looks good, except I'd probably squash both the patches into one 'add > adapter support', as I don't really see a value with separating this into > two patches. If you agree, I can do that myself and apply. > > Thanks, > > -- > Jiri Kosina > SUSE Labs > It's perfectly fine if you squash them, I was erring on the side of caution, I would rather send two patches and have them squash than to have to resend after splitting. Thanks, -- Tomasz Kramkowski | GPG: 40B037BA0A5B8680 | Web: https://the-tk.com/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter 2016-12-19 10:45 ` [PATCH 0/2] patches for Innomedia " Jiri Kosina 2016-12-19 12:25 ` Tomasz Kramkowski @ 2016-12-22 21:00 ` Jiri Kosina 2017-01-08 14:59 ` Tomasz Kramkowski 1 sibling, 1 reply; 7+ messages in thread From: Jiri Kosina @ 2016-12-22 21:00 UTC (permalink / raw) To: Tomasz Kramkowski; +Cc: Benjamin Tissoires, linux-input, linux-kernel On Mon, 19 Dec 2016, Jiri Kosina wrote: > > This is a couple of patches which fix issues with the (1292:4745) > > Innomedia INNEX GENESIS/ATARI controller USB adapter. I've personally > > tested these patches against the master of the hid tree. > > > > Patch 2 depends on patch 1. > > > > I wasn't sure if adding a new config symbol meant I needed to add it to > > some default config so I left that alone. > > > > Hopefully I didn't screw anything up. > > All looks good, except I'd probably squash both the patches into one 'add > adapter support', as I don't really see a value with separating this into > two patches. If you agree, I can do that myself and apply. We've discussed with Tomasz off-list, and it looks like that there likely is a better and more general way to fix it; this seems to have actually been caused by 6da7066906e977d4 ("HID: ignore absolute values which don't fit between logical min and max"), as it turns out that this check should be applied only in case Null state is set (refer to HID specification 1.11, section 6.2.2.5, p.31), bko#68621. Tomasz comitted to look into this after coming back from christmas/new year vacation. I'm putting the innomedia branch on hold for now. -- Jiri Kosina SUSE Labs ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter 2016-12-22 21:00 ` Jiri Kosina @ 2017-01-08 14:59 ` Tomasz Kramkowski 0 siblings, 0 replies; 7+ messages in thread From: Tomasz Kramkowski @ 2017-01-08 14:59 UTC (permalink / raw) To: Jiri Kosina; +Cc: Benjamin Tissoires, linux-input, linux-kernel On Thu, Dec 22, 2016 at 10:00:10PM +0100, Jiri Kosina wrote: > We've discussed with Tomasz off-list, and it looks like that there likely > is a better and more general way to fix it; this seems to have actually > been caused by 6da7066906e977d4 ("HID: ignore absolute values which don't > fit between logical min and max"), as it turns out that this check should > be applied only in case Null state is set (refer to HID specification > 1.11, section 6.2.2.5, p.31), bko#68621. > > Tomasz comitted to look into this after coming back from christmas/new > year vacation. I'm putting the innomedia branch on hold for now. > > -- > Jiri Kosina > SUSE Labs I've tested the patch from the bugzilla and it does indeed prevent the values being discarded. evtest reports the minimum and maximums correctly as -1 and 1 but the events give values -2 and 1, I'm not sure if this will be an issue as jstest correctly sees left/up presses as -32767 and right/down presses as 32767. The device still needs the HID_QUIRK_MULTI_INPUT quirk to correctly show up as two event/js devices. I will still need to do a few more tests to make sure there are no issues in other applications and to make sure that other devices still operate correctly too. Once that is done I will go ahead and send two patches, one with the authorship preserved for the bugzilla patch and one patch to add the quirks. -- Tomasz Kramkowski | GPG: 40B037BA0A5B8680 | Web: https://the-tk.com/ ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-01-08 15:00 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-12-16 21:31 [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski 2016-12-16 21:31 ` [PATCH 1/2] HID: add innomedia INNEX GENESIS/ATARI adapter support Tomasz Kramkowski 2016-12-16 21:31 ` [PATCH 2/2] HID: usbhid: add quirk for innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski 2016-12-19 10:45 ` [PATCH 0/2] patches for Innomedia " Jiri Kosina 2016-12-19 12:25 ` Tomasz Kramkowski 2016-12-22 21:00 ` Jiri Kosina 2017-01-08 14:59 ` Tomasz Kramkowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).