On Mon, Aug 10, 2015 at 6:28 PM, Orivej Desh <orivej@xxxxxx> 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@xxxxxx> 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@xxxxxx> 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@xxxxxxxxxx> >> >> > 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@xxxxxxxxxx> >> >> > Signed-off-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx> >> >> > Signed-off-by: Jiri Kosina <jkosina@xxxxxxx> >> >> > >> >> > 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html