diff mbox series

hid-multitouch: Fix Iiyama ProLite T1931SAW (0eef:0001 again!)

Message ID 20211112135511.29573-1-linux@zary.sk (mailing list archive)
State Superseded
Delegated to: Jiri Kosina
Headers show
Series hid-multitouch: Fix Iiyama ProLite T1931SAW (0eef:0001 again!) | expand

Commit Message

Ondrej Zary Nov. 12, 2021, 1:55 p.m. UTC
Iiyama ProLite T1931SAW does not work with Linux - input devices are
created but cursor does not move.

It has the infamous 0eef:0001 ID which has been reused for various
devices before.

It seems to require export_all_inputs = true.
Add it to mt_devices[] as MT_CLS_WIN_8 to fix the problem.
Hopefully there are no HID devices using this ID that will break.
It should not break non-HID devices (handled by usbtouchscreen).

Signed-off-by: Ondrej Zary <linux@zary.sk>
---
 drivers/hid/hid-multitouch.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Benjamin Tissoires Nov. 12, 2021, 3:17 p.m. UTC | #1
Hi Ondrej,

On Fri, Nov 12, 2021 at 3:00 PM Ondrej Zary <linux@zary.sk> wrote:
>
> Iiyama ProLite T1931SAW does not work with Linux - input devices are
> created but cursor does not move.
>
> It has the infamous 0eef:0001 ID which has been reused for various
> devices before.
>
> It seems to require export_all_inputs = true.
> Add it to mt_devices[] as MT_CLS_WIN_8 to fix the problem.
> Hopefully there are no HID devices using this ID that will break.
> It should not break non-HID devices (handled by usbtouchscreen).

Hmm, this is worrisome. I am pretty sure there were some eGalax 0001
devices that were Win 7 compatible and I am not sure if they are
compatible with Win8...

I guess that if you have to set MT_CLS_WIN_8, the device is not
detected as such. so how about you use:
MT_CLS_EXPORT_ALL_INPUTS instead, (to keep MT_CLS_DEFAULT for those
devices), and restrict the VID/PID matching to the non Win8 devices:

HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_DWAV,
USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER)

?

Cheers,
Benjamin

>
> Signed-off-by: Ondrej Zary <linux@zary.sk>
> ---
>  drivers/hid/hid-multitouch.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> index e1afddb7b33d..099daf590392 100644
> --- a/drivers/hid/hid-multitouch.c
> +++ b/drivers/hid/hid-multitouch.c
> @@ -1888,6 +1888,11 @@ static const struct hid_device_id mt_devices[] = {
>                 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
>                         USB_DEVICE_ID_CVTOUCH_SCREEN) },
>
> +       /* eGalax devices (SAW) */
> +       { .driver_data = MT_CLS_WIN_8,
> +               MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> +                       USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER) },
> +
>         /* eGalax devices (resistive) */
>         { .driver_data = MT_CLS_EGALAX,
>                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> --
> Ondrej Zary
>
Ondrej Zary Nov. 15, 2021, 8:37 a.m. UTC | #2
On Friday 12 November 2021, Benjamin Tissoires wrote:
> Hi Ondrej,
> 
> On Fri, Nov 12, 2021 at 3:00 PM Ondrej Zary <linux@zary.sk> wrote:
> >
> > Iiyama ProLite T1931SAW does not work with Linux - input devices are
> > created but cursor does not move.
> >
> > It has the infamous 0eef:0001 ID which has been reused for various
> > devices before.
> >
> > It seems to require export_all_inputs = true.
> > Add it to mt_devices[] as MT_CLS_WIN_8 to fix the problem.
> > Hopefully there are no HID devices using this ID that will break.
> > It should not break non-HID devices (handled by usbtouchscreen).
> 
> Hmm, this is worrisome. I am pretty sure there were some eGalax 0001
> devices that were Win 7 compatible and I am not sure if they are
> compatible with Win8...
> 
> I guess that if you have to set MT_CLS_WIN_8, the device is not
> detected as such. so how about you use:
> MT_CLS_EXPORT_ALL_INPUTS instead, (to keep MT_CLS_DEFAULT for those
> devices), and restrict the VID/PID matching to the non Win8 devices:

It works with MT_CLS_EXPORT_ALL_INPUTS.
 
> HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_DWAV,
> USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER)

But does not match HID_GROUP_GENERIC.

> 
> ?
> 
> Cheers,
> Benjamin
> 
> >
> > Signed-off-by: Ondrej Zary <linux@zary.sk>
> > ---
> >  drivers/hid/hid-multitouch.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> > index e1afddb7b33d..099daf590392 100644
> > --- a/drivers/hid/hid-multitouch.c
> > +++ b/drivers/hid/hid-multitouch.c
> > @@ -1888,6 +1888,11 @@ static const struct hid_device_id mt_devices[] = {
> >                 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
> >                         USB_DEVICE_ID_CVTOUCH_SCREEN) },
> >
> > +       /* eGalax devices (SAW) */
> > +       { .driver_data = MT_CLS_WIN_8,
> > +               MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> > +                       USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER) },
> > +
> >         /* eGalax devices (resistive) */
> >         { .driver_data = MT_CLS_EGALAX,
> >                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> > --
> > Ondrej Zary
> >
> 
>
Benjamin Tissoires Nov. 16, 2021, 9:11 a.m. UTC | #3
On Mon, Nov 15, 2021 at 9:37 AM Ondrej Zary <linux@zary.sk> wrote:
>
> On Friday 12 November 2021, Benjamin Tissoires wrote:
> > Hi Ondrej,
> >
> > On Fri, Nov 12, 2021 at 3:00 PM Ondrej Zary <linux@zary.sk> wrote:
> > >
> > > Iiyama ProLite T1931SAW does not work with Linux - input devices are
> > > created but cursor does not move.
> > >
> > > It has the infamous 0eef:0001 ID which has been reused for various
> > > devices before.
> > >
> > > It seems to require export_all_inputs = true.
> > > Add it to mt_devices[] as MT_CLS_WIN_8 to fix the problem.
> > > Hopefully there are no HID devices using this ID that will break.
> > > It should not break non-HID devices (handled by usbtouchscreen).
> >
> > Hmm, this is worrisome. I am pretty sure there were some eGalax 0001
> > devices that were Win 7 compatible and I am not sure if they are
> > compatible with Win8...
> >
> > I guess that if you have to set MT_CLS_WIN_8, the device is not
> > detected as such. so how about you use:
> > MT_CLS_EXPORT_ALL_INPUTS instead, (to keep MT_CLS_DEFAULT for those
> > devices), and restrict the VID/PID matching to the non Win8 devices:
>
> It works with MT_CLS_EXPORT_ALL_INPUTS.
>
> > HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_DWAV,
> > USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER)
>
> But does not match HID_GROUP_GENERIC.

Sorry, it should have been HID_GROUP_MULTITOUCH

Cheers,
Benjamin

>
> >
> > ?
> >
> > Cheers,
> > Benjamin
> >
> > >
> > > Signed-off-by: Ondrej Zary <linux@zary.sk>
> > > ---
> > >  drivers/hid/hid-multitouch.c | 5 +++++
> > >  1 file changed, 5 insertions(+)
> > >
> > > diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> > > index e1afddb7b33d..099daf590392 100644
> > > --- a/drivers/hid/hid-multitouch.c
> > > +++ b/drivers/hid/hid-multitouch.c
> > > @@ -1888,6 +1888,11 @@ static const struct hid_device_id mt_devices[] = {
> > >                 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
> > >                         USB_DEVICE_ID_CVTOUCH_SCREEN) },
> > >
> > > +       /* eGalax devices (SAW) */
> > > +       { .driver_data = MT_CLS_WIN_8,
> > > +               MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> > > +                       USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER) },
> > > +
> > >         /* eGalax devices (resistive) */
> > >         { .driver_data = MT_CLS_EGALAX,
> > >                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> > > --
> > > Ondrej Zary
> > >
> >
> >
>
>
>
> --
> Ondrej Zary
>
Ondrej Zary Nov. 16, 2021, 11:07 a.m. UTC | #4
On Tuesday 16 November 2021, Benjamin Tissoires wrote:
> On Mon, Nov 15, 2021 at 9:37 AM Ondrej Zary <linux@zary.sk> wrote:
> >
> > On Friday 12 November 2021, Benjamin Tissoires wrote:
> > > Hi Ondrej,
> > >
> > > On Fri, Nov 12, 2021 at 3:00 PM Ondrej Zary <linux@zary.sk> wrote:
> > > >
> > > > Iiyama ProLite T1931SAW does not work with Linux - input devices are
> > > > created but cursor does not move.
> > > >
> > > > It has the infamous 0eef:0001 ID which has been reused for various
> > > > devices before.
> > > >
> > > > It seems to require export_all_inputs = true.
> > > > Add it to mt_devices[] as MT_CLS_WIN_8 to fix the problem.
> > > > Hopefully there are no HID devices using this ID that will break.
> > > > It should not break non-HID devices (handled by usbtouchscreen).
> > >
> > > Hmm, this is worrisome. I am pretty sure there were some eGalax 0001
> > > devices that were Win 7 compatible and I am not sure if they are
> > > compatible with Win8...
> > >
> > > I guess that if you have to set MT_CLS_WIN_8, the device is not
> > > detected as such. so how about you use:
> > > MT_CLS_EXPORT_ALL_INPUTS instead, (to keep MT_CLS_DEFAULT for those
> > > devices), and restrict the VID/PID matching to the non Win8 devices:
> >
> > It works with MT_CLS_EXPORT_ALL_INPUTS.
> >
> > > HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_DWAV,
> > > USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER)
> >
> > But does not match HID_GROUP_GENERIC.
> 
> Sorry, it should have been HID_GROUP_MULTITOUCH

That's exactly how MT_USB_DEVICE is defined:
#define MT_USB_DEVICE(v, p)     HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)

So it's equal to MT_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER)
Will that match only non-Win8 devices?
 
> Cheers,
> Benjamin
> 
> >
> > >
> > > ?
> > >
> > > Cheers,
> > > Benjamin
> > >
> > > >
> > > > Signed-off-by: Ondrej Zary <linux@zary.sk>
> > > > ---
> > > >  drivers/hid/hid-multitouch.c | 5 +++++
> > > >  1 file changed, 5 insertions(+)
> > > >
> > > > diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> > > > index e1afddb7b33d..099daf590392 100644
> > > > --- a/drivers/hid/hid-multitouch.c
> > > > +++ b/drivers/hid/hid-multitouch.c
> > > > @@ -1888,6 +1888,11 @@ static const struct hid_device_id mt_devices[] = {
> > > >                 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
> > > >                         USB_DEVICE_ID_CVTOUCH_SCREEN) },
> > > >
> > > > +       /* eGalax devices (SAW) */
> > > > +       { .driver_data = MT_CLS_WIN_8,
> > > > +               MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> > > > +                       USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER) },
> > > > +
> > > >         /* eGalax devices (resistive) */
> > > >         { .driver_data = MT_CLS_EGALAX,
> > > >                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> > > > --
> > > > Ondrej Zary
> > > >
> > >
> > >
> >
> >
> >
> > --
> > Ondrej Zary
> >
> 
>
Benjamin Tissoires Nov. 16, 2021, 12:13 p.m. UTC | #5
On Tue, Nov 16, 2021 at 12:07 PM Ondrej Zary <linux@zary.sk> wrote:
>
> On Tuesday 16 November 2021, Benjamin Tissoires wrote:
> > On Mon, Nov 15, 2021 at 9:37 AM Ondrej Zary <linux@zary.sk> wrote:
> > >
> > > On Friday 12 November 2021, Benjamin Tissoires wrote:
> > > > Hi Ondrej,
> > > >
> > > > On Fri, Nov 12, 2021 at 3:00 PM Ondrej Zary <linux@zary.sk> wrote:
> > > > >
> > > > > Iiyama ProLite T1931SAW does not work with Linux - input devices are
> > > > > created but cursor does not move.
> > > > >
> > > > > It has the infamous 0eef:0001 ID which has been reused for various
> > > > > devices before.
> > > > >
> > > > > It seems to require export_all_inputs = true.
> > > > > Add it to mt_devices[] as MT_CLS_WIN_8 to fix the problem.
> > > > > Hopefully there are no HID devices using this ID that will break.
> > > > > It should not break non-HID devices (handled by usbtouchscreen).
> > > >
> > > > Hmm, this is worrisome. I am pretty sure there were some eGalax 0001
> > > > devices that were Win 7 compatible and I am not sure if they are
> > > > compatible with Win8...
> > > >
> > > > I guess that if you have to set MT_CLS_WIN_8, the device is not
> > > > detected as such. so how about you use:
> > > > MT_CLS_EXPORT_ALL_INPUTS instead, (to keep MT_CLS_DEFAULT for those
> > > > devices), and restrict the VID/PID matching to the non Win8 devices:
> > >
> > > It works with MT_CLS_EXPORT_ALL_INPUTS.
> > >
> > > > HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_DWAV,
> > > > USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER)
> > >
> > > But does not match HID_GROUP_GENERIC.
> >
> > Sorry, it should have been HID_GROUP_MULTITOUCH
>
> That's exactly how MT_USB_DEVICE is defined:
> #define MT_USB_DEVICE(v, p)     HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)

Oops, sorry. That's what happens when I rely too much on my memory and
don't check the code :(

>
> So it's equal to MT_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER)
> Will that match only non-Win8 devices?

Nope, you're correct, it will only match non-Win8 devices.
So the only comment I have on your patch is to use
MT_CLS_EXPORT_ALL_INPUTS instead of MT_CLS_WIN_8.

Cheers,
Benjamin

>
> > Cheers,
> > Benjamin
> >
> > >
> > > >
> > > > ?
> > > >
> > > > Cheers,
> > > > Benjamin
> > > >
> > > > >
> > > > > Signed-off-by: Ondrej Zary <linux@zary.sk>
> > > > > ---
> > > > >  drivers/hid/hid-multitouch.c | 5 +++++
> > > > >  1 file changed, 5 insertions(+)
> > > > >
> > > > > diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> > > > > index e1afddb7b33d..099daf590392 100644
> > > > > --- a/drivers/hid/hid-multitouch.c
> > > > > +++ b/drivers/hid/hid-multitouch.c
> > > > > @@ -1888,6 +1888,11 @@ static const struct hid_device_id mt_devices[] = {
> > > > >                 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
> > > > >                         USB_DEVICE_ID_CVTOUCH_SCREEN) },
> > > > >
> > > > > +       /* eGalax devices (SAW) */
> > > > > +       { .driver_data = MT_CLS_WIN_8,
> > > > > +               MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> > > > > +                       USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER) },
> > > > > +
> > > > >         /* eGalax devices (resistive) */
> > > > >         { .driver_data = MT_CLS_EGALAX,
> > > > >                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
> > > > > --
> > > > > Ondrej Zary
> > > > >
> > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Ondrej Zary
> > >
> >
> >
>
>
>
> --
> Ondrej Zary
>
diff mbox series

Patch

diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index e1afddb7b33d..099daf590392 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -1888,6 +1888,11 @@  static const struct hid_device_id mt_devices[] = {
 		MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
 			USB_DEVICE_ID_CVTOUCH_SCREEN) },
 
+	/* eGalax devices (SAW) */
+	{ .driver_data = MT_CLS_WIN_8,
+		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
+			USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER) },
+
 	/* eGalax devices (resistive) */
 	{ .driver_data = MT_CLS_EGALAX,
 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,