New issue
Advanced search Search tips

Issue 842885 link

Starred by 2 users

Issue metadata

Status: Untriaged
Owner: ----
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 3
Type: Feature

Blocked on:
issue 876128

Blocking:
issue 841979



Sign in to add a comment

Update xpad module for improved Xbox One gamepad support

Project Member Reported by mattreynolds@chromium.org, May 14 2018

Issue description

Older versions of the xpad input driver module lack support for several Xbox One gamepads. Current support is listed by kernel version for kernels used by ChromeOS devices:

3.8, 3.10, 3.14:
Genuine Xbox 360 controllers and some third-party devices are supported
No Xbox One support

3.18:
Genuine Xbox 360 controllers and some third-party devices are supported (+Razer Sabertooth, +Thrustmaster Ferrari 458 wheel)
Only the 1st-gen Xbox One controller with the original firmware is supported, without rumble

4.4:
Genuine Xbox 360 controllers and some third-party devices are supported (+Razer Atrox arcade stick)
Only the 1st-gen Xbox One controller is supported, rumble included, with or without the 2015 firmware update.

4.14:
Genuine Xbox 360 controllers are supported
Third-party support is expanded to cover dozens of new Xbox 360 and Xbox One devices
Better support for the Xbox 360 wireless dongle
All Xbox One controllers supported (+Xbox One Elite, +Xbox One S)



To provide consistent support for popular Xbox gamepads, we should update the xpad module on all ChromeOS devices to (at least) the version in the 4.14 kernel:

https://github.com/torvalds/linux/blob/bbc8608755da42e7494c00dce24a636007972def/drivers/input/joystick/xpad.c
 
Here are the specific kernel CLs that would need to be backported. It's everything that touches xpad.c from 3.8 to 4.14. When CLs touch other files, we only need the changes in xpad.c.

Input: xpad - fix for "Mad Catz Street Fighter IV FightPad" controllers
https://github.com/torvalds/linux/commit/be66227151c0cd4da536098c3ee07809101c6faa

Input: xpad - add signature for Razer Onza Classic Edition
https://github.com/torvalds/linux/commit/ed06349fe8d12dcb718984862b6e839fc8606c34

Input: xpad - change D-PAD mapping on Razer devices
https://github.com/torvalds/linux/commit/dbb48007a016f48f7fc19d8af753bae8b9c15816

Input: xpad - add new USB IDs for Logitech F310 and F710
https://github.com/torvalds/linux/commit/8e2f2325b73f3e5e46ecffd291556f33b8e3f8c9

Input: delete non-required instances of include <linux/init.h>
https://github.com/torvalds/linux/commit/bf9a9f8e5105b13cea954b254008f383ed0b4045

Merge branch 'next' into for-linus
https://github.com/torvalds/linux/commit/55df811f2066fcaec2548248f0a1a6a0c12dc6b8

Input: xpad - add support for Xbox One controllers
https://github.com/torvalds/linux/commit/1a48ff81b3912be5fadae3fafde6c2f632246a4c

Input: xpad - add VID/PID for Razer Sabertooth
https://github.com/torvalds/linux/commit/a7b447380c5c974c740437af82793e450f47304d

Input: xpad - sync device IDs with xboxdrv
https://github.com/torvalds/linux/commit/f554f619b7041e388d46395b1e30b151925a7797

Input: xpad - add USB ID for Thrustmaster Ferrari 458 Racing Wheel
https://github.com/torvalds/linux/commit/4b54625822eb7a4eae9c5b8c890b6c4dc001b895

Input: xpad - add Thrustmaster as Xbox 360 controller vendor
https://github.com/torvalds/linux/commit/4dfb15cd5aaa6682e93854a74b394a1c95b82621

Input: xpad - use proper endpoint type
https://github.com/torvalds/linux/commit/a1f9a4072655843fc03186acbad65990cc05dd2d

Input: initialize device counter variables with -1
https://github.com/torvalds/linux/commit/939ffb1712890ee22146d2dfc24adbc7da6afa84

Merge branch 'next' into for-linus
https://github.com/torvalds/linux/commit/f20c86cd75f1c8c728dafd0218645ff3c5e8545d

Input: xpad - add rumble support for Xbox One controller
https://github.com/torvalds/linux/commit/0604949ce3b9a59cff419daf706272620a9a0df0

Input: xpad - set the LEDs properly on XBox Wireless controllers
https://github.com/torvalds/linux/commit/75b7f05d2798ee3a1cc5bbdd54acd0e318a80396

Input: xpad - re-send LED command on present event
https://github.com/torvalds/linux/commit/cae705baa40b2c20de8f9bb79ef4bcc6b2418c7c

Input: xpad - add Covert Forces edition of the Xbox One controller
https://github.com/torvalds/linux/commit/39a7a88872df98f0c3c50fe278fd1a1f597afd95

Input: xpad - fix Razer Atrox Arcade Stick button mapping
https://github.com/torvalds/linux/commit/470446ecef213b17b2c01df9879102948d77f999

Input: xpad - clarify LED enumeration
https://github.com/torvalds/linux/commit/1f6f02b728eef0d937d5138ae60dbf8fbd045f3e

Input: xpad - use ida() for finding the pad_nr
https://github.com/torvalds/linux/commit/e3b651745a03810efffd7ebf2a9b5be65fb70ec3

Input: xpad - remove needless bulk out URB used for LED setup
https://github.com/torvalds/linux/commit/a306a65f46acb040d208523592a2d34f67d47a61

Input: xpad - factor out URB submission in xpad_play_effect
https://github.com/torvalds/linux/commit/060081529c64cfa9baa2748a4b949159e700da0d

Input: xpad - x360w: report dpad as buttons and axes
https://github.com/torvalds/linux/commit/5ee8bda943de20017636845a5c8d7069a4a283b8

Input: xpad - move the input device creation to a new function
https://github.com/torvalds/linux/commit/b8154002cbdfde1aed2f86bd27f5e2c7e832cabb

Input: xpad - query wireless controller state at init
https://github.com/torvalds/linux/commit/aba54876bb38dde81abead1ed1936eb04fa30ca9

Input: xpad - fix clash of presence handling with LED setting
https://github.com/torvalds/linux/commit/fbe6a3114471cccaeaeabfa56937731503ece545

Input: xpad - remove spurious events of wireless xpad 360 controller
https://github.com/torvalds/linux/commit/93a017aa2f77291752e637bfd83f2459dba714cb

Input: xpad - handle "present" and "gone" correctly
https://github.com/torvalds/linux/commit/09c8b00ae3e16c8d0fd4beb2ca064502a76c0f17

Input: xpad - correctly handle concurrent LED and FF requests
https://github.com/torvalds/linux/commit/7fc595f4c02636eadaeeecfe7bbc45b57c173004

Input: xpad - update Xbox One Force Feedback Support
https://github.com/torvalds/linux/commit/2a6d7527b35cf987260800807e328d167aef22ac

Input: xpad - workaround dead irq_out after suspend/ resume
https://github.com/torvalds/linux/commit/4220f7db1e424f2a086ad41217b5770cc9f003a9

Input: xpad - use LED API when identifying wireless controllers
https://github.com/torvalds/linux/commit/d9be398afb2c3333716324352d062c50112e4e86

Input: xpad - correct xbox one pad device name
https://github.com/torvalds/linux/commit/95162dc8493ed92e5f7dcc8874e58c2ba3836b43

Input: xpad - remove unused function
https://github.com/torvalds/linux/commit/a6ed4a18ba6a6f5a01e024b9d221d6439bf6ca4c

Input: xpad - add Mad Catz FightStick TE 2 VID/PID
https://github.com/torvalds/linux/commit/d63b0f0c0f19dc8687387ead5a28148dcad1a4b9

Input: xpad - move pending clear to the correct location
https://github.com/torvalds/linux/commit/4efc6939a83c54fb3417541be48991afd0290ba3

Input: xpad - prevent spurious input from wired Xbox 360 controllers
https://github.com/torvalds/linux/commit/1ff5fa3c6732f08e01ae12f12286d4728c9e4d86

Input: xpad - add more third-party controllers
https://github.com/torvalds/linux/commit/6538c3b2d2d220a974e47928b165ea09b9cfa6b4

Input: xpad - xbox one elite controller support
https://github.com/torvalds/linux/commit/6f49a398b266d4895bd7e041db77a2b2ee1482a6

Input: xpad - fix rumble on Xbox One controllers with 2015 firmware
https://github.com/torvalds/linux/commit/540c26087bfbad6ea72758b76b16ae6282a73fea

Input: xpad - fix oops when attaching an unknown Xbox One gamepad
https://github.com/torvalds/linux/commit/c7f1429389ec1aa25e042bb13451385fbb596f8c

Input: xpad - validate USB endpoint count during probe
https://github.com/torvalds/linux/commit/caca925fca4fb30c67be88cacbe908eec6721e43

Input: xpad - power off wireless 360 controllers on suspend
https://github.com/torvalds/linux/commit/f712a5a05228058f6b74635546549d4a46e117fc

Input: xpad - add product ID for Xbox One S pad
https://github.com/torvalds/linux/commit/599b8c09d974d6e4d85a8f7bc8ed7442977866a8

Input: xpad - use correct product id for x360w controllers
https://github.com/torvalds/linux/commit/b6fc513da50c5dbc457a8ad6b58b046a6a68fd9d

Input: xpad - correctly sort vendor id's
https://github.com/torvalds/linux/commit/c02fc1d9e5d9f093296e43e13ec7f35f140784bd

Input: xpad - move reporting xbox one home button to common function
https://github.com/torvalds/linux/commit/4f88476c75429ba9ab71c428b4cd2f67575bc9c1

Input: xpad - simplify error condition in init_output
https://github.com/torvalds/linux/commit/a8c34e27fb1ece928ec728bfe596aa6ca0b1928a

Input: xpad - don't depend on endpoint order
https://github.com/torvalds/linux/commit/c01b5e7464f0cf20936d7467c7528163c4e2782d

Merge tag 'v4.10-rc5' into next
https://github.com/torvalds/linux/commit/0cce284537fb42d9c28b9b31038ffc9b464555f5

Input: xpad - fix stuck mode button on Xbox One S pad
https://github.com/torvalds/linux/commit/57b8443d3e5bd046a519ff714ca31c64c7f04309

Input: xpad - restore LED state after device resume
https://github.com/torvalds/linux/commit/a1fbf5bbef025b4844162b3b8868888003a7ee9c

Input: xpad - add support for Razer Wildcat gamepad
https://github.com/torvalds/linux/commit/5376366886251e2f8f248704adb620a4bc4c0937

Input: xpad - support some quirky Xbox One pads
https://github.com/torvalds/linux/commit/81093c9848a781b85163d06de92ef8f84528cf6a

Merge branch 'next' into for-linus
https://github.com/torvalds/linux/commit/0337966d121ebebf73a1c346123e8112796e684e

Input: xpad - sort supported devices by USB ID
https://github.com/torvalds/linux/commit/873cb582738fde338ecaeaca594560cde2ba42c3

Input: xpad - sync supported devices with xboxdrv
https://github.com/torvalds/linux/commit/44bc722593201da43862b7200ee0b98155410b07

Input: xpad - add USB IDs for Mad Catz Brawlstick and Razer Sabertooth
https://github.com/torvalds/linux/commit/4706aa075662fe3cad29c3f49b50878de53f4f3b

Input: xpad - sync supported devices with 360Controller
https://github.com/torvalds/linux/commit/c225370e01b87d3c4ef40d98295ac0bb1e5a3116

Input: xpad - sync supported devices with XBCD
https://github.com/torvalds/linux/commit/be19788c73d382f66dd3fba3c5ccef59cf12a126

Input: xpad - fix PowerA init quirk for some gamepad models
https://github.com/torvalds/linux/commit/f5308d1b83eba20e69df5e0926ba7257c8dd9074

Input: xpad - constify usb_device_id
https://github.com/torvalds/linux/commit/94aef061c796d3d47f1a2eed41e651ffaaade402

Merge branch 'next' into for-linus
https://github.com/torvalds/linux/commit/a6cbfa1e6d38c4b3ab0ce7e3aea4bb4e744f24b8

Input: xpad - validate USB endpoint type during probe
https://github.com/torvalds/linux/commit/122d6a347329818419b032c5a1776e6b3866d9b9

Merge branch 'next' into for-linus
https://github.com/torvalds/linux/commit/bbc8608755da42e7494c00dce24a636007972def

Comment 2 by vapier@chromium.org, May 14 2018

Cc: vapier@chromium.org
it's pretty unlikely we'd backport all those changes to 3.8 or 3.10.  i'd focus on 4.4, 3.18, and *maybe* 3.14.
Thanks, Mike. I understand it's a lot of changes, but I think it's important to bring some consistency to ChromeOS's gamepad support.

Instead of backporting the changes to each supported kernel, could we dkms install a newer version of xpad alongside the kernel's version?

https://github.com/paroj/xpad/blob/master/README.md

Comment 4 by vapier@chromium.org, May 15 2018

that's even more unlikely ;)

i don't think we consider consistency in driver support across devices that important.  there's probably way more devices than the xbox one gamepad that doesn't work on linux-3.8 chromebooks compared to linux-4.14 chromebooks.
Blocking: 841979
Blockedon: 876128

Sign in to add a comment