All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
@ 2017-02-14 14:17 Martyn Welch
  2017-02-28 17:43 ` Martyn Welch
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Martyn Welch @ 2017-02-14 14:17 UTC (permalink / raw)
  To: Jiri Kosina, Benjamin Tissoires; +Cc: linux-input, linux-kernel, Martyn Welch

The Accutouch 2216 is reporting BTN_LEFT/BTN_MOUSE rather than BTM_TOUCH
in it's capabilities, which is what user space expects a touchscreen
device to report. This is causing udev to consider the device to be a
"VMware's USB mouse" rather than as a touchscreen, which results in a
mouse cursor being displayed in Weston.

This patch adds a special driver for the device to correct the
capabilities reported.

Signed-off-by: Martyn Welch <martyn.welch@collabora.co.uk>
---
 drivers/hid/Kconfig         | 12 +++++++++++
 drivers/hid/Makefile        |  1 +
 drivers/hid/hid-accutouch.c | 52 +++++++++++++++++++++++++++++++++++++++++++++
 drivers/hid/hid-core.c      |  1 +
 drivers/hid/hid-ids.h       |  1 +
 5 files changed, 67 insertions(+)
 create mode 100644 drivers/hid/hid-accutouch.c

diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 4070b73..ba0d17a 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -98,6 +98,18 @@ config HID_A4TECH
 	---help---
 	Support for A4 tech X5 and WOP-35 / Trust 450L mice.
 
+config HID_ACCUTOUCH
+	tristate "Accutouch touch device"
+	depends on USB_HID
+	---help---
+	  This selects a driver for the Accutouch 2216 touch controller.
+
+	  The driver works around a problem in the reported device capabilities
+	  which causes userspace to detect the device as a mouse rather than
+          a touchscreen.
+
+	  Say Y here if you have a Accutouch 2216 touch controller.
+
 config HID_ACRUX
 	tristate "ACRUX game controller support"
 	depends on HID
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
index 4d111f2..48be3ed 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
@@ -21,6 +21,7 @@ hid-wiimote-y		:= hid-wiimote-core.o hid-wiimote-modules.o
 hid-wiimote-$(CONFIG_DEBUG_FS)	+= hid-wiimote-debug.o
 
 obj-$(CONFIG_HID_A4TECH)	+= hid-a4tech.o
+obj-$(CONFIG_HID_ACCUTOUCH)	+= hid-accutouch.o
 obj-$(CONFIG_HID_ALPS)		+= hid-alps.o
 obj-$(CONFIG_HID_ACRUX)		+= hid-axff.o
 obj-$(CONFIG_HID_APPLE)		+= hid-apple.o
diff --git a/drivers/hid/hid-accutouch.c b/drivers/hid/hid-accutouch.c
new file mode 100644
index 0000000..4e28716
--- /dev/null
+++ b/drivers/hid/hid-accutouch.c
@@ -0,0 +1,52 @@
+/*
+ * HID driver for Elo Accutouch touchscreens
+ *
+ * Copyright (c) 2016, Collabora Ltd.
+ * Copyright (c) 2016, General Electric Company
+ *
+ * based on hid-penmount.c
+ *  Copyright (c) 2014 Christian Gmeiner <christian.gmeiner <at> gmail.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/hid.h>
+#include <linux/module.h>
+#include "hid-ids.h"
+
+static int accutouch_input_mapping(struct hid_device *hdev,
+				   struct hid_input *hi,
+				   struct hid_field *field,
+				   struct hid_usage *usage,
+				   unsigned long **bit, int *max)
+{
+	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
+		hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
+		return 1;
+	}
+
+	return 0;
+}
+
+static const struct hid_device_id accutouch_devices[] = {
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
+	{ }
+};
+MODULE_DEVICE_TABLE(hid, accutouch_devices);
+
+static struct hid_driver accutouch_driver = {
+	.name = "hid-accutouch",
+	.id_table = accutouch_devices,
+	.input_mapping = accutouch_input_mapping,
+};
+
+module_hid_driver(accutouch_driver);
+
+MODULE_AUTHOR("Martyn Welch <martyn.welch@collabora.co.uk");
+MODULE_DESCRIPTION("Elo Accutouch HID TouchScreen driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index ea36b55..b697491 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1893,6 +1893,7 @@ void hid_disconnect(struct hid_device *hdev)
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 350accf..9472ef2 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -362,6 +362,7 @@
 #define USB_VENDOR_ID_ELO		0x04E7
 #define USB_DEVICE_ID_ELO_TS2515	0x0022
 #define USB_DEVICE_ID_ELO_TS2700	0x0020
+#define USB_DEVICE_ID_ELO_ACCUTOUCH_2216	0x0050
 
 #define USB_VENDOR_ID_EMS		0x2006
 #define USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II 0x0118
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
  2017-02-14 14:17 [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens Martyn Welch
@ 2017-02-28 17:43 ` Martyn Welch
  2017-03-01 13:30   ` Benjamin Tissoires
  2017-03-01 17:01 ` Benjamin Tissoires
  2017-03-21 14:04 ` Jiri Kosina
  2 siblings, 1 reply; 9+ messages in thread
From: Martyn Welch @ 2017-02-28 17:43 UTC (permalink / raw)
  To: Jiri Kosina, Benjamin Tissoires; +Cc: linux-input, linux-kernel

This patch has been sitting on the list for about 2 weeks. Is there
anything wrong with this patch?

Thanks,

Martyn

On Tue, Feb 14, 2017 at 02:17:56PM +0000, Martyn Welch wrote:
> The Accutouch 2216 is reporting BTN_LEFT/BTN_MOUSE rather than BTM_TOUCH
> in it's capabilities, which is what user space expects a touchscreen
> device to report. This is causing udev to consider the device to be a
> "VMware's USB mouse" rather than as a touchscreen, which results in a
> mouse cursor being displayed in Weston.
> 
> This patch adds a special driver for the device to correct the
> capabilities reported.
> 
> Signed-off-by: Martyn Welch <martyn.welch@collabora.co.uk>
> ---
>  drivers/hid/Kconfig         | 12 +++++++++++
>  drivers/hid/Makefile        |  1 +
>  drivers/hid/hid-accutouch.c | 52 +++++++++++++++++++++++++++++++++++++++++++++
>  drivers/hid/hid-core.c      |  1 +
>  drivers/hid/hid-ids.h       |  1 +
>  5 files changed, 67 insertions(+)
>  create mode 100644 drivers/hid/hid-accutouch.c
> 
> diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
> index 4070b73..ba0d17a 100644
> --- a/drivers/hid/Kconfig
> +++ b/drivers/hid/Kconfig
> @@ -98,6 +98,18 @@ config HID_A4TECH
>  	---help---
>  	Support for A4 tech X5 and WOP-35 / Trust 450L mice.
>  
> +config HID_ACCUTOUCH
> +	tristate "Accutouch touch device"
> +	depends on USB_HID
> +	---help---
> +	  This selects a driver for the Accutouch 2216 touch controller.
> +
> +	  The driver works around a problem in the reported device capabilities
> +	  which causes userspace to detect the device as a mouse rather than
> +          a touchscreen.
> +
> +	  Say Y here if you have a Accutouch 2216 touch controller.
> +
>  config HID_ACRUX
>  	tristate "ACRUX game controller support"
>  	depends on HID
> diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
> index 4d111f2..48be3ed 100644
> --- a/drivers/hid/Makefile
> +++ b/drivers/hid/Makefile
> @@ -21,6 +21,7 @@ hid-wiimote-y		:= hid-wiimote-core.o hid-wiimote-modules.o
>  hid-wiimote-$(CONFIG_DEBUG_FS)	+= hid-wiimote-debug.o
>  
>  obj-$(CONFIG_HID_A4TECH)	+= hid-a4tech.o
> +obj-$(CONFIG_HID_ACCUTOUCH)	+= hid-accutouch.o
>  obj-$(CONFIG_HID_ALPS)		+= hid-alps.o
>  obj-$(CONFIG_HID_ACRUX)		+= hid-axff.o
>  obj-$(CONFIG_HID_APPLE)		+= hid-apple.o
> diff --git a/drivers/hid/hid-accutouch.c b/drivers/hid/hid-accutouch.c
> new file mode 100644
> index 0000000..4e28716
> --- /dev/null
> +++ b/drivers/hid/hid-accutouch.c
> @@ -0,0 +1,52 @@
> +/*
> + * HID driver for Elo Accutouch touchscreens
> + *
> + * Copyright (c) 2016, Collabora Ltd.
> + * Copyright (c) 2016, General Electric Company
> + *
> + * based on hid-penmount.c
> + *  Copyright (c) 2014 Christian Gmeiner <christian.gmeiner <at> gmail.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/hid.h>
> +#include <linux/module.h>
> +#include "hid-ids.h"
> +
> +static int accutouch_input_mapping(struct hid_device *hdev,
> +				   struct hid_input *hi,
> +				   struct hid_field *field,
> +				   struct hid_usage *usage,
> +				   unsigned long **bit, int *max)
> +{
> +	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
> +		hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
> +		return 1;
> +	}
> +
> +	return 0;
> +}
> +
> +static const struct hid_device_id accutouch_devices[] = {
> +	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(hid, accutouch_devices);
> +
> +static struct hid_driver accutouch_driver = {
> +	.name = "hid-accutouch",
> +	.id_table = accutouch_devices,
> +	.input_mapping = accutouch_input_mapping,
> +};
> +
> +module_hid_driver(accutouch_driver);
> +
> +MODULE_AUTHOR("Martyn Welch <martyn.welch@collabora.co.uk");
> +MODULE_DESCRIPTION("Elo Accutouch HID TouchScreen driver");
> +MODULE_LICENSE("GPL");
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index ea36b55..b697491 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -1893,6 +1893,7 @@ void hid_disconnect(struct hid_device *hdev)
>  	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) },
> +	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> index 350accf..9472ef2 100644
> --- a/drivers/hid/hid-ids.h
> +++ b/drivers/hid/hid-ids.h
> @@ -362,6 +362,7 @@
>  #define USB_VENDOR_ID_ELO		0x04E7
>  #define USB_DEVICE_ID_ELO_TS2515	0x0022
>  #define USB_DEVICE_ID_ELO_TS2700	0x0020
> +#define USB_DEVICE_ID_ELO_ACCUTOUCH_2216	0x0050
>  
>  #define USB_VENDOR_ID_EMS		0x2006
>  #define USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II 0x0118
> -- 
> 1.8.3.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
  2017-02-28 17:43 ` Martyn Welch
@ 2017-03-01 13:30   ` Benjamin Tissoires
  2017-03-02 11:42     ` Martyn Welch
  0 siblings, 1 reply; 9+ messages in thread
From: Benjamin Tissoires @ 2017-03-01 13:30 UTC (permalink / raw)
  To: Martyn Welch; +Cc: Jiri Kosina, linux-input, linux-kernel

Hi,

On Feb 28 2017 or thereabouts, Martyn Welch wrote:
> This patch has been sitting on the list for about 2 weeks. Is there
> anything wrong with this patch?

The only wrong thing with the patch (I haven't started reviewing it yet)
is the timing. It was sent shortly before or at the time of the merge
window, where Jiri doesn't want to take new patches in, especially if
they add new drivers. For my side, I wasn't able to do much upstream
work for 3 weeks for personal reasons, urgent stuffs at work and time
off. I'll try to review it today or tomorrow, but don't expect Jiri to
take it until the merge window is closed (this Sunday normally, but you
should probably give him some time to process all the backlog from those
past 3 weeks).

Cheers,
Benjamin

> 
> Thanks,
> 
> Martyn
> 
> On Tue, Feb 14, 2017 at 02:17:56PM +0000, Martyn Welch wrote:
> > The Accutouch 2216 is reporting BTN_LEFT/BTN_MOUSE rather than BTM_TOUCH
> > in it's capabilities, which is what user space expects a touchscreen
> > device to report. This is causing udev to consider the device to be a
> > "VMware's USB mouse" rather than as a touchscreen, which results in a
> > mouse cursor being displayed in Weston.
> > 
> > This patch adds a special driver for the device to correct the
> > capabilities reported.
> > 
> > Signed-off-by: Martyn Welch <martyn.welch@collabora.co.uk>
> > ---
> >  drivers/hid/Kconfig         | 12 +++++++++++
> >  drivers/hid/Makefile        |  1 +
> >  drivers/hid/hid-accutouch.c | 52 +++++++++++++++++++++++++++++++++++++++++++++
> >  drivers/hid/hid-core.c      |  1 +
> >  drivers/hid/hid-ids.h       |  1 +
> >  5 files changed, 67 insertions(+)
> >  create mode 100644 drivers/hid/hid-accutouch.c
> > 
> > diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
> > index 4070b73..ba0d17a 100644
> > --- a/drivers/hid/Kconfig
> > +++ b/drivers/hid/Kconfig
> > @@ -98,6 +98,18 @@ config HID_A4TECH
> >  	---help---
> >  	Support for A4 tech X5 and WOP-35 / Trust 450L mice.
> >  
> > +config HID_ACCUTOUCH
> > +	tristate "Accutouch touch device"
> > +	depends on USB_HID
> > +	---help---
> > +	  This selects a driver for the Accutouch 2216 touch controller.
> > +
> > +	  The driver works around a problem in the reported device capabilities
> > +	  which causes userspace to detect the device as a mouse rather than
> > +          a touchscreen.
> > +
> > +	  Say Y here if you have a Accutouch 2216 touch controller.
> > +
> >  config HID_ACRUX
> >  	tristate "ACRUX game controller support"
> >  	depends on HID
> > diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
> > index 4d111f2..48be3ed 100644
> > --- a/drivers/hid/Makefile
> > +++ b/drivers/hid/Makefile
> > @@ -21,6 +21,7 @@ hid-wiimote-y		:= hid-wiimote-core.o hid-wiimote-modules.o
> >  hid-wiimote-$(CONFIG_DEBUG_FS)	+= hid-wiimote-debug.o
> >  
> >  obj-$(CONFIG_HID_A4TECH)	+= hid-a4tech.o
> > +obj-$(CONFIG_HID_ACCUTOUCH)	+= hid-accutouch.o
> >  obj-$(CONFIG_HID_ALPS)		+= hid-alps.o
> >  obj-$(CONFIG_HID_ACRUX)		+= hid-axff.o
> >  obj-$(CONFIG_HID_APPLE)		+= hid-apple.o
> > diff --git a/drivers/hid/hid-accutouch.c b/drivers/hid/hid-accutouch.c
> > new file mode 100644
> > index 0000000..4e28716
> > --- /dev/null
> > +++ b/drivers/hid/hid-accutouch.c
> > @@ -0,0 +1,52 @@
> > +/*
> > + * HID driver for Elo Accutouch touchscreens
> > + *
> > + * Copyright (c) 2016, Collabora Ltd.
> > + * Copyright (c) 2016, General Electric Company
> > + *
> > + * based on hid-penmount.c
> > + *  Copyright (c) 2014 Christian Gmeiner <christian.gmeiner <at> gmail.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/hid.h>
> > +#include <linux/module.h>
> > +#include "hid-ids.h"
> > +
> > +static int accutouch_input_mapping(struct hid_device *hdev,
> > +				   struct hid_input *hi,
> > +				   struct hid_field *field,
> > +				   struct hid_usage *usage,
> > +				   unsigned long **bit, int *max)
> > +{
> > +	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
> > +		hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
> > +		return 1;
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> > +static const struct hid_device_id accutouch_devices[] = {
> > +	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
> > +	{ }
> > +};
> > +MODULE_DEVICE_TABLE(hid, accutouch_devices);
> > +
> > +static struct hid_driver accutouch_driver = {
> > +	.name = "hid-accutouch",
> > +	.id_table = accutouch_devices,
> > +	.input_mapping = accutouch_input_mapping,
> > +};
> > +
> > +module_hid_driver(accutouch_driver);
> > +
> > +MODULE_AUTHOR("Martyn Welch <martyn.welch@collabora.co.uk");
> > +MODULE_DESCRIPTION("Elo Accutouch HID TouchScreen driver");
> > +MODULE_LICENSE("GPL");
> > diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> > index ea36b55..b697491 100644
> > --- a/drivers/hid/hid-core.c
> > +++ b/drivers/hid/hid-core.c
> > @@ -1893,6 +1893,7 @@ void hid_disconnect(struct hid_device *hdev)
> >  	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
> >  	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
> >  	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) },
> > +	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
> >  	{ HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
> >  	{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
> >  	{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
> > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> > index 350accf..9472ef2 100644
> > --- a/drivers/hid/hid-ids.h
> > +++ b/drivers/hid/hid-ids.h
> > @@ -362,6 +362,7 @@
> >  #define USB_VENDOR_ID_ELO		0x04E7
> >  #define USB_DEVICE_ID_ELO_TS2515	0x0022
> >  #define USB_DEVICE_ID_ELO_TS2700	0x0020
> > +#define USB_DEVICE_ID_ELO_ACCUTOUCH_2216	0x0050
> >  
> >  #define USB_VENDOR_ID_EMS		0x2006
> >  #define USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II 0x0118
> > -- 
> > 1.8.3.1
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-input" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
  2017-02-14 14:17 [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens Martyn Welch
  2017-02-28 17:43 ` Martyn Welch
@ 2017-03-01 17:01 ` Benjamin Tissoires
  2017-03-21 14:04 ` Jiri Kosina
  2 siblings, 0 replies; 9+ messages in thread
From: Benjamin Tissoires @ 2017-03-01 17:01 UTC (permalink / raw)
  To: Martyn Welch; +Cc: Jiri Kosina, linux-input, linux-kernel

On Feb 14 2017 or thereabouts, Martyn Welch wrote:
> The Accutouch 2216 is reporting BTN_LEFT/BTN_MOUSE rather than BTM_TOUCH
> in it's capabilities, which is what user space expects a touchscreen
> device to report. This is causing udev to consider the device to be a
> "VMware's USB mouse" rather than as a touchscreen, which results in a
> mouse cursor being displayed in Weston.
> 
> This patch adds a special driver for the device to correct the
> capabilities reported.

The patch in itself is fine from what I can see. However, we tend to
group devices/drivers by manufacturer, and there is already a hid-elo.c.

So I think this quirk should be integrated in hid-elo.c. You will need
to add a special quirk for this device in .driver_data, but it should be
doable to integrate in the existing code.

Cheers,
Benjamin

> 
> Signed-off-by: Martyn Welch <martyn.welch@collabora.co.uk>
> ---
>  drivers/hid/Kconfig         | 12 +++++++++++
>  drivers/hid/Makefile        |  1 +
>  drivers/hid/hid-accutouch.c | 52 +++++++++++++++++++++++++++++++++++++++++++++
>  drivers/hid/hid-core.c      |  1 +
>  drivers/hid/hid-ids.h       |  1 +
>  5 files changed, 67 insertions(+)
>  create mode 100644 drivers/hid/hid-accutouch.c
> 
> diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
> index 4070b73..ba0d17a 100644
> --- a/drivers/hid/Kconfig
> +++ b/drivers/hid/Kconfig
> @@ -98,6 +98,18 @@ config HID_A4TECH
>  	---help---
>  	Support for A4 tech X5 and WOP-35 / Trust 450L mice.
>  
> +config HID_ACCUTOUCH
> +	tristate "Accutouch touch device"
> +	depends on USB_HID
> +	---help---
> +	  This selects a driver for the Accutouch 2216 touch controller.
> +
> +	  The driver works around a problem in the reported device capabilities
> +	  which causes userspace to detect the device as a mouse rather than
> +          a touchscreen.
> +
> +	  Say Y here if you have a Accutouch 2216 touch controller.
> +
>  config HID_ACRUX
>  	tristate "ACRUX game controller support"
>  	depends on HID
> diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
> index 4d111f2..48be3ed 100644
> --- a/drivers/hid/Makefile
> +++ b/drivers/hid/Makefile
> @@ -21,6 +21,7 @@ hid-wiimote-y		:= hid-wiimote-core.o hid-wiimote-modules.o
>  hid-wiimote-$(CONFIG_DEBUG_FS)	+= hid-wiimote-debug.o
>  
>  obj-$(CONFIG_HID_A4TECH)	+= hid-a4tech.o
> +obj-$(CONFIG_HID_ACCUTOUCH)	+= hid-accutouch.o
>  obj-$(CONFIG_HID_ALPS)		+= hid-alps.o
>  obj-$(CONFIG_HID_ACRUX)		+= hid-axff.o
>  obj-$(CONFIG_HID_APPLE)		+= hid-apple.o
> diff --git a/drivers/hid/hid-accutouch.c b/drivers/hid/hid-accutouch.c
> new file mode 100644
> index 0000000..4e28716
> --- /dev/null
> +++ b/drivers/hid/hid-accutouch.c
> @@ -0,0 +1,52 @@
> +/*
> + * HID driver for Elo Accutouch touchscreens
> + *
> + * Copyright (c) 2016, Collabora Ltd.
> + * Copyright (c) 2016, General Electric Company
> + *
> + * based on hid-penmount.c
> + *  Copyright (c) 2014 Christian Gmeiner <christian.gmeiner <at> gmail.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/hid.h>
> +#include <linux/module.h>
> +#include "hid-ids.h"
> +
> +static int accutouch_input_mapping(struct hid_device *hdev,
> +				   struct hid_input *hi,
> +				   struct hid_field *field,
> +				   struct hid_usage *usage,
> +				   unsigned long **bit, int *max)
> +{
> +	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
> +		hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
> +		return 1;
> +	}
> +
> +	return 0;
> +}
> +
> +static const struct hid_device_id accutouch_devices[] = {
> +	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(hid, accutouch_devices);
> +
> +static struct hid_driver accutouch_driver = {
> +	.name = "hid-accutouch",
> +	.id_table = accutouch_devices,
> +	.input_mapping = accutouch_input_mapping,
> +};
> +
> +module_hid_driver(accutouch_driver);
> +
> +MODULE_AUTHOR("Martyn Welch <martyn.welch@collabora.co.uk");
> +MODULE_DESCRIPTION("Elo Accutouch HID TouchScreen driver");
> +MODULE_LICENSE("GPL");
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index ea36b55..b697491 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -1893,6 +1893,7 @@ void hid_disconnect(struct hid_device *hdev)
>  	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) },
> +	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> index 350accf..9472ef2 100644
> --- a/drivers/hid/hid-ids.h
> +++ b/drivers/hid/hid-ids.h
> @@ -362,6 +362,7 @@
>  #define USB_VENDOR_ID_ELO		0x04E7
>  #define USB_DEVICE_ID_ELO_TS2515	0x0022
>  #define USB_DEVICE_ID_ELO_TS2700	0x0020
> +#define USB_DEVICE_ID_ELO_ACCUTOUCH_2216	0x0050
>  
>  #define USB_VENDOR_ID_EMS		0x2006
>  #define USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II 0x0118
> -- 
> 1.8.3.1
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
  2017-03-01 13:30   ` Benjamin Tissoires
@ 2017-03-02 11:42     ` Martyn Welch
  0 siblings, 0 replies; 9+ messages in thread
From: Martyn Welch @ 2017-03-02 11:42 UTC (permalink / raw)
  To: Benjamin Tissoires; +Cc: Jiri Kosina, linux-input, linux-kernel

On Wed, Mar 01, 2017 at 02:30:31PM +0100, Benjamin Tissoires wrote:
> Hi,
> 
> On Feb 28 2017 or thereabouts, Martyn Welch wrote:
> > This patch has been sitting on the list for about 2 weeks. Is there
> > anything wrong with this patch?
> 
> The only wrong thing with the patch (I haven't started reviewing it yet)
> is the timing. It was sent shortly before or at the time of the merge
> window, where Jiri doesn't want to take new patches in, especially if
> they add new drivers. For my side, I wasn't able to do much upstream
> work for 3 weeks for personal reasons, urgent stuffs at work and time
> off. I'll try to review it today or tomorrow, but don't expect Jiri to
> take it until the merge window is closed (this Sunday normally, but you
> should probably give him some time to process all the backlog from those
> past 3 weeks).
> 

Thanks for the info Benjamin, much appreciated.

Martyn

> Cheers,
> Benjamin
> 
> > 
> > Thanks,
> > 
> > Martyn
> > 
> > On Tue, Feb 14, 2017 at 02:17:56PM +0000, Martyn Welch wrote:
> > > The Accutouch 2216 is reporting BTN_LEFT/BTN_MOUSE rather than BTM_TOUCH
> > > in it's capabilities, which is what user space expects a touchscreen
> > > device to report. This is causing udev to consider the device to be a
> > > "VMware's USB mouse" rather than as a touchscreen, which results in a
> > > mouse cursor being displayed in Weston.
> > > 
> > > This patch adds a special driver for the device to correct the
> > > capabilities reported.
> > > 
> > > Signed-off-by: Martyn Welch <martyn.welch@collabora.co.uk>
> > > ---
> > >  drivers/hid/Kconfig         | 12 +++++++++++
> > >  drivers/hid/Makefile        |  1 +
> > >  drivers/hid/hid-accutouch.c | 52 +++++++++++++++++++++++++++++++++++++++++++++
> > >  drivers/hid/hid-core.c      |  1 +
> > >  drivers/hid/hid-ids.h       |  1 +
> > >  5 files changed, 67 insertions(+)
> > >  create mode 100644 drivers/hid/hid-accutouch.c
> > > 
> > > diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
> > > index 4070b73..ba0d17a 100644
> > > --- a/drivers/hid/Kconfig
> > > +++ b/drivers/hid/Kconfig
> > > @@ -98,6 +98,18 @@ config HID_A4TECH
> > >  	---help---
> > >  	Support for A4 tech X5 and WOP-35 / Trust 450L mice.
> > >  
> > > +config HID_ACCUTOUCH
> > > +	tristate "Accutouch touch device"
> > > +	depends on USB_HID
> > > +	---help---
> > > +	  This selects a driver for the Accutouch 2216 touch controller.
> > > +
> > > +	  The driver works around a problem in the reported device capabilities
> > > +	  which causes userspace to detect the device as a mouse rather than
> > > +          a touchscreen.
> > > +
> > > +	  Say Y here if you have a Accutouch 2216 touch controller.
> > > +
> > >  config HID_ACRUX
> > >  	tristate "ACRUX game controller support"
> > >  	depends on HID
> > > diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
> > > index 4d111f2..48be3ed 100644
> > > --- a/drivers/hid/Makefile
> > > +++ b/drivers/hid/Makefile
> > > @@ -21,6 +21,7 @@ hid-wiimote-y		:= hid-wiimote-core.o hid-wiimote-modules.o
> > >  hid-wiimote-$(CONFIG_DEBUG_FS)	+= hid-wiimote-debug.o
> > >  
> > >  obj-$(CONFIG_HID_A4TECH)	+= hid-a4tech.o
> > > +obj-$(CONFIG_HID_ACCUTOUCH)	+= hid-accutouch.o
> > >  obj-$(CONFIG_HID_ALPS)		+= hid-alps.o
> > >  obj-$(CONFIG_HID_ACRUX)		+= hid-axff.o
> > >  obj-$(CONFIG_HID_APPLE)		+= hid-apple.o
> > > diff --git a/drivers/hid/hid-accutouch.c b/drivers/hid/hid-accutouch.c
> > > new file mode 100644
> > > index 0000000..4e28716
> > > --- /dev/null
> > > +++ b/drivers/hid/hid-accutouch.c
> > > @@ -0,0 +1,52 @@
> > > +/*
> > > + * HID driver for Elo Accutouch touchscreens
> > > + *
> > > + * Copyright (c) 2016, Collabora Ltd.
> > > + * Copyright (c) 2016, General Electric Company
> > > + *
> > > + * based on hid-penmount.c
> > > + *  Copyright (c) 2014 Christian Gmeiner <christian.gmeiner <at> gmail.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/hid.h>
> > > +#include <linux/module.h>
> > > +#include "hid-ids.h"
> > > +
> > > +static int accutouch_input_mapping(struct hid_device *hdev,
> > > +				   struct hid_input *hi,
> > > +				   struct hid_field *field,
> > > +				   struct hid_usage *usage,
> > > +				   unsigned long **bit, int *max)
> > > +{
> > > +	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
> > > +		hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
> > > +		return 1;
> > > +	}
> > > +
> > > +	return 0;
> > > +}
> > > +
> > > +static const struct hid_device_id accutouch_devices[] = {
> > > +	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
> > > +	{ }
> > > +};
> > > +MODULE_DEVICE_TABLE(hid, accutouch_devices);
> > > +
> > > +static struct hid_driver accutouch_driver = {
> > > +	.name = "hid-accutouch",
> > > +	.id_table = accutouch_devices,
> > > +	.input_mapping = accutouch_input_mapping,
> > > +};
> > > +
> > > +module_hid_driver(accutouch_driver);
> > > +
> > > +MODULE_AUTHOR("Martyn Welch <martyn.welch@collabora.co.uk");
> > > +MODULE_DESCRIPTION("Elo Accutouch HID TouchScreen driver");
> > > +MODULE_LICENSE("GPL");
> > > diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> > > index ea36b55..b697491 100644
> > > --- a/drivers/hid/hid-core.c
> > > +++ b/drivers/hid/hid-core.c
> > > @@ -1893,6 +1893,7 @@ void hid_disconnect(struct hid_device *hdev)
> > >  	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
> > >  	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
> > >  	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) },
> > > +	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
> > >  	{ HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
> > >  	{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
> > >  	{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
> > > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> > > index 350accf..9472ef2 100644
> > > --- a/drivers/hid/hid-ids.h
> > > +++ b/drivers/hid/hid-ids.h
> > > @@ -362,6 +362,7 @@
> > >  #define USB_VENDOR_ID_ELO		0x04E7
> > >  #define USB_DEVICE_ID_ELO_TS2515	0x0022
> > >  #define USB_DEVICE_ID_ELO_TS2700	0x0020
> > > +#define USB_DEVICE_ID_ELO_ACCUTOUCH_2216	0x0050
> > >  
> > >  #define USB_VENDOR_ID_EMS		0x2006
> > >  #define USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II 0x0118
> > > -- 
> > > 1.8.3.1
> > > 
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe linux-input" in
> > > the body of a message to majordomo@vger.kernel.org
> > > More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
  2017-02-14 14:17 [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens Martyn Welch
  2017-02-28 17:43 ` Martyn Welch
  2017-03-01 17:01 ` Benjamin Tissoires
@ 2017-03-21 14:04 ` Jiri Kosina
  2017-03-21 19:45   ` Dmitry Torokhov
  2 siblings, 1 reply; 9+ messages in thread
From: Jiri Kosina @ 2017-03-21 14:04 UTC (permalink / raw)
  To: Martyn Welch; +Cc: Benjamin Tissoires, linux-input, linux-kernel

On Tue, 14 Feb 2017, Martyn Welch wrote:

> The Accutouch 2216 is reporting BTN_LEFT/BTN_MOUSE rather than BTM_TOUCH
> in it's capabilities, which is what user space expects a touchscreen
> device to report. This is causing udev to consider the device to be a
> "VMware's USB mouse" rather than as a touchscreen, which results in a
> mouse cursor being displayed in Weston.
> 
> This patch adds a special driver for the device to correct the
> capabilities reported.

Applied to for-4.12/accutouch. Thanks,

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
  2017-03-21 14:04 ` Jiri Kosina
@ 2017-03-21 19:45   ` Dmitry Torokhov
  2017-03-21 19:48     ` Jiri Kosina
  0 siblings, 1 reply; 9+ messages in thread
From: Dmitry Torokhov @ 2017-03-21 19:45 UTC (permalink / raw)
  To: Jiri Kosina; +Cc: Martyn Welch, Benjamin Tissoires, linux-input, lkml

On Tue, Mar 21, 2017 at 7:04 AM, Jiri Kosina <jikos@kernel.org> wrote:
>
> On Tue, 14 Feb 2017, Martyn Welch wrote:
>
> > The Accutouch 2216 is reporting BTN_LEFT/BTN_MOUSE rather than BTM_TOUCH
> > in it's capabilities, which is what user space expects a touchscreen
> > device to report. This is causing udev to consider the device to be a
> > "VMware's USB mouse" rather than as a touchscreen, which results in a
> > mouse cursor being displayed in Weston.
> >
> > This patch adds a special driver for the device to correct the
> > capabilities reported.
>
> Applied to for-4.12/accutouch. Thanks,

Hmm, can't we fix usage code from udev, like we do with other keymaps?
Kernel memory is quite precious.

Thanks.

-- 
Dmitry

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
  2017-03-21 19:45   ` Dmitry Torokhov
@ 2017-03-21 19:48     ` Jiri Kosina
  2017-03-22  8:27       ` Jiri Kosina
  0 siblings, 1 reply; 9+ messages in thread
From: Jiri Kosina @ 2017-03-21 19:48 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: Martyn Welch, Benjamin Tissoires, linux-input, lkml

On Tue, 21 Mar 2017, Dmitry Torokhov wrote:

> > > This patch adds a special driver for the device to correct the
> > > capabilities reported.
> >
> > Applied to for-4.12/accutouch. Thanks,
> 
> Hmm, can't we fix usage code from udev, like we do with other keymaps?

Sorry, I messed up. I exchanged this patch with another one that fixed 
report descriptor (which we can't yet, although I have been thinking about 
ways how to do this properly).

Thanks for catching my mistake, Dmitry. Martyn, remapping HID usage codes 
is possible via udev now, as we support setkeycodes in hid-input for quite 
some time. Could you please verify that it works for you?

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens
  2017-03-21 19:48     ` Jiri Kosina
@ 2017-03-22  8:27       ` Jiri Kosina
  0 siblings, 0 replies; 9+ messages in thread
From: Jiri Kosina @ 2017-03-22  8:27 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: Martyn Welch, Benjamin Tissoires, linux-input, lkml

On Tue, 21 Mar 2017, Jiri Kosina wrote:

> Sorry, I messed up. I exchanged this patch with another one that fixed 
> report descriptor (which we can't yet, although I have been thinking about 
> ways how to do this properly).

FTR, this is now also dropped from hid.git. Thanks again for catching my 
brainfart, Dmitry.

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-03-22  8:27 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-14 14:17 [PATCH] HID: Accutouch: Add driver for ELO Accutouch 2216 USB Touchscreens Martyn Welch
2017-02-28 17:43 ` Martyn Welch
2017-03-01 13:30   ` Benjamin Tissoires
2017-03-02 11:42     ` Martyn Welch
2017-03-01 17:01 ` Benjamin Tissoires
2017-03-21 14:04 ` Jiri Kosina
2017-03-21 19:45   ` Dmitry Torokhov
2017-03-21 19:48     ` Jiri Kosina
2017-03-22  8:27       ` Jiri Kosina

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.