Input: xpad - fix support for some third-party controllers
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@gmail.com> Signed-off-by: Vicki Pfau <vi@endrift.com> Link: https://lore.kernel.org/r/20230324040446.3487725-3-vi@endrift.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
Родитель
8fb1bcd0ba
Коммит
db7220c48d
|
@ -264,6 +264,7 @@ static const struct xpad_device {
|
||||||
{ 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE },
|
{ 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE },
|
||||||
{ 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, 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, 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, 0x010b, "Philips Recoil", 0, XTYPE_XBOX },
|
||||||
{ 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
|
{ 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
|
||||||
{ 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
|
{ 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
|
||||||
|
@ -2013,6 +2014,28 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
|
||||||
goto err_free_in_urb;
|
goto err_free_in_urb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (xpad->xtype == XTYPE_XBOX360) {
|
||||||
|
/*
|
||||||
|
* Some third-party controllers Xbox 360-style controllers
|
||||||
|
* require this message to finish initialization.
|
||||||
|
*/
|
||||||
|
u8 dummy[20];
|
||||||
|
|
||||||
|
error = 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 (error)
|
||||||
|
dev_warn(&xpad->dev->dev,
|
||||||
|
"unable to receive magic message: %d\n",
|
||||||
|
error);
|
||||||
|
}
|
||||||
|
|
||||||
ep_irq_in = ep_irq_out = NULL;
|
ep_irq_in = ep_irq_out = NULL;
|
||||||
|
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче