* 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
Attachment:
XYRxRy.hid.gz
Description: application/gzip
Attachment:
idle.hid.gz
Description: application/gzip