GNU Linux-libre 4.4.288-gnu1
[releases.git] / drivers / input / joystick / xpad.c
1 /*
2  * X-Box gamepad driver
3  *
4  * Copyright (c) 2002 Marko Friedemann <mfr@bmx-chemnitz.de>
5  *               2004 Oliver Schwartz <Oliver.Schwartz@gmx.de>,
6  *                    Steven Toth <steve@toth.demon.co.uk>,
7  *                    Franz Lehner <franz@caos.at>,
8  *                    Ivan Hawkes <blackhawk@ivanhawkes.com>
9  *               2005 Dominic Cerquetti <binary1230@yahoo.com>
10  *               2006 Adam Buchbinder <adam.buchbinder@gmail.com>
11  *               2007 Jan Kratochvil <honza@jikos.cz>
12  *               2010 Christoph Fritz <chf.fritz@googlemail.com>
13  *
14  * This program is free software; you can redistribute it and/or
15  * modify it under the terms of the GNU General Public License as
16  * published by the Free Software Foundation; either version 2 of
17  * the License, or (at your option) any later version.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with this program; if not, write to the Free Software
26  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27  *
28  *
29  * This driver is based on:
30  *  - information from     http://euc.jp/periphs/xbox-controller.ja.html
31  *  - the iForce driver    drivers/char/joystick/iforce.c
32  *  - the skeleton-driver  drivers/usb/usb-skeleton.c
33  *  - Xbox 360 information http://www.free60.org/wiki/Gamepad
34  *  - Xbox One information https://github.com/quantus/xbox-one-controller-protocol
35  *
36  * Thanks to:
37  *  - ITO Takayuki for providing essential xpad information on his website
38  *  - Vojtech Pavlik     - iforce driver / input subsystem
39  *  - Greg Kroah-Hartman - usb-skeleton driver
40  *  - XBOX Linux project - extra USB id's
41  *  - Pekka Pöyry (quantus) - Xbox One controller reverse engineering
42  *
43  * TODO:
44  *  - fine tune axes (especially trigger axes)
45  *  - fix "analog" buttons (reported as digital now)
46  *  - get rumble working
47  *  - need USB IDs for other dance pads
48  *
49  * History:
50  *
51  * 2002-06-27 - 0.0.1 : first version, just said "XBOX HID controller"
52  *
53  * 2002-07-02 - 0.0.2 : basic working version
54  *  - all axes and 9 of the 10 buttons work (german InterAct device)
55  *  - the black button does not work
56  *
57  * 2002-07-14 - 0.0.3 : rework by Vojtech Pavlik
58  *  - indentation fixes
59  *  - usb + input init sequence fixes
60  *
61  * 2002-07-16 - 0.0.4 : minor changes, merge with Vojtech's v0.0.3
62  *  - verified the lack of HID and report descriptors
63  *  - verified that ALL buttons WORK
64  *  - fixed d-pad to axes mapping
65  *
66  * 2002-07-17 - 0.0.5 : simplified d-pad handling
67  *
68  * 2004-10-02 - 0.0.6 : DDR pad support
69  *  - borrowed from the XBOX linux kernel
70  *  - USB id's for commonly used dance pads are present
71  *  - dance pads will map D-PAD to buttons, not axes
72  *  - pass the module paramater 'dpad_to_buttons' to force
73  *    the D-PAD to map to buttons if your pad is not detected
74  *
75  * Later changes can be tracked in SCM.
76  */
77
78 #include <linux/kernel.h>
79 #include <linux/input.h>
80 #include <linux/rcupdate.h>
81 #include <linux/slab.h>
82 #include <linux/stat.h>
83 #include <linux/module.h>
84 #include <linux/usb/input.h>
85 #include <linux/usb/quirks.h>
86
87 #define DRIVER_AUTHOR "Marko Friedemann <mfr@bmx-chemnitz.de>"
88 #define DRIVER_DESC "X-Box pad driver"
89
90 #define XPAD_PKT_LEN 64
91
92 /*
93  * xbox d-pads should map to buttons, as is required for DDR pads
94  * but we map them to axes when possible to simplify things
95  */
96 #define MAP_DPAD_TO_BUTTONS             (1 << 0)
97 #define MAP_TRIGGERS_TO_BUTTONS         (1 << 1)
98 #define MAP_STICKS_TO_NULL              (1 << 2)
99 #define DANCEPAD_MAP_CONFIG     (MAP_DPAD_TO_BUTTONS |                  \
100                                 MAP_TRIGGERS_TO_BUTTONS | MAP_STICKS_TO_NULL)
101
102 #define XTYPE_XBOX        0
103 #define XTYPE_XBOX360     1
104 #define XTYPE_XBOX360W    2
105 #define XTYPE_XBOXONE     3
106 #define XTYPE_UNKNOWN     4
107
108 static bool dpad_to_buttons;
109 module_param(dpad_to_buttons, bool, S_IRUGO);
110 MODULE_PARM_DESC(dpad_to_buttons, "Map D-PAD to buttons rather than axes for unknown pads");
111
112 static bool triggers_to_buttons;
113 module_param(triggers_to_buttons, bool, S_IRUGO);
114 MODULE_PARM_DESC(triggers_to_buttons, "Map triggers to buttons rather than axes for unknown pads");
115
116 static bool sticks_to_null;
117 module_param(sticks_to_null, bool, S_IRUGO);
118 MODULE_PARM_DESC(sticks_to_null, "Do not map sticks at all for unknown pads");
119
120 static bool auto_poweroff = true;
121 module_param(auto_poweroff, bool, S_IWUSR | S_IRUGO);
122 MODULE_PARM_DESC(auto_poweroff, "Power off wireless controllers on suspend");
123
124 static const struct xpad_device {
125         u16 idVendor;
126         u16 idProduct;
127         char *name;
128         u8 mapping;
129         u8 xtype;
130 } xpad_device[] = {
131         { 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 },
132         { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },
133         { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },
134         { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
135         { 0x044f, 0x0f10, "Thrustmaster Modena GT Wheel", 0, XTYPE_XBOX },
136         { 0x044f, 0xb326, "Thrustmaster Gamepad GP XID", 0, XTYPE_XBOX360 },
137         { 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", 0, XTYPE_XBOX },
138         { 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", 0, XTYPE_XBOX },
139         { 0x045e, 0x0287, "Microsoft Xbox Controller S", 0, XTYPE_XBOX },
140         { 0x045e, 0x0288, "Microsoft Xbox Controller S v2", 0, XTYPE_XBOX },
141         { 0x045e, 0x0289, "Microsoft X-Box pad v2 (US)", 0, XTYPE_XBOX },
142         { 0x045e, 0x028e, "Microsoft X-Box 360 pad", 0, XTYPE_XBOX360 },
143         { 0x045e, 0x028f, "Microsoft X-Box 360 pad v2", 0, XTYPE_XBOX360 },
144         { 0x045e, 0x0291, "Xbox 360 Wireless Receiver (XBOX)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
145         { 0x045e, 0x02d1, "Microsoft X-Box One pad", 0, XTYPE_XBOXONE },
146         { 0x045e, 0x02dd, "Microsoft X-Box One pad (Firmware 2015)", 0, XTYPE_XBOXONE },
147         { 0x045e, 0x02e3, "Microsoft X-Box One Elite pad", 0, XTYPE_XBOXONE },
148         { 0x045e, 0x02ea, "Microsoft X-Box One S pad", 0, XTYPE_XBOXONE },
149         { 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
150         { 0x046d, 0xc21d, "Logitech Gamepad F310", 0, XTYPE_XBOX360 },
151         { 0x046d, 0xc21e, "Logitech Gamepad F510", 0, XTYPE_XBOX360 },
152         { 0x046d, 0xc21f, "Logitech Gamepad F710", 0, XTYPE_XBOX360 },
153         { 0x046d, 0xc242, "Logitech Chillstream Controller", 0, XTYPE_XBOX360 },
154         { 0x046d, 0xca84, "Logitech Xbox Cordless Controller", 0, XTYPE_XBOX },
155         { 0x046d, 0xca88, "Logitech Compact Controller for Xbox", 0, XTYPE_XBOX },
156         { 0x046d, 0xca8a, "Logitech Precision Vibration Feedback Wheel", 0, XTYPE_XBOX },
157         { 0x046d, 0xcaa3, "Logitech DriveFx Racing Wheel", 0, XTYPE_XBOX360 },
158         { 0x056e, 0x2004, "Elecom JC-U3613M", 0, XTYPE_XBOX360 },
159         { 0x05fd, 0x1007, "Mad Catz Controller (unverified)", 0, XTYPE_XBOX },
160         { 0x05fd, 0x107a, "InterAct 'PowerPad Pro' X-Box pad (Germany)", 0, XTYPE_XBOX },
161         { 0x05fe, 0x3030, "Chic Controller", 0, XTYPE_XBOX },
162         { 0x05fe, 0x3031, "Chic Controller", 0, XTYPE_XBOX },
163         { 0x062a, 0x0020, "Logic3 Xbox GamePad", 0, XTYPE_XBOX },
164         { 0x062a, 0x0033, "Competition Pro Steering Wheel", 0, XTYPE_XBOX },
165         { 0x06a3, 0x0200, "Saitek Racing Wheel", 0, XTYPE_XBOX },
166         { 0x06a3, 0x0201, "Saitek Adrenalin", 0, XTYPE_XBOX },
167         { 0x06a3, 0xf51a, "Saitek P3600", 0, XTYPE_XBOX360 },
168         { 0x0738, 0x4506, "Mad Catz 4506 Wireless Controller", 0, XTYPE_XBOX },
169         { 0x0738, 0x4516, "Mad Catz Control Pad", 0, XTYPE_XBOX },
170         { 0x0738, 0x4520, "Mad Catz Control Pad Pro", 0, XTYPE_XBOX },
171         { 0x0738, 0x4522, "Mad Catz LumiCON", 0, XTYPE_XBOX },
172         { 0x0738, 0x4526, "Mad Catz Control Pad Pro", 0, XTYPE_XBOX },
173         { 0x0738, 0x4530, "Mad Catz Universal MC2 Racing Wheel and Pedals", 0, XTYPE_XBOX },
174         { 0x0738, 0x4536, "Mad Catz MicroCON", 0, XTYPE_XBOX },
175         { 0x0738, 0x4540, "Mad Catz Beat Pad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
176         { 0x0738, 0x4556, "Mad Catz Lynx Wireless Controller", 0, XTYPE_XBOX },
177         { 0x0738, 0x4586, "Mad Catz MicroCon Wireless Controller", 0, XTYPE_XBOX },
178         { 0x0738, 0x4588, "Mad Catz Blaster", 0, XTYPE_XBOX },
179         { 0x0738, 0x45ff, "Mad Catz Beat Pad (w/ Handle)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
180         { 0x0738, 0x4716, "Mad Catz Wired Xbox 360 Controller", 0, XTYPE_XBOX360 },
181         { 0x0738, 0x4718, "Mad Catz Street Fighter IV FightStick SE", 0, XTYPE_XBOX360 },
182         { 0x0738, 0x4726, "Mad Catz Xbox 360 Controller", 0, XTYPE_XBOX360 },
183         { 0x0738, 0x4728, "Mad Catz Street Fighter IV FightPad", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
184         { 0x0738, 0x4736, "Mad Catz MicroCon Gamepad", 0, XTYPE_XBOX360 },
185         { 0x0738, 0x4738, "Mad Catz Wired Xbox 360 Controller (SFIV)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
186         { 0x0738, 0x4740, "Mad Catz Beat Pad", 0, XTYPE_XBOX360 },
187         { 0x0738, 0x4743, "Mad Catz Beat Pad Pro", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
188         { 0x0738, 0x4758, "Mad Catz Arcade Game Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
189         { 0x0738, 0x4a01, "Mad Catz FightStick TE 2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
190         { 0x0738, 0x6040, "Mad Catz Beat Pad Pro", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
191         { 0x0738, 0x9871, "Mad Catz Portable Drum", 0, XTYPE_XBOX360 },
192         { 0x0738, 0xb726, "Mad Catz Xbox controller - MW2", 0, XTYPE_XBOX360 },
193         { 0x0738, 0xb738, "Mad Catz MVC2TE Stick 2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
194         { 0x0738, 0xbeef, "Mad Catz JOYTECH NEO SE Advanced GamePad", XTYPE_XBOX360 },
195         { 0x0738, 0xcb02, "Saitek Cyborg Rumble Pad - PC/Xbox 360", 0, XTYPE_XBOX360 },
196         { 0x0738, 0xcb03, "Saitek P3200 Rumble Pad - PC/Xbox 360", 0, XTYPE_XBOX360 },
197         { 0x0738, 0xcb29, "Saitek Aviator Stick AV8R02", 0, XTYPE_XBOX360 },
198         { 0x0738, 0xf738, "Super SFIV FightStick TE S", 0, XTYPE_XBOX360 },
199         { 0x07ff, 0xffff, "Mad Catz GamePad", 0, XTYPE_XBOX360 },
200         { 0x0c12, 0x0005, "Intec wireless", 0, XTYPE_XBOX },
201         { 0x0c12, 0x8801, "Nyko Xbox Controller", 0, XTYPE_XBOX },
202         { 0x0c12, 0x8802, "Zeroplus Xbox Controller", 0, XTYPE_XBOX },
203         { 0x0c12, 0x8809, "RedOctane Xbox Dance Pad", DANCEPAD_MAP_CONFIG, XTYPE_XBOX },
204         { 0x0c12, 0x880a, "Pelican Eclipse PL-2023", 0, XTYPE_XBOX },
205         { 0x0c12, 0x8810, "Zeroplus Xbox Controller", 0, XTYPE_XBOX },
206         { 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", 0, XTYPE_XBOX },
207         { 0x0d2f, 0x0002, "Andamiro Pump It Up pad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
208         { 0x0e4c, 0x1097, "Radica Gamester Controller", 0, XTYPE_XBOX },
209         { 0x0e4c, 0x1103, "Radica Gamester Reflex", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX },
210         { 0x0e4c, 0x2390, "Radica Games Jtech Controller", 0, XTYPE_XBOX },
211         { 0x0e4c, 0x3510, "Radica Gamester", 0, XTYPE_XBOX },
212         { 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", 0, XTYPE_XBOX },
213         { 0x0e6f, 0x0005, "Eclipse wireless Controller", 0, XTYPE_XBOX },
214         { 0x0e6f, 0x0006, "Edge wireless Controller", 0, XTYPE_XBOX },
215         { 0x0e6f, 0x0008, "After Glow Pro Controller", 0, XTYPE_XBOX },
216         { 0x0e6f, 0x0105, "HSM3 Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
217         { 0x0e6f, 0x0113, "Afterglow AX.1 Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
218         { 0x0e6f, 0x011f, "Rock Candy Gamepad Wired Controller", 0, XTYPE_XBOX360 },
219         { 0x0e6f, 0x0131, "PDP EA Sports Controller", 0, XTYPE_XBOX360 },
220         { 0x0e6f, 0x0133, "Xbox 360 Wired Controller", 0, XTYPE_XBOX360 },
221         { 0x0e6f, 0x0139, "Afterglow Prismatic Wired Controller", 0, XTYPE_XBOXONE },
222         { 0x0e6f, 0x013a, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
223         { 0x0e6f, 0x0146, "Rock Candy Wired Controller for Xbox One", 0, XTYPE_XBOXONE },
224         { 0x0e6f, 0x0147, "PDP Marvel Xbox One Controller", 0, XTYPE_XBOXONE },
225         { 0x0e6f, 0x015c, "PDP Xbox One Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
226         { 0x0e6f, 0x0161, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
227         { 0x0e6f, 0x0162, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
228         { 0x0e6f, 0x0163, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
229         { 0x0e6f, 0x0164, "PDP Battlefield One", 0, XTYPE_XBOXONE },
230         { 0x0e6f, 0x0165, "PDP Titanfall 2", 0, XTYPE_XBOXONE },
231         { 0x0e6f, 0x0201, "Pelican PL-3601 'TSZ' Wired Xbox 360 Controller", 0, XTYPE_XBOX360 },
232         { 0x0e6f, 0x0213, "Afterglow Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
233         { 0x0e6f, 0x021f, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
234         { 0x0e6f, 0x0246, "Rock Candy Gamepad for Xbox One 2015", 0, XTYPE_XBOXONE },
235         { 0x0e6f, 0x02a0, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
236         { 0x0e6f, 0x02a1, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
237         { 0x0e6f, 0x02a2, "PDP Wired Controller for Xbox One - Crimson Red", 0, XTYPE_XBOXONE },
238         { 0x0e6f, 0x02a4, "PDP Wired Controller for Xbox One - Stealth Series", 0, XTYPE_XBOXONE },
239         { 0x0e6f, 0x02a6, "PDP Wired Controller for Xbox One - Camo Series", 0, XTYPE_XBOXONE },
240         { 0x0e6f, 0x02a7, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
241         { 0x0e6f, 0x02a8, "PDP Xbox One Controller", 0, XTYPE_XBOXONE },
242         { 0x0e6f, 0x02ab, "PDP Controller for Xbox One", 0, XTYPE_XBOXONE },
243         { 0x0e6f, 0x02ad, "PDP Wired Controller for Xbox One - Stealth Series", 0, XTYPE_XBOXONE },
244         { 0x0e6f, 0x02b3, "Afterglow Prismatic Wired Controller", 0, XTYPE_XBOXONE },
245         { 0x0e6f, 0x02b8, "Afterglow Prismatic Wired Controller", 0, XTYPE_XBOXONE },
246         { 0x0e6f, 0x0301, "Logic3 Controller", 0, XTYPE_XBOX360 },
247         { 0x0e6f, 0x0346, "Rock Candy Gamepad for Xbox One 2016", 0, XTYPE_XBOXONE },
248         { 0x0e6f, 0x0401, "Logic3 Controller", 0, XTYPE_XBOX360 },
249         { 0x0e6f, 0x0413, "Afterglow AX.1 Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
250         { 0x0e6f, 0x0501, "PDP Xbox 360 Controller", 0, XTYPE_XBOX360 },
251         { 0x0e6f, 0xf900, "PDP Afterglow AX.1", 0, XTYPE_XBOX360 },
252         { 0x0e8f, 0x0201, "SmartJoy Frag Xpad/PS2 adaptor", 0, XTYPE_XBOX },
253         { 0x0e8f, 0x3008, "Generic xbox control (dealextreme)", 0, XTYPE_XBOX },
254         { 0x0f0d, 0x000a, "Hori Co. DOA4 FightStick", 0, XTYPE_XBOX360 },
255         { 0x0f0d, 0x000c, "Hori PadEX Turbo", 0, XTYPE_XBOX360 },
256         { 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
257         { 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
258         { 0x0f0d, 0x001b, "Hori Real Arcade Pro VX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
259         { 0x0f0d, 0x0063, "Hori Real Arcade Pro Hayabusa (USA) Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
260         { 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE },
261         { 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
262         { 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX },
263         { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
264         { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
265         { 0x102c, 0xff0c, "Joytech Wireless Advanced Controller", 0, XTYPE_XBOX },
266         { 0x1038, 0x1430, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 },
267         { 0x1038, 0x1431, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 },
268         { 0x11c9, 0x55f0, "Nacon GC-100XF", 0, XTYPE_XBOX360 },
269         { 0x1209, 0x2882, "Ardwiino Controller", 0, XTYPE_XBOX360 },
270         { 0x12ab, 0x0004, "Honey Bee Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
271         { 0x12ab, 0x0301, "PDP AFTERGLOW AX.1", 0, XTYPE_XBOX360 },
272         { 0x12ab, 0x0303, "Mortal Kombat Klassic FightStick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
273         { 0x12ab, 0x8809, "Xbox DDR dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
274         { 0x1430, 0x4748, "RedOctane Guitar Hero X-plorer", 0, XTYPE_XBOX360 },
275         { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
276         { 0x1430, 0xf801, "RedOctane Controller", 0, XTYPE_XBOX360 },
277         { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 },
278         { 0x1532, 0x0037, "Razer Sabertooth", 0, XTYPE_XBOX360 },
279         { 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
280         { 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE },
281         { 0x15e4, 0x3f00, "Power A Mini Pro Elite", 0, XTYPE_XBOX360 },
282         { 0x15e4, 0x3f0a, "Xbox Airflo wired controller", 0, XTYPE_XBOX360 },
283         { 0x15e4, 0x3f10, "Batarang Xbox 360 controller", 0, XTYPE_XBOX360 },
284         { 0x162e, 0xbeef, "Joytech Neo-Se Take2", 0, XTYPE_XBOX360 },
285         { 0x1689, 0xfd00, "Razer Onza Tournament Edition", 0, XTYPE_XBOX360 },
286         { 0x1689, 0xfd01, "Razer Onza Classic Edition", 0, XTYPE_XBOX360 },
287         { 0x1689, 0xfe00, "Razer Sabertooth", 0, XTYPE_XBOX360 },
288         { 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 },
289         { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
290         { 0x1bad, 0x0130, "Ion Drum Rocker", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
291         { 0x1bad, 0xf016, "Mad Catz Xbox 360 Controller", 0, XTYPE_XBOX360 },
292         { 0x1bad, 0xf018, "Mad Catz Street Fighter IV SE Fighting Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
293         { 0x1bad, 0xf019, "Mad Catz Brawlstick for Xbox 360", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
294         { 0x1bad, 0xf021, "Mad Cats Ghost Recon FS GamePad", 0, XTYPE_XBOX360 },
295         { 0x1bad, 0xf023, "MLG Pro Circuit Controller (Xbox)", 0, XTYPE_XBOX360 },
296         { 0x1bad, 0xf025, "Mad Catz Call Of Duty", 0, XTYPE_XBOX360 },
297         { 0x1bad, 0xf027, "Mad Catz FPS Pro", 0, XTYPE_XBOX360 },
298         { 0x1bad, 0xf028, "Street Fighter IV FightPad", 0, XTYPE_XBOX360 },
299         { 0x1bad, 0xf02e, "Mad Catz Fightpad", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
300         { 0x1bad, 0xf030, "Mad Catz Xbox 360 MC2 MicroCon Racing Wheel", 0, XTYPE_XBOX360 },
301         { 0x1bad, 0xf036, "Mad Catz MicroCon GamePad Pro", 0, XTYPE_XBOX360 },
302         { 0x1bad, 0xf038, "Street Fighter IV FightStick TE", 0, XTYPE_XBOX360 },
303         { 0x1bad, 0xf039, "Mad Catz MvC2 TE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
304         { 0x1bad, 0xf03a, "Mad Catz SFxT Fightstick Pro", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
305         { 0x1bad, 0xf03d, "Street Fighter IV Arcade Stick TE - Chun Li", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
306         { 0x1bad, 0xf03e, "Mad Catz MLG FightStick TE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
307         { 0x1bad, 0xf03f, "Mad Catz FightStick SoulCaliber", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
308         { 0x1bad, 0xf042, "Mad Catz FightStick TES+", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
309         { 0x1bad, 0xf080, "Mad Catz FightStick TE2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
310         { 0x1bad, 0xf501, "HoriPad EX2 Turbo", 0, XTYPE_XBOX360 },
311         { 0x1bad, 0xf502, "Hori Real Arcade Pro.VX SA", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
312         { 0x1bad, 0xf503, "Hori Fighting Stick VX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
313         { 0x1bad, 0xf504, "Hori Real Arcade Pro. EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
314         { 0x1bad, 0xf505, "Hori Fighting Stick EX2B", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
315         { 0x1bad, 0xf506, "Hori Real Arcade Pro.EX Premium VLX", 0, XTYPE_XBOX360 },
316         { 0x1bad, 0xf900, "Harmonix Xbox 360 Controller", 0, XTYPE_XBOX360 },
317         { 0x1bad, 0xf901, "Gamestop Xbox 360 Controller", 0, XTYPE_XBOX360 },
318         { 0x1bad, 0xf903, "Tron Xbox 360 controller", 0, XTYPE_XBOX360 },
319         { 0x1bad, 0xf904, "PDP Versus Fighting Pad", 0, XTYPE_XBOX360 },
320         { 0x1bad, 0xf906, "MortalKombat FightStick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
321         { 0x1bad, 0xfa01, "MadCatz GamePad", 0, XTYPE_XBOX360 },
322         { 0x1bad, 0xfd00, "Razer Onza TE", 0, XTYPE_XBOX360 },
323         { 0x1bad, 0xfd01, "Razer Onza", 0, XTYPE_XBOX360 },
324         { 0x20d6, 0x2001, "BDA Xbox Series X Wired Controller", 0, XTYPE_XBOXONE },
325         { 0x20d6, 0x2009, "PowerA Enhanced Wired Controller for Xbox Series X|S", 0, XTYPE_XBOXONE },
326         { 0x20d6, 0x281f, "PowerA Wired Controller For Xbox 360", 0, XTYPE_XBOX360 },
327         { 0x2e24, 0x0652, "Hyperkin Duke X-Box One pad", 0, XTYPE_XBOXONE },
328         { 0x24c6, 0x5000, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
329         { 0x24c6, 0x5300, "PowerA MINI PROEX Controller", 0, XTYPE_XBOX360 },
330         { 0x24c6, 0x5303, "Xbox Airflo wired controller", 0, XTYPE_XBOX360 },
331         { 0x24c6, 0x530a, "Xbox 360 Pro EX Controller", 0, XTYPE_XBOX360 },
332         { 0x24c6, 0x531a, "PowerA Pro Ex", 0, XTYPE_XBOX360 },
333         { 0x24c6, 0x5397, "FUS1ON Tournament Controller", 0, XTYPE_XBOX360 },
334         { 0x24c6, 0x541a, "PowerA Xbox One Mini Wired Controller", 0, XTYPE_XBOXONE },
335         { 0x24c6, 0x542a, "Xbox ONE spectra", 0, XTYPE_XBOXONE },
336         { 0x24c6, 0x543a, "PowerA Xbox One wired controller", 0, XTYPE_XBOXONE },
337         { 0x24c6, 0x5500, "Hori XBOX 360 EX 2 with Turbo", 0, XTYPE_XBOX360 },
338         { 0x24c6, 0x5501, "Hori Real Arcade Pro VX-SA", 0, XTYPE_XBOX360 },
339         { 0x24c6, 0x5502, "Hori Fighting Stick VX Alt", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
340         { 0x24c6, 0x5503, "Hori Fighting Edge", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
341         { 0x24c6, 0x5506, "Hori SOULCALIBUR V Stick", 0, XTYPE_XBOX360 },
342         { 0x24c6, 0x550d, "Hori GEM Xbox controller", 0, XTYPE_XBOX360 },
343         { 0x24c6, 0x550e, "Hori Real Arcade Pro V Kai 360", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
344         { 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE },
345         { 0x24c6, 0x561a, "PowerA FUSION Controller", 0, XTYPE_XBOXONE },
346         { 0x24c6, 0x5b00, "ThrustMaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 },
347         { 0x24c6, 0x5b02, "Thrustmaster, Inc. GPX Controller", 0, XTYPE_XBOX360 },
348         { 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 },
349         { 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 },
350         { 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
351         { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX },
352         { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
353         { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
354 };
355
356 /* buttons shared with xbox and xbox360 */
357 static const signed short xpad_common_btn[] = {
358         BTN_A, BTN_B, BTN_X, BTN_Y,                     /* "analog" buttons */
359         BTN_START, BTN_SELECT, BTN_THUMBL, BTN_THUMBR,  /* start/back/sticks */
360         -1                                              /* terminating entry */
361 };
362
363 /* original xbox controllers only */
364 static const signed short xpad_btn[] = {
365         BTN_C, BTN_Z,           /* "analog" buttons */
366         -1                      /* terminating entry */
367 };
368
369 /* used when dpad is mapped to buttons */
370 static const signed short xpad_btn_pad[] = {
371         BTN_TRIGGER_HAPPY1, BTN_TRIGGER_HAPPY2,         /* d-pad left, right */
372         BTN_TRIGGER_HAPPY3, BTN_TRIGGER_HAPPY4,         /* d-pad up, down */
373         -1                              /* terminating entry */
374 };
375
376 /* used when triggers are mapped to buttons */
377 static const signed short xpad_btn_triggers[] = {
378         BTN_TL2, BTN_TR2,               /* triggers left/right */
379         -1
380 };
381
382 static const signed short xpad360_btn[] = {  /* buttons for x360 controller */
383         BTN_TL, BTN_TR,         /* Button LB/RB */
384         BTN_MODE,               /* The big X button */
385         -1
386 };
387
388 static const signed short xpad_abs[] = {
389         ABS_X, ABS_Y,           /* left stick */
390         ABS_RX, ABS_RY,         /* right stick */
391         -1                      /* terminating entry */
392 };
393
394 /* used when dpad is mapped to axes */
395 static const signed short xpad_abs_pad[] = {
396         ABS_HAT0X, ABS_HAT0Y,   /* d-pad axes */
397         -1                      /* terminating entry */
398 };
399
400 /* used when triggers are mapped to axes */
401 static const signed short xpad_abs_triggers[] = {
402         ABS_Z, ABS_RZ,          /* triggers left/right */
403         -1
404 };
405
406 /*
407  * Xbox 360 has a vendor-specific class, so we cannot match it with only
408  * USB_INTERFACE_INFO (also specifically refused by USB subsystem), so we
409  * match against vendor id as well. Wired Xbox 360 devices have protocol 1,
410  * wireless controllers have protocol 129.
411  */
412 #define XPAD_XBOX360_VENDOR_PROTOCOL(vend, pr) \
413         .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, \
414         .idVendor = (vend), \
415         .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \
416         .bInterfaceSubClass = 93, \
417         .bInterfaceProtocol = (pr)
418 #define XPAD_XBOX360_VENDOR(vend) \
419         { XPAD_XBOX360_VENDOR_PROTOCOL((vend), 1) }, \
420         { XPAD_XBOX360_VENDOR_PROTOCOL((vend), 129) }
421
422 /* The Xbox One controller uses subclass 71 and protocol 208. */
423 #define XPAD_XBOXONE_VENDOR_PROTOCOL(vend, pr) \
424         .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, \
425         .idVendor = (vend), \
426         .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \
427         .bInterfaceSubClass = 71, \
428         .bInterfaceProtocol = (pr)
429 #define XPAD_XBOXONE_VENDOR(vend) \
430         { XPAD_XBOXONE_VENDOR_PROTOCOL((vend), 208) }
431
432 static const struct usb_device_id xpad_table[] = {
433         { USB_INTERFACE_INFO('X', 'B', 0) },    /* X-Box USB-IF not approved class */
434         XPAD_XBOX360_VENDOR(0x0079),            /* GPD Win 2 Controller */
435         XPAD_XBOX360_VENDOR(0x044f),            /* Thrustmaster X-Box 360 controllers */
436         XPAD_XBOX360_VENDOR(0x045e),            /* Microsoft X-Box 360 controllers */
437         XPAD_XBOXONE_VENDOR(0x045e),            /* Microsoft X-Box One controllers */
438         XPAD_XBOX360_VENDOR(0x046d),            /* Logitech X-Box 360 style controllers */
439         XPAD_XBOX360_VENDOR(0x056e),            /* Elecom JC-U3613M */
440         XPAD_XBOX360_VENDOR(0x06a3),            /* Saitek P3600 */
441         XPAD_XBOX360_VENDOR(0x0738),            /* Mad Catz X-Box 360 controllers */
442         { USB_DEVICE(0x0738, 0x4540) },         /* Mad Catz Beat Pad */
443         XPAD_XBOXONE_VENDOR(0x0738),            /* Mad Catz FightStick TE 2 */
444         XPAD_XBOX360_VENDOR(0x07ff),            /* Mad Catz GamePad */
445         XPAD_XBOX360_VENDOR(0x0e6f),            /* 0x0e6f X-Box 360 controllers */
446         XPAD_XBOXONE_VENDOR(0x0e6f),            /* 0x0e6f X-Box One controllers */
447         XPAD_XBOX360_VENDOR(0x0f0d),            /* Hori Controllers */
448         XPAD_XBOXONE_VENDOR(0x0f0d),            /* Hori Controllers */
449         XPAD_XBOX360_VENDOR(0x1038),            /* SteelSeries Controllers */
450         XPAD_XBOX360_VENDOR(0x11c9),            /* Nacon GC100XF */
451         XPAD_XBOX360_VENDOR(0x1209),            /* Ardwiino Controllers */
452         XPAD_XBOX360_VENDOR(0x12ab),            /* X-Box 360 dance pads */
453         XPAD_XBOX360_VENDOR(0x1430),            /* RedOctane X-Box 360 controllers */
454         XPAD_XBOX360_VENDOR(0x146b),            /* BigBen Interactive Controllers */
455         XPAD_XBOX360_VENDOR(0x1532),            /* Razer Sabertooth */
456         XPAD_XBOXONE_VENDOR(0x1532),            /* Razer Wildcat */
457         XPAD_XBOX360_VENDOR(0x15e4),            /* Numark X-Box 360 controllers */
458         XPAD_XBOX360_VENDOR(0x162e),            /* Joytech X-Box 360 controllers */
459         XPAD_XBOX360_VENDOR(0x1689),            /* Razer Onza */
460         XPAD_XBOX360_VENDOR(0x1bad),            /* Harminix Rock Band Guitar and Drums */
461         XPAD_XBOX360_VENDOR(0x20d6),            /* PowerA Controllers */
462         XPAD_XBOXONE_VENDOR(0x20d6),            /* PowerA Controllers */
463         XPAD_XBOX360_VENDOR(0x24c6),            /* PowerA Controllers */
464         XPAD_XBOXONE_VENDOR(0x24c6),            /* PowerA Controllers */
465         XPAD_XBOXONE_VENDOR(0x2e24),            /* Hyperkin Duke X-Box One pad */
466         XPAD_XBOX360_VENDOR(0x2f24),            /* GameSir Controllers */
467         { }
468 };
469
470 MODULE_DEVICE_TABLE(usb, xpad_table);
471
472 struct xboxone_init_packet {
473         u16 idVendor;
474         u16 idProduct;
475         const u8 *data;
476         u8 len;
477 };
478
479 #define XBOXONE_INIT_PKT(_vid, _pid, _data)             \
480         {                                               \
481                 .idVendor       = (_vid),               \
482                 .idProduct      = (_pid),               \
483                 .data           = (_data),              \
484                 .len            = ARRAY_SIZE(_data),    \
485         }
486
487
488 /*
489  * This packet is required for all Xbox One pads with 2015
490  * or later firmware installed (or present from the factory).
491  */
492 static const u8 xboxone_fw2015_init[] = {
493         0x05, 0x20, 0x00, 0x01, 0x00
494 };
495
496 /*
497  * This packet is required for Xbox One S (0x045e:0x02ea)
498  * and Xbox One Elite Series 2 (0x045e:0x0b00) pads to
499  * initialize the controller that was previously used in
500  * Bluetooth mode.
501  */
502 static const u8 xboxone_s_init[] = {
503         0x05, 0x20, 0x00, 0x0f, 0x06
504 };
505
506 /*
507  * This packet is required for the Titanfall 2 Xbox One pads
508  * (0x0e6f:0x0165) to finish initialization and for Hori pads
509  * (0x0f0d:0x0067) to make the analog sticks work.
510  */
511 static const u8 xboxone_hori_init[] = {
512         0x01, 0x20, 0x00, 0x09, 0x00, 0x04, 0x20, 0x3a,
513         0x00, 0x00, 0x00, 0x80, 0x00
514 };
515
516 /*
517  * This packet is required for most (all?) of the PDP pads to start
518  * sending input reports. These pads include: (0x0e6f:0x02ab),
519  * (0x0e6f:0x02a4), (0x0e6f:0x02a6).
520  */
521 static const u8 xboxone_pdp_init1[] = {
522         0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14
523 };
524
525 /*
526  * This packet is required for most (all?) of the PDP pads to start
527  * sending input reports. These pads include: (0x0e6f:0x02ab),
528  * (0x0e6f:0x02a4), (0x0e6f:0x02a6).
529  */
530 static const u8 xboxone_pdp_init2[] = {
531         0x06, 0x20, 0x00, 0x02, 0x01, 0x00
532 };
533
534 /*
535  * A specific rumble packet is required for some PowerA pads to start
536  * sending input reports. One of those pads is (0x24c6:0x543a).
537  */
538 static const u8 xboxone_rumblebegin_init[] = {
539         0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00,
540         0x1D, 0x1D, 0xFF, 0x00, 0x00
541 };
542
543 /*
544  * A rumble packet with zero FF intensity will immediately
545  * terminate the rumbling required to init PowerA pads.
546  * This should happen fast enough that the motors don't
547  * spin up to enough speed to actually vibrate the gamepad.
548  */
549 static const u8 xboxone_rumbleend_init[] = {
550         0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00,
551         0x00, 0x00, 0x00, 0x00, 0x00
552 };
553
554 /*
555  * This specifies the selection of init packets that a gamepad
556  * will be sent on init *and* the order in which they will be
557  * sent. The correct sequence number will be added when the
558  * packet is going to be sent.
559  */
560 static const struct xboxone_init_packet xboxone_init_packets[] = {
561         XBOXONE_INIT_PKT(0x0e6f, 0x0165, xboxone_hori_init),
562         XBOXONE_INIT_PKT(0x0f0d, 0x0067, xboxone_hori_init),
563         XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_fw2015_init),
564         XBOXONE_INIT_PKT(0x045e, 0x02ea, xboxone_s_init),
565         XBOXONE_INIT_PKT(0x045e, 0x0b00, xboxone_s_init),
566         XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init1),
567         XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init2),
568         XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
569         XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init),
570         XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
571         XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumbleend_init),
572         XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumbleend_init),
573         XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumbleend_init),
574 };
575
576 struct xpad_output_packet {
577         u8 data[XPAD_PKT_LEN];
578         u8 len;
579         bool pending;
580 };
581
582 #define XPAD_OUT_CMD_IDX        0
583 #define XPAD_OUT_FF_IDX         1
584 #define XPAD_OUT_LED_IDX        (1 + IS_ENABLED(CONFIG_JOYSTICK_XPAD_FF))
585 #define XPAD_NUM_OUT_PACKETS    (1 + \
586                                  IS_ENABLED(CONFIG_JOYSTICK_XPAD_FF) + \
587                                  IS_ENABLED(CONFIG_JOYSTICK_XPAD_LEDS))
588
589 struct usb_xpad {
590         struct input_dev *dev;          /* input device interface */
591         struct input_dev __rcu *x360w_dev;
592         struct usb_device *udev;        /* usb device */
593         struct usb_interface *intf;     /* usb interface */
594
595         bool pad_present;
596         bool input_created;
597
598         struct urb *irq_in;             /* urb for interrupt in report */
599         unsigned char *idata;           /* input data */
600         dma_addr_t idata_dma;
601
602         struct urb *irq_out;            /* urb for interrupt out report */
603         struct usb_anchor irq_out_anchor;
604         bool irq_out_active;            /* we must not use an active URB */
605         u8 odata_serial;                /* serial number for xbox one protocol */
606         unsigned char *odata;           /* output data */
607         dma_addr_t odata_dma;
608         spinlock_t odata_lock;
609
610         struct xpad_output_packet out_packets[XPAD_NUM_OUT_PACKETS];
611         int last_out_packet;
612         int init_seq;
613
614 #if defined(CONFIG_JOYSTICK_XPAD_LEDS)
615         struct xpad_led *led;
616 #endif
617
618         char phys[64];                  /* physical device path */
619
620         int mapping;                    /* map d-pad to buttons or to axes */
621         int xtype;                      /* type of xbox device */
622         int pad_nr;                     /* the order x360 pads were attached */
623         const char *name;               /* name of the device */
624         struct work_struct work;        /* init/remove device from callback */
625 };
626
627 static int xpad_init_input(struct usb_xpad *xpad);
628 static void xpad_deinit_input(struct usb_xpad *xpad);
629 static void xpadone_ack_mode_report(struct usb_xpad *xpad, u8 seq_num);
630
631 /*
632  *      xpad_process_packet
633  *
634  *      Completes a request by converting the data into events for the
635  *      input subsystem.
636  *
637  *      The used report descriptor was taken from ITO Takayukis website:
638  *       http://euc.jp/periphs/xbox-controller.ja.html
639  */
640 static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
641 {
642         struct input_dev *dev = xpad->dev;
643
644         if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
645                 /* left stick */
646                 input_report_abs(dev, ABS_X,
647                                  (__s16) le16_to_cpup((__le16 *)(data + 12)));
648                 input_report_abs(dev, ABS_Y,
649                                  ~(__s16) le16_to_cpup((__le16 *)(data + 14)));
650
651                 /* right stick */
652                 input_report_abs(dev, ABS_RX,
653                                  (__s16) le16_to_cpup((__le16 *)(data + 16)));
654                 input_report_abs(dev, ABS_RY,
655                                  ~(__s16) le16_to_cpup((__le16 *)(data + 18)));
656         }
657
658         /* triggers left/right */
659         if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
660                 input_report_key(dev, BTN_TL2, data[10]);
661                 input_report_key(dev, BTN_TR2, data[11]);
662         } else {
663                 input_report_abs(dev, ABS_Z, data[10]);
664                 input_report_abs(dev, ABS_RZ, data[11]);
665         }
666
667         /* digital pad */
668         if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
669                 /* dpad as buttons (left, right, up, down) */
670                 input_report_key(dev, BTN_TRIGGER_HAPPY1, data[2] & 0x04);
671                 input_report_key(dev, BTN_TRIGGER_HAPPY2, data[2] & 0x08);
672                 input_report_key(dev, BTN_TRIGGER_HAPPY3, data[2] & 0x01);
673                 input_report_key(dev, BTN_TRIGGER_HAPPY4, data[2] & 0x02);
674         } else {
675                 input_report_abs(dev, ABS_HAT0X,
676                                  !!(data[2] & 0x08) - !!(data[2] & 0x04));
677                 input_report_abs(dev, ABS_HAT0Y,
678                                  !!(data[2] & 0x02) - !!(data[2] & 0x01));
679         }
680
681         /* start/back buttons and stick press left/right */
682         input_report_key(dev, BTN_START,  data[2] & 0x10);
683         input_report_key(dev, BTN_SELECT, data[2] & 0x20);
684         input_report_key(dev, BTN_THUMBL, data[2] & 0x40);
685         input_report_key(dev, BTN_THUMBR, data[2] & 0x80);
686
687         /* "analog" buttons A, B, X, Y */
688         input_report_key(dev, BTN_A, data[4]);
689         input_report_key(dev, BTN_B, data[5]);
690         input_report_key(dev, BTN_X, data[6]);
691         input_report_key(dev, BTN_Y, data[7]);
692
693         /* "analog" buttons black, white */
694         input_report_key(dev, BTN_C, data[8]);
695         input_report_key(dev, BTN_Z, data[9]);
696
697         input_sync(dev);
698 }
699
700 /*
701  *      xpad360_process_packet
702  *
703  *      Completes a request by converting the data into events for the
704  *      input subsystem. It is version for xbox 360 controller
705  *
706  *      The used report descriptor was taken from:
707  *              http://www.free60.org/wiki/Gamepad
708  */
709
710 static void xpad360_process_packet(struct usb_xpad *xpad, struct input_dev *dev,
711                                    u16 cmd, unsigned char *data)
712 {
713         /* valid pad data */
714         if (data[0] != 0x00)
715                 return;
716
717         /* digital pad */
718         if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
719                 /* dpad as buttons (left, right, up, down) */
720                 input_report_key(dev, BTN_TRIGGER_HAPPY1, data[2] & 0x04);
721                 input_report_key(dev, BTN_TRIGGER_HAPPY2, data[2] & 0x08);
722                 input_report_key(dev, BTN_TRIGGER_HAPPY3, data[2] & 0x01);
723                 input_report_key(dev, BTN_TRIGGER_HAPPY4, data[2] & 0x02);
724         }
725
726         /*
727          * This should be a simple else block. However historically
728          * xbox360w has mapped DPAD to buttons while xbox360 did not. This
729          * made no sense, but now we can not just switch back and have to
730          * support both behaviors.
731          */
732         if (!(xpad->mapping & MAP_DPAD_TO_BUTTONS) ||
733             xpad->xtype == XTYPE_XBOX360W) {
734                 input_report_abs(dev, ABS_HAT0X,
735                                  !!(data[2] & 0x08) - !!(data[2] & 0x04));
736                 input_report_abs(dev, ABS_HAT0Y,
737                                  !!(data[2] & 0x02) - !!(data[2] & 0x01));
738         }
739
740         /* start/back buttons */
741         input_report_key(dev, BTN_START,  data[2] & 0x10);
742         input_report_key(dev, BTN_SELECT, data[2] & 0x20);
743
744         /* stick press left/right */
745         input_report_key(dev, BTN_THUMBL, data[2] & 0x40);
746         input_report_key(dev, BTN_THUMBR, data[2] & 0x80);
747
748         /* buttons A,B,X,Y,TL,TR and MODE */
749         input_report_key(dev, BTN_A,    data[3] & 0x10);
750         input_report_key(dev, BTN_B,    data[3] & 0x20);
751         input_report_key(dev, BTN_X,    data[3] & 0x40);
752         input_report_key(dev, BTN_Y,    data[3] & 0x80);
753         input_report_key(dev, BTN_TL,   data[3] & 0x01);
754         input_report_key(dev, BTN_TR,   data[3] & 0x02);
755         input_report_key(dev, BTN_MODE, data[3] & 0x04);
756
757         if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
758                 /* left stick */
759                 input_report_abs(dev, ABS_X,
760                                  (__s16) le16_to_cpup((__le16 *)(data + 6)));
761                 input_report_abs(dev, ABS_Y,
762                                  ~(__s16) le16_to_cpup((__le16 *)(data + 8)));
763
764                 /* right stick */
765                 input_report_abs(dev, ABS_RX,
766                                  (__s16) le16_to_cpup((__le16 *)(data + 10)));
767                 input_report_abs(dev, ABS_RY,
768                                  ~(__s16) le16_to_cpup((__le16 *)(data + 12)));
769         }
770
771         /* triggers left/right */
772         if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
773                 input_report_key(dev, BTN_TL2, data[4]);
774                 input_report_key(dev, BTN_TR2, data[5]);
775         } else {
776                 input_report_abs(dev, ABS_Z, data[4]);
777                 input_report_abs(dev, ABS_RZ, data[5]);
778         }
779
780         input_sync(dev);
781 }
782
783 static void xpad_presence_work(struct work_struct *work)
784 {
785         struct usb_xpad *xpad = container_of(work, struct usb_xpad, work);
786         int error;
787
788         if (xpad->pad_present) {
789                 error = xpad_init_input(xpad);
790                 if (error) {
791                         /* complain only, not much else we can do here */
792                         dev_err(&xpad->dev->dev,
793                                 "unable to init device: %d\n", error);
794                 } else {
795                         rcu_assign_pointer(xpad->x360w_dev, xpad->dev);
796                 }
797         } else {
798                 RCU_INIT_POINTER(xpad->x360w_dev, NULL);
799                 synchronize_rcu();
800                 /*
801                  * Now that we are sure xpad360w_process_packet is not
802                  * using input device we can get rid of it.
803                  */
804                 xpad_deinit_input(xpad);
805         }
806 }
807
808 /*
809  * xpad360w_process_packet
810  *
811  * Completes a request by converting the data into events for the
812  * input subsystem. It is version for xbox 360 wireless controller.
813  *
814  * Byte.Bit
815  * 00.1 - Status change: The controller or headset has connected/disconnected
816  *                       Bits 01.7 and 01.6 are valid
817  * 01.7 - Controller present
818  * 01.6 - Headset present
819  * 01.1 - Pad state (Bytes 4+) valid
820  *
821  */
822 static void xpad360w_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
823 {
824         struct input_dev *dev;
825         bool present;
826
827         /* Presence change */
828         if (data[0] & 0x08) {
829                 present = (data[1] & 0x80) != 0;
830
831                 if (xpad->pad_present != present) {
832                         xpad->pad_present = present;
833                         schedule_work(&xpad->work);
834                 }
835         }
836
837         /* Valid pad data */
838         if (data[1] != 0x1)
839                 return;
840
841         rcu_read_lock();
842         dev = rcu_dereference(xpad->x360w_dev);
843         if (dev)
844                 xpad360_process_packet(xpad, dev, cmd, &data[4]);
845         rcu_read_unlock();
846 }
847
848 /*
849  *      xpadone_process_packet
850  *
851  *      Completes a request by converting the data into events for the
852  *      input subsystem. This version is for the Xbox One controller.
853  *
854  *      The report format was gleaned from
855  *      https://github.com/kylelemons/xbox/blob/master/xbox.go
856  */
857 static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data)
858 {
859         struct input_dev *dev = xpad->dev;
860
861         /* the xbox button has its own special report */
862         if (data[0] == 0X07) {
863                 /*
864                  * The Xbox One S controller requires these reports to be
865                  * acked otherwise it continues sending them forever and
866                  * won't report further mode button events.
867                  */
868                 if (data[1] == 0x30)
869                         xpadone_ack_mode_report(xpad, data[2]);
870
871                 input_report_key(dev, BTN_MODE, data[4] & 0x01);
872                 input_sync(dev);
873                 return;
874         }
875         /* check invalid packet */
876         else if (data[0] != 0X20)
877                 return;
878
879         /* menu/view buttons */
880         input_report_key(dev, BTN_START,  data[4] & 0x04);
881         input_report_key(dev, BTN_SELECT, data[4] & 0x08);
882
883         /* buttons A,B,X,Y */
884         input_report_key(dev, BTN_A,    data[4] & 0x10);
885         input_report_key(dev, BTN_B,    data[4] & 0x20);
886         input_report_key(dev, BTN_X,    data[4] & 0x40);
887         input_report_key(dev, BTN_Y,    data[4] & 0x80);
888
889         /* digital pad */
890         if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
891                 /* dpad as buttons (left, right, up, down) */
892                 input_report_key(dev, BTN_TRIGGER_HAPPY1, data[5] & 0x04);
893                 input_report_key(dev, BTN_TRIGGER_HAPPY2, data[5] & 0x08);
894                 input_report_key(dev, BTN_TRIGGER_HAPPY3, data[5] & 0x01);
895                 input_report_key(dev, BTN_TRIGGER_HAPPY4, data[5] & 0x02);
896         } else {
897                 input_report_abs(dev, ABS_HAT0X,
898                                  !!(data[5] & 0x08) - !!(data[5] & 0x04));
899                 input_report_abs(dev, ABS_HAT0Y,
900                                  !!(data[5] & 0x02) - !!(data[5] & 0x01));
901         }
902
903         /* TL/TR */
904         input_report_key(dev, BTN_TL,   data[5] & 0x10);
905         input_report_key(dev, BTN_TR,   data[5] & 0x20);
906
907         /* stick press left/right */
908         input_report_key(dev, BTN_THUMBL, data[5] & 0x40);
909         input_report_key(dev, BTN_THUMBR, data[5] & 0x80);
910
911         if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
912                 /* left stick */
913                 input_report_abs(dev, ABS_X,
914                                  (__s16) le16_to_cpup((__le16 *)(data + 10)));
915                 input_report_abs(dev, ABS_Y,
916                                  ~(__s16) le16_to_cpup((__le16 *)(data + 12)));
917
918                 /* right stick */
919                 input_report_abs(dev, ABS_RX,
920                                  (__s16) le16_to_cpup((__le16 *)(data + 14)));
921                 input_report_abs(dev, ABS_RY,
922                                  ~(__s16) le16_to_cpup((__le16 *)(data + 16)));
923         }
924
925         /* triggers left/right */
926         if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
927                 input_report_key(dev, BTN_TL2,
928                                  (__u16) le16_to_cpup((__le16 *)(data + 6)));
929                 input_report_key(dev, BTN_TR2,
930                                  (__u16) le16_to_cpup((__le16 *)(data + 8)));
931         } else {
932                 input_report_abs(dev, ABS_Z,
933                                  (__u16) le16_to_cpup((__le16 *)(data + 6)));
934                 input_report_abs(dev, ABS_RZ,
935                                  (__u16) le16_to_cpup((__le16 *)(data + 8)));
936         }
937
938         input_sync(dev);
939 }
940
941 static void xpad_irq_in(struct urb *urb)
942 {
943         struct usb_xpad *xpad = urb->context;
944         struct device *dev = &xpad->intf->dev;
945         int retval, status;
946
947         status = urb->status;
948
949         switch (status) {
950         case 0:
951                 /* success */
952                 break;
953         case -ECONNRESET:
954         case -ENOENT:
955         case -ESHUTDOWN:
956                 /* this urb is terminated, clean up */
957                 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
958                         __func__, status);
959                 return;
960         default:
961                 dev_dbg(dev, "%s - nonzero urb status received: %d\n",
962                         __func__, status);
963                 goto exit;
964         }
965
966         switch (xpad->xtype) {
967         case XTYPE_XBOX360:
968                 xpad360_process_packet(xpad, xpad->dev, 0, xpad->idata);
969                 break;
970         case XTYPE_XBOX360W:
971                 xpad360w_process_packet(xpad, 0, xpad->idata);
972                 break;
973         case XTYPE_XBOXONE:
974                 xpadone_process_packet(xpad, 0, xpad->idata);
975                 break;
976         default:
977                 xpad_process_packet(xpad, 0, xpad->idata);
978         }
979
980 exit:
981         retval = usb_submit_urb(urb, GFP_ATOMIC);
982         if (retval)
983                 dev_err(dev, "%s - usb_submit_urb failed with result %d\n",
984                         __func__, retval);
985 }
986
987 /* Callers must hold xpad->odata_lock spinlock */
988 static bool xpad_prepare_next_init_packet(struct usb_xpad *xpad)
989 {
990         const struct xboxone_init_packet *init_packet;
991
992         if (xpad->xtype != XTYPE_XBOXONE)
993                 return false;
994
995         /* Perform initialization sequence for Xbox One pads that require it */
996         while (xpad->init_seq < ARRAY_SIZE(xboxone_init_packets)) {
997                 init_packet = &xboxone_init_packets[xpad->init_seq++];
998
999                 if (init_packet->idVendor != 0 &&
1000                     init_packet->idVendor != xpad->dev->id.vendor)
1001                         continue;
1002
1003                 if (init_packet->idProduct != 0 &&
1004                     init_packet->idProduct != xpad->dev->id.product)
1005                         continue;
1006
1007                 /* This packet applies to our device, so prepare to send it */
1008                 memcpy(xpad->odata, init_packet->data, init_packet->len);
1009                 xpad->irq_out->transfer_buffer_length = init_packet->len;
1010
1011                 /* Update packet with current sequence number */
1012                 xpad->odata[2] = xpad->odata_serial++;
1013                 return true;
1014         }
1015
1016         return false;
1017 }
1018
1019 /* Callers must hold xpad->odata_lock spinlock */
1020 static bool xpad_prepare_next_out_packet(struct usb_xpad *xpad)
1021 {
1022         struct xpad_output_packet *pkt, *packet = NULL;
1023         int i;
1024
1025         /* We may have init packets to send before we can send user commands */
1026         if (xpad_prepare_next_init_packet(xpad))
1027                 return true;
1028
1029         for (i = 0; i < XPAD_NUM_OUT_PACKETS; i++) {
1030                 if (++xpad->last_out_packet >= XPAD_NUM_OUT_PACKETS)
1031                         xpad->last_out_packet = 0;
1032
1033                 pkt = &xpad->out_packets[xpad->last_out_packet];
1034                 if (pkt->pending) {
1035                         dev_dbg(&xpad->intf->dev,
1036                                 "%s - found pending output packet %d\n",
1037                                 __func__, xpad->last_out_packet);
1038                         packet = pkt;
1039                         break;
1040                 }
1041         }
1042
1043         if (packet) {
1044                 memcpy(xpad->odata, packet->data, packet->len);
1045                 xpad->irq_out->transfer_buffer_length = packet->len;
1046                 packet->pending = false;
1047                 return true;
1048         }
1049
1050         return false;
1051 }
1052
1053 /* Callers must hold xpad->odata_lock spinlock */
1054 static int xpad_try_sending_next_out_packet(struct usb_xpad *xpad)
1055 {
1056         int error;
1057
1058         if (!xpad->irq_out_active && xpad_prepare_next_out_packet(xpad)) {
1059                 usb_anchor_urb(xpad->irq_out, &xpad->irq_out_anchor);
1060                 error = usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
1061                 if (error) {
1062                         dev_err(&xpad->intf->dev,
1063                                 "%s - usb_submit_urb failed with result %d\n",
1064                                 __func__, error);
1065                         usb_unanchor_urb(xpad->irq_out);
1066                         return -EIO;
1067                 }
1068
1069                 xpad->irq_out_active = true;
1070         }
1071
1072         return 0;
1073 }
1074
1075 static void xpad_irq_out(struct urb *urb)
1076 {
1077         struct usb_xpad *xpad = urb->context;
1078         struct device *dev = &xpad->intf->dev;
1079         int status = urb->status;
1080         int error;
1081         unsigned long flags;
1082
1083         spin_lock_irqsave(&xpad->odata_lock, flags);
1084
1085         switch (status) {
1086         case 0:
1087                 /* success */
1088                 xpad->irq_out_active = xpad_prepare_next_out_packet(xpad);
1089                 break;
1090
1091         case -ECONNRESET:
1092         case -ENOENT:
1093         case -ESHUTDOWN:
1094                 /* this urb is terminated, clean up */
1095                 dev_dbg(dev, "%s - urb shutting down with status: %d\n",
1096                         __func__, status);
1097                 xpad->irq_out_active = false;
1098                 break;
1099
1100         default:
1101                 dev_dbg(dev, "%s - nonzero urb status received: %d\n",
1102                         __func__, status);
1103                 break;
1104         }
1105
1106         if (xpad->irq_out_active) {
1107                 usb_anchor_urb(urb, &xpad->irq_out_anchor);
1108                 error = usb_submit_urb(urb, GFP_ATOMIC);
1109                 if (error) {
1110                         dev_err(dev,
1111                                 "%s - usb_submit_urb failed with result %d\n",
1112                                 __func__, error);
1113                         usb_unanchor_urb(urb);
1114                         xpad->irq_out_active = false;
1115                 }
1116         }
1117
1118         spin_unlock_irqrestore(&xpad->odata_lock, flags);
1119 }
1120
1121 static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad,
1122                         struct usb_endpoint_descriptor *ep_irq_out)
1123 {
1124         int error;
1125
1126         if (xpad->xtype == XTYPE_UNKNOWN)
1127                 return 0;
1128
1129         init_usb_anchor(&xpad->irq_out_anchor);
1130
1131         xpad->odata = usb_alloc_coherent(xpad->udev, XPAD_PKT_LEN,
1132                                          GFP_KERNEL, &xpad->odata_dma);
1133         if (!xpad->odata)
1134                 return -ENOMEM;
1135
1136         spin_lock_init(&xpad->odata_lock);
1137
1138         xpad->irq_out = usb_alloc_urb(0, GFP_KERNEL);
1139         if (!xpad->irq_out) {
1140                 error = -ENOMEM;
1141                 goto err_free_coherent;
1142         }
1143
1144         usb_fill_int_urb(xpad->irq_out, xpad->udev,
1145                          usb_sndintpipe(xpad->udev, ep_irq_out->bEndpointAddress),
1146                          xpad->odata, XPAD_PKT_LEN,
1147                          xpad_irq_out, xpad, ep_irq_out->bInterval);
1148         xpad->irq_out->transfer_dma = xpad->odata_dma;
1149         xpad->irq_out->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1150
1151         return 0;
1152
1153 err_free_coherent:
1154         usb_free_coherent(xpad->udev, XPAD_PKT_LEN, xpad->odata, xpad->odata_dma);
1155         return error;
1156 }
1157
1158 static void xpad_stop_output(struct usb_xpad *xpad)
1159 {
1160         if (xpad->xtype != XTYPE_UNKNOWN) {
1161                 if (!usb_wait_anchor_empty_timeout(&xpad->irq_out_anchor,
1162                                                    5000)) {
1163                         dev_warn(&xpad->intf->dev,
1164                                  "timed out waiting for output URB to complete, killing\n");
1165                         usb_kill_anchored_urbs(&xpad->irq_out_anchor);
1166                 }
1167         }
1168 }
1169
1170 static void xpad_deinit_output(struct usb_xpad *xpad)
1171 {
1172         if (xpad->xtype != XTYPE_UNKNOWN) {
1173                 usb_free_urb(xpad->irq_out);
1174                 usb_free_coherent(xpad->udev, XPAD_PKT_LEN,
1175                                 xpad->odata, xpad->odata_dma);
1176         }
1177 }
1178
1179 static int xpad_inquiry_pad_presence(struct usb_xpad *xpad)
1180 {
1181         struct xpad_output_packet *packet =
1182                         &xpad->out_packets[XPAD_OUT_CMD_IDX];
1183         unsigned long flags;
1184         int retval;
1185
1186         spin_lock_irqsave(&xpad->odata_lock, flags);
1187
1188         packet->data[0] = 0x08;
1189         packet->data[1] = 0x00;
1190         packet->data[2] = 0x0F;
1191         packet->data[3] = 0xC0;
1192         packet->data[4] = 0x00;
1193         packet->data[5] = 0x00;
1194         packet->data[6] = 0x00;
1195         packet->data[7] = 0x00;
1196         packet->data[8] = 0x00;
1197         packet->data[9] = 0x00;
1198         packet->data[10] = 0x00;
1199         packet->data[11] = 0x00;
1200         packet->len = 12;
1201         packet->pending = true;
1202
1203         /* Reset the sequence so we send out presence first */
1204         xpad->last_out_packet = -1;
1205         retval = xpad_try_sending_next_out_packet(xpad);
1206
1207         spin_unlock_irqrestore(&xpad->odata_lock, flags);
1208
1209         return retval;
1210 }
1211
1212 static int xpad_start_xbox_one(struct usb_xpad *xpad)
1213 {
1214         unsigned long flags;
1215         int retval;
1216
1217         spin_lock_irqsave(&xpad->odata_lock, flags);
1218
1219         /*
1220          * Begin the init sequence by attempting to send a packet.
1221          * We will cycle through the init packet sequence before
1222          * sending any packets from the output ring.
1223          */
1224         xpad->init_seq = 0;
1225         retval = xpad_try_sending_next_out_packet(xpad);
1226
1227         spin_unlock_irqrestore(&xpad->odata_lock, flags);
1228
1229         return retval;
1230 }
1231
1232 static void xpadone_ack_mode_report(struct usb_xpad *xpad, u8 seq_num)
1233 {
1234         unsigned long flags;
1235         struct xpad_output_packet *packet =
1236                         &xpad->out_packets[XPAD_OUT_CMD_IDX];
1237         static const u8 mode_report_ack[] = {
1238                 0x01, 0x20, 0x00, 0x09, 0x00, 0x07, 0x20, 0x02,
1239                 0x00, 0x00, 0x00, 0x00, 0x00
1240         };
1241
1242         spin_lock_irqsave(&xpad->odata_lock, flags);
1243
1244         packet->len = sizeof(mode_report_ack);
1245         memcpy(packet->data, mode_report_ack, packet->len);
1246         packet->data[2] = seq_num;
1247         packet->pending = true;
1248
1249         /* Reset the sequence so we send out the ack now */
1250         xpad->last_out_packet = -1;
1251         xpad_try_sending_next_out_packet(xpad);
1252
1253         spin_unlock_irqrestore(&xpad->odata_lock, flags);
1254 }
1255
1256 #ifdef CONFIG_JOYSTICK_XPAD_FF
1257 static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect)
1258 {
1259         struct usb_xpad *xpad = input_get_drvdata(dev);
1260         struct xpad_output_packet *packet = &xpad->out_packets[XPAD_OUT_FF_IDX];
1261         __u16 strong;
1262         __u16 weak;
1263         int retval;
1264         unsigned long flags;
1265
1266         if (effect->type != FF_RUMBLE)
1267                 return 0;
1268
1269         strong = effect->u.rumble.strong_magnitude;
1270         weak = effect->u.rumble.weak_magnitude;
1271
1272         spin_lock_irqsave(&xpad->odata_lock, flags);
1273
1274         switch (xpad->xtype) {
1275         case XTYPE_XBOX:
1276                 packet->data[0] = 0x00;
1277                 packet->data[1] = 0x06;
1278                 packet->data[2] = 0x00;
1279                 packet->data[3] = strong / 256; /* left actuator */
1280                 packet->data[4] = 0x00;
1281                 packet->data[5] = weak / 256;   /* right actuator */
1282                 packet->len = 6;
1283                 packet->pending = true;
1284                 break;
1285
1286         case XTYPE_XBOX360:
1287                 packet->data[0] = 0x00;
1288                 packet->data[1] = 0x08;
1289                 packet->data[2] = 0x00;
1290                 packet->data[3] = strong / 256;  /* left actuator? */
1291                 packet->data[4] = weak / 256;   /* right actuator? */
1292                 packet->data[5] = 0x00;
1293                 packet->data[6] = 0x00;
1294                 packet->data[7] = 0x00;
1295                 packet->len = 8;
1296                 packet->pending = true;
1297                 break;
1298
1299         case XTYPE_XBOX360W:
1300                 packet->data[0] = 0x00;
1301                 packet->data[1] = 0x01;
1302                 packet->data[2] = 0x0F;
1303                 packet->data[3] = 0xC0;
1304                 packet->data[4] = 0x00;
1305                 packet->data[5] = strong / 256;
1306                 packet->data[6] = weak / 256;
1307                 packet->data[7] = 0x00;
1308                 packet->data[8] = 0x00;
1309                 packet->data[9] = 0x00;
1310                 packet->data[10] = 0x00;
1311                 packet->data[11] = 0x00;
1312                 packet->len = 12;
1313                 packet->pending = true;
1314                 break;
1315
1316         case XTYPE_XBOXONE:
1317                 packet->data[0] = 0x09; /* activate rumble */
1318                 packet->data[1] = 0x00;
1319                 packet->data[2] = xpad->odata_serial++;
1320                 packet->data[3] = 0x09;
1321                 packet->data[4] = 0x00;
1322                 packet->data[5] = 0x0F;
1323                 packet->data[6] = 0x00;
1324                 packet->data[7] = 0x00;
1325                 packet->data[8] = strong / 512; /* left actuator */
1326                 packet->data[9] = weak / 512;   /* right actuator */
1327                 packet->data[10] = 0xFF; /* on period */
1328                 packet->data[11] = 0x00; /* off period */
1329                 packet->data[12] = 0xFF; /* repeat count */
1330                 packet->len = 13;
1331                 packet->pending = true;
1332                 break;
1333
1334         default:
1335                 dev_dbg(&xpad->dev->dev,
1336                         "%s - rumble command sent to unsupported xpad type: %d\n",
1337                         __func__, xpad->xtype);
1338                 retval = -EINVAL;
1339                 goto out;
1340         }
1341
1342         retval = xpad_try_sending_next_out_packet(xpad);
1343
1344 out:
1345         spin_unlock_irqrestore(&xpad->odata_lock, flags);
1346         return retval;
1347 }
1348
1349 static int xpad_init_ff(struct usb_xpad *xpad)
1350 {
1351         if (xpad->xtype == XTYPE_UNKNOWN)
1352                 return 0;
1353
1354         input_set_capability(xpad->dev, EV_FF, FF_RUMBLE);
1355
1356         return input_ff_create_memless(xpad->dev, NULL, xpad_play_effect);
1357 }
1358
1359 #else
1360 static int xpad_init_ff(struct usb_xpad *xpad) { return 0; }
1361 #endif
1362
1363 #if defined(CONFIG_JOYSTICK_XPAD_LEDS)
1364 #include <linux/leds.h>
1365 #include <linux/idr.h>
1366
1367 static DEFINE_IDA(xpad_pad_seq);
1368
1369 struct xpad_led {
1370         char name[16];
1371         struct led_classdev led_cdev;
1372         struct usb_xpad *xpad;
1373 };
1374
1375 /**
1376  * set the LEDs on Xbox360 / Wireless Controllers
1377  * @param command
1378  *  0: off
1379  *  1: all blink, then previous setting
1380  *  2: 1/top-left blink, then on
1381  *  3: 2/top-right blink, then on
1382  *  4: 3/bottom-left blink, then on
1383  *  5: 4/bottom-right blink, then on
1384  *  6: 1/top-left on
1385  *  7: 2/top-right on
1386  *  8: 3/bottom-left on
1387  *  9: 4/bottom-right on
1388  * 10: rotate
1389  * 11: blink, based on previous setting
1390  * 12: slow blink, based on previous setting
1391  * 13: rotate with two lights
1392  * 14: persistent slow all blink
1393  * 15: blink once, then previous setting
1394  */
1395 static void xpad_send_led_command(struct usb_xpad *xpad, int command)
1396 {
1397         struct xpad_output_packet *packet =
1398                         &xpad->out_packets[XPAD_OUT_LED_IDX];
1399         unsigned long flags;
1400
1401         command %= 16;
1402
1403         spin_lock_irqsave(&xpad->odata_lock, flags);
1404
1405         switch (xpad->xtype) {
1406         case XTYPE_XBOX360:
1407                 packet->data[0] = 0x01;
1408                 packet->data[1] = 0x03;
1409                 packet->data[2] = command;
1410                 packet->len = 3;
1411                 packet->pending = true;
1412                 break;
1413
1414         case XTYPE_XBOX360W:
1415                 packet->data[0] = 0x00;
1416                 packet->data[1] = 0x00;
1417                 packet->data[2] = 0x08;
1418                 packet->data[3] = 0x40 + command;
1419                 packet->data[4] = 0x00;
1420                 packet->data[5] = 0x00;
1421                 packet->data[6] = 0x00;
1422                 packet->data[7] = 0x00;
1423                 packet->data[8] = 0x00;
1424                 packet->data[9] = 0x00;
1425                 packet->data[10] = 0x00;
1426                 packet->data[11] = 0x00;
1427                 packet->len = 12;
1428                 packet->pending = true;
1429                 break;
1430         }
1431
1432         xpad_try_sending_next_out_packet(xpad);
1433
1434         spin_unlock_irqrestore(&xpad->odata_lock, flags);
1435 }
1436
1437 /*
1438  * Light up the segment corresponding to the pad number on
1439  * Xbox 360 Controllers.
1440  */
1441 static void xpad_identify_controller(struct usb_xpad *xpad)
1442 {
1443         led_set_brightness(&xpad->led->led_cdev, (xpad->pad_nr % 4) + 2);
1444 }
1445
1446 static void xpad_led_set(struct led_classdev *led_cdev,
1447                          enum led_brightness value)
1448 {
1449         struct xpad_led *xpad_led = container_of(led_cdev,
1450                                                  struct xpad_led, led_cdev);
1451
1452         xpad_send_led_command(xpad_led->xpad, value);
1453 }
1454
1455 static int xpad_led_probe(struct usb_xpad *xpad)
1456 {
1457         struct xpad_led *led;
1458         struct led_classdev *led_cdev;
1459         int error;
1460
1461         if (xpad->xtype != XTYPE_XBOX360 && xpad->xtype != XTYPE_XBOX360W)
1462                 return 0;
1463
1464         xpad->led = led = kzalloc(sizeof(struct xpad_led), GFP_KERNEL);
1465         if (!led)
1466                 return -ENOMEM;
1467
1468         xpad->pad_nr = ida_simple_get(&xpad_pad_seq, 0, 0, GFP_KERNEL);
1469         if (xpad->pad_nr < 0) {
1470                 error = xpad->pad_nr;
1471                 goto err_free_mem;
1472         }
1473
1474         snprintf(led->name, sizeof(led->name), "xpad%d", xpad->pad_nr);
1475         led->xpad = xpad;
1476
1477         led_cdev = &led->led_cdev;
1478         led_cdev->name = led->name;
1479         led_cdev->brightness_set = xpad_led_set;
1480         led_cdev->flags = LED_CORE_SUSPENDRESUME;
1481
1482         error = led_classdev_register(&xpad->udev->dev, led_cdev);
1483         if (error)
1484                 goto err_free_id;
1485
1486         xpad_identify_controller(xpad);
1487
1488         return 0;
1489
1490 err_free_id:
1491         ida_simple_remove(&xpad_pad_seq, xpad->pad_nr);
1492 err_free_mem:
1493         kfree(led);
1494         xpad->led = NULL;
1495         return error;
1496 }
1497
1498 static void xpad_led_disconnect(struct usb_xpad *xpad)
1499 {
1500         struct xpad_led *xpad_led = xpad->led;
1501
1502         if (xpad_led) {
1503                 led_classdev_unregister(&xpad_led->led_cdev);
1504                 ida_simple_remove(&xpad_pad_seq, xpad->pad_nr);
1505                 kfree(xpad_led);
1506         }
1507 }
1508 #else
1509 static int xpad_led_probe(struct usb_xpad *xpad) { return 0; }
1510 static void xpad_led_disconnect(struct usb_xpad *xpad) { }
1511 #endif
1512
1513 static int xpad_start_input(struct usb_xpad *xpad)
1514 {
1515         int error;
1516
1517         if (usb_submit_urb(xpad->irq_in, GFP_KERNEL))
1518                 return -EIO;
1519
1520         if (xpad->xtype == XTYPE_XBOXONE) {
1521                 error = xpad_start_xbox_one(xpad);
1522                 if (error) {
1523                         usb_kill_urb(xpad->irq_in);
1524                         return error;
1525                 }
1526         }
1527
1528         return 0;
1529 }
1530
1531 static void xpad_stop_input(struct usb_xpad *xpad)
1532 {
1533         usb_kill_urb(xpad->irq_in);
1534 }
1535
1536 static void xpad360w_poweroff_controller(struct usb_xpad *xpad)
1537 {
1538         unsigned long flags;
1539         struct xpad_output_packet *packet =
1540                         &xpad->out_packets[XPAD_OUT_CMD_IDX];
1541
1542         spin_lock_irqsave(&xpad->odata_lock, flags);
1543
1544         packet->data[0] = 0x00;
1545         packet->data[1] = 0x00;
1546         packet->data[2] = 0x08;
1547         packet->data[3] = 0xC0;
1548         packet->data[4] = 0x00;
1549         packet->data[5] = 0x00;
1550         packet->data[6] = 0x00;
1551         packet->data[7] = 0x00;
1552         packet->data[8] = 0x00;
1553         packet->data[9] = 0x00;
1554         packet->data[10] = 0x00;
1555         packet->data[11] = 0x00;
1556         packet->len = 12;
1557         packet->pending = true;
1558
1559         /* Reset the sequence so we send out poweroff now */
1560         xpad->last_out_packet = -1;
1561         xpad_try_sending_next_out_packet(xpad);
1562
1563         spin_unlock_irqrestore(&xpad->odata_lock, flags);
1564 }
1565
1566 static int xpad360w_start_input(struct usb_xpad *xpad)
1567 {
1568         int error;
1569
1570         error = usb_submit_urb(xpad->irq_in, GFP_KERNEL);
1571         if (error)
1572                 return -EIO;
1573
1574         /*
1575          * Send presence packet.
1576          * This will force the controller to resend connection packets.
1577          * This is useful in the case we activate the module after the
1578          * adapter has been plugged in, as it won't automatically
1579          * send us info about the controllers.
1580          */
1581         error = xpad_inquiry_pad_presence(xpad);
1582         if (error) {
1583                 usb_kill_urb(xpad->irq_in);
1584                 return error;
1585         }
1586
1587         return 0;
1588 }
1589
1590 static void xpad360w_stop_input(struct usb_xpad *xpad)
1591 {
1592         usb_kill_urb(xpad->irq_in);
1593
1594         /* Make sure we are done with presence work if it was scheduled */
1595         flush_work(&xpad->work);
1596 }
1597
1598 static int xpad_open(struct input_dev *dev)
1599 {
1600         struct usb_xpad *xpad = input_get_drvdata(dev);
1601
1602         return xpad_start_input(xpad);
1603 }
1604
1605 static void xpad_close(struct input_dev *dev)
1606 {
1607         struct usb_xpad *xpad = input_get_drvdata(dev);
1608
1609         xpad_stop_input(xpad);
1610 }
1611
1612 static void xpad_set_up_abs(struct input_dev *input_dev, signed short abs)
1613 {
1614         struct usb_xpad *xpad = input_get_drvdata(input_dev);
1615
1616         switch (abs) {
1617         case ABS_X:
1618         case ABS_Y:
1619         case ABS_RX:
1620         case ABS_RY:    /* the two sticks */
1621                 input_set_abs_params(input_dev, abs, -32768, 32767, 16, 128);
1622                 break;
1623         case ABS_Z:
1624         case ABS_RZ:    /* the triggers (if mapped to axes) */
1625                 if (xpad->xtype == XTYPE_XBOXONE)
1626                         input_set_abs_params(input_dev, abs, 0, 1023, 0, 0);
1627                 else
1628                         input_set_abs_params(input_dev, abs, 0, 255, 0, 0);
1629                 break;
1630         case ABS_HAT0X:
1631         case ABS_HAT0Y: /* the d-pad (only if dpad is mapped to axes */
1632                 input_set_abs_params(input_dev, abs, -1, 1, 0, 0);
1633                 break;
1634         default:
1635                 input_set_abs_params(input_dev, abs, 0, 0, 0, 0);
1636                 break;
1637         }
1638 }
1639
1640 static void xpad_deinit_input(struct usb_xpad *xpad)
1641 {
1642         if (xpad->input_created) {
1643                 xpad->input_created = false;
1644                 xpad_led_disconnect(xpad);
1645                 input_unregister_device(xpad->dev);
1646         }
1647 }
1648
1649 static int xpad_init_input(struct usb_xpad *xpad)
1650 {
1651         struct input_dev *input_dev;
1652         int i, error;
1653
1654         input_dev = input_allocate_device();
1655         if (!input_dev)
1656                 return -ENOMEM;
1657
1658         xpad->dev = input_dev;
1659         input_dev->name = xpad->name;
1660         input_dev->phys = xpad->phys;
1661         usb_to_input_id(xpad->udev, &input_dev->id);
1662
1663         if (xpad->xtype == XTYPE_XBOX360W) {
1664                 /* x360w controllers and the receiver have different ids */
1665                 input_dev->id.product = 0x02a1;
1666         }
1667
1668         input_dev->dev.parent = &xpad->intf->dev;
1669
1670         input_set_drvdata(input_dev, xpad);
1671
1672         if (xpad->xtype != XTYPE_XBOX360W) {
1673                 input_dev->open = xpad_open;
1674                 input_dev->close = xpad_close;
1675         }
1676
1677         if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
1678                 /* set up axes */
1679                 for (i = 0; xpad_abs[i] >= 0; i++)
1680                         xpad_set_up_abs(input_dev, xpad_abs[i]);
1681         }
1682
1683         /* set up standard buttons */
1684         for (i = 0; xpad_common_btn[i] >= 0; i++)
1685                 input_set_capability(input_dev, EV_KEY, xpad_common_btn[i]);
1686
1687         /* set up model-specific ones */
1688         if (xpad->xtype == XTYPE_XBOX360 || xpad->xtype == XTYPE_XBOX360W ||
1689             xpad->xtype == XTYPE_XBOXONE) {
1690                 for (i = 0; xpad360_btn[i] >= 0; i++)
1691                         input_set_capability(input_dev, EV_KEY, xpad360_btn[i]);
1692         } else {
1693                 for (i = 0; xpad_btn[i] >= 0; i++)
1694                         input_set_capability(input_dev, EV_KEY, xpad_btn[i]);
1695         }
1696
1697         if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
1698                 for (i = 0; xpad_btn_pad[i] >= 0; i++)
1699                         input_set_capability(input_dev, EV_KEY,
1700                                              xpad_btn_pad[i]);
1701         }
1702
1703         /*
1704          * This should be a simple else block. However historically
1705          * xbox360w has mapped DPAD to buttons while xbox360 did not. This
1706          * made no sense, but now we can not just switch back and have to
1707          * support both behaviors.
1708          */
1709         if (!(xpad->mapping & MAP_DPAD_TO_BUTTONS) ||
1710             xpad->xtype == XTYPE_XBOX360W) {
1711                 for (i = 0; xpad_abs_pad[i] >= 0; i++)
1712                         xpad_set_up_abs(input_dev, xpad_abs_pad[i]);
1713         }
1714
1715         if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
1716                 for (i = 0; xpad_btn_triggers[i] >= 0; i++)
1717                         input_set_capability(input_dev, EV_KEY,
1718                                              xpad_btn_triggers[i]);
1719         } else {
1720                 for (i = 0; xpad_abs_triggers[i] >= 0; i++)
1721                         xpad_set_up_abs(input_dev, xpad_abs_triggers[i]);
1722         }
1723
1724         error = xpad_init_ff(xpad);
1725         if (error)
1726                 goto err_free_input;
1727
1728         error = xpad_led_probe(xpad);
1729         if (error)
1730                 goto err_destroy_ff;
1731
1732         error = input_register_device(xpad->dev);
1733         if (error)
1734                 goto err_disconnect_led;
1735
1736         xpad->input_created = true;
1737         return 0;
1738
1739 err_disconnect_led:
1740         xpad_led_disconnect(xpad);
1741 err_destroy_ff:
1742         input_ff_destroy(input_dev);
1743 err_free_input:
1744         input_free_device(input_dev);
1745         return error;
1746 }
1747
1748 static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id)
1749 {
1750         struct usb_device *udev = interface_to_usbdev(intf);
1751         struct usb_xpad *xpad;
1752         struct usb_endpoint_descriptor *ep_irq_in, *ep_irq_out;
1753         int i, error;
1754
1755         if (intf->cur_altsetting->desc.bNumEndpoints != 2)
1756                 return -ENODEV;
1757
1758         for (i = 0; xpad_device[i].idVendor; i++) {
1759                 if ((le16_to_cpu(udev->descriptor.idVendor) == xpad_device[i].idVendor) &&
1760                     (le16_to_cpu(udev->descriptor.idProduct) == xpad_device[i].idProduct))
1761                         break;
1762         }
1763
1764         xpad = kzalloc(sizeof(struct usb_xpad), GFP_KERNEL);
1765         if (!xpad)
1766                 return -ENOMEM;
1767
1768         usb_make_path(udev, xpad->phys, sizeof(xpad->phys));
1769         strlcat(xpad->phys, "/input0", sizeof(xpad->phys));
1770
1771         xpad->idata = usb_alloc_coherent(udev, XPAD_PKT_LEN,
1772                                          GFP_KERNEL, &xpad->idata_dma);
1773         if (!xpad->idata) {
1774                 error = -ENOMEM;
1775                 goto err_free_mem;
1776         }
1777
1778         xpad->irq_in = usb_alloc_urb(0, GFP_KERNEL);
1779         if (!xpad->irq_in) {
1780                 error = -ENOMEM;
1781                 goto err_free_idata;
1782         }
1783
1784         xpad->udev = udev;
1785         xpad->intf = intf;
1786         xpad->mapping = xpad_device[i].mapping;
1787         xpad->xtype = xpad_device[i].xtype;
1788         xpad->name = xpad_device[i].name;
1789         INIT_WORK(&xpad->work, xpad_presence_work);
1790
1791         if (xpad->xtype == XTYPE_UNKNOWN) {
1792                 if (intf->cur_altsetting->desc.bInterfaceClass == USB_CLASS_VENDOR_SPEC) {
1793                         if (intf->cur_altsetting->desc.bInterfaceProtocol == 129)
1794                                 xpad->xtype = XTYPE_XBOX360W;
1795                         else if (intf->cur_altsetting->desc.bInterfaceProtocol == 208)
1796                                 xpad->xtype = XTYPE_XBOXONE;
1797                         else
1798                                 xpad->xtype = XTYPE_XBOX360;
1799                 } else {
1800                         xpad->xtype = XTYPE_XBOX;
1801                 }
1802
1803                 if (dpad_to_buttons)
1804                         xpad->mapping |= MAP_DPAD_TO_BUTTONS;
1805                 if (triggers_to_buttons)
1806                         xpad->mapping |= MAP_TRIGGERS_TO_BUTTONS;
1807                 if (sticks_to_null)
1808                         xpad->mapping |= MAP_STICKS_TO_NULL;
1809         }
1810
1811         if (xpad->xtype == XTYPE_XBOXONE &&
1812             intf->cur_altsetting->desc.bInterfaceNumber != 0) {
1813                 /*
1814                  * The Xbox One controller lists three interfaces all with the
1815                  * same interface class, subclass and protocol. Differentiate by
1816                  * interface number.
1817                  */
1818                 error = -ENODEV;
1819                 goto err_free_in_urb;
1820         }
1821
1822         ep_irq_in = ep_irq_out = NULL;
1823
1824         for (i = 0; i < 2; i++) {
1825                 struct usb_endpoint_descriptor *ep =
1826                                 &intf->cur_altsetting->endpoint[i].desc;
1827
1828                 if (usb_endpoint_xfer_int(ep)) {
1829                         if (usb_endpoint_dir_in(ep))
1830                                 ep_irq_in = ep;
1831                         else
1832                                 ep_irq_out = ep;
1833                 }
1834         }
1835
1836         if (!ep_irq_in || !ep_irq_out) {
1837                 error = -ENODEV;
1838                 goto err_free_in_urb;
1839         }
1840
1841         error = xpad_init_output(intf, xpad, ep_irq_out);
1842         if (error)
1843                 goto err_free_in_urb;
1844
1845         usb_fill_int_urb(xpad->irq_in, udev,
1846                          usb_rcvintpipe(udev, ep_irq_in->bEndpointAddress),
1847                          xpad->idata, XPAD_PKT_LEN, xpad_irq_in,
1848                          xpad, ep_irq_in->bInterval);
1849         xpad->irq_in->transfer_dma = xpad->idata_dma;
1850         xpad->irq_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1851
1852         usb_set_intfdata(intf, xpad);
1853
1854         if (xpad->xtype == XTYPE_XBOX360W) {
1855                 /*
1856                  * Submit the int URB immediately rather than waiting for open
1857                  * because we get status messages from the device whether
1858                  * or not any controllers are attached.  In fact, it's
1859                  * exactly the message that a controller has arrived that
1860                  * we're waiting for.
1861                  */
1862                 error = xpad360w_start_input(xpad);
1863                 if (error)
1864                         goto err_deinit_output;
1865                 /*
1866                  * Wireless controllers require RESET_RESUME to work properly
1867                  * after suspend. Ideally this quirk should be in usb core
1868                  * quirk list, but we have too many vendors producing these
1869                  * controllers and we'd need to maintain 2 identical lists
1870                  * here in this driver and in usb core.
1871                  */
1872                 udev->quirks |= USB_QUIRK_RESET_RESUME;
1873         } else {
1874                 error = xpad_init_input(xpad);
1875                 if (error)
1876                         goto err_deinit_output;
1877         }
1878         return 0;
1879
1880 err_deinit_output:
1881         xpad_deinit_output(xpad);
1882 err_free_in_urb:
1883         usb_free_urb(xpad->irq_in);
1884 err_free_idata:
1885         usb_free_coherent(udev, XPAD_PKT_LEN, xpad->idata, xpad->idata_dma);
1886 err_free_mem:
1887         kfree(xpad);
1888         return error;
1889 }
1890
1891 static void xpad_disconnect(struct usb_interface *intf)
1892 {
1893         struct usb_xpad *xpad = usb_get_intfdata(intf);
1894
1895         if (xpad->xtype == XTYPE_XBOX360W)
1896                 xpad360w_stop_input(xpad);
1897
1898         xpad_deinit_input(xpad);
1899
1900         /*
1901          * Now that both input device and LED device are gone we can
1902          * stop output URB.
1903          */
1904         xpad_stop_output(xpad);
1905
1906         xpad_deinit_output(xpad);
1907
1908         usb_free_urb(xpad->irq_in);
1909         usb_free_coherent(xpad->udev, XPAD_PKT_LEN,
1910                         xpad->idata, xpad->idata_dma);
1911
1912         kfree(xpad);
1913
1914         usb_set_intfdata(intf, NULL);
1915 }
1916
1917 static int xpad_suspend(struct usb_interface *intf, pm_message_t message)
1918 {
1919         struct usb_xpad *xpad = usb_get_intfdata(intf);
1920         struct input_dev *input = xpad->dev;
1921
1922         if (xpad->xtype == XTYPE_XBOX360W) {
1923                 /*
1924                  * Wireless controllers always listen to input so
1925                  * they are notified when controller shows up
1926                  * or goes away.
1927                  */
1928                 xpad360w_stop_input(xpad);
1929
1930                 /*
1931                  * The wireless adapter is going off now, so the
1932                  * gamepads are going to become disconnected.
1933                  * Unless explicitly disabled, power them down
1934                  * so they don't just sit there flashing.
1935                  */
1936                 if (auto_poweroff && xpad->pad_present)
1937                         xpad360w_poweroff_controller(xpad);
1938         } else {
1939                 mutex_lock(&input->mutex);
1940                 if (input->users)
1941                         xpad_stop_input(xpad);
1942                 mutex_unlock(&input->mutex);
1943         }
1944
1945         xpad_stop_output(xpad);
1946
1947         return 0;
1948 }
1949
1950 static int xpad_resume(struct usb_interface *intf)
1951 {
1952         struct usb_xpad *xpad = usb_get_intfdata(intf);
1953         struct input_dev *input = xpad->dev;
1954         int retval = 0;
1955
1956         if (xpad->xtype == XTYPE_XBOX360W) {
1957                 retval = xpad360w_start_input(xpad);
1958         } else {
1959                 mutex_lock(&input->mutex);
1960                 if (input->users) {
1961                         retval = xpad_start_input(xpad);
1962                 } else if (xpad->xtype == XTYPE_XBOXONE) {
1963                         /*
1964                          * Even if there are no users, we'll send Xbox One pads
1965                          * the startup sequence so they don't sit there and
1966                          * blink until somebody opens the input device again.
1967                          */
1968                         retval = xpad_start_xbox_one(xpad);
1969                 }
1970                 mutex_unlock(&input->mutex);
1971         }
1972
1973         return retval;
1974 }
1975
1976 static struct usb_driver xpad_driver = {
1977         .name           = "xpad",
1978         .probe          = xpad_probe,
1979         .disconnect     = xpad_disconnect,
1980         .suspend        = xpad_suspend,
1981         .resume         = xpad_resume,
1982         .reset_resume   = xpad_resume,
1983         .id_table       = xpad_table,
1984 };
1985
1986 module_usb_driver(xpad_driver);
1987
1988 MODULE_AUTHOR(DRIVER_AUTHOR);
1989 MODULE_DESCRIPTION(DRIVER_DESC);
1990 MODULE_LICENSE("GPL");