On Thu, Dec 6, 2018 at 8:07 PM Nic Soudée <nsoudee@xxxxxxxxx> wrote: > > On Thu, Dec 06, 2018 at 07:09:06PM +0100, Benjamin Tissoires wrote: > > On Thu, Dec 6, 2018 at 5:59 PM Nic Soudée <nsoudee@xxxxxxxxx> wrote: > > > > > > SNES RetroPort and RetroPad register only 4 gamepad buttons > > > when they should register all 8 buttons. This is described here: > > > > > > https://ask.fedoraproject.org/en/question/128102 > > > > > > This is happening because of: > > > > > > Commit 190d7f02ce8e ("HID: input: do not increment usages when > > > duplicate is found") > > > > > > Here, I add the quirk HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE > > > (created for backward compatibility with the change in 190d7f02ce8e) > > > for the two products. > > > > > > Tested with both RetroPort and RetroPad. > > > > Hi Nic, > > > > Thanks for the patch. It looks good but I might need a couple of days > > before I am able to apply it. > > > > While I try to put my system back on its feet, can you provide me the > > hid-recorder[1] outputs of these 2 devices? > > > > I just want to be sure that there is not something I overlooked in the > > mentioned patch and that a generic solution should not be used. > > > > Cheers, > > Benjamin > > > > [1] http://bentiss.github.io/hid-replay-docs/ > > > > Hi Benjamin, > > Here are the outputs from hid-recorder: > > RetroPad: > > D: 0 > R: 74 05 01 09 05 a1 01 09 01 a1 00 09 30 09 31 15 00 26 ff 00 35 00 46 ff 00 75 08 95 02 81 02 c0 05 09 19 01 29 04 15 00 25 01 75 01 95 04 81 02 75 01 95 04 81 03 19 01 29 04 15 00 25 01 75 01 95 04 81 02 75 01 95 04 81 03 c0 > N: RetroUSB.com RetroPad > P: usb-0000:00:1d.0-1.1/input0 > I: 3 f000 0003 > > RetroPort: > > D: 0 > R: 74 05 01 09 05 a1 01 09 01 a1 00 09 30 09 31 15 00 26 ff 00 35 00 46 ff 00 75 08 95 02 81 02 c0 05 09 19 01 29 04 15 00 25 01 75 01 95 04 81 02 75 01 95 04 81 03 19 01 29 04 15 00 25 01 75 01 95 04 81 02 75 01 95 04 81 03 c0 > N: RetroUSB.com SNES RetroPort > P: usb-0000:00:1d.0-1.4.1/input0 > I: 3 f000 00f1 > Thanks. So for the record, this is indeed a situation where we need the quirk. The report descriptors looks like: 0x05, 0x01, // Usage Page (Generic Desktop) 0 0x09, 0x05, // Usage (Game Pad) 2 0xa1, 0x01, // Collection (Application) 4 0x09, 0x01, // Usage (Pointer) 6 0xa1, 0x00, // Collection (Physical) 8 0x09, 0x30, // Usage (X) 10 0x09, 0x31, // Usage (Y) 12 0x15, 0x00, // Logical Minimum (0) 14 0x26, 0xff, 0x00, // Logical Maximum (255) 16 0x35, 0x00, // Physical Minimum (0) 19 0x46, 0xff, 0x00, // Physical Maximum (255) 21 0x75, 0x08, // Report Size (8) 24 0x95, 0x02, // Report Count (2) 26 0x81, 0x02, // Input (Data,Var,Abs) 28 0xc0, // End Collection 30 0x05, 0x09, // Usage Page (Button) 31 0x19, 0x01, // Usage Minimum (1) 33 0x29, 0x04, // Usage Maximum (4) 35 0x15, 0x00, // Logical Minimum (0) 37 0x25, 0x01, // Logical Maximum (1) 39 0x75, 0x01, // Report Size (1) 41 0x95, 0x04, // Report Count (4) 43 0x81, 0x02, // Input (Data,Var,Abs) 45 0x75, 0x01, // Report Size (1) 47 0x95, 0x04, // Report Count (4) 49 0x81, 0x03, // Input (Cnst,Var,Abs) 51 0x19, 0x01, // Usage Minimum (1) 53 0x29, 0x04, // Usage Maximum (4) 55 0x15, 0x00, // Logical Minimum (0) 57 0x25, 0x01, // Logical Maximum (1) 59 0x75, 0x01, // Report Size (1) 61 0x95, 0x04, // Report Count (4) 63 0x81, 0x02, // Input (Data,Var,Abs) 65 0x75, 0x01, // Report Size (1) 67 0x95, 0x04, // Report Count (4) 69 0x81, 0x03, // Input (Cnst,Var,Abs) 71 0xc0, // End Collection 73 And the buttons are in the same collection, and both series are reusing the same usage min/max. I'll schedule the patch for 4.20 and Cc stable as soon as I finished some sanity testing. Cheers, Benjamin > Thanks, > Nic > > > > > > > Signed-off-by: Nic Soudée <nsoudee@xxxxxxxxx> > > > --- > > > drivers/hid/hid-ids.h | 4 ++++ > > > drivers/hid/hid-quirks.c | 2 ++ > > > 2 files changed, 6 insertions(+) > > > > > > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h > > > index f63489c882bb..ba2f97fd54e5 100644 > > > --- a/drivers/hid/hid-ids.h > > > +++ b/drivers/hid/hid-ids.h > > > @@ -933,6 +933,10 @@ > > > #define USB_VENDOR_ID_REALTEK 0x0bda > > > #define USB_DEVICE_ID_REALTEK_READER 0x0152 > > > > > > +#define USB_VENDOR_ID_RETROUSB 0xf000 > > > +#define USB_DEVICE_ID_RETROUSB_SNES_RETROPAD 0x0003 > > > +#define USB_DEVICE_ID_RETROUSB_SNES_RETROPORT 0x00f1 > > > + > > > #define USB_VENDOR_ID_ROCCAT 0x1e7d > > > #define USB_DEVICE_ID_ROCCAT_ARVO 0x30d4 > > > #define USB_DEVICE_ID_ROCCAT_ISKU 0x319c > > > diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c > > > index 52c3b01917e7..a38f3e08efed 100644 > > > --- a/drivers/hid/hid-quirks.c > > > +++ b/drivers/hid/hid-quirks.c > > > @@ -135,6 +135,8 @@ static const struct hid_device_id hid_quirks[] = { > > > { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3003), HID_QUIRK_NOGET }, > > > { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008), HID_QUIRK_NOGET }, > > > { HID_USB_DEVICE(USB_VENDOR_ID_REALTEK, USB_DEVICE_ID_REALTEK_READER), HID_QUIRK_NO_INIT_REPORTS }, > > > + { HID_USB_DEVICE(USB_VENDOR_ID_RETROUSB, USB_DEVICE_ID_RETROUSB_SNES_RETROPAD), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, > > > + { HID_USB_DEVICE(USB_VENDOR_ID_RETROUSB, USB_DEVICE_ID_RETROUSB_SNES_RETROPORT), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, > > > { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD), HID_QUIRK_BADPAD }, > > > { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD2), HID_QUIRK_NO_INIT_REPORTS }, > > > { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD), HID_QUIRK_NO_INIT_REPORTS }, > > > -- > > > 2.19.2 > > > > > >