* Missing axis on Gembird JPD-DUALFORCE2 since Linux 3.18
@ 2015-08-10 8:26 Orivej Desh
2015-08-10 14:27 ` Benjamin Tissoires
0 siblings, 1 reply; 6+ messages in thread
From: Orivej Desh @ 2015-08-10 8:26 UTC (permalink / raw)
To: linux-input
I have one of those gamepads, and since Linux 3.18 the kernel hides one
of its axes.
In Linux 3.17 jstest reports it as
Joystick (PC Game Controller ) has 7 axes (X, Y, Z, Rx, Rz, Hat0X, Hat0Y)
and in Linux 3.18 as
Joystick (PC Game Controller ) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
It has 6 physical axes (X, Y, Rx, Ry, Hat0X, Hat0Y), but Ry is reported
as Rz, and Z emits noise (which had to be silenced with jscal).
I bisected disappearing axis to the following commit [1], but if I
understand correctly, it is the device that is wrong by misreporting
some property of Rx.
I can remap Rz to Ry in userspace with ioctl(fd, JSIOCSAXMAP, ...),
though I never had to. Can I likewise restore Rx in userspace (and also
delete Z)? If not, or if this device justifies a quirk, how should it
be added?
usb-devices report: [2].
[1]
commit 79346d620e9de87912de73337f6df8b7f9a46888
Author: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Date: Mon Aug 25 13:07:10 2014 -0400
HID: input: force generic axis to be mapped to their user space axis
Atmel 840B digitizer presents a stylus interface which reports twice
the X coordinate and then twice the Y coordinate. In its current
implementation, hid-input assign the first X to X, then the second to Y,
then the first Y to Z, then the second one to RX.
This is wrong, and X should always be mapped to X, no matter what.
A solution consists in forcing X, Y, Z, RX, RY, RZ to be mapped to their
correct user space counter part.
Reported-by: Éric Brunet <Eric.Brunet@lps.ens.fr>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 2619f7f..2df7fdd 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -599,6 +599,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
/* These usage IDs map directly to the usage codes. */
case HID_GD_X: case HID_GD_Y: case HID_GD_Z:
case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ:
+ if (field->flags & HID_MAIN_ITEM_RELATIVE)
+ map_rel(usage->hid & 0xf);
+ else
+ map_abs_clear(usage->hid & 0xf);
+ break;
+
case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL:
if (field->flags & HID_MAIN_ITEM_RELATIVE)
map_rel(usage->hid & 0xf);
[2]
T: Bus=09 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=11ff ProdID=3331 Rev=01.07
S: Product=PC Game Controller
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
--
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 related [flat|nested] 6+ messages in thread
* Re: Missing axis on Gembird JPD-DUALFORCE2 since Linux 3.18
2015-08-10 8:26 Missing axis on Gembird JPD-DUALFORCE2 since Linux 3.18 Orivej Desh
@ 2015-08-10 14:27 ` Benjamin Tissoires
2015-08-10 21:36 ` Orivej Desh
0 siblings, 1 reply; 6+ messages in thread
From: Benjamin Tissoires @ 2015-08-10 14:27 UTC (permalink / raw)
To: Orivej Desh; +Cc: linux-input
Hi,
On Mon, Aug 10, 2015 at 4:26 AM, Orivej Desh <orivej@gmx.fr> wrote:
> I have one of those gamepads, and since Linux 3.18 the kernel hides one
> of its axes.
>
> In Linux 3.17 jstest reports it as
>
> Joystick (PC Game Controller ) has 7 axes (X, Y, Z, Rx, Rz, Hat0X, Hat0Y)
>
> and in Linux 3.18 as
>
> Joystick (PC Game Controller ) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
>
> It has 6 physical axes (X, Y, Rx, Ry, Hat0X, Hat0Y), but Ry is reported
> as Rz, and Z emits noise (which had to be silenced with jscal).
>
> I bisected disappearing axis to the following commit [1], but if I
> understand correctly, it is the device that is wrong by misreporting
> some property of Rx.
Thanks for the bisect. Could you please run a hid-recorder from
http://bentiss.github.io/hid-replay-docs/ and record a few events from
your joypad? Depending on the output, we will be able to tell you
where this should be fixed (but I strongly suspect that the kernel
should be fixed).
Cheers,
Benjamin
>
> I can remap Rz to Ry in userspace with ioctl(fd, JSIOCSAXMAP, ...),
> though I never had to. Can I likewise restore Rx in userspace (and also
> delete Z)? If not, or if this device justifies a quirk, how should it
> be added?
>
> usb-devices report: [2].
>
> [1]
> commit 79346d620e9de87912de73337f6df8b7f9a46888
> Author: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> Date: Mon Aug 25 13:07:10 2014 -0400
>
> HID: input: force generic axis to be mapped to their user space axis
>
> Atmel 840B digitizer presents a stylus interface which reports twice
> the X coordinate and then twice the Y coordinate. In its current
> implementation, hid-input assign the first X to X, then the second to Y,
> then the first Y to Z, then the second one to RX.
>
> This is wrong, and X should always be mapped to X, no matter what.
> A solution consists in forcing X, Y, Z, RX, RY, RZ to be mapped to their
> correct user space counter part.
>
> Reported-by: Éric Brunet <Eric.Brunet@lps.ens.fr>
> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
>
> diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
> index 2619f7f..2df7fdd 100644
> --- a/drivers/hid/hid-input.c
> +++ b/drivers/hid/hid-input.c
> @@ -599,6 +599,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
> /* These usage IDs map directly to the usage codes. */
> case HID_GD_X: case HID_GD_Y: case HID_GD_Z:
> case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ:
> + if (field->flags & HID_MAIN_ITEM_RELATIVE)
> + map_rel(usage->hid & 0xf);
> + else
> + map_abs_clear(usage->hid & 0xf);
> + break;
> +
> case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL:
> if (field->flags & HID_MAIN_ITEM_RELATIVE)
> map_rel(usage->hid & 0xf);
>
> [2]
> T: Bus=09 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
> D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
> P: Vendor=11ff ProdID=3331 Rev=01.07
> S: Product=PC Game Controller
> C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
> I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
>
>
> --
> 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
--
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] 6+ messages in thread
* Re: Missing axis on Gembird JPD-DUALFORCE2 since Linux 3.18
2015-08-10 14:27 ` Benjamin Tissoires
@ 2015-08-10 21:36 ` Orivej Desh
2015-08-10 21:53 ` Benjamin Tissoires
0 siblings, 1 reply; 6+ messages in thread
From: Orivej Desh @ 2015-08-10 21:36 UTC (permalink / raw)
To: Benjamin Tissoires; +Cc: linux-input
[-- Attachment #1: Type: text/plain, Size: 3785 bytes --]
* Benjamin Tissoires
> Thanks for the bisect. Could you please run a hid-recorder from
> http://bentiss.github.io/hid-replay-docs/ and record a few events from
> your joypad? Depending on the output, we will be able to tell you
> where this should be fixed (but I strongly suspect that the kernel
> should be fixed).
See attached idle.hid, with what appears to be noise on the Z axis when
the joypad is idle, and XYRxRy.hid with my approximation to the sequence
of physical X Y Rx Ry zero-negative-positive-zero swings.
> On Mon, Aug 10, 2015 at 4:26 AM, Orivej Desh <orivej@gmx.fr> wrote:
> > I have one of those gamepads, and since Linux 3.18 the kernel hides one
> > of its axes.
> >
> > In Linux 3.17 jstest reports it as
> >
> > Joystick (PC Game Controller ) has 7 axes (X, Y, Z, Rx, Rz, Hat0X, Hat0Y)
> >
> > and in Linux 3.18 as
> >
> > Joystick (PC Game Controller ) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
> >
> > It has 6 physical axes (X, Y, Rx, Ry, Hat0X, Hat0Y), but Ry is reported
> > as Rz, and Z emits noise (which had to be silenced with jscal).
> >
> > I bisected disappearing axis to the following commit [1], but if I
> > understand correctly, it is the device that is wrong by misreporting
> > some property of Rx.
> >
> > I can remap Rz to Ry in userspace with ioctl(fd, JSIOCSAXMAP, ...),
> > though I never had to. Can I likewise restore Rx in userspace (and also
> > delete Z)? If not, or if this device justifies a quirk, how should it
> > be added?
> >
> > usb-devices report: [2].
> >
> > [1]
> > commit 79346d620e9de87912de73337f6df8b7f9a46888
> > Author: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> > Date: Mon Aug 25 13:07:10 2014 -0400
> >
> > HID: input: force generic axis to be mapped to their user space axis
> >
> > Atmel 840B digitizer presents a stylus interface which reports twice
> > the X coordinate and then twice the Y coordinate. In its current
> > implementation, hid-input assign the first X to X, then the second to Y,
> > then the first Y to Z, then the second one to RX.
> >
> > This is wrong, and X should always be mapped to X, no matter what.
> > A solution consists in forcing X, Y, Z, RX, RY, RZ to be mapped to their
> > correct user space counter part.
> >
> > Reported-by: Éric Brunet <Eric.Brunet@lps.ens.fr>
> > Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> > Signed-off-by: Jiri Kosina <jkosina@suse.cz>
> >
> > diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
> > index 2619f7f..2df7fdd 100644
> > --- a/drivers/hid/hid-input.c
> > +++ b/drivers/hid/hid-input.c
> > @@ -599,6 +599,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
> > /* These usage IDs map directly to the usage codes. */
> > case HID_GD_X: case HID_GD_Y: case HID_GD_Z:
> > case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ:
> > + if (field->flags & HID_MAIN_ITEM_RELATIVE)
> > + map_rel(usage->hid & 0xf);
> > + else
> > + map_abs_clear(usage->hid & 0xf);
> > + break;
> > +
> > case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL:
> > if (field->flags & HID_MAIN_ITEM_RELATIVE)
> > map_rel(usage->hid & 0xf);
> >
> > [2]
> > T: Bus=09 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
> > D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
> > P: Vendor=11ff ProdID=3331 Rev=01.07
> > S: Product=PC Game Controller
> > C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
> > I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
[-- Attachment #2: XYRxRy.hid.gz --]
[-- Type: application/gzip, Size: 7895 bytes --]
[-- Attachment #3: idle.hid.gz --]
[-- Type: application/gzip, Size: 11268 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Missing axis on Gembird JPD-DUALFORCE2 since Linux 3.18
2015-08-10 21:36 ` Orivej Desh
@ 2015-08-10 21:53 ` Benjamin Tissoires
2015-08-10 22:28 ` Orivej Desh
0 siblings, 1 reply; 6+ messages in thread
From: Benjamin Tissoires @ 2015-08-10 21:53 UTC (permalink / raw)
To: Orivej Desh; +Cc: linux-input
On Mon, Aug 10, 2015 at 5:36 PM, Orivej Desh <orivej@gmx.fr> wrote:
> * Benjamin Tissoires
>> Thanks for the bisect. Could you please run a hid-recorder from
>> http://bentiss.github.io/hid-replay-docs/ and record a few events from
>> your joypad? Depending on the output, we will be able to tell you
>> where this should be fixed (but I strongly suspect that the kernel
>> should be fixed).
>
> See attached idle.hid, with what appears to be noise on the Z axis when
> the joypad is idle, and XYRxRy.hid with my approximation to the sequence
> of physical X Y Rx Ry zero-negative-positive-zero swings.
Thanks for the logs.
So, yes, it appears that your joypad as a weird report descriptor.
It declares 2 Z axis, no Ry and one Rz.
The first Z axis seems somewhat correlated to X, but does not seem to
add any actual value but noise.
If I understand correctly your problem, I can submit a patch which
will mute the Z axis, and provide proper Rx,Ry so you won't have to
deal with that in userspace.
Will this be OK with you?
Cheers,
Benjamin
>
>> On Mon, Aug 10, 2015 at 4:26 AM, Orivej Desh <orivej@gmx.fr> wrote:
>> > I have one of those gamepads, and since Linux 3.18 the kernel hides one
>> > of its axes.
>> >
>> > In Linux 3.17 jstest reports it as
>> >
>> > Joystick (PC Game Controller ) has 7 axes (X, Y, Z, Rx, Rz, Hat0X, Hat0Y)
>> >
>> > and in Linux 3.18 as
>> >
>> > Joystick (PC Game Controller ) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
>> >
>> > It has 6 physical axes (X, Y, Rx, Ry, Hat0X, Hat0Y), but Ry is reported
>> > as Rz, and Z emits noise (which had to be silenced with jscal).
>> >
>> > I bisected disappearing axis to the following commit [1], but if I
>> > understand correctly, it is the device that is wrong by misreporting
>> > some property of Rx.
>> >
>> > I can remap Rz to Ry in userspace with ioctl(fd, JSIOCSAXMAP, ...),
>> > though I never had to. Can I likewise restore Rx in userspace (and also
>> > delete Z)? If not, or if this device justifies a quirk, how should it
>> > be added?
>> >
>> > usb-devices report: [2].
>> >
>> > [1]
>> > commit 79346d620e9de87912de73337f6df8b7f9a46888
>> > Author: Benjamin Tissoires <benjamin.tissoires@redhat.com>
>> > Date: Mon Aug 25 13:07:10 2014 -0400
>> >
>> > HID: input: force generic axis to be mapped to their user space axis
>> >
>> > Atmel 840B digitizer presents a stylus interface which reports twice
>> > the X coordinate and then twice the Y coordinate. In its current
>> > implementation, hid-input assign the first X to X, then the second to Y,
>> > then the first Y to Z, then the second one to RX.
>> >
>> > This is wrong, and X should always be mapped to X, no matter what.
>> > A solution consists in forcing X, Y, Z, RX, RY, RZ to be mapped to their
>> > correct user space counter part.
>> >
>> > Reported-by: Éric Brunet <Eric.Brunet@lps.ens.fr>
>> > Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
>> > Signed-off-by: Jiri Kosina <jkosina@suse.cz>
>> >
>> > diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
>> > index 2619f7f..2df7fdd 100644
>> > --- a/drivers/hid/hid-input.c
>> > +++ b/drivers/hid/hid-input.c
>> > @@ -599,6 +599,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
>> > /* These usage IDs map directly to the usage codes. */
>> > case HID_GD_X: case HID_GD_Y: case HID_GD_Z:
>> > case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ:
>> > + if (field->flags & HID_MAIN_ITEM_RELATIVE)
>> > + map_rel(usage->hid & 0xf);
>> > + else
>> > + map_abs_clear(usage->hid & 0xf);
>> > + break;
>> > +
>> > case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL:
>> > if (field->flags & HID_MAIN_ITEM_RELATIVE)
>> > map_rel(usage->hid & 0xf);
>> >
>> > [2]
>> > T: Bus=09 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
>> > D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
>> > P: Vendor=11ff ProdID=3331 Rev=01.07
>> > S: Product=PC Game Controller
>> > C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
>> > I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
--
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] 6+ messages in thread
* Re: Missing axis on Gembird JPD-DUALFORCE2 since Linux 3.18
2015-08-10 21:53 ` Benjamin Tissoires
@ 2015-08-10 22:28 ` Orivej Desh
2015-08-11 15:35 ` Benjamin Tissoires
0 siblings, 1 reply; 6+ messages in thread
From: Orivej Desh @ 2015-08-10 22:28 UTC (permalink / raw)
To: Benjamin Tissoires; +Cc: linux-input
* Benjamin Tissoires
> Thanks for the logs.
>
> So, yes, it appears that your joypad as a weird report descriptor.
> It declares 2 Z axis, no Ry and one Rz.
>
> The first Z axis seems somewhat correlated to X, but does not seem to
> add any actual value but noise.
That's right.
> If I understand correctly your problem, I can submit a patch which
> will mute the Z axis, and provide proper Rx,Ry so you won't have to
> deal with that in userspace.
> Will this be OK with you?
I would appreciate it if you do this, and learn to do it myself! Yet I
think that Z axis is better removed than muted; it serves no purpose and
would only confuse other users of this device (if any) when tools
present them with 7 axes to configure.
> On Mon, Aug 10, 2015 at 5:36 PM, Orivej Desh <orivej@gmx.fr> wrote:
> > * Benjamin Tissoires
> >> Thanks for the bisect. Could you please run a hid-recorder from
> >> http://bentiss.github.io/hid-replay-docs/ and record a few events from
> >> your joypad? Depending on the output, we will be able to tell you
> >> where this should be fixed (but I strongly suspect that the kernel
> >> should be fixed).
> >
> > See attached idle.hid, with what appears to be noise on the Z axis when
> > the joypad is idle, and XYRxRy.hid with my approximation to the sequence
> > of physical X Y Rx Ry zero-negative-positive-zero swings.
>
> >> On Mon, Aug 10, 2015 at 4:26 AM, Orivej Desh <orivej@gmx.fr> wrote:
> >> > I have one of those gamepads, and since Linux 3.18 the kernel hides one
> >> > of its axes.
> >> >
> >> > In Linux 3.17 jstest reports it as
> >> >
> >> > Joystick (PC Game Controller ) has 7 axes (X, Y, Z, Rx, Rz, Hat0X, Hat0Y)
> >> >
> >> > and in Linux 3.18 as
> >> >
> >> > Joystick (PC Game Controller ) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
> >> >
> >> > It has 6 physical axes (X, Y, Rx, Ry, Hat0X, Hat0Y), but Ry is reported
> >> > as Rz, and Z emits noise (which had to be silenced with jscal).
> >> >
> >> > I bisected disappearing axis to the following commit [1], but if I
> >> > understand correctly, it is the device that is wrong by misreporting
> >> > some property of Rx.
> >> >
> >> > I can remap Rz to Ry in userspace with ioctl(fd, JSIOCSAXMAP, ...),
> >> > though I never had to. Can I likewise restore Rx in userspace (and also
> >> > delete Z)? If not, or if this device justifies a quirk, how should it
> >> > be added?
> >> >
> >> > usb-devices report: [2].
> >> >
> >> > [1]
> >> > commit 79346d620e9de87912de73337f6df8b7f9a46888
> >> > Author: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> >> > Date: Mon Aug 25 13:07:10 2014 -0400
> >> >
> >> > HID: input: force generic axis to be mapped to their user space axis
> >> >
> >> > Atmel 840B digitizer presents a stylus interface which reports twice
> >> > the X coordinate and then twice the Y coordinate. In its current
> >> > implementation, hid-input assign the first X to X, then the second to Y,
> >> > then the first Y to Z, then the second one to RX.
> >> >
> >> > This is wrong, and X should always be mapped to X, no matter what.
> >> > A solution consists in forcing X, Y, Z, RX, RY, RZ to be mapped to their
> >> > correct user space counter part.
> >> >
> >> > Reported-by: Éric Brunet <Eric.Brunet@lps.ens.fr>
> >> > Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> >> > Signed-off-by: Jiri Kosina <jkosina@suse.cz>
> >> >
> >> > diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
> >> > index 2619f7f..2df7fdd 100644
> >> > --- a/drivers/hid/hid-input.c
> >> > +++ b/drivers/hid/hid-input.c
> >> > @@ -599,6 +599,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
> >> > /* These usage IDs map directly to the usage codes. */
> >> > case HID_GD_X: case HID_GD_Y: case HID_GD_Z:
> >> > case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ:
> >> > + if (field->flags & HID_MAIN_ITEM_RELATIVE)
> >> > + map_rel(usage->hid & 0xf);
> >> > + else
> >> > + map_abs_clear(usage->hid & 0xf);
> >> > + break;
> >> > +
> >> > case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL:
> >> > if (field->flags & HID_MAIN_ITEM_RELATIVE)
> >> > map_rel(usage->hid & 0xf);
> >> >
> >> > [2]
> >> > T: Bus=09 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
> >> > D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
> >> > P: Vendor=11ff ProdID=3331 Rev=01.07
> >> > S: Product=PC Game Controller
> >> > C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
> >> > I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
--
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] 6+ messages in thread
* Re: Missing axis on Gembird JPD-DUALFORCE2 since Linux 3.18
2015-08-10 22:28 ` Orivej Desh
@ 2015-08-11 15:35 ` Benjamin Tissoires
0 siblings, 0 replies; 6+ messages in thread
From: Benjamin Tissoires @ 2015-08-11 15:35 UTC (permalink / raw)
To: Orivej Desh; +Cc: linux-input
On Mon, Aug 10, 2015 at 6:28 PM, Orivej Desh <orivej@gmx.fr> wrote:
> * Benjamin Tissoires
>> Thanks for the logs.
>>
>> So, yes, it appears that your joypad as a weird report descriptor.
>> It declares 2 Z axis, no Ry and one Rz.
>>
>> The first Z axis seems somewhat correlated to X, but does not seem to
>> add any actual value but noise.
>
> That's right.
>
>> If I understand correctly your problem, I can submit a patch which
>> will mute the Z axis, and provide proper Rx,Ry so you won't have to
>> deal with that in userspace.
>> Will this be OK with you?
>
> I would appreciate it if you do this, and learn to do it myself! Yet I
OK. And sorry, I started ahead yesterday before your answer, so this
morning I already had a half-backed patch waiting for tests.
> think that Z axis is better removed than muted; it serves no purpose and
> would only confuse other users of this device (if any) when tools
> present them with 7 axes to configure.
OK. This step made the patch slightly more complicated, so in the end,
I believe I (or you if you want) might need to use a different
solution to fix this. Anyway, I'll send the patch in a few minutes. I
tested it on your logs, and they seem to behave properly now. However,
tests with real hardware are much appreciated. I can help you if you
need to set up the test kernel that you will have to rebuild (and I
can do that in French too - basing this on the @gmx.fr).
Cheers,
Benjamin
>
>> On Mon, Aug 10, 2015 at 5:36 PM, Orivej Desh <orivej@gmx.fr> wrote:
>> > * Benjamin Tissoires
>> >> Thanks for the bisect. Could you please run a hid-recorder from
>> >> http://bentiss.github.io/hid-replay-docs/ and record a few events from
>> >> your joypad? Depending on the output, we will be able to tell you
>> >> where this should be fixed (but I strongly suspect that the kernel
>> >> should be fixed).
>> >
>> > See attached idle.hid, with what appears to be noise on the Z axis when
>> > the joypad is idle, and XYRxRy.hid with my approximation to the sequence
>> > of physical X Y Rx Ry zero-negative-positive-zero swings.
>>
>> >> On Mon, Aug 10, 2015 at 4:26 AM, Orivej Desh <orivej@gmx.fr> wrote:
>> >> > I have one of those gamepads, and since Linux 3.18 the kernel hides one
>> >> > of its axes.
>> >> >
>> >> > In Linux 3.17 jstest reports it as
>> >> >
>> >> > Joystick (PC Game Controller ) has 7 axes (X, Y, Z, Rx, Rz, Hat0X, Hat0Y)
>> >> >
>> >> > and in Linux 3.18 as
>> >> >
>> >> > Joystick (PC Game Controller ) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
>> >> >
>> >> > It has 6 physical axes (X, Y, Rx, Ry, Hat0X, Hat0Y), but Ry is reported
>> >> > as Rz, and Z emits noise (which had to be silenced with jscal).
>> >> >
>> >> > I bisected disappearing axis to the following commit [1], but if I
>> >> > understand correctly, it is the device that is wrong by misreporting
>> >> > some property of Rx.
>> >> >
>> >> > I can remap Rz to Ry in userspace with ioctl(fd, JSIOCSAXMAP, ...),
>> >> > though I never had to. Can I likewise restore Rx in userspace (and also
>> >> > delete Z)? If not, or if this device justifies a quirk, how should it
>> >> > be added?
>> >> >
>> >> > usb-devices report: [2].
>> >> >
>> >> > [1]
>> >> > commit 79346d620e9de87912de73337f6df8b7f9a46888
>> >> > Author: Benjamin Tissoires <benjamin.tissoires@redhat.com>
>> >> > Date: Mon Aug 25 13:07:10 2014 -0400
>> >> >
>> >> > HID: input: force generic axis to be mapped to their user space axis
>> >> >
>> >> > Atmel 840B digitizer presents a stylus interface which reports twice
>> >> > the X coordinate and then twice the Y coordinate. In its current
>> >> > implementation, hid-input assign the first X to X, then the second to Y,
>> >> > then the first Y to Z, then the second one to RX.
>> >> >
>> >> > This is wrong, and X should always be mapped to X, no matter what.
>> >> > A solution consists in forcing X, Y, Z, RX, RY, RZ to be mapped to their
>> >> > correct user space counter part.
>> >> >
>> >> > Reported-by: Éric Brunet <Eric.Brunet@lps.ens.fr>
>> >> > Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
>> >> > Signed-off-by: Jiri Kosina <jkosina@suse.cz>
>> >> >
>> >> > diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
>> >> > index 2619f7f..2df7fdd 100644
>> >> > --- a/drivers/hid/hid-input.c
>> >> > +++ b/drivers/hid/hid-input.c
>> >> > @@ -599,6 +599,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
>> >> > /* These usage IDs map directly to the usage codes. */
>> >> > case HID_GD_X: case HID_GD_Y: case HID_GD_Z:
>> >> > case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ:
>> >> > + if (field->flags & HID_MAIN_ITEM_RELATIVE)
>> >> > + map_rel(usage->hid & 0xf);
>> >> > + else
>> >> > + map_abs_clear(usage->hid & 0xf);
>> >> > + break;
>> >> > +
>> >> > case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL:
>> >> > if (field->flags & HID_MAIN_ITEM_RELATIVE)
>> >> > map_rel(usage->hid & 0xf);
>> >> >
>> >> > [2]
>> >> > T: Bus=09 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
>> >> > D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
>> >> > P: Vendor=11ff ProdID=3331 Rev=01.07
>> >> > S: Product=PC Game Controller
>> >> > C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
>> >> > I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
--
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] 6+ messages in thread
end of thread, other threads:[~2015-08-11 15:35 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-10 8:26 Missing axis on Gembird JPD-DUALFORCE2 since Linux 3.18 Orivej Desh
2015-08-10 14:27 ` Benjamin Tissoires
2015-08-10 21:36 ` Orivej Desh
2015-08-10 21:53 ` Benjamin Tissoires
2015-08-10 22:28 ` Orivej Desh
2015-08-11 15:35 ` Benjamin Tissoires
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox