On 3/23/23 18:30, Dmitry Torokhov wrote: > On Fri, Feb 24, 2023 at 05:21:46PM -0800, Vicki Pfau wrote: >> Some third-party controllers, such as the HORPIAD FPS for Nintendo Switch and >> Gamesir-G3w, require a specific packet that the first-party XInput driver sends >> before it will start sending reports. It's not currently known what this packet >> does, but since the first-party driver always sends it's unlikely that this >> could cause issues with existing controllers. >> >> Co-authored-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> >> Signed-off-by: Vicki Pfau <vi@xxxxxxxxxxx> >> --- >> drivers/input/joystick/xpad.c | 22 ++++++++++++++++++++++ >> 1 file changed, 22 insertions(+) >> >> diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c >> index 403b57e8176b..04af2213407f 100644 >> --- a/drivers/input/joystick/xpad.c >> +++ b/drivers/input/joystick/xpad.c >> @@ -265,6 +265,7 @@ static const struct xpad_device { >> { 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE }, >> { 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, >> { 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, >> + { 0x0f0d, 0x00dc, "HORIPAD FPS for Nintendo Switch", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, >> { 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX }, >> { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX }, >> { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX }, >> @@ -2020,6 +2021,27 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id >> goto err_free_in_urb; >> } >> >> + if (xpad->xtype == XTYPE_XBOX360) { >> + /* Some third-party controllers Xbox 360-style controllers >> + * require this message to finish initialization */ >> + uint8_t dummy[20]; >> + int ret; >> + >> + usb_control_msg_recv(udev, 0, >> + /* bRequest */ 0x01, >> + /* bmRequestType */ >> + USB_TYPE_VENDOR | USB_DIR_IN | >> + USB_RECIP_INTERFACE, >> + /* wValue */ 0x100, >> + /* wIndex */ 0x00, >> + dummy, sizeof(dummy), >> + 25, >> + GFP_KERNEL); >> + if (ret) >> + dev_warn(&xpad->dev->dev, >> + "unable to receive magic message: %d\n", ret); > > You are not setting "ret", how was this tested? Presumably with a stack frame that had that space unwittingly initialized to zero. Good catch, thanks. I've resubmitted with this fixed in v2. > >> + } >> + >> ep_irq_in = ep_irq_out = NULL; >> >> for (i = 0; i < 2; i++) { >> -- >> 2.39.2 >> >