Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1543763 > unrolled thread

[PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter

Started byTomasz Kramkowski <tk@the-tk.com>
First post2016-12-16 22:40 +0100
Last post2016-12-22 22:10 +0100
Articles 5 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski <tk@the-tk.com> - 2016-12-16 22:40 +0100
    [PATCH 1/2] HID: add innomedia INNEX GENESIS/ATARI adapter support Tomasz Kramkowski <tk@the-tk.com> - 2016-12-16 22:40 +0100
    Re: [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter Jiri Kosina <jikos@kernel.org> - 2016-12-19 11:50 +0100
      Re: [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter Tomasz Kramkowski <tk@the-tk.com> - 2016-12-19 13:30 +0100
      Re: [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter Jiri Kosina <jikos@kernel.org> - 2016-12-22 22:10 +0100

#1543763 — [PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter

FromTomasz Kramkowski <tk@the-tk.com>
Date2016-12-16 22:40 +0100
Subject[PATCH 0/2] patches for Innomedia INNEX GENESIS/ATARI adapter
Message-ID<sP8op-zl-9@gated-at.bofh.it>
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

[toc] | [next] | [standalone]


#1543765 — [PATCH 1/2] HID: add innomedia INNEX GENESIS/ATARI adapter support

FromTomasz Kramkowski <tk@the-tk.com>
Date2016-12-16 22:40 +0100
Subject[PATCH 1/2] HID: add innomedia INNEX GENESIS/ATARI adapter support
Message-ID<sP8oq-zl-33@gated-at.bofh.it>
In reply to#1543763
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

[toc] | [prev] | [next] | [standalone]


#1544443

FromJiri Kosina <jikos@kernel.org>
Date2016-12-19 11:50 +0100
Message-ID<sQ3G2-6zz-5@gated-at.bofh.it>
In reply to#1543763
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

[toc] | [prev] | [next] | [standalone]


#1544504

FromTomasz Kramkowski <tk@the-tk.com>
Date2016-12-19 13:30 +0100
Message-ID<sQ5eN-7Hq-7@gated-at.bofh.it>
In reply to#1544443
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/

[toc] | [prev] | [next] | [standalone]


#1546595

FromJiri Kosina <jikos@kernel.org>
Date2016-12-22 22:10 +0100
Message-ID<sRiMH-69S-39@gated-at.bofh.it>
In reply to#1544443
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

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web