forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
…/git/dtor/input Pull more input subsystem updates from Dmitry Torokhov: "Just a few more driver fixes; new drivers will be coming in the next merge window" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: pwm-beeper - fix - scheduling while atomic Input: xpad - xbox one elite controller support Input: xpad - add more third-party controllers Input: xpad - prevent spurious input from wired Xbox 360 controllers Input: xpad - move pending clear to the correct location Input: uinput - handle compat ioctl for UI_SET_PHYS
- Loading branch information
Showing
3 changed files
with
70 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -87,7 +87,7 @@ | |
#define DRIVER_AUTHOR "Marko Friedemann <[email protected]>" | ||
#define DRIVER_DESC "X-Box pad driver" | ||
|
||
#define XPAD_PKT_LEN 32 | ||
#define XPAD_PKT_LEN 64 | ||
|
||
/* xbox d-pads should map to buttons, as is required for DDR pads | ||
but we map them to axes when possible to simplify things */ | ||
|
@@ -129,6 +129,7 @@ static const struct xpad_device { | |
{ 0x045e, 0x028e, "Microsoft X-Box 360 pad", 0, XTYPE_XBOX360 }, | ||
{ 0x045e, 0x02d1, "Microsoft X-Box One pad", 0, XTYPE_XBOXONE }, | ||
{ 0x045e, 0x02dd, "Microsoft X-Box One pad (Firmware 2015)", 0, XTYPE_XBOXONE }, | ||
{ 0x045e, 0x02e3, "Microsoft X-Box One Elite pad", 0, XTYPE_XBOXONE }, | ||
{ 0x045e, 0x0291, "Xbox 360 Wireless Receiver (XBOX)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W }, | ||
{ 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W }, | ||
{ 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX }, | ||
|
@@ -173,16 +174,19 @@ static const struct xpad_device { | |
{ 0x0e6f, 0x0006, "Edge wireless Controller", 0, XTYPE_XBOX }, | ||
{ 0x0e6f, 0x0105, "HSM3 Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, | ||
{ 0x0e6f, 0x0113, "Afterglow AX.1 Gamepad for Xbox 360", 0, XTYPE_XBOX360 }, | ||
{ 0x0e6f, 0x0139, "Afterglow Prismatic Wired Controller", 0, XTYPE_XBOXONE }, | ||
{ 0x0e6f, 0x0201, "Pelican PL-3601 'TSZ' Wired Xbox 360 Controller", 0, XTYPE_XBOX360 }, | ||
{ 0x0e6f, 0x0213, "Afterglow Gamepad for Xbox 360", 0, XTYPE_XBOX360 }, | ||
{ 0x0e6f, 0x021f, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 }, | ||
{ 0x0e6f, 0x0146, "Rock Candy Wired Controller for Xbox One", 0, XTYPE_XBOXONE }, | ||
{ 0x0e6f, 0x0301, "Logic3 Controller", 0, XTYPE_XBOX360 }, | ||
{ 0x0e6f, 0x0401, "Logic3 Controller", 0, XTYPE_XBOX360 }, | ||
{ 0x0e8f, 0x0201, "SmartJoy Frag Xpad/PS2 adaptor", 0, XTYPE_XBOX }, | ||
{ 0x0e8f, 0x3008, "Generic xbox control (dealextreme)", 0, XTYPE_XBOX }, | ||
{ 0x0f0d, 0x000a, "Hori Co. DOA4 FightStick", 0, XTYPE_XBOX360 }, | ||
{ 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, | ||
{ 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, | ||
{ 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE }, | ||
{ 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX }, | ||
{ 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX }, | ||
{ 0x102c, 0xff0c, "Joytech Wireless Advanced Controller", 0, XTYPE_XBOX }, | ||
|
@@ -199,6 +203,7 @@ static const struct xpad_device { | |
{ 0x162e, 0xbeef, "Joytech Neo-Se Take2", 0, XTYPE_XBOX360 }, | ||
{ 0x1689, 0xfd00, "Razer Onza Tournament Edition", 0, XTYPE_XBOX360 }, | ||
{ 0x1689, 0xfd01, "Razer Onza Classic Edition", 0, XTYPE_XBOX360 }, | ||
{ 0x24c6, 0x542a, "Xbox ONE spectra", 0, XTYPE_XBOXONE }, | ||
{ 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 }, | ||
{ 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 }, | ||
{ 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, | ||
|
@@ -212,6 +217,8 @@ static const struct xpad_device { | |
{ 0x24c6, 0x5000, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, | ||
{ 0x24c6, 0x5300, "PowerA MINI PROEX Controller", 0, XTYPE_XBOX360 }, | ||
{ 0x24c6, 0x5303, "Xbox Airflo wired controller", 0, XTYPE_XBOX360 }, | ||
{ 0x24c6, 0x541a, "PowerA Xbox One Mini Wired Controller", 0, XTYPE_XBOXONE }, | ||
{ 0x24c6, 0x543a, "PowerA Xbox One wired controller", 0, XTYPE_XBOXONE }, | ||
{ 0x24c6, 0x5500, "Hori XBOX 360 EX 2 with Turbo", 0, XTYPE_XBOX360 }, | ||
{ 0x24c6, 0x5501, "Hori Real Arcade Pro VX-SA", 0, XTYPE_XBOX360 }, | ||
{ 0x24c6, 0x5506, "Hori SOULCALIBUR V Stick", 0, XTYPE_XBOX360 }, | ||
|
@@ -307,13 +314,16 @@ static struct usb_device_id xpad_table[] = { | |
{ USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */ | ||
XPAD_XBOXONE_VENDOR(0x0738), /* Mad Catz FightStick TE 2 */ | ||
XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */ | ||
XPAD_XBOXONE_VENDOR(0x0e6f), /* 0x0e6f X-Box One controllers */ | ||
XPAD_XBOX360_VENDOR(0x12ab), /* X-Box 360 dance pads */ | ||
XPAD_XBOX360_VENDOR(0x1430), /* RedOctane X-Box 360 controllers */ | ||
XPAD_XBOX360_VENDOR(0x146b), /* BigBen Interactive Controllers */ | ||
XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */ | ||
XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */ | ||
XPAD_XBOXONE_VENDOR(0x0f0d), /* Hori Controllers */ | ||
XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */ | ||
XPAD_XBOX360_VENDOR(0x24c6), /* PowerA Controllers */ | ||
XPAD_XBOXONE_VENDOR(0x24c6), /* PowerA Controllers */ | ||
XPAD_XBOX360_VENDOR(0x1532), /* Razer Sabertooth */ | ||
XPAD_XBOX360_VENDOR(0x15e4), /* Numark X-Box 360 controllers */ | ||
XPAD_XBOX360_VENDOR(0x162e), /* Joytech X-Box 360 controllers */ | ||
|
@@ -457,6 +467,10 @@ static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *d | |
static void xpad360_process_packet(struct usb_xpad *xpad, struct input_dev *dev, | ||
u16 cmd, unsigned char *data) | ||
{ | ||
/* valid pad data */ | ||
if (data[0] != 0x00) | ||
return; | ||
|
||
/* digital pad */ | ||
if (xpad->mapping & MAP_DPAD_TO_BUTTONS) { | ||
/* dpad as buttons (left, right, up, down) */ | ||
|
@@ -756,6 +770,7 @@ static bool xpad_prepare_next_out_packet(struct usb_xpad *xpad) | |
if (packet) { | ||
memcpy(xpad->odata, packet->data, packet->len); | ||
xpad->irq_out->transfer_buffer_length = packet->len; | ||
packet->pending = false; | ||
return true; | ||
} | ||
|
||
|
@@ -797,7 +812,6 @@ static void xpad_irq_out(struct urb *urb) | |
switch (status) { | ||
case 0: | ||
/* success */ | ||
xpad->out_packets[xpad->last_out_packet].pending = false; | ||
xpad->irq_out_active = xpad_prepare_next_out_packet(xpad); | ||
break; | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters