xref: /linux/drivers/hid/hid-sony.c (revision 8137a49e1567726eb10fcf55ad141ac19804ca6b)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *  HID driver for Sony / PS2 / PS3 / PS4 BD devices.
4  *
5  *  Copyright (c) 1999 Andreas Gal
6  *  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
7  *  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
8  *  Copyright (c) 2008 Jiri Slaby
9  *  Copyright (c) 2012 David Dillow <dave@thedillows.org>
10  *  Copyright (c) 2006-2013 Jiri Kosina
11  *  Copyright (c) 2013 Colin Leitner <colin.leitner@gmail.com>
12  *  Copyright (c) 2014-2016 Frank Praznik <frank.praznik@gmail.com>
13  *  Copyright (c) 2018 Todd Kelner
14  *  Copyright (c) 2020 Pascal Giard <pascal.giard@etsmtl.ca>
15  *  Copyright (c) 2020 Sanjay Govind <sanjay.govind9@gmail.com>
16  */
17 
18 /*
19  */
20 
21 /*
22  * NOTE: in order for the Sony PS3 BD Remote Control to be found by
23  * a Bluetooth host, the key combination Start+Enter has to be kept pressed
24  * for about 7 seconds with the Bluetooth Host Controller in discovering mode.
25  *
26  * There will be no PIN request from the device.
27  */
28 
29 #include <linux/device.h>
30 #include <linux/hid.h>
31 #include <linux/module.h>
32 #include <linux/slab.h>
33 #include <linux/leds.h>
34 #include <linux/power_supply.h>
35 #include <linux/spinlock.h>
36 #include <linux/list.h>
37 #include <linux/idr.h>
38 #include <linux/input/mt.h>
39 #include <linux/crc32.h>
40 #include <linux/usb.h>
41 #include <linux/timer.h>
42 #include <asm/unaligned.h>
43 
44 #include "hid-ids.h"
45 
46 #define VAIO_RDESC_CONSTANT       BIT(0)
47 #define SIXAXIS_CONTROLLER_USB    BIT(1)
48 #define SIXAXIS_CONTROLLER_BT     BIT(2)
49 #define BUZZ_CONTROLLER           BIT(3)
50 #define PS3REMOTE                 BIT(4)
51 #define DUALSHOCK4_CONTROLLER_USB BIT(5)
52 #define DUALSHOCK4_CONTROLLER_BT  BIT(6)
53 #define DUALSHOCK4_DONGLE         BIT(7)
54 #define MOTION_CONTROLLER_USB     BIT(8)
55 #define MOTION_CONTROLLER_BT      BIT(9)
56 #define NAVIGATION_CONTROLLER_USB BIT(10)
57 #define NAVIGATION_CONTROLLER_BT  BIT(11)
58 #define SINO_LITE_CONTROLLER      BIT(12)
59 #define FUTUREMAX_DANCE_MAT       BIT(13)
60 #define NSG_MR5U_REMOTE_BT        BIT(14)
61 #define NSG_MR7U_REMOTE_BT        BIT(15)
62 #define SHANWAN_GAMEPAD           BIT(16)
63 #define GH_GUITAR_CONTROLLER      BIT(17)
64 #define GHL_GUITAR_PS3WIIU        BIT(18)
65 
66 #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)
67 #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT)
68 #define NAVIGATION_CONTROLLER (NAVIGATION_CONTROLLER_USB |\
69 				NAVIGATION_CONTROLLER_BT)
70 #define DUALSHOCK4_CONTROLLER (DUALSHOCK4_CONTROLLER_USB |\
71 				DUALSHOCK4_CONTROLLER_BT | \
72 				DUALSHOCK4_DONGLE)
73 #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER | BUZZ_CONTROLLER |\
74 				DUALSHOCK4_CONTROLLER | MOTION_CONTROLLER |\
75 				NAVIGATION_CONTROLLER)
76 #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER |\
77 				MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER)
78 #define SONY_FF_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER |\
79 				MOTION_CONTROLLER)
80 #define SONY_BT_DEVICE (SIXAXIS_CONTROLLER_BT | DUALSHOCK4_CONTROLLER_BT |\
81 			MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER_BT)
82 #define NSG_MRXU_REMOTE (NSG_MR5U_REMOTE_BT | NSG_MR7U_REMOTE_BT)
83 
84 #define MAX_LEDS 4
85 #define NSG_MRXU_MAX_X 1667
86 #define NSG_MRXU_MAX_Y 1868
87 
88 #define GHL_GUITAR_POKE_INTERVAL 10 /* In seconds */
89 #define GUITAR_TILT_USAGE 44
90 
91 /* Magic value and data taken from GHLtarUtility:
92  * https://github.com/ghlre/GHLtarUtility/blob/master/PS3Guitar.cs
93  * Note: The Wii U and PS3 dongles happen to share the same!
94  */
95 static const u16 ghl_ps3wiiu_magic_value = 0x201;
96 static const char ghl_ps3wiiu_magic_data[] = {
97 	0x02, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
98 };
99 
100 /* PS/3 Motion controller */
101 static u8 motion_rdesc[] = {
102 	0x05, 0x01,         /*  Usage Page (Desktop),               */
103 	0x09, 0x04,         /*  Usage (Joystick),                   */
104 	0xA1, 0x01,         /*  Collection (Application),           */
105 	0xA1, 0x02,         /*      Collection (Logical),           */
106 	0x85, 0x01,         /*          Report ID (1),              */
107 	0x75, 0x01,         /*          Report Size (1),            */
108 	0x95, 0x15,         /*          Report Count (21),          */
109 	0x15, 0x00,         /*          Logical Minimum (0),        */
110 	0x25, 0x01,         /*          Logical Maximum (1),        */
111 	0x35, 0x00,         /*          Physical Minimum (0),       */
112 	0x45, 0x01,         /*          Physical Maximum (1),       */
113 	0x05, 0x09,         /*          Usage Page (Button),        */
114 	0x19, 0x01,         /*          Usage Minimum (01h),        */
115 	0x29, 0x15,         /*          Usage Maximum (15h),        */
116 	0x81, 0x02,         /*          Input (Variable),           * Buttons */
117 	0x95, 0x0B,         /*          Report Count (11),          */
118 	0x06, 0x00, 0xFF,   /*          Usage Page (FF00h),         */
119 	0x81, 0x03,         /*          Input (Constant, Variable), * Padding */
120 	0x15, 0x00,         /*          Logical Minimum (0),        */
121 	0x26, 0xFF, 0x00,   /*          Logical Maximum (255),      */
122 	0x05, 0x01,         /*          Usage Page (Desktop),       */
123 	0xA1, 0x00,         /*          Collection (Physical),      */
124 	0x75, 0x08,         /*              Report Size (8),        */
125 	0x95, 0x01,         /*              Report Count (1),       */
126 	0x35, 0x00,         /*              Physical Minimum (0),   */
127 	0x46, 0xFF, 0x00,   /*              Physical Maximum (255), */
128 	0x09, 0x30,         /*              Usage (X),              */
129 	0x81, 0x02,         /*              Input (Variable),       * Trigger */
130 	0xC0,               /*          End Collection,             */
131 	0x06, 0x00, 0xFF,   /*          Usage Page (FF00h),         */
132 	0x75, 0x08,         /*          Report Size (8),            */
133 	0x95, 0x07,         /*          Report Count (7),           * skip 7 bytes */
134 	0x81, 0x02,         /*          Input (Variable),           */
135 	0x05, 0x01,         /*          Usage Page (Desktop),       */
136 	0x75, 0x10,         /*          Report Size (16),           */
137 	0x46, 0xFF, 0xFF,   /*          Physical Maximum (65535),   */
138 	0x27, 0xFF, 0xFF, 0x00, 0x00, /*      Logical Maximum (65535),    */
139 	0x95, 0x03,         /*          Report Count (3),           * 3x Accels */
140 	0x09, 0x33,         /*              Usage (rX),             */
141 	0x09, 0x34,         /*              Usage (rY),             */
142 	0x09, 0x35,         /*              Usage (rZ),             */
143 	0x81, 0x02,         /*          Input (Variable),           */
144 	0x06, 0x00, 0xFF,   /*          Usage Page (FF00h),         */
145 	0x95, 0x03,         /*          Report Count (3),           * Skip Accels 2nd frame */
146 	0x81, 0x02,         /*          Input (Variable),           */
147 	0x05, 0x01,         /*          Usage Page (Desktop),       */
148 	0x09, 0x01,         /*          Usage (Pointer),            */
149 	0x95, 0x03,         /*          Report Count (3),           * 3x Gyros */
150 	0x81, 0x02,         /*          Input (Variable),           */
151 	0x06, 0x00, 0xFF,   /*          Usage Page (FF00h),         */
152 	0x95, 0x03,         /*          Report Count (3),           * Skip Gyros 2nd frame */
153 	0x81, 0x02,         /*          Input (Variable),           */
154 	0x75, 0x0C,         /*          Report Size (12),           */
155 	0x46, 0xFF, 0x0F,   /*          Physical Maximum (4095),    */
156 	0x26, 0xFF, 0x0F,   /*          Logical Maximum (4095),     */
157 	0x95, 0x04,         /*          Report Count (4),           * Skip Temp and Magnetometers */
158 	0x81, 0x02,         /*          Input (Variable),           */
159 	0x75, 0x08,         /*          Report Size (8),            */
160 	0x46, 0xFF, 0x00,   /*          Physical Maximum (255),     */
161 	0x26, 0xFF, 0x00,   /*          Logical Maximum (255),      */
162 	0x95, 0x06,         /*          Report Count (6),           * Skip Timestamp and Extension Bytes */
163 	0x81, 0x02,         /*          Input (Variable),           */
164 	0x75, 0x08,         /*          Report Size (8),            */
165 	0x95, 0x30,         /*          Report Count (48),          */
166 	0x09, 0x01,         /*          Usage (Pointer),            */
167 	0x91, 0x02,         /*          Output (Variable),          */
168 	0x75, 0x08,         /*          Report Size (8),            */
169 	0x95, 0x30,         /*          Report Count (48),          */
170 	0x09, 0x01,         /*          Usage (Pointer),            */
171 	0xB1, 0x02,         /*          Feature (Variable),         */
172 	0xC0,               /*      End Collection,                 */
173 	0xA1, 0x02,         /*      Collection (Logical),           */
174 	0x85, 0x02,         /*          Report ID (2),              */
175 	0x75, 0x08,         /*          Report Size (8),            */
176 	0x95, 0x30,         /*          Report Count (48),          */
177 	0x09, 0x01,         /*          Usage (Pointer),            */
178 	0xB1, 0x02,         /*          Feature (Variable),         */
179 	0xC0,               /*      End Collection,                 */
180 	0xA1, 0x02,         /*      Collection (Logical),           */
181 	0x85, 0xEE,         /*          Report ID (238),            */
182 	0x75, 0x08,         /*          Report Size (8),            */
183 	0x95, 0x30,         /*          Report Count (48),          */
184 	0x09, 0x01,         /*          Usage (Pointer),            */
185 	0xB1, 0x02,         /*          Feature (Variable),         */
186 	0xC0,               /*      End Collection,                 */
187 	0xA1, 0x02,         /*      Collection (Logical),           */
188 	0x85, 0xEF,         /*          Report ID (239),            */
189 	0x75, 0x08,         /*          Report Size (8),            */
190 	0x95, 0x30,         /*          Report Count (48),          */
191 	0x09, 0x01,         /*          Usage (Pointer),            */
192 	0xB1, 0x02,         /*          Feature (Variable),         */
193 	0xC0,               /*      End Collection,                 */
194 	0xC0                /*  End Collection                      */
195 };
196 
197 static u8 ps3remote_rdesc[] = {
198 	0x05, 0x01,          /* GUsagePage Generic Desktop */
199 	0x09, 0x05,          /* LUsage 0x05 [Game Pad] */
200 	0xA1, 0x01,          /* MCollection Application (mouse, keyboard) */
201 
202 	 /* Use collection 1 for joypad buttons */
203 	 0xA1, 0x02,         /* MCollection Logical (interrelated data) */
204 
205 	  /*
206 	   * Ignore the 1st byte, maybe it is used for a controller
207 	   * number but it's not needed for correct operation
208 	   */
209 	  0x75, 0x08,        /* GReportSize 0x08 [8] */
210 	  0x95, 0x01,        /* GReportCount 0x01 [1] */
211 	  0x81, 0x01,        /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
212 
213 	  /*
214 	   * Bytes from 2nd to 4th are a bitmap for joypad buttons, for these
215 	   * buttons multiple keypresses are allowed
216 	   */
217 	  0x05, 0x09,        /* GUsagePage Button */
218 	  0x19, 0x01,        /* LUsageMinimum 0x01 [Button 1 (primary/trigger)] */
219 	  0x29, 0x18,        /* LUsageMaximum 0x18 [Button 24] */
220 	  0x14,              /* GLogicalMinimum [0] */
221 	  0x25, 0x01,        /* GLogicalMaximum 0x01 [1] */
222 	  0x75, 0x01,        /* GReportSize 0x01 [1] */
223 	  0x95, 0x18,        /* GReportCount 0x18 [24] */
224 	  0x81, 0x02,        /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
225 
226 	  0xC0,              /* MEndCollection */
227 
228 	 /* Use collection 2 for remote control buttons */
229 	 0xA1, 0x02,         /* MCollection Logical (interrelated data) */
230 
231 	  /* 5th byte is used for remote control buttons */
232 	  0x05, 0x09,        /* GUsagePage Button */
233 	  0x18,              /* LUsageMinimum [No button pressed] */
234 	  0x29, 0xFE,        /* LUsageMaximum 0xFE [Button 254] */
235 	  0x14,              /* GLogicalMinimum [0] */
236 	  0x26, 0xFE, 0x00,  /* GLogicalMaximum 0x00FE [254] */
237 	  0x75, 0x08,        /* GReportSize 0x08 [8] */
238 	  0x95, 0x01,        /* GReportCount 0x01 [1] */
239 	  0x80,              /* MInput  */
240 
241 	  /*
242 	   * Ignore bytes from 6th to 11th, 6th to 10th are always constant at
243 	   * 0xff and 11th is for press indication
244 	   */
245 	  0x75, 0x08,        /* GReportSize 0x08 [8] */
246 	  0x95, 0x06,        /* GReportCount 0x06 [6] */
247 	  0x81, 0x01,        /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
248 
249 	  /* 12th byte is for battery strength */
250 	  0x05, 0x06,        /* GUsagePage Generic Device Controls */
251 	  0x09, 0x20,        /* LUsage 0x20 [Battery Strength] */
252 	  0x14,              /* GLogicalMinimum [0] */
253 	  0x25, 0x05,        /* GLogicalMaximum 0x05 [5] */
254 	  0x75, 0x08,        /* GReportSize 0x08 [8] */
255 	  0x95, 0x01,        /* GReportCount 0x01 [1] */
256 	  0x81, 0x02,        /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
257 
258 	  0xC0,              /* MEndCollection */
259 
260 	 0xC0                /* MEndCollection [Game Pad] */
261 };
262 
263 static const unsigned int ps3remote_keymap_joypad_buttons[] = {
264 	[0x01] = KEY_SELECT,
265 	[0x02] = BTN_THUMBL,		/* L3 */
266 	[0x03] = BTN_THUMBR,		/* R3 */
267 	[0x04] = BTN_START,
268 	[0x05] = KEY_UP,
269 	[0x06] = KEY_RIGHT,
270 	[0x07] = KEY_DOWN,
271 	[0x08] = KEY_LEFT,
272 	[0x09] = BTN_TL2,		/* L2 */
273 	[0x0a] = BTN_TR2,		/* R2 */
274 	[0x0b] = BTN_TL,		/* L1 */
275 	[0x0c] = BTN_TR,		/* R1 */
276 	[0x0d] = KEY_OPTION,		/* options/triangle */
277 	[0x0e] = KEY_BACK,		/* back/circle */
278 	[0x0f] = BTN_0,			/* cross */
279 	[0x10] = KEY_SCREEN,		/* view/square */
280 	[0x11] = KEY_HOMEPAGE,		/* PS button */
281 	[0x14] = KEY_ENTER,
282 };
283 static const unsigned int ps3remote_keymap_remote_buttons[] = {
284 	[0x00] = KEY_1,
285 	[0x01] = KEY_2,
286 	[0x02] = KEY_3,
287 	[0x03] = KEY_4,
288 	[0x04] = KEY_5,
289 	[0x05] = KEY_6,
290 	[0x06] = KEY_7,
291 	[0x07] = KEY_8,
292 	[0x08] = KEY_9,
293 	[0x09] = KEY_0,
294 	[0x0e] = KEY_ESC,		/* return */
295 	[0x0f] = KEY_CLEAR,
296 	[0x16] = KEY_EJECTCD,
297 	[0x1a] = KEY_MENU,		/* top menu */
298 	[0x28] = KEY_TIME,
299 	[0x30] = KEY_PREVIOUS,
300 	[0x31] = KEY_NEXT,
301 	[0x32] = KEY_PLAY,
302 	[0x33] = KEY_REWIND,		/* scan back */
303 	[0x34] = KEY_FORWARD,		/* scan forward */
304 	[0x38] = KEY_STOP,
305 	[0x39] = KEY_PAUSE,
306 	[0x40] = KEY_CONTEXT_MENU,	/* pop up/menu */
307 	[0x60] = KEY_FRAMEBACK,		/* slow/step back */
308 	[0x61] = KEY_FRAMEFORWARD,	/* slow/step forward */
309 	[0x63] = KEY_SUBTITLE,
310 	[0x64] = KEY_AUDIO,
311 	[0x65] = KEY_ANGLE,
312 	[0x70] = KEY_INFO,		/* display */
313 	[0x80] = KEY_BLUE,
314 	[0x81] = KEY_RED,
315 	[0x82] = KEY_GREEN,
316 	[0x83] = KEY_YELLOW,
317 };
318 
319 static const unsigned int buzz_keymap[] = {
320 	/*
321 	 * The controller has 4 remote buzzers, each with one LED and 5
322 	 * buttons.
323 	 *
324 	 * We use the mapping chosen by the controller, which is:
325 	 *
326 	 * Key          Offset
327 	 * -------------------
328 	 * Buzz              1
329 	 * Blue              5
330 	 * Orange            4
331 	 * Green             3
332 	 * Yellow            2
333 	 *
334 	 * So, for example, the orange button on the third buzzer is mapped to
335 	 * BTN_TRIGGER_HAPPY14
336 	 */
337 	 [1] = BTN_TRIGGER_HAPPY1,
338 	 [2] = BTN_TRIGGER_HAPPY2,
339 	 [3] = BTN_TRIGGER_HAPPY3,
340 	 [4] = BTN_TRIGGER_HAPPY4,
341 	 [5] = BTN_TRIGGER_HAPPY5,
342 	 [6] = BTN_TRIGGER_HAPPY6,
343 	 [7] = BTN_TRIGGER_HAPPY7,
344 	 [8] = BTN_TRIGGER_HAPPY8,
345 	 [9] = BTN_TRIGGER_HAPPY9,
346 	[10] = BTN_TRIGGER_HAPPY10,
347 	[11] = BTN_TRIGGER_HAPPY11,
348 	[12] = BTN_TRIGGER_HAPPY12,
349 	[13] = BTN_TRIGGER_HAPPY13,
350 	[14] = BTN_TRIGGER_HAPPY14,
351 	[15] = BTN_TRIGGER_HAPPY15,
352 	[16] = BTN_TRIGGER_HAPPY16,
353 	[17] = BTN_TRIGGER_HAPPY17,
354 	[18] = BTN_TRIGGER_HAPPY18,
355 	[19] = BTN_TRIGGER_HAPPY19,
356 	[20] = BTN_TRIGGER_HAPPY20,
357 };
358 
359 /* The Navigation controller is a partial DS3 and uses the same HID report
360  * and hence the same keymap indices, however not not all axes/buttons
361  * are physically present. We use the same axis and button mapping as
362  * the DS3, which uses the Linux gamepad spec.
363  */
364 static const unsigned int navigation_absmap[] = {
365 	[0x30] = ABS_X,
366 	[0x31] = ABS_Y,
367 	[0x33] = ABS_Z, /* L2 */
368 };
369 
370 /* Buttons not physically available on the device, but still available
371  * in the reports are explicitly set to 0 for documentation purposes.
372  */
373 static const unsigned int navigation_keymap[] = {
374 	[0x01] = 0, /* Select */
375 	[0x02] = BTN_THUMBL, /* L3 */
376 	[0x03] = 0, /* R3 */
377 	[0x04] = 0, /* Start */
378 	[0x05] = BTN_DPAD_UP, /* Up */
379 	[0x06] = BTN_DPAD_RIGHT, /* Right */
380 	[0x07] = BTN_DPAD_DOWN, /* Down */
381 	[0x08] = BTN_DPAD_LEFT, /* Left */
382 	[0x09] = BTN_TL2, /* L2 */
383 	[0x0a] = 0, /* R2 */
384 	[0x0b] = BTN_TL, /* L1 */
385 	[0x0c] = 0, /* R1 */
386 	[0x0d] = BTN_NORTH, /* Triangle */
387 	[0x0e] = BTN_EAST, /* Circle */
388 	[0x0f] = BTN_SOUTH, /* Cross */
389 	[0x10] = BTN_WEST, /* Square */
390 	[0x11] = BTN_MODE, /* PS */
391 };
392 
393 static const unsigned int sixaxis_absmap[] = {
394 	[0x30] = ABS_X,
395 	[0x31] = ABS_Y,
396 	[0x32] = ABS_RX, /* right stick X */
397 	[0x35] = ABS_RY, /* right stick Y */
398 };
399 
400 static const unsigned int sixaxis_keymap[] = {
401 	[0x01] = BTN_SELECT, /* Select */
402 	[0x02] = BTN_THUMBL, /* L3 */
403 	[0x03] = BTN_THUMBR, /* R3 */
404 	[0x04] = BTN_START, /* Start */
405 	[0x05] = BTN_DPAD_UP, /* Up */
406 	[0x06] = BTN_DPAD_RIGHT, /* Right */
407 	[0x07] = BTN_DPAD_DOWN, /* Down */
408 	[0x08] = BTN_DPAD_LEFT, /* Left */
409 	[0x09] = BTN_TL2, /* L2 */
410 	[0x0a] = BTN_TR2, /* R2 */
411 	[0x0b] = BTN_TL, /* L1 */
412 	[0x0c] = BTN_TR, /* R1 */
413 	[0x0d] = BTN_NORTH, /* Triangle */
414 	[0x0e] = BTN_EAST, /* Circle */
415 	[0x0f] = BTN_SOUTH, /* Cross */
416 	[0x10] = BTN_WEST, /* Square */
417 	[0x11] = BTN_MODE, /* PS */
418 };
419 
420 static const unsigned int ds4_absmap[] = {
421 	[0x30] = ABS_X,
422 	[0x31] = ABS_Y,
423 	[0x32] = ABS_RX, /* right stick X */
424 	[0x33] = ABS_Z, /* L2 */
425 	[0x34] = ABS_RZ, /* R2 */
426 	[0x35] = ABS_RY, /* right stick Y */
427 };
428 
429 static const unsigned int ds4_keymap[] = {
430 	[0x1] = BTN_WEST, /* Square */
431 	[0x2] = BTN_SOUTH, /* Cross */
432 	[0x3] = BTN_EAST, /* Circle */
433 	[0x4] = BTN_NORTH, /* Triangle */
434 	[0x5] = BTN_TL, /* L1 */
435 	[0x6] = BTN_TR, /* R1 */
436 	[0x7] = BTN_TL2, /* L2 */
437 	[0x8] = BTN_TR2, /* R2 */
438 	[0x9] = BTN_SELECT, /* Share */
439 	[0xa] = BTN_START, /* Options */
440 	[0xb] = BTN_THUMBL, /* L3 */
441 	[0xc] = BTN_THUMBR, /* R3 */
442 	[0xd] = BTN_MODE, /* PS */
443 };
444 
445 static const struct {int x; int y; } ds4_hat_mapping[] = {
446 	{0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1},
447 	{0, 0}
448 };
449 
450 static enum power_supply_property sony_battery_props[] = {
451 	POWER_SUPPLY_PROP_PRESENT,
452 	POWER_SUPPLY_PROP_CAPACITY,
453 	POWER_SUPPLY_PROP_SCOPE,
454 	POWER_SUPPLY_PROP_STATUS,
455 };
456 
457 struct sixaxis_led {
458 	u8 time_enabled; /* the total time the led is active (0xff means forever) */
459 	u8 duty_length;  /* how long a cycle is in deciseconds (0 means "really fast") */
460 	u8 enabled;
461 	u8 duty_off; /* % of duty_length the led is off (0xff means 100%) */
462 	u8 duty_on;  /* % of duty_length the led is on (0xff mean 100%) */
463 } __packed;
464 
465 struct sixaxis_rumble {
466 	u8 padding;
467 	u8 right_duration; /* Right motor duration (0xff means forever) */
468 	u8 right_motor_on; /* Right (small) motor on/off, only supports values of 0 or 1 (off/on) */
469 	u8 left_duration;    /* Left motor duration (0xff means forever) */
470 	u8 left_motor_force; /* left (large) motor, supports force values from 0 to 255 */
471 } __packed;
472 
473 struct sixaxis_output_report {
474 	u8 report_id;
475 	struct sixaxis_rumble rumble;
476 	u8 padding[4];
477 	u8 leds_bitmap; /* bitmap of enabled LEDs: LED_1 = 0x02, LED_2 = 0x04, ... */
478 	struct sixaxis_led led[4];    /* LEDx at (4 - x) */
479 	struct sixaxis_led _reserved; /* LED5, not actually soldered */
480 } __packed;
481 
482 union sixaxis_output_report_01 {
483 	struct sixaxis_output_report data;
484 	u8 buf[36];
485 };
486 
487 struct motion_output_report_02 {
488 	u8 type, zero;
489 	u8 r, g, b;
490 	u8 zero2;
491 	u8 rumble;
492 };
493 
494 #define DS4_FEATURE_REPORT_0x02_SIZE 37
495 #define DS4_FEATURE_REPORT_0x05_SIZE 41
496 #define DS4_FEATURE_REPORT_0x81_SIZE 7
497 #define DS4_FEATURE_REPORT_0xA3_SIZE 49
498 #define DS4_INPUT_REPORT_0x11_SIZE 78
499 #define DS4_OUTPUT_REPORT_0x05_SIZE 32
500 #define DS4_OUTPUT_REPORT_0x11_SIZE 78
501 #define SIXAXIS_REPORT_0xF2_SIZE 17
502 #define SIXAXIS_REPORT_0xF5_SIZE 8
503 #define MOTION_REPORT_0x02_SIZE 49
504 
505 /* Offsets relative to USB input report (0x1). Bluetooth (0x11) requires an
506  * additional +2.
507  */
508 #define DS4_INPUT_REPORT_AXIS_OFFSET      1
509 #define DS4_INPUT_REPORT_BUTTON_OFFSET    5
510 #define DS4_INPUT_REPORT_TIMESTAMP_OFFSET 10
511 #define DS4_INPUT_REPORT_GYRO_X_OFFSET   13
512 #define DS4_INPUT_REPORT_BATTERY_OFFSET  30
513 #define DS4_INPUT_REPORT_TOUCHPAD_OFFSET 33
514 
515 #define SENSOR_SUFFIX " Motion Sensors"
516 #define DS4_TOUCHPAD_SUFFIX " Touchpad"
517 
518 /* Default to 4ms poll interval, which is same as USB (not adjustable). */
519 #define DS4_BT_DEFAULT_POLL_INTERVAL_MS 4
520 #define DS4_BT_MAX_POLL_INTERVAL_MS 62
521 #define DS4_GYRO_RES_PER_DEG_S 1024
522 #define DS4_ACC_RES_PER_G      8192
523 
524 #define SIXAXIS_INPUT_REPORT_ACC_X_OFFSET 41
525 #define SIXAXIS_ACC_RES_PER_G 113
526 
527 static DEFINE_SPINLOCK(sony_dev_list_lock);
528 static LIST_HEAD(sony_device_list);
529 static DEFINE_IDA(sony_device_id_allocator);
530 
531 /* Used for calibration of DS4 accelerometer and gyro. */
532 struct ds4_calibration_data {
533 	int abs_code;
534 	short bias;
535 	/* Calibration requires scaling against a sensitivity value, which is a
536 	 * float. Store sensitivity as a fraction to limit floating point
537 	 * calculations until final calibration.
538 	 */
539 	int sens_numer;
540 	int sens_denom;
541 };
542 
543 enum ds4_dongle_state {
544 	DONGLE_DISCONNECTED,
545 	DONGLE_CALIBRATING,
546 	DONGLE_CONNECTED,
547 	DONGLE_DISABLED
548 };
549 
550 enum sony_worker {
551 	SONY_WORKER_STATE,
552 	SONY_WORKER_HOTPLUG
553 };
554 
555 struct sony_sc {
556 	spinlock_t lock;
557 	struct list_head list_node;
558 	struct hid_device *hdev;
559 	struct input_dev *touchpad;
560 	struct input_dev *sensor_dev;
561 	struct led_classdev *leds[MAX_LEDS];
562 	unsigned long quirks;
563 	struct work_struct hotplug_worker;
564 	struct work_struct state_worker;
565 	void (*send_output_report)(struct sony_sc *);
566 	struct power_supply *battery;
567 	struct power_supply_desc battery_desc;
568 	int device_id;
569 	unsigned fw_version;
570 	bool fw_version_created;
571 	unsigned hw_version;
572 	bool hw_version_created;
573 	u8 *output_report_dmabuf;
574 
575 #ifdef CONFIG_SONY_FF
576 	u8 left;
577 	u8 right;
578 #endif
579 
580 	u8 mac_address[6];
581 	u8 hotplug_worker_initialized;
582 	u8 state_worker_initialized;
583 	u8 defer_initialization;
584 	u8 battery_capacity;
585 	int battery_status;
586 	u8 led_state[MAX_LEDS];
587 	u8 led_delay_on[MAX_LEDS];
588 	u8 led_delay_off[MAX_LEDS];
589 	u8 led_count;
590 
591 	bool timestamp_initialized;
592 	u16 prev_timestamp;
593 	unsigned int timestamp_us;
594 
595 	u8 ds4_bt_poll_interval;
596 	enum ds4_dongle_state ds4_dongle_state;
597 	/* DS4 calibration data */
598 	struct ds4_calibration_data ds4_calib_data[6];
599 	/* GH Live */
600 	struct urb *ghl_urb;
601 	struct timer_list ghl_poke_timer;
602 };
603 
604 static void sony_set_leds(struct sony_sc *sc);
605 
606 static inline void sony_schedule_work(struct sony_sc *sc,
607 				      enum sony_worker which)
608 {
609 	unsigned long flags;
610 
611 	switch (which) {
612 	case SONY_WORKER_STATE:
613 		spin_lock_irqsave(&sc->lock, flags);
614 		if (!sc->defer_initialization && sc->state_worker_initialized)
615 			schedule_work(&sc->state_worker);
616 		spin_unlock_irqrestore(&sc->lock, flags);
617 		break;
618 	case SONY_WORKER_HOTPLUG:
619 		if (sc->hotplug_worker_initialized)
620 			schedule_work(&sc->hotplug_worker);
621 		break;
622 	}
623 }
624 
625 static void ghl_magic_poke_cb(struct urb *urb)
626 {
627 	struct sony_sc *sc = urb->context;
628 
629 	if (urb->status < 0)
630 		hid_err(sc->hdev, "URB transfer failed : %d", urb->status);
631 
632 	mod_timer(&sc->ghl_poke_timer, jiffies + GHL_GUITAR_POKE_INTERVAL*HZ);
633 }
634 
635 static void ghl_magic_poke(struct timer_list *t)
636 {
637 	int ret;
638 	struct sony_sc *sc = from_timer(sc, t, ghl_poke_timer);
639 
640 	ret = usb_submit_urb(sc->ghl_urb, GFP_ATOMIC);
641 	if (ret < 0)
642 		hid_err(sc->hdev, "usb_submit_urb failed: %d", ret);
643 }
644 
645 static int ghl_init_urb(struct sony_sc *sc, struct usb_device *usbdev)
646 {
647 	struct usb_ctrlrequest *cr;
648 	u16 poke_size;
649 	u8 *databuf;
650 	unsigned int pipe;
651 
652 	poke_size = ARRAY_SIZE(ghl_ps3wiiu_magic_data);
653 	pipe = usb_sndctrlpipe(usbdev, 0);
654 
655 	cr = devm_kzalloc(&sc->hdev->dev, sizeof(*cr), GFP_ATOMIC);
656 	if (cr == NULL)
657 		return -ENOMEM;
658 
659 	databuf = devm_kzalloc(&sc->hdev->dev, poke_size, GFP_ATOMIC);
660 	if (databuf == NULL)
661 		return -ENOMEM;
662 
663 	cr->bRequestType =
664 		USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT;
665 	cr->bRequest = USB_REQ_SET_CONFIGURATION;
666 	cr->wValue = cpu_to_le16(ghl_ps3wiiu_magic_value);
667 	cr->wIndex = 0;
668 	cr->wLength = cpu_to_le16(poke_size);
669 	memcpy(databuf, ghl_ps3wiiu_magic_data, poke_size);
670 	usb_fill_control_urb(
671 		sc->ghl_urb, usbdev, pipe,
672 		(unsigned char *) cr, databuf, poke_size,
673 		ghl_magic_poke_cb, sc);
674 	return 0;
675 }
676 
677 static int guitar_mapping(struct hid_device *hdev, struct hid_input *hi,
678 			  struct hid_field *field, struct hid_usage *usage,
679 			  unsigned long **bit, int *max)
680 {
681 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) {
682 		unsigned int abs = usage->hid & HID_USAGE;
683 
684 		if (abs == GUITAR_TILT_USAGE) {
685 			hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RY);
686 			return 1;
687 		}
688 	}
689 	return 0;
690 }
691 
692 static ssize_t ds4_show_poll_interval(struct device *dev,
693 				struct device_attribute
694 				*attr, char *buf)
695 {
696 	struct hid_device *hdev = to_hid_device(dev);
697 	struct sony_sc *sc = hid_get_drvdata(hdev);
698 
699 	return snprintf(buf, PAGE_SIZE, "%i\n", sc->ds4_bt_poll_interval);
700 }
701 
702 static ssize_t ds4_store_poll_interval(struct device *dev,
703 				struct device_attribute *attr,
704 				const char *buf, size_t count)
705 {
706 	struct hid_device *hdev = to_hid_device(dev);
707 	struct sony_sc *sc = hid_get_drvdata(hdev);
708 	unsigned long flags;
709 	u8 interval;
710 
711 	if (kstrtou8(buf, 0, &interval))
712 		return -EINVAL;
713 
714 	if (interval > DS4_BT_MAX_POLL_INTERVAL_MS)
715 		return -EINVAL;
716 
717 	spin_lock_irqsave(&sc->lock, flags);
718 	sc->ds4_bt_poll_interval = interval;
719 	spin_unlock_irqrestore(&sc->lock, flags);
720 
721 	sony_schedule_work(sc, SONY_WORKER_STATE);
722 
723 	return count;
724 }
725 
726 static DEVICE_ATTR(bt_poll_interval, 0644, ds4_show_poll_interval,
727 		ds4_store_poll_interval);
728 
729 static ssize_t sony_show_firmware_version(struct device *dev,
730 				struct device_attribute
731 				*attr, char *buf)
732 {
733 	struct hid_device *hdev = to_hid_device(dev);
734 	struct sony_sc *sc = hid_get_drvdata(hdev);
735 
736 	return snprintf(buf, PAGE_SIZE, "0x%04x\n", sc->fw_version);
737 }
738 
739 static DEVICE_ATTR(firmware_version, 0444, sony_show_firmware_version, NULL);
740 
741 static ssize_t sony_show_hardware_version(struct device *dev,
742 				struct device_attribute
743 				*attr, char *buf)
744 {
745 	struct hid_device *hdev = to_hid_device(dev);
746 	struct sony_sc *sc = hid_get_drvdata(hdev);
747 
748 	return snprintf(buf, PAGE_SIZE, "0x%04x\n", sc->hw_version);
749 }
750 
751 static DEVICE_ATTR(hardware_version, 0444, sony_show_hardware_version, NULL);
752 
753 static u8 *motion_fixup(struct hid_device *hdev, u8 *rdesc,
754 			     unsigned int *rsize)
755 {
756 	*rsize = sizeof(motion_rdesc);
757 	return motion_rdesc;
758 }
759 
760 static u8 *ps3remote_fixup(struct hid_device *hdev, u8 *rdesc,
761 			     unsigned int *rsize)
762 {
763 	*rsize = sizeof(ps3remote_rdesc);
764 	return ps3remote_rdesc;
765 }
766 
767 static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi,
768 			     struct hid_field *field, struct hid_usage *usage,
769 			     unsigned long **bit, int *max)
770 {
771 	unsigned int key = usage->hid & HID_USAGE;
772 
773 	if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
774 		return -1;
775 
776 	switch (usage->collection_index) {
777 	case 1:
778 		if (key >= ARRAY_SIZE(ps3remote_keymap_joypad_buttons))
779 			return -1;
780 
781 		key = ps3remote_keymap_joypad_buttons[key];
782 		if (!key)
783 			return -1;
784 		break;
785 	case 2:
786 		if (key >= ARRAY_SIZE(ps3remote_keymap_remote_buttons))
787 			return -1;
788 
789 		key = ps3remote_keymap_remote_buttons[key];
790 		if (!key)
791 			return -1;
792 		break;
793 	default:
794 		return -1;
795 	}
796 
797 	hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
798 	return 1;
799 }
800 
801 static int navigation_mapping(struct hid_device *hdev, struct hid_input *hi,
802 			  struct hid_field *field, struct hid_usage *usage,
803 			  unsigned long **bit, int *max)
804 {
805 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
806 		unsigned int key = usage->hid & HID_USAGE;
807 
808 		if (key >= ARRAY_SIZE(sixaxis_keymap))
809 			return -1;
810 
811 		key = navigation_keymap[key];
812 		if (!key)
813 			return -1;
814 
815 		hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
816 		return 1;
817 	} else if (usage->hid == HID_GD_POINTER) {
818 		/* See comment in sixaxis_mapping, basically the L2 (and R2)
819 		 * triggers are reported through GD Pointer.
820 		 * In addition we ignore any analog button 'axes' and only
821 		 * support digital buttons.
822 		 */
823 		switch (usage->usage_index) {
824 		case 8: /* L2 */
825 			usage->hid = HID_GD_Z;
826 			break;
827 		default:
828 			return -1;
829 		}
830 
831 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, usage->hid & 0xf);
832 		return 1;
833 	} else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
834 		unsigned int abs = usage->hid & HID_USAGE;
835 
836 		if (abs >= ARRAY_SIZE(navigation_absmap))
837 			return -1;
838 
839 		abs = navigation_absmap[abs];
840 
841 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
842 		return 1;
843 	}
844 
845 	return -1;
846 }
847 
848 
849 static int sixaxis_mapping(struct hid_device *hdev, struct hid_input *hi,
850 			  struct hid_field *field, struct hid_usage *usage,
851 			  unsigned long **bit, int *max)
852 {
853 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
854 		unsigned int key = usage->hid & HID_USAGE;
855 
856 		if (key >= ARRAY_SIZE(sixaxis_keymap))
857 			return -1;
858 
859 		key = sixaxis_keymap[key];
860 		hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
861 		return 1;
862 	} else if (usage->hid == HID_GD_POINTER) {
863 		/* The DS3 provides analog values for most buttons and even
864 		 * for HAT axes through GD Pointer. L2 and R2 are reported
865 		 * among these as well instead of as GD Z / RZ. Remap L2
866 		 * and R2 and ignore other analog 'button axes' as there is
867 		 * no good way for reporting them.
868 		 */
869 		switch (usage->usage_index) {
870 		case 8: /* L2 */
871 			usage->hid = HID_GD_Z;
872 			break;
873 		case 9: /* R2 */
874 			usage->hid = HID_GD_RZ;
875 			break;
876 		default:
877 			return -1;
878 		}
879 
880 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, usage->hid & 0xf);
881 		return 1;
882 	} else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
883 		unsigned int abs = usage->hid & HID_USAGE;
884 
885 		if (abs >= ARRAY_SIZE(sixaxis_absmap))
886 			return -1;
887 
888 		abs = sixaxis_absmap[abs];
889 
890 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
891 		return 1;
892 	}
893 
894 	return -1;
895 }
896 
897 static int ds4_mapping(struct hid_device *hdev, struct hid_input *hi,
898 		       struct hid_field *field, struct hid_usage *usage,
899 		       unsigned long **bit, int *max)
900 {
901 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
902 		unsigned int key = usage->hid & HID_USAGE;
903 
904 		if (key >= ARRAY_SIZE(ds4_keymap))
905 			return -1;
906 
907 		key = ds4_keymap[key];
908 		hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
909 		return 1;
910 	} else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
911 		unsigned int abs = usage->hid & HID_USAGE;
912 
913 		/* Let the HID parser deal with the HAT. */
914 		if (usage->hid == HID_GD_HATSWITCH)
915 			return 0;
916 
917 		if (abs >= ARRAY_SIZE(ds4_absmap))
918 			return -1;
919 
920 		abs = ds4_absmap[abs];
921 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
922 		return 1;
923 	}
924 
925 	return 0;
926 }
927 
928 static u8 *sony_report_fixup(struct hid_device *hdev, u8 *rdesc,
929 		unsigned int *rsize)
930 {
931 	struct sony_sc *sc = hid_get_drvdata(hdev);
932 
933 	if (sc->quirks & (SINO_LITE_CONTROLLER | FUTUREMAX_DANCE_MAT))
934 		return rdesc;
935 
936 	/*
937 	 * Some Sony RF receivers wrongly declare the mouse pointer as a
938 	 * a constant non-data variable.
939 	 */
940 	if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 &&
941 	    /* usage page: generic desktop controls */
942 	    /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */
943 	    /* usage: mouse */
944 	    rdesc[2] == 0x09 && rdesc[3] == 0x02 &&
945 	    /* input (usage page for x,y axes): constant, variable, relative */
946 	    rdesc[54] == 0x81 && rdesc[55] == 0x07) {
947 		hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n");
948 		/* input: data, variable, relative */
949 		rdesc[55] = 0x06;
950 	}
951 
952 	if (sc->quirks & MOTION_CONTROLLER)
953 		return motion_fixup(hdev, rdesc, rsize);
954 
955 	if (sc->quirks & PS3REMOTE)
956 		return ps3remote_fixup(hdev, rdesc, rsize);
957 
958 	/*
959 	 * Some knock-off USB dongles incorrectly report their button count
960 	 * as 13 instead of 16 causing three non-functional buttons.
961 	 */
962 	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize >= 45 &&
963 		/* Report Count (13) */
964 		rdesc[23] == 0x95 && rdesc[24] == 0x0D &&
965 		/* Usage Maximum (13) */
966 		rdesc[37] == 0x29 && rdesc[38] == 0x0D &&
967 		/* Report Count (3) */
968 		rdesc[43] == 0x95 && rdesc[44] == 0x03) {
969 		hid_info(hdev, "Fixing up USB dongle report descriptor\n");
970 		rdesc[24] = 0x10;
971 		rdesc[38] = 0x10;
972 		rdesc[44] = 0x00;
973 	}
974 
975 	return rdesc;
976 }
977 
978 static void sixaxis_parse_report(struct sony_sc *sc, u8 *rd, int size)
979 {
980 	static const u8 sixaxis_battery_capacity[] = { 0, 1, 25, 50, 75, 100 };
981 	unsigned long flags;
982 	int offset;
983 	u8 battery_capacity;
984 	int battery_status;
985 
986 	/*
987 	 * The sixaxis is charging if the battery value is 0xee
988 	 * and it is fully charged if the value is 0xef.
989 	 * It does not report the actual level while charging so it
990 	 * is set to 100% while charging is in progress.
991 	 */
992 	offset = (sc->quirks & MOTION_CONTROLLER) ? 12 : 30;
993 
994 	if (rd[offset] >= 0xee) {
995 		battery_capacity = 100;
996 		battery_status = (rd[offset] & 0x01) ? POWER_SUPPLY_STATUS_FULL : POWER_SUPPLY_STATUS_CHARGING;
997 	} else {
998 		u8 index = rd[offset] <= 5 ? rd[offset] : 5;
999 		battery_capacity = sixaxis_battery_capacity[index];
1000 		battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
1001 	}
1002 
1003 	spin_lock_irqsave(&sc->lock, flags);
1004 	sc->battery_capacity = battery_capacity;
1005 	sc->battery_status = battery_status;
1006 	spin_unlock_irqrestore(&sc->lock, flags);
1007 
1008 	if (sc->quirks & SIXAXIS_CONTROLLER) {
1009 		int val;
1010 
1011 		offset = SIXAXIS_INPUT_REPORT_ACC_X_OFFSET;
1012 		val = ((rd[offset+1] << 8) | rd[offset]) - 511;
1013 		input_report_abs(sc->sensor_dev, ABS_X, val);
1014 
1015 		/* Y and Z are swapped and inversed */
1016 		val = 511 - ((rd[offset+5] << 8) | rd[offset+4]);
1017 		input_report_abs(sc->sensor_dev, ABS_Y, val);
1018 
1019 		val = 511 - ((rd[offset+3] << 8) | rd[offset+2]);
1020 		input_report_abs(sc->sensor_dev, ABS_Z, val);
1021 
1022 		input_sync(sc->sensor_dev);
1023 	}
1024 }
1025 
1026 static void dualshock4_parse_report(struct sony_sc *sc, u8 *rd, int size)
1027 {
1028 	struct hid_input *hidinput = list_entry(sc->hdev->inputs.next,
1029 						struct hid_input, list);
1030 	struct input_dev *input_dev = hidinput->input;
1031 	unsigned long flags;
1032 	int n, m, offset, num_touch_data, max_touch_data;
1033 	u8 cable_state, battery_capacity;
1034 	int battery_status;
1035 	u16 timestamp;
1036 
1037 	/* When using Bluetooth the header is 2 bytes longer, so skip these. */
1038 	int data_offset = (sc->quirks & DUALSHOCK4_CONTROLLER_BT) ? 2 : 0;
1039 
1040 	/* Second bit of third button byte is for the touchpad button. */
1041 	offset = data_offset + DS4_INPUT_REPORT_BUTTON_OFFSET;
1042 	input_report_key(sc->touchpad, BTN_LEFT, rd[offset+2] & 0x2);
1043 
1044 	/*
1045 	 * The default behavior of the Dualshock 4 is to send reports using
1046 	 * report type 1 when running over Bluetooth. However, when feature
1047 	 * report 2 is requested during the controller initialization it starts
1048 	 * sending input reports in report 17. Since report 17 is undefined
1049 	 * in the default HID descriptor, the HID layer won't generate events.
1050 	 * While it is possible (and this was done before) to fixup the HID
1051 	 * descriptor to add this mapping, it was better to do this manually.
1052 	 * The reason is there were various pieces software both open and closed
1053 	 * source, relying on the descriptors to be the same across various
1054 	 * operating systems. If the descriptors wouldn't match some
1055 	 * applications e.g. games on Wine would not be able to function due
1056 	 * to different descriptors, which such applications are not parsing.
1057 	 */
1058 	if (rd[0] == 17) {
1059 		int value;
1060 
1061 		offset = data_offset + DS4_INPUT_REPORT_AXIS_OFFSET;
1062 		input_report_abs(input_dev, ABS_X, rd[offset]);
1063 		input_report_abs(input_dev, ABS_Y, rd[offset+1]);
1064 		input_report_abs(input_dev, ABS_RX, rd[offset+2]);
1065 		input_report_abs(input_dev, ABS_RY, rd[offset+3]);
1066 
1067 		value = rd[offset+4] & 0xf;
1068 		if (value > 7)
1069 			value = 8; /* Center 0, 0 */
1070 		input_report_abs(input_dev, ABS_HAT0X, ds4_hat_mapping[value].x);
1071 		input_report_abs(input_dev, ABS_HAT0Y, ds4_hat_mapping[value].y);
1072 
1073 		input_report_key(input_dev, BTN_WEST, rd[offset+4] & 0x10);
1074 		input_report_key(input_dev, BTN_SOUTH, rd[offset+4] & 0x20);
1075 		input_report_key(input_dev, BTN_EAST, rd[offset+4] & 0x40);
1076 		input_report_key(input_dev, BTN_NORTH, rd[offset+4] & 0x80);
1077 
1078 		input_report_key(input_dev, BTN_TL, rd[offset+5] & 0x1);
1079 		input_report_key(input_dev, BTN_TR, rd[offset+5] & 0x2);
1080 		input_report_key(input_dev, BTN_TL2, rd[offset+5] & 0x4);
1081 		input_report_key(input_dev, BTN_TR2, rd[offset+5] & 0x8);
1082 		input_report_key(input_dev, BTN_SELECT, rd[offset+5] & 0x10);
1083 		input_report_key(input_dev, BTN_START, rd[offset+5] & 0x20);
1084 		input_report_key(input_dev, BTN_THUMBL, rd[offset+5] & 0x40);
1085 		input_report_key(input_dev, BTN_THUMBR, rd[offset+5] & 0x80);
1086 
1087 		input_report_key(input_dev, BTN_MODE, rd[offset+6] & 0x1);
1088 
1089 		input_report_abs(input_dev, ABS_Z, rd[offset+7]);
1090 		input_report_abs(input_dev, ABS_RZ, rd[offset+8]);
1091 
1092 		input_sync(input_dev);
1093 	}
1094 
1095 	/* Convert timestamp (in 5.33us unit) to timestamp_us */
1096 	offset = data_offset + DS4_INPUT_REPORT_TIMESTAMP_OFFSET;
1097 	timestamp = get_unaligned_le16(&rd[offset]);
1098 	if (!sc->timestamp_initialized) {
1099 		sc->timestamp_us = ((unsigned int)timestamp * 16) / 3;
1100 		sc->timestamp_initialized = true;
1101 	} else {
1102 		u16 delta;
1103 
1104 		if (sc->prev_timestamp > timestamp)
1105 			delta = (U16_MAX - sc->prev_timestamp + timestamp + 1);
1106 		else
1107 			delta = timestamp - sc->prev_timestamp;
1108 		sc->timestamp_us += (delta * 16) / 3;
1109 	}
1110 	sc->prev_timestamp = timestamp;
1111 	input_event(sc->sensor_dev, EV_MSC, MSC_TIMESTAMP, sc->timestamp_us);
1112 
1113 	offset = data_offset + DS4_INPUT_REPORT_GYRO_X_OFFSET;
1114 	for (n = 0; n < 6; n++) {
1115 		/* Store data in int for more precision during mult_frac. */
1116 		int raw_data = (short)((rd[offset+1] << 8) | rd[offset]);
1117 		struct ds4_calibration_data *calib = &sc->ds4_calib_data[n];
1118 
1119 		/* High precision is needed during calibration, but the
1120 		 * calibrated values are within 32-bit.
1121 		 * Note: we swap numerator 'x' and 'numer' in mult_frac for
1122 		 *       precision reasons so we don't need 64-bit.
1123 		 */
1124 		int calib_data = mult_frac(calib->sens_numer,
1125 					   raw_data - calib->bias,
1126 					   calib->sens_denom);
1127 
1128 		input_report_abs(sc->sensor_dev, calib->abs_code, calib_data);
1129 		offset += 2;
1130 	}
1131 	input_sync(sc->sensor_dev);
1132 
1133 	/*
1134 	 * The lower 4 bits of byte 30 (or 32 for BT) contain the battery level
1135 	 * and the 5th bit contains the USB cable state.
1136 	 */
1137 	offset = data_offset + DS4_INPUT_REPORT_BATTERY_OFFSET;
1138 	cable_state = (rd[offset] >> 4) & 0x01;
1139 
1140 	/*
1141 	 * Interpretation of the battery_capacity data depends on the cable state.
1142 	 * When no cable is connected (bit4 is 0):
1143 	 * - 0:10: percentage in units of 10%.
1144 	 * When a cable is plugged in:
1145 	 * - 0-10: percentage in units of 10%.
1146 	 * - 11: battery is full
1147 	 * - 14: not charging due to Voltage or temperature error
1148 	 * - 15: charge error
1149 	 */
1150 	if (cable_state) {
1151 		u8 battery_data = rd[offset] & 0xf;
1152 
1153 		if (battery_data < 10) {
1154 			/* Take the mid-point for each battery capacity value,
1155 			 * because on the hardware side 0 = 0-9%, 1=10-19%, etc.
1156 			 * This matches official platform behavior, which does
1157 			 * the same.
1158 			 */
1159 			battery_capacity = battery_data * 10 + 5;
1160 			battery_status = POWER_SUPPLY_STATUS_CHARGING;
1161 		} else if (battery_data == 10) {
1162 			battery_capacity = 100;
1163 			battery_status = POWER_SUPPLY_STATUS_CHARGING;
1164 		} else if (battery_data == 11) {
1165 			battery_capacity = 100;
1166 			battery_status = POWER_SUPPLY_STATUS_FULL;
1167 		} else { /* 14, 15 and undefined values */
1168 			battery_capacity = 0;
1169 			battery_status = POWER_SUPPLY_STATUS_UNKNOWN;
1170 		}
1171 	} else {
1172 		u8 battery_data = rd[offset] & 0xf;
1173 
1174 		if (battery_data < 10)
1175 			battery_capacity = battery_data * 10 + 5;
1176 		else /* 10 */
1177 			battery_capacity = 100;
1178 
1179 		battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
1180 	}
1181 
1182 	spin_lock_irqsave(&sc->lock, flags);
1183 	sc->battery_capacity = battery_capacity;
1184 	sc->battery_status = battery_status;
1185 	spin_unlock_irqrestore(&sc->lock, flags);
1186 
1187 	/*
1188 	 * The Dualshock 4 multi-touch trackpad data starts at offset 33 on USB
1189 	 * and 35 on Bluetooth.
1190 	 * The first byte indicates the number of touch data in the report.
1191 	 * Trackpad data starts 2 bytes later (e.g. 35 for USB).
1192 	 */
1193 	offset = data_offset + DS4_INPUT_REPORT_TOUCHPAD_OFFSET;
1194 	max_touch_data = (sc->quirks & DUALSHOCK4_CONTROLLER_BT) ? 4 : 3;
1195 	if (rd[offset] > 0 && rd[offset] <= max_touch_data)
1196 		num_touch_data = rd[offset];
1197 	else
1198 		num_touch_data = 1;
1199 	offset += 1;
1200 
1201 	for (m = 0; m < num_touch_data; m++) {
1202 		/* Skip past timestamp */
1203 		offset += 1;
1204 
1205 		/*
1206 		 * The first 7 bits of the first byte is a counter and bit 8 is
1207 		 * a touch indicator that is 0 when pressed and 1 when not
1208 		 * pressed.
1209 		 * The next 3 bytes are two 12 bit touch coordinates, X and Y.
1210 		 * The data for the second touch is in the same format and
1211 		 * immediately follows the data for the first.
1212 		 */
1213 		for (n = 0; n < 2; n++) {
1214 			u16 x, y;
1215 			bool active;
1216 
1217 			x = rd[offset+1] | ((rd[offset+2] & 0xF) << 8);
1218 			y = ((rd[offset+2] & 0xF0) >> 4) | (rd[offset+3] << 4);
1219 
1220 			active = !(rd[offset] >> 7);
1221 			input_mt_slot(sc->touchpad, n);
1222 			input_mt_report_slot_state(sc->touchpad, MT_TOOL_FINGER, active);
1223 
1224 			if (active) {
1225 				input_report_abs(sc->touchpad, ABS_MT_POSITION_X, x);
1226 				input_report_abs(sc->touchpad, ABS_MT_POSITION_Y, y);
1227 			}
1228 
1229 			offset += 4;
1230 		}
1231 		input_mt_sync_frame(sc->touchpad);
1232 		input_sync(sc->touchpad);
1233 	}
1234 }
1235 
1236 static void nsg_mrxu_parse_report(struct sony_sc *sc, u8 *rd, int size)
1237 {
1238 	int n, offset, relx, rely;
1239 	u8 active;
1240 
1241 	/*
1242 	 * The NSG-MRxU multi-touch trackpad data starts at offset 1 and
1243 	 *   the touch-related data starts at offset 2.
1244 	 * For the first byte, bit 0 is set when touchpad button is pressed.
1245 	 * Bit 2 is set when a touch is active and the drag (Fn) key is pressed.
1246 	 * This drag key is mapped to BTN_LEFT.  It is operational only when a
1247 	 *   touch point is active.
1248 	 * Bit 4 is set when only the first touch point is active.
1249 	 * Bit 6 is set when only the second touch point is active.
1250 	 * Bits 5 and 7 are set when both touch points are active.
1251 	 * The next 3 bytes are two 12 bit X/Y coordinates for the first touch.
1252 	 * The following byte, offset 5, has the touch width and length.
1253 	 *   Bits 0-4=X (width), bits 5-7=Y (length).
1254 	 * A signed relative X coordinate is at offset 6.
1255 	 * The bytes at offset 7-9 are the second touch X/Y coordinates.
1256 	 * Offset 10 has the second touch width and length.
1257 	 * Offset 11 has the relative Y coordinate.
1258 	 */
1259 	offset = 1;
1260 
1261 	input_report_key(sc->touchpad, BTN_LEFT, rd[offset] & 0x0F);
1262 	active = (rd[offset] >> 4);
1263 	relx = (s8) rd[offset+5];
1264 	rely = ((s8) rd[offset+10]) * -1;
1265 
1266 	offset++;
1267 
1268 	for (n = 0; n < 2; n++) {
1269 		u16 x, y;
1270 		u8 contactx, contacty;
1271 
1272 		x = rd[offset] | ((rd[offset+1] & 0x0F) << 8);
1273 		y = ((rd[offset+1] & 0xF0) >> 4) | (rd[offset+2] << 4);
1274 
1275 		input_mt_slot(sc->touchpad, n);
1276 		input_mt_report_slot_state(sc->touchpad, MT_TOOL_FINGER, active & 0x03);
1277 
1278 		if (active & 0x03) {
1279 			contactx = rd[offset+3] & 0x0F;
1280 			contacty = rd[offset+3] >> 4;
1281 			input_report_abs(sc->touchpad, ABS_MT_TOUCH_MAJOR,
1282 				max(contactx, contacty));
1283 			input_report_abs(sc->touchpad, ABS_MT_TOUCH_MINOR,
1284 				min(contactx, contacty));
1285 			input_report_abs(sc->touchpad, ABS_MT_ORIENTATION,
1286 				(bool) (contactx > contacty));
1287 			input_report_abs(sc->touchpad, ABS_MT_POSITION_X, x);
1288 			input_report_abs(sc->touchpad, ABS_MT_POSITION_Y,
1289 				NSG_MRXU_MAX_Y - y);
1290 			/*
1291 			 * The relative coordinates belong to the first touch
1292 			 * point, when present, or to the second touch point
1293 			 * when the first is not active.
1294 			 */
1295 			if ((n == 0) || ((n == 1) && (active & 0x01))) {
1296 				input_report_rel(sc->touchpad, REL_X, relx);
1297 				input_report_rel(sc->touchpad, REL_Y, rely);
1298 			}
1299 		}
1300 
1301 		offset += 5;
1302 		active >>= 2;
1303 	}
1304 
1305 	input_mt_sync_frame(sc->touchpad);
1306 
1307 	input_sync(sc->touchpad);
1308 }
1309 
1310 static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
1311 		u8 *rd, int size)
1312 {
1313 	struct sony_sc *sc = hid_get_drvdata(hdev);
1314 
1315 	/*
1316 	 * Sixaxis HID report has acclerometers/gyro with MSByte first, this
1317 	 * has to be BYTE_SWAPPED before passing up to joystick interface
1318 	 */
1319 	if ((sc->quirks & SIXAXIS_CONTROLLER) && rd[0] == 0x01 && size == 49) {
1320 		/*
1321 		 * When connected via Bluetooth the Sixaxis occasionally sends
1322 		 * a report with the second byte 0xff and the rest zeroed.
1323 		 *
1324 		 * This report does not reflect the actual state of the
1325 		 * controller must be ignored to avoid generating false input
1326 		 * events.
1327 		 */
1328 		if (rd[1] == 0xff)
1329 			return -EINVAL;
1330 
1331 		swap(rd[41], rd[42]);
1332 		swap(rd[43], rd[44]);
1333 		swap(rd[45], rd[46]);
1334 		swap(rd[47], rd[48]);
1335 
1336 		sixaxis_parse_report(sc, rd, size);
1337 	} else if ((sc->quirks & MOTION_CONTROLLER_BT) && rd[0] == 0x01 && size == 49) {
1338 		sixaxis_parse_report(sc, rd, size);
1339 	} else if ((sc->quirks & NAVIGATION_CONTROLLER) && rd[0] == 0x01 &&
1340 			size == 49) {
1341 		sixaxis_parse_report(sc, rd, size);
1342 	} else if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) && rd[0] == 0x01 &&
1343 			size == 64) {
1344 		dualshock4_parse_report(sc, rd, size);
1345 	} else if (((sc->quirks & DUALSHOCK4_CONTROLLER_BT) && rd[0] == 0x11 &&
1346 			size == 78)) {
1347 		/* CRC check */
1348 		u8 bthdr = 0xA1;
1349 		u32 crc;
1350 		u32 report_crc;
1351 
1352 		crc = crc32_le(0xFFFFFFFF, &bthdr, 1);
1353 		crc = ~crc32_le(crc, rd, DS4_INPUT_REPORT_0x11_SIZE-4);
1354 		report_crc = get_unaligned_le32(&rd[DS4_INPUT_REPORT_0x11_SIZE-4]);
1355 		if (crc != report_crc) {
1356 			hid_dbg(sc->hdev, "DualShock 4 input report's CRC check failed, received crc 0x%0x != 0x%0x\n",
1357 				report_crc, crc);
1358 			return -EILSEQ;
1359 		}
1360 
1361 		dualshock4_parse_report(sc, rd, size);
1362 	} else if ((sc->quirks & DUALSHOCK4_DONGLE) && rd[0] == 0x01 &&
1363 			size == 64) {
1364 		unsigned long flags;
1365 		enum ds4_dongle_state dongle_state;
1366 
1367 		/*
1368 		 * In the case of a DS4 USB dongle, bit[2] of byte 31 indicates
1369 		 * if a DS4 is actually connected (indicated by '0').
1370 		 * For non-dongle, this bit is always 0 (connected).
1371 		 */
1372 		bool connected = (rd[31] & 0x04) ? false : true;
1373 
1374 		spin_lock_irqsave(&sc->lock, flags);
1375 		dongle_state = sc->ds4_dongle_state;
1376 		spin_unlock_irqrestore(&sc->lock, flags);
1377 
1378 		/*
1379 		 * The dongle always sends input reports even when no
1380 		 * DS4 is attached. When a DS4 is connected, we need to
1381 		 * obtain calibration data before we can use it.
1382 		 * The code below tracks dongle state and kicks of
1383 		 * calibration when needed and only allows us to process
1384 		 * input if a DS4 is actually connected.
1385 		 */
1386 		if (dongle_state == DONGLE_DISCONNECTED && connected) {
1387 			hid_info(sc->hdev, "DualShock 4 USB dongle: controller connected\n");
1388 			sony_set_leds(sc);
1389 
1390 			spin_lock_irqsave(&sc->lock, flags);
1391 			sc->ds4_dongle_state = DONGLE_CALIBRATING;
1392 			spin_unlock_irqrestore(&sc->lock, flags);
1393 
1394 			sony_schedule_work(sc, SONY_WORKER_HOTPLUG);
1395 
1396 			/* Don't process the report since we don't have
1397 			 * calibration data, but let hidraw have it anyway.
1398 			 */
1399 			return 0;
1400 		} else if ((dongle_state == DONGLE_CONNECTED ||
1401 			    dongle_state == DONGLE_DISABLED) && !connected) {
1402 			hid_info(sc->hdev, "DualShock 4 USB dongle: controller disconnected\n");
1403 
1404 			spin_lock_irqsave(&sc->lock, flags);
1405 			sc->ds4_dongle_state = DONGLE_DISCONNECTED;
1406 			spin_unlock_irqrestore(&sc->lock, flags);
1407 
1408 			/* Return 0, so hidraw can get the report. */
1409 			return 0;
1410 		} else if (dongle_state == DONGLE_CALIBRATING ||
1411 			   dongle_state == DONGLE_DISABLED ||
1412 			   dongle_state == DONGLE_DISCONNECTED) {
1413 			/* Return 0, so hidraw can get the report. */
1414 			return 0;
1415 		}
1416 
1417 		dualshock4_parse_report(sc, rd, size);
1418 
1419 	} else if ((sc->quirks & NSG_MRXU_REMOTE) && rd[0] == 0x02) {
1420 		nsg_mrxu_parse_report(sc, rd, size);
1421 		return 1;
1422 	}
1423 
1424 	if (sc->defer_initialization) {
1425 		sc->defer_initialization = 0;
1426 		sony_schedule_work(sc, SONY_WORKER_STATE);
1427 	}
1428 
1429 	return 0;
1430 }
1431 
1432 static int sony_mapping(struct hid_device *hdev, struct hid_input *hi,
1433 			struct hid_field *field, struct hid_usage *usage,
1434 			unsigned long **bit, int *max)
1435 {
1436 	struct sony_sc *sc = hid_get_drvdata(hdev);
1437 
1438 	if (sc->quirks & BUZZ_CONTROLLER) {
1439 		unsigned int key = usage->hid & HID_USAGE;
1440 
1441 		if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
1442 			return -1;
1443 
1444 		switch (usage->collection_index) {
1445 		case 1:
1446 			if (key >= ARRAY_SIZE(buzz_keymap))
1447 				return -1;
1448 
1449 			key = buzz_keymap[key];
1450 			if (!key)
1451 				return -1;
1452 			break;
1453 		default:
1454 			return -1;
1455 		}
1456 
1457 		hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
1458 		return 1;
1459 	}
1460 
1461 	if (sc->quirks & PS3REMOTE)
1462 		return ps3remote_mapping(hdev, hi, field, usage, bit, max);
1463 
1464 	if (sc->quirks & NAVIGATION_CONTROLLER)
1465 		return navigation_mapping(hdev, hi, field, usage, bit, max);
1466 
1467 	if (sc->quirks & SIXAXIS_CONTROLLER)
1468 		return sixaxis_mapping(hdev, hi, field, usage, bit, max);
1469 
1470 	if (sc->quirks & DUALSHOCK4_CONTROLLER)
1471 		return ds4_mapping(hdev, hi, field, usage, bit, max);
1472 
1473 	if (sc->quirks & GH_GUITAR_CONTROLLER)
1474 		return guitar_mapping(hdev, hi, field, usage, bit, max);
1475 
1476 	/* Let hid-core decide for the others */
1477 	return 0;
1478 }
1479 
1480 static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
1481 		int w, int h, int touch_major, int touch_minor, int orientation)
1482 {
1483 	size_t name_sz;
1484 	char *name;
1485 	int ret;
1486 
1487 	sc->touchpad = devm_input_allocate_device(&sc->hdev->dev);
1488 	if (!sc->touchpad)
1489 		return -ENOMEM;
1490 
1491 	input_set_drvdata(sc->touchpad, sc);
1492 	sc->touchpad->dev.parent = &sc->hdev->dev;
1493 	sc->touchpad->phys = sc->hdev->phys;
1494 	sc->touchpad->uniq = sc->hdev->uniq;
1495 	sc->touchpad->id.bustype = sc->hdev->bus;
1496 	sc->touchpad->id.vendor = sc->hdev->vendor;
1497 	sc->touchpad->id.product = sc->hdev->product;
1498 	sc->touchpad->id.version = sc->hdev->version;
1499 
1500 	/* Append a suffix to the controller name as there are various
1501 	 * DS4 compatible non-Sony devices with different names.
1502 	 */
1503 	name_sz = strlen(sc->hdev->name) + sizeof(DS4_TOUCHPAD_SUFFIX);
1504 	name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL);
1505 	if (!name)
1506 		return -ENOMEM;
1507 	snprintf(name, name_sz, "%s" DS4_TOUCHPAD_SUFFIX, sc->hdev->name);
1508 	sc->touchpad->name = name;
1509 
1510 	/* We map the button underneath the touchpad to BTN_LEFT. */
1511 	__set_bit(EV_KEY, sc->touchpad->evbit);
1512 	__set_bit(BTN_LEFT, sc->touchpad->keybit);
1513 	__set_bit(INPUT_PROP_BUTTONPAD, sc->touchpad->propbit);
1514 
1515 	input_set_abs_params(sc->touchpad, ABS_MT_POSITION_X, 0, w, 0, 0);
1516 	input_set_abs_params(sc->touchpad, ABS_MT_POSITION_Y, 0, h, 0, 0);
1517 
1518 	if (touch_major > 0) {
1519 		input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MAJOR,
1520 			0, touch_major, 0, 0);
1521 		if (touch_minor > 0)
1522 			input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MINOR,
1523 				0, touch_minor, 0, 0);
1524 		if (orientation > 0)
1525 			input_set_abs_params(sc->touchpad, ABS_MT_ORIENTATION,
1526 				0, orientation, 0, 0);
1527 	}
1528 
1529 	if (sc->quirks & NSG_MRXU_REMOTE) {
1530 		__set_bit(EV_REL, sc->touchpad->evbit);
1531 	}
1532 
1533 	ret = input_mt_init_slots(sc->touchpad, touch_count, INPUT_MT_POINTER);
1534 	if (ret < 0)
1535 		return ret;
1536 
1537 	ret = input_register_device(sc->touchpad);
1538 	if (ret < 0)
1539 		return ret;
1540 
1541 	return 0;
1542 }
1543 
1544 static int sony_register_sensors(struct sony_sc *sc)
1545 {
1546 	size_t name_sz;
1547 	char *name;
1548 	int ret;
1549 	int range;
1550 
1551 	sc->sensor_dev = devm_input_allocate_device(&sc->hdev->dev);
1552 	if (!sc->sensor_dev)
1553 		return -ENOMEM;
1554 
1555 	input_set_drvdata(sc->sensor_dev, sc);
1556 	sc->sensor_dev->dev.parent = &sc->hdev->dev;
1557 	sc->sensor_dev->phys = sc->hdev->phys;
1558 	sc->sensor_dev->uniq = sc->hdev->uniq;
1559 	sc->sensor_dev->id.bustype = sc->hdev->bus;
1560 	sc->sensor_dev->id.vendor = sc->hdev->vendor;
1561 	sc->sensor_dev->id.product = sc->hdev->product;
1562 	sc->sensor_dev->id.version = sc->hdev->version;
1563 
1564 	/* Append a suffix to the controller name as there are various
1565 	 * DS4 compatible non-Sony devices with different names.
1566 	 */
1567 	name_sz = strlen(sc->hdev->name) + sizeof(SENSOR_SUFFIX);
1568 	name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL);
1569 	if (!name)
1570 		return -ENOMEM;
1571 	snprintf(name, name_sz, "%s" SENSOR_SUFFIX, sc->hdev->name);
1572 	sc->sensor_dev->name = name;
1573 
1574 	if (sc->quirks & SIXAXIS_CONTROLLER) {
1575 		/* For the DS3 we only support the accelerometer, which works
1576 		 * quite well even without calibration. The device also has
1577 		 * a 1-axis gyro, but it is very difficult to manage from within
1578 		 * the driver even to get data, the sensor is inaccurate and
1579 		 * the behavior is very different between hardware revisions.
1580 		 */
1581 		input_set_abs_params(sc->sensor_dev, ABS_X, -512, 511, 4, 0);
1582 		input_set_abs_params(sc->sensor_dev, ABS_Y, -512, 511, 4, 0);
1583 		input_set_abs_params(sc->sensor_dev, ABS_Z, -512, 511, 4, 0);
1584 		input_abs_set_res(sc->sensor_dev, ABS_X, SIXAXIS_ACC_RES_PER_G);
1585 		input_abs_set_res(sc->sensor_dev, ABS_Y, SIXAXIS_ACC_RES_PER_G);
1586 		input_abs_set_res(sc->sensor_dev, ABS_Z, SIXAXIS_ACC_RES_PER_G);
1587 	} else if (sc->quirks & DUALSHOCK4_CONTROLLER) {
1588 		range = DS4_ACC_RES_PER_G*4;
1589 		input_set_abs_params(sc->sensor_dev, ABS_X, -range, range, 16, 0);
1590 		input_set_abs_params(sc->sensor_dev, ABS_Y, -range, range, 16, 0);
1591 		input_set_abs_params(sc->sensor_dev, ABS_Z, -range, range, 16, 0);
1592 		input_abs_set_res(sc->sensor_dev, ABS_X, DS4_ACC_RES_PER_G);
1593 		input_abs_set_res(sc->sensor_dev, ABS_Y, DS4_ACC_RES_PER_G);
1594 		input_abs_set_res(sc->sensor_dev, ABS_Z, DS4_ACC_RES_PER_G);
1595 
1596 		range = DS4_GYRO_RES_PER_DEG_S*2048;
1597 		input_set_abs_params(sc->sensor_dev, ABS_RX, -range, range, 16, 0);
1598 		input_set_abs_params(sc->sensor_dev, ABS_RY, -range, range, 16, 0);
1599 		input_set_abs_params(sc->sensor_dev, ABS_RZ, -range, range, 16, 0);
1600 		input_abs_set_res(sc->sensor_dev, ABS_RX, DS4_GYRO_RES_PER_DEG_S);
1601 		input_abs_set_res(sc->sensor_dev, ABS_RY, DS4_GYRO_RES_PER_DEG_S);
1602 		input_abs_set_res(sc->sensor_dev, ABS_RZ, DS4_GYRO_RES_PER_DEG_S);
1603 
1604 		__set_bit(EV_MSC, sc->sensor_dev->evbit);
1605 		__set_bit(MSC_TIMESTAMP, sc->sensor_dev->mscbit);
1606 	}
1607 
1608 	__set_bit(INPUT_PROP_ACCELEROMETER, sc->sensor_dev->propbit);
1609 
1610 	ret = input_register_device(sc->sensor_dev);
1611 	if (ret < 0)
1612 		return ret;
1613 
1614 	return 0;
1615 }
1616 
1617 /*
1618  * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
1619  * to "operational".  Without this, the ps3 controller will not report any
1620  * events.
1621  */
1622 static int sixaxis_set_operational_usb(struct hid_device *hdev)
1623 {
1624 	struct sony_sc *sc = hid_get_drvdata(hdev);
1625 	const int buf_size =
1626 		max(SIXAXIS_REPORT_0xF2_SIZE, SIXAXIS_REPORT_0xF5_SIZE);
1627 	u8 *buf;
1628 	int ret;
1629 
1630 	buf = kmalloc(buf_size, GFP_KERNEL);
1631 	if (!buf)
1632 		return -ENOMEM;
1633 
1634 	ret = hid_hw_raw_request(hdev, 0xf2, buf, SIXAXIS_REPORT_0xF2_SIZE,
1635 				 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
1636 	if (ret < 0) {
1637 		hid_err(hdev, "can't set operational mode: step 1\n");
1638 		goto out;
1639 	}
1640 
1641 	/*
1642 	 * Some compatible controllers like the Speedlink Strike FX and
1643 	 * Gasia need another query plus an USB interrupt to get operational.
1644 	 */
1645 	ret = hid_hw_raw_request(hdev, 0xf5, buf, SIXAXIS_REPORT_0xF5_SIZE,
1646 				 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
1647 	if (ret < 0) {
1648 		hid_err(hdev, "can't set operational mode: step 2\n");
1649 		goto out;
1650 	}
1651 
1652 	/*
1653 	 * But the USB interrupt would cause SHANWAN controllers to
1654 	 * start rumbling non-stop, so skip step 3 for these controllers.
1655 	 */
1656 	if (sc->quirks & SHANWAN_GAMEPAD)
1657 		goto out;
1658 
1659 	ret = hid_hw_output_report(hdev, buf, 1);
1660 	if (ret < 0) {
1661 		hid_info(hdev, "can't set operational mode: step 3, ignoring\n");
1662 		ret = 0;
1663 	}
1664 
1665 out:
1666 	kfree(buf);
1667 
1668 	return ret;
1669 }
1670 
1671 static int sixaxis_set_operational_bt(struct hid_device *hdev)
1672 {
1673 	static const u8 report[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
1674 	u8 *buf;
1675 	int ret;
1676 
1677 	buf = kmemdup(report, sizeof(report), GFP_KERNEL);
1678 	if (!buf)
1679 		return -ENOMEM;
1680 
1681 	ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report),
1682 				  HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
1683 
1684 	kfree(buf);
1685 
1686 	return ret;
1687 }
1688 
1689 /*
1690  * Request DS4 calibration data for the motion sensors.
1691  * For Bluetooth this also affects the operating mode (see below).
1692  */
1693 static int dualshock4_get_calibration_data(struct sony_sc *sc)
1694 {
1695 	u8 *buf;
1696 	int ret;
1697 	short gyro_pitch_bias, gyro_pitch_plus, gyro_pitch_minus;
1698 	short gyro_yaw_bias, gyro_yaw_plus, gyro_yaw_minus;
1699 	short gyro_roll_bias, gyro_roll_plus, gyro_roll_minus;
1700 	short gyro_speed_plus, gyro_speed_minus;
1701 	short acc_x_plus, acc_x_minus;
1702 	short acc_y_plus, acc_y_minus;
1703 	short acc_z_plus, acc_z_minus;
1704 	int speed_2x;
1705 	int range_2g;
1706 
1707 	/* For Bluetooth we use a different request, which supports CRC.
1708 	 * Note: in Bluetooth mode feature report 0x02 also changes the state
1709 	 * of the controller, so that it sends input reports of type 0x11.
1710 	 */
1711 	if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE)) {
1712 		int retries;
1713 
1714 		buf = kmalloc(DS4_FEATURE_REPORT_0x02_SIZE, GFP_KERNEL);
1715 		if (!buf)
1716 			return -ENOMEM;
1717 
1718 		/* We should normally receive the feature report data we asked
1719 		 * for, but hidraw applications such as Steam can issue feature
1720 		 * reports as well. In particular for Dongle reconnects, Steam
1721 		 * and this function are competing resulting in often receiving
1722 		 * data for a different HID report, so retry a few times.
1723 		 */
1724 		for (retries = 0; retries < 3; retries++) {
1725 			ret = hid_hw_raw_request(sc->hdev, 0x02, buf,
1726 						 DS4_FEATURE_REPORT_0x02_SIZE,
1727 						 HID_FEATURE_REPORT,
1728 						 HID_REQ_GET_REPORT);
1729 			if (ret < 0)
1730 				goto err_stop;
1731 
1732 			if (buf[0] != 0x02) {
1733 				if (retries < 2) {
1734 					hid_warn(sc->hdev, "Retrying DualShock 4 get calibration report (0x02) request\n");
1735 					continue;
1736 				} else {
1737 					ret = -EILSEQ;
1738 					goto err_stop;
1739 				}
1740 			} else {
1741 				break;
1742 			}
1743 		}
1744 	} else {
1745 		u8 bthdr = 0xA3;
1746 		u32 crc;
1747 		u32 report_crc;
1748 		int retries;
1749 
1750 		buf = kmalloc(DS4_FEATURE_REPORT_0x05_SIZE, GFP_KERNEL);
1751 		if (!buf)
1752 			return -ENOMEM;
1753 
1754 		for (retries = 0; retries < 3; retries++) {
1755 			ret = hid_hw_raw_request(sc->hdev, 0x05, buf,
1756 						 DS4_FEATURE_REPORT_0x05_SIZE,
1757 						 HID_FEATURE_REPORT,
1758 						 HID_REQ_GET_REPORT);
1759 			if (ret < 0)
1760 				goto err_stop;
1761 
1762 			/* CRC check */
1763 			crc = crc32_le(0xFFFFFFFF, &bthdr, 1);
1764 			crc = ~crc32_le(crc, buf, DS4_FEATURE_REPORT_0x05_SIZE-4);
1765 			report_crc = get_unaligned_le32(&buf[DS4_FEATURE_REPORT_0x05_SIZE-4]);
1766 			if (crc != report_crc) {
1767 				hid_warn(sc->hdev, "DualShock 4 calibration report's CRC check failed, received crc 0x%0x != 0x%0x\n",
1768 					report_crc, crc);
1769 				if (retries < 2) {
1770 					hid_warn(sc->hdev, "Retrying DualShock 4 get calibration report request\n");
1771 					continue;
1772 				} else {
1773 					ret = -EILSEQ;
1774 					goto err_stop;
1775 				}
1776 			} else {
1777 				break;
1778 			}
1779 		}
1780 	}
1781 
1782 	gyro_pitch_bias  = get_unaligned_le16(&buf[1]);
1783 	gyro_yaw_bias    = get_unaligned_le16(&buf[3]);
1784 	gyro_roll_bias   = get_unaligned_le16(&buf[5]);
1785 	if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
1786 		gyro_pitch_plus  = get_unaligned_le16(&buf[7]);
1787 		gyro_pitch_minus = get_unaligned_le16(&buf[9]);
1788 		gyro_yaw_plus    = get_unaligned_le16(&buf[11]);
1789 		gyro_yaw_minus   = get_unaligned_le16(&buf[13]);
1790 		gyro_roll_plus   = get_unaligned_le16(&buf[15]);
1791 		gyro_roll_minus  = get_unaligned_le16(&buf[17]);
1792 	} else {
1793 		/* BT + Dongle */
1794 		gyro_pitch_plus  = get_unaligned_le16(&buf[7]);
1795 		gyro_yaw_plus    = get_unaligned_le16(&buf[9]);
1796 		gyro_roll_plus   = get_unaligned_le16(&buf[11]);
1797 		gyro_pitch_minus = get_unaligned_le16(&buf[13]);
1798 		gyro_yaw_minus   = get_unaligned_le16(&buf[15]);
1799 		gyro_roll_minus  = get_unaligned_le16(&buf[17]);
1800 	}
1801 	gyro_speed_plus  = get_unaligned_le16(&buf[19]);
1802 	gyro_speed_minus = get_unaligned_le16(&buf[21]);
1803 	acc_x_plus       = get_unaligned_le16(&buf[23]);
1804 	acc_x_minus      = get_unaligned_le16(&buf[25]);
1805 	acc_y_plus       = get_unaligned_le16(&buf[27]);
1806 	acc_y_minus      = get_unaligned_le16(&buf[29]);
1807 	acc_z_plus       = get_unaligned_le16(&buf[31]);
1808 	acc_z_minus      = get_unaligned_le16(&buf[33]);
1809 
1810 	/* Set gyroscope calibration and normalization parameters.
1811 	 * Data values will be normalized to 1/DS4_GYRO_RES_PER_DEG_S degree/s.
1812 	 */
1813 	speed_2x = (gyro_speed_plus + gyro_speed_minus);
1814 	sc->ds4_calib_data[0].abs_code = ABS_RX;
1815 	sc->ds4_calib_data[0].bias = gyro_pitch_bias;
1816 	sc->ds4_calib_data[0].sens_numer = speed_2x*DS4_GYRO_RES_PER_DEG_S;
1817 	sc->ds4_calib_data[0].sens_denom = gyro_pitch_plus - gyro_pitch_minus;
1818 
1819 	sc->ds4_calib_data[1].abs_code = ABS_RY;
1820 	sc->ds4_calib_data[1].bias = gyro_yaw_bias;
1821 	sc->ds4_calib_data[1].sens_numer = speed_2x*DS4_GYRO_RES_PER_DEG_S;
1822 	sc->ds4_calib_data[1].sens_denom = gyro_yaw_plus - gyro_yaw_minus;
1823 
1824 	sc->ds4_calib_data[2].abs_code = ABS_RZ;
1825 	sc->ds4_calib_data[2].bias = gyro_roll_bias;
1826 	sc->ds4_calib_data[2].sens_numer = speed_2x*DS4_GYRO_RES_PER_DEG_S;
1827 	sc->ds4_calib_data[2].sens_denom = gyro_roll_plus - gyro_roll_minus;
1828 
1829 	/* Set accelerometer calibration and normalization parameters.
1830 	 * Data values will be normalized to 1/DS4_ACC_RES_PER_G G.
1831 	 */
1832 	range_2g = acc_x_plus - acc_x_minus;
1833 	sc->ds4_calib_data[3].abs_code = ABS_X;
1834 	sc->ds4_calib_data[3].bias = acc_x_plus - range_2g / 2;
1835 	sc->ds4_calib_data[3].sens_numer = 2*DS4_ACC_RES_PER_G;
1836 	sc->ds4_calib_data[3].sens_denom = range_2g;
1837 
1838 	range_2g = acc_y_plus - acc_y_minus;
1839 	sc->ds4_calib_data[4].abs_code = ABS_Y;
1840 	sc->ds4_calib_data[4].bias = acc_y_plus - range_2g / 2;
1841 	sc->ds4_calib_data[4].sens_numer = 2*DS4_ACC_RES_PER_G;
1842 	sc->ds4_calib_data[4].sens_denom = range_2g;
1843 
1844 	range_2g = acc_z_plus - acc_z_minus;
1845 	sc->ds4_calib_data[5].abs_code = ABS_Z;
1846 	sc->ds4_calib_data[5].bias = acc_z_plus - range_2g / 2;
1847 	sc->ds4_calib_data[5].sens_numer = 2*DS4_ACC_RES_PER_G;
1848 	sc->ds4_calib_data[5].sens_denom = range_2g;
1849 
1850 err_stop:
1851 	kfree(buf);
1852 	return ret;
1853 }
1854 
1855 static void dualshock4_calibration_work(struct work_struct *work)
1856 {
1857 	struct sony_sc *sc = container_of(work, struct sony_sc, hotplug_worker);
1858 	unsigned long flags;
1859 	enum ds4_dongle_state dongle_state;
1860 	int ret;
1861 
1862 	ret = dualshock4_get_calibration_data(sc);
1863 	if (ret < 0) {
1864 		/* This call is very unlikely to fail for the dongle. When it
1865 		 * fails we are probably in a very bad state, so mark the
1866 		 * dongle as disabled. We will re-enable the dongle if a new
1867 		 * DS4 hotplug is detect from sony_raw_event as any issues
1868 		 * are likely resolved then (the dongle is quite stupid).
1869 		 */
1870 		hid_err(sc->hdev, "DualShock 4 USB dongle: calibration failed, disabling device\n");
1871 		dongle_state = DONGLE_DISABLED;
1872 	} else {
1873 		hid_info(sc->hdev, "DualShock 4 USB dongle: calibration completed\n");
1874 		dongle_state = DONGLE_CONNECTED;
1875 	}
1876 
1877 	spin_lock_irqsave(&sc->lock, flags);
1878 	sc->ds4_dongle_state = dongle_state;
1879 	spin_unlock_irqrestore(&sc->lock, flags);
1880 }
1881 
1882 static int dualshock4_get_version_info(struct sony_sc *sc)
1883 {
1884 	u8 *buf;
1885 	int ret;
1886 
1887 	buf = kmalloc(DS4_FEATURE_REPORT_0xA3_SIZE, GFP_KERNEL);
1888 	if (!buf)
1889 		return -ENOMEM;
1890 
1891 	ret = hid_hw_raw_request(sc->hdev, 0xA3, buf,
1892 				 DS4_FEATURE_REPORT_0xA3_SIZE,
1893 				 HID_FEATURE_REPORT,
1894 				 HID_REQ_GET_REPORT);
1895 	if (ret < 0) {
1896 		kfree(buf);
1897 		return ret;
1898 	}
1899 
1900 	sc->hw_version = get_unaligned_le16(&buf[35]);
1901 	sc->fw_version = get_unaligned_le16(&buf[41]);
1902 
1903 	kfree(buf);
1904 	return 0;
1905 }
1906 
1907 static void sixaxis_set_leds_from_id(struct sony_sc *sc)
1908 {
1909 	static const u8 sixaxis_leds[10][4] = {
1910 				{ 0x01, 0x00, 0x00, 0x00 },
1911 				{ 0x00, 0x01, 0x00, 0x00 },
1912 				{ 0x00, 0x00, 0x01, 0x00 },
1913 				{ 0x00, 0x00, 0x00, 0x01 },
1914 				{ 0x01, 0x00, 0x00, 0x01 },
1915 				{ 0x00, 0x01, 0x00, 0x01 },
1916 				{ 0x00, 0x00, 0x01, 0x01 },
1917 				{ 0x01, 0x00, 0x01, 0x01 },
1918 				{ 0x00, 0x01, 0x01, 0x01 },
1919 				{ 0x01, 0x01, 0x01, 0x01 }
1920 	};
1921 
1922 	int id = sc->device_id;
1923 
1924 	BUILD_BUG_ON(MAX_LEDS < ARRAY_SIZE(sixaxis_leds[0]));
1925 
1926 	if (id < 0)
1927 		return;
1928 
1929 	id %= 10;
1930 	memcpy(sc->led_state, sixaxis_leds[id], sizeof(sixaxis_leds[id]));
1931 }
1932 
1933 static void dualshock4_set_leds_from_id(struct sony_sc *sc)
1934 {
1935 	/* The first 4 color/index entries match what the PS4 assigns */
1936 	static const u8 color_code[7][3] = {
1937 			/* Blue   */	{ 0x00, 0x00, 0x40 },
1938 			/* Red	  */	{ 0x40, 0x00, 0x00 },
1939 			/* Green  */	{ 0x00, 0x40, 0x00 },
1940 			/* Pink   */	{ 0x20, 0x00, 0x20 },
1941 			/* Orange */	{ 0x02, 0x01, 0x00 },
1942 			/* Teal   */	{ 0x00, 0x01, 0x01 },
1943 			/* White  */	{ 0x01, 0x01, 0x01 }
1944 	};
1945 
1946 	int id = sc->device_id;
1947 
1948 	BUILD_BUG_ON(MAX_LEDS < ARRAY_SIZE(color_code[0]));
1949 
1950 	if (id < 0)
1951 		return;
1952 
1953 	id %= 7;
1954 	memcpy(sc->led_state, color_code[id], sizeof(color_code[id]));
1955 }
1956 
1957 static void buzz_set_leds(struct sony_sc *sc)
1958 {
1959 	struct hid_device *hdev = sc->hdev;
1960 	struct list_head *report_list =
1961 		&hdev->report_enum[HID_OUTPUT_REPORT].report_list;
1962 	struct hid_report *report = list_entry(report_list->next,
1963 		struct hid_report, list);
1964 	s32 *value = report->field[0]->value;
1965 
1966 	BUILD_BUG_ON(MAX_LEDS < 4);
1967 
1968 	value[0] = 0x00;
1969 	value[1] = sc->led_state[0] ? 0xff : 0x00;
1970 	value[2] = sc->led_state[1] ? 0xff : 0x00;
1971 	value[3] = sc->led_state[2] ? 0xff : 0x00;
1972 	value[4] = sc->led_state[3] ? 0xff : 0x00;
1973 	value[5] = 0x00;
1974 	value[6] = 0x00;
1975 	hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
1976 }
1977 
1978 static void sony_set_leds(struct sony_sc *sc)
1979 {
1980 	if (!(sc->quirks & BUZZ_CONTROLLER))
1981 		sony_schedule_work(sc, SONY_WORKER_STATE);
1982 	else
1983 		buzz_set_leds(sc);
1984 }
1985 
1986 static void sony_led_set_brightness(struct led_classdev *led,
1987 				    enum led_brightness value)
1988 {
1989 	struct device *dev = led->dev->parent;
1990 	struct hid_device *hdev = to_hid_device(dev);
1991 	struct sony_sc *drv_data;
1992 
1993 	int n;
1994 	int force_update;
1995 
1996 	drv_data = hid_get_drvdata(hdev);
1997 	if (!drv_data) {
1998 		hid_err(hdev, "No device data\n");
1999 		return;
2000 	}
2001 
2002 	/*
2003 	 * The Sixaxis on USB will override any LED settings sent to it
2004 	 * and keep flashing all of the LEDs until the PS button is pressed.
2005 	 * Updates, even if redundant, must be always be sent to the
2006 	 * controller to avoid having to toggle the state of an LED just to
2007 	 * stop the flashing later on.
2008 	 */
2009 	force_update = !!(drv_data->quirks & SIXAXIS_CONTROLLER_USB);
2010 
2011 	for (n = 0; n < drv_data->led_count; n++) {
2012 		if (led == drv_data->leds[n] && (force_update ||
2013 			(value != drv_data->led_state[n] ||
2014 			drv_data->led_delay_on[n] ||
2015 			drv_data->led_delay_off[n]))) {
2016 
2017 			drv_data->led_state[n] = value;
2018 
2019 			/* Setting the brightness stops the blinking */
2020 			drv_data->led_delay_on[n] = 0;
2021 			drv_data->led_delay_off[n] = 0;
2022 
2023 			sony_set_leds(drv_data);
2024 			break;
2025 		}
2026 	}
2027 }
2028 
2029 static enum led_brightness sony_led_get_brightness(struct led_classdev *led)
2030 {
2031 	struct device *dev = led->dev->parent;
2032 	struct hid_device *hdev = to_hid_device(dev);
2033 	struct sony_sc *drv_data;
2034 
2035 	int n;
2036 
2037 	drv_data = hid_get_drvdata(hdev);
2038 	if (!drv_data) {
2039 		hid_err(hdev, "No device data\n");
2040 		return LED_OFF;
2041 	}
2042 
2043 	for (n = 0; n < drv_data->led_count; n++) {
2044 		if (led == drv_data->leds[n])
2045 			return drv_data->led_state[n];
2046 	}
2047 
2048 	return LED_OFF;
2049 }
2050 
2051 static int sony_led_blink_set(struct led_classdev *led, unsigned long *delay_on,
2052 				unsigned long *delay_off)
2053 {
2054 	struct device *dev = led->dev->parent;
2055 	struct hid_device *hdev = to_hid_device(dev);
2056 	struct sony_sc *drv_data = hid_get_drvdata(hdev);
2057 	int n;
2058 	u8 new_on, new_off;
2059 
2060 	if (!drv_data) {
2061 		hid_err(hdev, "No device data\n");
2062 		return -EINVAL;
2063 	}
2064 
2065 	/* Max delay is 255 deciseconds or 2550 milliseconds */
2066 	if (*delay_on > 2550)
2067 		*delay_on = 2550;
2068 	if (*delay_off > 2550)
2069 		*delay_off = 2550;
2070 
2071 	/* Blink at 1 Hz if both values are zero */
2072 	if (!*delay_on && !*delay_off)
2073 		*delay_on = *delay_off = 500;
2074 
2075 	new_on = *delay_on / 10;
2076 	new_off = *delay_off / 10;
2077 
2078 	for (n = 0; n < drv_data->led_count; n++) {
2079 		if (led == drv_data->leds[n])
2080 			break;
2081 	}
2082 
2083 	/* This LED is not registered on this device */
2084 	if (n >= drv_data->led_count)
2085 		return -EINVAL;
2086 
2087 	/* Don't schedule work if the values didn't change */
2088 	if (new_on != drv_data->led_delay_on[n] ||
2089 		new_off != drv_data->led_delay_off[n]) {
2090 		drv_data->led_delay_on[n] = new_on;
2091 		drv_data->led_delay_off[n] = new_off;
2092 		sony_schedule_work(drv_data, SONY_WORKER_STATE);
2093 	}
2094 
2095 	return 0;
2096 }
2097 
2098 static int sony_leds_init(struct sony_sc *sc)
2099 {
2100 	struct hid_device *hdev = sc->hdev;
2101 	int n, ret = 0;
2102 	int use_ds4_names;
2103 	struct led_classdev *led;
2104 	size_t name_sz;
2105 	char *name;
2106 	size_t name_len;
2107 	const char *name_fmt;
2108 	static const char * const ds4_name_str[] = { "red", "green", "blue",
2109 						  "global" };
2110 	u8 max_brightness[MAX_LEDS] = { [0 ... (MAX_LEDS - 1)] = 1 };
2111 	u8 use_hw_blink[MAX_LEDS] = { 0 };
2112 
2113 	BUG_ON(!(sc->quirks & SONY_LED_SUPPORT));
2114 
2115 	if (sc->quirks & BUZZ_CONTROLLER) {
2116 		sc->led_count = 4;
2117 		use_ds4_names = 0;
2118 		name_len = strlen("::buzz#");
2119 		name_fmt = "%s::buzz%d";
2120 		/* Validate expected report characteristics. */
2121 		if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 0, 0, 7))
2122 			return -ENODEV;
2123 	} else if (sc->quirks & DUALSHOCK4_CONTROLLER) {
2124 		dualshock4_set_leds_from_id(sc);
2125 		sc->led_state[3] = 1;
2126 		sc->led_count = 4;
2127 		memset(max_brightness, 255, 3);
2128 		use_hw_blink[3] = 1;
2129 		use_ds4_names = 1;
2130 		name_len = 0;
2131 		name_fmt = "%s:%s";
2132 	} else if (sc->quirks & MOTION_CONTROLLER) {
2133 		sc->led_count = 3;
2134 		memset(max_brightness, 255, 3);
2135 		use_ds4_names = 1;
2136 		name_len = 0;
2137 		name_fmt = "%s:%s";
2138 	} else if (sc->quirks & NAVIGATION_CONTROLLER) {
2139 		static const u8 navigation_leds[4] = {0x01, 0x00, 0x00, 0x00};
2140 
2141 		memcpy(sc->led_state, navigation_leds, sizeof(navigation_leds));
2142 		sc->led_count = 1;
2143 		memset(use_hw_blink, 1, 4);
2144 		use_ds4_names = 0;
2145 		name_len = strlen("::sony#");
2146 		name_fmt = "%s::sony%d";
2147 	} else {
2148 		sixaxis_set_leds_from_id(sc);
2149 		sc->led_count = 4;
2150 		memset(use_hw_blink, 1, 4);
2151 		use_ds4_names = 0;
2152 		name_len = strlen("::sony#");
2153 		name_fmt = "%s::sony%d";
2154 	}
2155 
2156 	/*
2157 	 * Clear LEDs as we have no way of reading their initial state. This is
2158 	 * only relevant if the driver is loaded after somebody actively set the
2159 	 * LEDs to on
2160 	 */
2161 	sony_set_leds(sc);
2162 
2163 	name_sz = strlen(dev_name(&hdev->dev)) + name_len + 1;
2164 
2165 	for (n = 0; n < sc->led_count; n++) {
2166 
2167 		if (use_ds4_names)
2168 			name_sz = strlen(dev_name(&hdev->dev)) + strlen(ds4_name_str[n]) + 2;
2169 
2170 		led = devm_kzalloc(&hdev->dev, sizeof(struct led_classdev) + name_sz, GFP_KERNEL);
2171 		if (!led) {
2172 			hid_err(hdev, "Couldn't allocate memory for LED %d\n", n);
2173 			return -ENOMEM;
2174 		}
2175 
2176 		name = (void *)(&led[1]);
2177 		if (use_ds4_names)
2178 			snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev),
2179 			ds4_name_str[n]);
2180 		else
2181 			snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), n + 1);
2182 		led->name = name;
2183 		led->brightness = sc->led_state[n];
2184 		led->max_brightness = max_brightness[n];
2185 		led->flags = LED_CORE_SUSPENDRESUME;
2186 		led->brightness_get = sony_led_get_brightness;
2187 		led->brightness_set = sony_led_set_brightness;
2188 
2189 		if (use_hw_blink[n])
2190 			led->blink_set = sony_led_blink_set;
2191 
2192 		sc->leds[n] = led;
2193 
2194 		ret = devm_led_classdev_register(&hdev->dev, led);
2195 		if (ret) {
2196 			hid_err(hdev, "Failed to register LED %d\n", n);
2197 			return ret;
2198 		}
2199 	}
2200 
2201 	return 0;
2202 }
2203 
2204 static void sixaxis_send_output_report(struct sony_sc *sc)
2205 {
2206 	static const union sixaxis_output_report_01 default_report = {
2207 		.buf = {
2208 			0x01,
2209 			0x01, 0xff, 0x00, 0xff, 0x00,
2210 			0x00, 0x00, 0x00, 0x00, 0x00,
2211 			0xff, 0x27, 0x10, 0x00, 0x32,
2212 			0xff, 0x27, 0x10, 0x00, 0x32,
2213 			0xff, 0x27, 0x10, 0x00, 0x32,
2214 			0xff, 0x27, 0x10, 0x00, 0x32,
2215 			0x00, 0x00, 0x00, 0x00, 0x00
2216 		}
2217 	};
2218 	struct sixaxis_output_report *report =
2219 		(struct sixaxis_output_report *)sc->output_report_dmabuf;
2220 	int n;
2221 
2222 	/* Initialize the report with default values */
2223 	memcpy(report, &default_report, sizeof(struct sixaxis_output_report));
2224 
2225 #ifdef CONFIG_SONY_FF
2226 	report->rumble.right_motor_on = sc->right ? 1 : 0;
2227 	report->rumble.left_motor_force = sc->left;
2228 #endif
2229 
2230 	report->leds_bitmap |= sc->led_state[0] << 1;
2231 	report->leds_bitmap |= sc->led_state[1] << 2;
2232 	report->leds_bitmap |= sc->led_state[2] << 3;
2233 	report->leds_bitmap |= sc->led_state[3] << 4;
2234 
2235 	/* Set flag for all leds off, required for 3rd party INTEC controller */
2236 	if ((report->leds_bitmap & 0x1E) == 0)
2237 		report->leds_bitmap |= 0x20;
2238 
2239 	/*
2240 	 * The LEDs in the report are indexed in reverse order to their
2241 	 * corresponding light on the controller.
2242 	 * Index 0 = LED 4, index 1 = LED 3, etc...
2243 	 *
2244 	 * In the case of both delay values being zero (blinking disabled) the
2245 	 * default report values should be used or the controller LED will be
2246 	 * always off.
2247 	 */
2248 	for (n = 0; n < 4; n++) {
2249 		if (sc->led_delay_on[n] || sc->led_delay_off[n]) {
2250 			report->led[3 - n].duty_off = sc->led_delay_off[n];
2251 			report->led[3 - n].duty_on = sc->led_delay_on[n];
2252 		}
2253 	}
2254 
2255 	/* SHANWAN controllers require output reports via intr channel */
2256 	if (sc->quirks & SHANWAN_GAMEPAD)
2257 		hid_hw_output_report(sc->hdev, (u8 *)report,
2258 				sizeof(struct sixaxis_output_report));
2259 	else
2260 		hid_hw_raw_request(sc->hdev, report->report_id, (u8 *)report,
2261 				sizeof(struct sixaxis_output_report),
2262 				HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
2263 }
2264 
2265 static void dualshock4_send_output_report(struct sony_sc *sc)
2266 {
2267 	struct hid_device *hdev = sc->hdev;
2268 	u8 *buf = sc->output_report_dmabuf;
2269 	int offset;
2270 
2271 	/*
2272 	 * NOTE: The lower 6 bits of buf[1] field of the Bluetooth report
2273 	 * control the interval at which Dualshock 4 reports data:
2274 	 * 0x00 - 1ms
2275 	 * 0x01 - 1ms
2276 	 * 0x02 - 2ms
2277 	 * 0x3E - 62ms
2278 	 * 0x3F - disabled
2279 	 */
2280 	if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE)) {
2281 		memset(buf, 0, DS4_OUTPUT_REPORT_0x05_SIZE);
2282 		buf[0] = 0x05;
2283 		buf[1] = 0x07; /* blink + LEDs + motor */
2284 		offset = 4;
2285 	} else {
2286 		memset(buf, 0, DS4_OUTPUT_REPORT_0x11_SIZE);
2287 		buf[0] = 0x11;
2288 		buf[1] = 0xC0 /* HID + CRC */ | sc->ds4_bt_poll_interval;
2289 		buf[3] = 0x07; /* blink + LEDs + motor */
2290 		offset = 6;
2291 	}
2292 
2293 #ifdef CONFIG_SONY_FF
2294 	buf[offset++] = sc->right;
2295 	buf[offset++] = sc->left;
2296 #else
2297 	offset += 2;
2298 #endif
2299 
2300 	/* LED 3 is the global control */
2301 	if (sc->led_state[3]) {
2302 		buf[offset++] = sc->led_state[0];
2303 		buf[offset++] = sc->led_state[1];
2304 		buf[offset++] = sc->led_state[2];
2305 	} else {
2306 		offset += 3;
2307 	}
2308 
2309 	/* If both delay values are zero the DualShock 4 disables blinking. */
2310 	buf[offset++] = sc->led_delay_on[3];
2311 	buf[offset++] = sc->led_delay_off[3];
2312 
2313 	if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE))
2314 		hid_hw_output_report(hdev, buf, DS4_OUTPUT_REPORT_0x05_SIZE);
2315 	else {
2316 		/* CRC generation */
2317 		u8 bthdr = 0xA2;
2318 		u32 crc;
2319 
2320 		crc = crc32_le(0xFFFFFFFF, &bthdr, 1);
2321 		crc = ~crc32_le(crc, buf, DS4_OUTPUT_REPORT_0x11_SIZE-4);
2322 		put_unaligned_le32(crc, &buf[74]);
2323 		hid_hw_output_report(hdev, buf, DS4_OUTPUT_REPORT_0x11_SIZE);
2324 	}
2325 }
2326 
2327 static void motion_send_output_report(struct sony_sc *sc)
2328 {
2329 	struct hid_device *hdev = sc->hdev;
2330 	struct motion_output_report_02 *report =
2331 		(struct motion_output_report_02 *)sc->output_report_dmabuf;
2332 
2333 	memset(report, 0, MOTION_REPORT_0x02_SIZE);
2334 
2335 	report->type = 0x02; /* set leds */
2336 	report->r = sc->led_state[0];
2337 	report->g = sc->led_state[1];
2338 	report->b = sc->led_state[2];
2339 
2340 #ifdef CONFIG_SONY_FF
2341 	report->rumble = max(sc->right, sc->left);
2342 #endif
2343 
2344 	hid_hw_output_report(hdev, (u8 *)report, MOTION_REPORT_0x02_SIZE);
2345 }
2346 
2347 static inline void sony_send_output_report(struct sony_sc *sc)
2348 {
2349 	if (sc->send_output_report)
2350 		sc->send_output_report(sc);
2351 }
2352 
2353 static void sony_state_worker(struct work_struct *work)
2354 {
2355 	struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
2356 
2357 	sc->send_output_report(sc);
2358 }
2359 
2360 static int sony_allocate_output_report(struct sony_sc *sc)
2361 {
2362 	if ((sc->quirks & SIXAXIS_CONTROLLER) ||
2363 			(sc->quirks & NAVIGATION_CONTROLLER))
2364 		sc->output_report_dmabuf =
2365 			devm_kmalloc(&sc->hdev->dev,
2366 				sizeof(union sixaxis_output_report_01),
2367 				GFP_KERNEL);
2368 	else if (sc->quirks & DUALSHOCK4_CONTROLLER_BT)
2369 		sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2370 						DS4_OUTPUT_REPORT_0x11_SIZE,
2371 						GFP_KERNEL);
2372 	else if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE))
2373 		sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2374 						DS4_OUTPUT_REPORT_0x05_SIZE,
2375 						GFP_KERNEL);
2376 	else if (sc->quirks & MOTION_CONTROLLER)
2377 		sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2378 						MOTION_REPORT_0x02_SIZE,
2379 						GFP_KERNEL);
2380 	else
2381 		return 0;
2382 
2383 	if (!sc->output_report_dmabuf)
2384 		return -ENOMEM;
2385 
2386 	return 0;
2387 }
2388 
2389 #ifdef CONFIG_SONY_FF
2390 static int sony_play_effect(struct input_dev *dev, void *data,
2391 			    struct ff_effect *effect)
2392 {
2393 	struct hid_device *hid = input_get_drvdata(dev);
2394 	struct sony_sc *sc = hid_get_drvdata(hid);
2395 
2396 	if (effect->type != FF_RUMBLE)
2397 		return 0;
2398 
2399 	sc->left = effect->u.rumble.strong_magnitude / 256;
2400 	sc->right = effect->u.rumble.weak_magnitude / 256;
2401 
2402 	sony_schedule_work(sc, SONY_WORKER_STATE);
2403 	return 0;
2404 }
2405 
2406 static int sony_init_ff(struct sony_sc *sc)
2407 {
2408 	struct hid_input *hidinput;
2409 	struct input_dev *input_dev;
2410 
2411 	if (list_empty(&sc->hdev->inputs)) {
2412 		hid_err(sc->hdev, "no inputs found\n");
2413 		return -ENODEV;
2414 	}
2415 	hidinput = list_entry(sc->hdev->inputs.next, struct hid_input, list);
2416 	input_dev = hidinput->input;
2417 
2418 	input_set_capability(input_dev, EV_FF, FF_RUMBLE);
2419 	return input_ff_create_memless(input_dev, NULL, sony_play_effect);
2420 }
2421 
2422 #else
2423 static int sony_init_ff(struct sony_sc *sc)
2424 {
2425 	return 0;
2426 }
2427 
2428 #endif
2429 
2430 static int sony_battery_get_property(struct power_supply *psy,
2431 				     enum power_supply_property psp,
2432 				     union power_supply_propval *val)
2433 {
2434 	struct sony_sc *sc = power_supply_get_drvdata(psy);
2435 	unsigned long flags;
2436 	int ret = 0;
2437 	u8 battery_capacity;
2438 	int battery_status;
2439 
2440 	spin_lock_irqsave(&sc->lock, flags);
2441 	battery_capacity = sc->battery_capacity;
2442 	battery_status = sc->battery_status;
2443 	spin_unlock_irqrestore(&sc->lock, flags);
2444 
2445 	switch (psp) {
2446 	case POWER_SUPPLY_PROP_PRESENT:
2447 		val->intval = 1;
2448 		break;
2449 	case POWER_SUPPLY_PROP_SCOPE:
2450 		val->intval = POWER_SUPPLY_SCOPE_DEVICE;
2451 		break;
2452 	case POWER_SUPPLY_PROP_CAPACITY:
2453 		val->intval = battery_capacity;
2454 		break;
2455 	case POWER_SUPPLY_PROP_STATUS:
2456 		val->intval = battery_status;
2457 		break;
2458 	default:
2459 		ret = -EINVAL;
2460 		break;
2461 	}
2462 	return ret;
2463 }
2464 
2465 static int sony_battery_probe(struct sony_sc *sc, int append_dev_id)
2466 {
2467 	const char *battery_str_fmt = append_dev_id ?
2468 		"sony_controller_battery_%pMR_%i" :
2469 		"sony_controller_battery_%pMR";
2470 	struct power_supply_config psy_cfg = { .drv_data = sc, };
2471 	struct hid_device *hdev = sc->hdev;
2472 	int ret;
2473 
2474 	/*
2475 	 * Set the default battery level to 100% to avoid low battery warnings
2476 	 * if the battery is polled before the first device report is received.
2477 	 */
2478 	sc->battery_capacity = 100;
2479 
2480 	sc->battery_desc.properties = sony_battery_props;
2481 	sc->battery_desc.num_properties = ARRAY_SIZE(sony_battery_props);
2482 	sc->battery_desc.get_property = sony_battery_get_property;
2483 	sc->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY;
2484 	sc->battery_desc.use_for_apm = 0;
2485 	sc->battery_desc.name = devm_kasprintf(&hdev->dev, GFP_KERNEL,
2486 					  battery_str_fmt, sc->mac_address, sc->device_id);
2487 	if (!sc->battery_desc.name)
2488 		return -ENOMEM;
2489 
2490 	sc->battery = devm_power_supply_register(&hdev->dev, &sc->battery_desc,
2491 					    &psy_cfg);
2492 	if (IS_ERR(sc->battery)) {
2493 		ret = PTR_ERR(sc->battery);
2494 		hid_err(hdev, "Unable to register battery device\n");
2495 		return ret;
2496 	}
2497 
2498 	power_supply_powers(sc->battery, &hdev->dev);
2499 	return 0;
2500 }
2501 
2502 /*
2503  * If a controller is plugged in via USB while already connected via Bluetooth
2504  * it will show up as two devices. A global list of connected controllers and
2505  * their MAC addresses is maintained to ensure that a device is only connected
2506  * once.
2507  *
2508  * Some USB-only devices masquerade as Sixaxis controllers and all have the
2509  * same dummy Bluetooth address, so a comparison of the connection type is
2510  * required.  Devices are only rejected in the case where two devices have
2511  * matching Bluetooth addresses on different bus types.
2512  */
2513 static inline int sony_compare_connection_type(struct sony_sc *sc0,
2514 						struct sony_sc *sc1)
2515 {
2516 	const int sc0_not_bt = !(sc0->quirks & SONY_BT_DEVICE);
2517 	const int sc1_not_bt = !(sc1->quirks & SONY_BT_DEVICE);
2518 
2519 	return sc0_not_bt == sc1_not_bt;
2520 }
2521 
2522 static int sony_check_add_dev_list(struct sony_sc *sc)
2523 {
2524 	struct sony_sc *entry;
2525 	unsigned long flags;
2526 	int ret;
2527 
2528 	spin_lock_irqsave(&sony_dev_list_lock, flags);
2529 
2530 	list_for_each_entry(entry, &sony_device_list, list_node) {
2531 		ret = memcmp(sc->mac_address, entry->mac_address,
2532 				sizeof(sc->mac_address));
2533 		if (!ret) {
2534 			if (sony_compare_connection_type(sc, entry)) {
2535 				ret = 1;
2536 			} else {
2537 				ret = -EEXIST;
2538 				hid_info(sc->hdev,
2539 				"controller with MAC address %pMR already connected\n",
2540 				sc->mac_address);
2541 			}
2542 			goto unlock;
2543 		}
2544 	}
2545 
2546 	ret = 0;
2547 	list_add(&(sc->list_node), &sony_device_list);
2548 
2549 unlock:
2550 	spin_unlock_irqrestore(&sony_dev_list_lock, flags);
2551 	return ret;
2552 }
2553 
2554 static void sony_remove_dev_list(struct sony_sc *sc)
2555 {
2556 	unsigned long flags;
2557 
2558 	if (sc->list_node.next) {
2559 		spin_lock_irqsave(&sony_dev_list_lock, flags);
2560 		list_del(&(sc->list_node));
2561 		spin_unlock_irqrestore(&sony_dev_list_lock, flags);
2562 	}
2563 }
2564 
2565 static int sony_get_bt_devaddr(struct sony_sc *sc)
2566 {
2567 	int ret;
2568 
2569 	/* HIDP stores the device MAC address as a string in the uniq field. */
2570 	ret = strlen(sc->hdev->uniq);
2571 	if (ret != 17)
2572 		return -EINVAL;
2573 
2574 	ret = sscanf(sc->hdev->uniq,
2575 		"%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
2576 		&sc->mac_address[5], &sc->mac_address[4], &sc->mac_address[3],
2577 		&sc->mac_address[2], &sc->mac_address[1], &sc->mac_address[0]);
2578 
2579 	if (ret != 6)
2580 		return -EINVAL;
2581 
2582 	return 0;
2583 }
2584 
2585 static int sony_check_add(struct sony_sc *sc)
2586 {
2587 	u8 *buf = NULL;
2588 	int n, ret;
2589 
2590 	if ((sc->quirks & DUALSHOCK4_CONTROLLER_BT) ||
2591 	    (sc->quirks & MOTION_CONTROLLER_BT) ||
2592 	    (sc->quirks & NAVIGATION_CONTROLLER_BT) ||
2593 	    (sc->quirks & SIXAXIS_CONTROLLER_BT)) {
2594 		/*
2595 		 * sony_get_bt_devaddr() attempts to parse the Bluetooth MAC
2596 		 * address from the uniq string where HIDP stores it.
2597 		 * As uniq cannot be guaranteed to be a MAC address in all cases
2598 		 * a failure of this function should not prevent the connection.
2599 		 */
2600 		if (sony_get_bt_devaddr(sc) < 0) {
2601 			hid_warn(sc->hdev, "UNIQ does not contain a MAC address; duplicate check skipped\n");
2602 			return 0;
2603 		}
2604 	} else if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE)) {
2605 		buf = kmalloc(DS4_FEATURE_REPORT_0x81_SIZE, GFP_KERNEL);
2606 		if (!buf)
2607 			return -ENOMEM;
2608 
2609 		/*
2610 		 * The MAC address of a DS4 controller connected via USB can be
2611 		 * retrieved with feature report 0x81. The address begins at
2612 		 * offset 1.
2613 		 */
2614 		ret = hid_hw_raw_request(sc->hdev, 0x81, buf,
2615 				DS4_FEATURE_REPORT_0x81_SIZE, HID_FEATURE_REPORT,
2616 				HID_REQ_GET_REPORT);
2617 
2618 		if (ret != DS4_FEATURE_REPORT_0x81_SIZE) {
2619 			hid_err(sc->hdev, "failed to retrieve feature report 0x81 with the DualShock 4 MAC address\n");
2620 			ret = ret < 0 ? ret : -EINVAL;
2621 			goto out_free;
2622 		}
2623 
2624 		memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address));
2625 
2626 		snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq),
2627 			 "%pMR", sc->mac_address);
2628 	} else if ((sc->quirks & SIXAXIS_CONTROLLER_USB) ||
2629 			(sc->quirks & NAVIGATION_CONTROLLER_USB)) {
2630 		buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL);
2631 		if (!buf)
2632 			return -ENOMEM;
2633 
2634 		/*
2635 		 * The MAC address of a Sixaxis controller connected via USB can
2636 		 * be retrieved with feature report 0xf2. The address begins at
2637 		 * offset 4.
2638 		 */
2639 		ret = hid_hw_raw_request(sc->hdev, 0xf2, buf,
2640 				SIXAXIS_REPORT_0xF2_SIZE, HID_FEATURE_REPORT,
2641 				HID_REQ_GET_REPORT);
2642 
2643 		if (ret != SIXAXIS_REPORT_0xF2_SIZE) {
2644 			hid_err(sc->hdev, "failed to retrieve feature report 0xf2 with the Sixaxis MAC address\n");
2645 			ret = ret < 0 ? ret : -EINVAL;
2646 			goto out_free;
2647 		}
2648 
2649 		/*
2650 		 * The Sixaxis device MAC in the report is big-endian and must
2651 		 * be byte-swapped.
2652 		 */
2653 		for (n = 0; n < 6; n++)
2654 			sc->mac_address[5-n] = buf[4+n];
2655 
2656 		snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq),
2657 			 "%pMR", sc->mac_address);
2658 	} else {
2659 		return 0;
2660 	}
2661 
2662 	ret = sony_check_add_dev_list(sc);
2663 
2664 out_free:
2665 
2666 	kfree(buf);
2667 
2668 	return ret;
2669 }
2670 
2671 static int sony_set_device_id(struct sony_sc *sc)
2672 {
2673 	int ret;
2674 
2675 	/*
2676 	 * Only DualShock 4 or Sixaxis controllers get an id.
2677 	 * All others are set to -1.
2678 	 */
2679 	if ((sc->quirks & SIXAXIS_CONTROLLER) ||
2680 	    (sc->quirks & DUALSHOCK4_CONTROLLER)) {
2681 		ret = ida_simple_get(&sony_device_id_allocator, 0, 0,
2682 					GFP_KERNEL);
2683 		if (ret < 0) {
2684 			sc->device_id = -1;
2685 			return ret;
2686 		}
2687 		sc->device_id = ret;
2688 	} else {
2689 		sc->device_id = -1;
2690 	}
2691 
2692 	return 0;
2693 }
2694 
2695 static void sony_release_device_id(struct sony_sc *sc)
2696 {
2697 	if (sc->device_id >= 0) {
2698 		ida_simple_remove(&sony_device_id_allocator, sc->device_id);
2699 		sc->device_id = -1;
2700 	}
2701 }
2702 
2703 static inline void sony_init_output_report(struct sony_sc *sc,
2704 				void (*send_output_report)(struct sony_sc *))
2705 {
2706 	sc->send_output_report = send_output_report;
2707 
2708 	if (!sc->state_worker_initialized)
2709 		INIT_WORK(&sc->state_worker, sony_state_worker);
2710 
2711 	sc->state_worker_initialized = 1;
2712 }
2713 
2714 static inline void sony_cancel_work_sync(struct sony_sc *sc)
2715 {
2716 	unsigned long flags;
2717 
2718 	if (sc->hotplug_worker_initialized)
2719 		cancel_work_sync(&sc->hotplug_worker);
2720 	if (sc->state_worker_initialized) {
2721 		spin_lock_irqsave(&sc->lock, flags);
2722 		sc->state_worker_initialized = 0;
2723 		spin_unlock_irqrestore(&sc->lock, flags);
2724 		cancel_work_sync(&sc->state_worker);
2725 	}
2726 }
2727 
2728 static int sony_input_configured(struct hid_device *hdev,
2729 					struct hid_input *hidinput)
2730 {
2731 	struct sony_sc *sc = hid_get_drvdata(hdev);
2732 	int append_dev_id;
2733 	int ret;
2734 
2735 	ret = sony_set_device_id(sc);
2736 	if (ret < 0) {
2737 		hid_err(hdev, "failed to allocate the device id\n");
2738 		goto err_stop;
2739 	}
2740 
2741 	ret = append_dev_id = sony_check_add(sc);
2742 	if (ret < 0)
2743 		goto err_stop;
2744 
2745 	ret = sony_allocate_output_report(sc);
2746 	if (ret < 0) {
2747 		hid_err(hdev, "failed to allocate the output report buffer\n");
2748 		goto err_stop;
2749 	}
2750 
2751 	if (sc->quirks & NAVIGATION_CONTROLLER_USB) {
2752 		/*
2753 		 * The Sony Sixaxis does not handle HID Output Reports on the
2754 		 * Interrupt EP like it could, so we need to force HID Output
2755 		 * Reports to use HID_REQ_SET_REPORT on the Control EP.
2756 		 *
2757 		 * There is also another issue about HID Output Reports via USB,
2758 		 * the Sixaxis does not want the report_id as part of the data
2759 		 * packet, so we have to discard buf[0] when sending the actual
2760 		 * control message, even for numbered reports, humpf!
2761 		 *
2762 		 * Additionally, the Sixaxis on USB isn't properly initialized
2763 		 * until the PS logo button is pressed and as such won't retain
2764 		 * any state set by an output report, so the initial
2765 		 * configuration report is deferred until the first input
2766 		 * report arrives.
2767 		 */
2768 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2769 		hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID;
2770 		sc->defer_initialization = 1;
2771 
2772 		ret = sixaxis_set_operational_usb(hdev);
2773 		if (ret < 0) {
2774 			hid_err(hdev, "Failed to set controller into operational mode\n");
2775 			goto err_stop;
2776 		}
2777 
2778 		sony_init_output_report(sc, sixaxis_send_output_report);
2779 	} else if (sc->quirks & NAVIGATION_CONTROLLER_BT) {
2780 		/*
2781 		 * The Navigation controller wants output reports sent on the ctrl
2782 		 * endpoint when connected via Bluetooth.
2783 		 */
2784 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2785 
2786 		ret = sixaxis_set_operational_bt(hdev);
2787 		if (ret < 0) {
2788 			hid_err(hdev, "Failed to set controller into operational mode\n");
2789 			goto err_stop;
2790 		}
2791 
2792 		sony_init_output_report(sc, sixaxis_send_output_report);
2793 	} else if (sc->quirks & SIXAXIS_CONTROLLER_USB) {
2794 		/*
2795 		 * The Sony Sixaxis does not handle HID Output Reports on the
2796 		 * Interrupt EP and the device only becomes active when the
2797 		 * PS button is pressed. See comment for Navigation controller
2798 		 * above for more details.
2799 		 */
2800 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2801 		hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID;
2802 		sc->defer_initialization = 1;
2803 
2804 		ret = sixaxis_set_operational_usb(hdev);
2805 		if (ret < 0) {
2806 			hid_err(hdev, "Failed to set controller into operational mode\n");
2807 			goto err_stop;
2808 		}
2809 
2810 		ret = sony_register_sensors(sc);
2811 		if (ret) {
2812 			hid_err(sc->hdev,
2813 			"Unable to initialize motion sensors: %d\n", ret);
2814 			goto err_stop;
2815 		}
2816 
2817 		sony_init_output_report(sc, sixaxis_send_output_report);
2818 	} else if (sc->quirks & SIXAXIS_CONTROLLER_BT) {
2819 		/*
2820 		 * The Sixaxis wants output reports sent on the ctrl endpoint
2821 		 * when connected via Bluetooth.
2822 		 */
2823 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2824 
2825 		ret = sixaxis_set_operational_bt(hdev);
2826 		if (ret < 0) {
2827 			hid_err(hdev, "Failed to set controller into operational mode\n");
2828 			goto err_stop;
2829 		}
2830 
2831 		ret = sony_register_sensors(sc);
2832 		if (ret) {
2833 			hid_err(sc->hdev,
2834 			"Unable to initialize motion sensors: %d\n", ret);
2835 			goto err_stop;
2836 		}
2837 
2838 		sony_init_output_report(sc, sixaxis_send_output_report);
2839 	} else if (sc->quirks & DUALSHOCK4_CONTROLLER) {
2840 		ret = dualshock4_get_calibration_data(sc);
2841 		if (ret < 0) {
2842 			hid_err(hdev, "Failed to get calibration data from Dualshock 4\n");
2843 			goto err_stop;
2844 		}
2845 
2846 		ret = dualshock4_get_version_info(sc);
2847 		if (ret < 0) {
2848 			hid_err(sc->hdev, "Failed to get version data from Dualshock 4\n");
2849 			goto err_stop;
2850 		}
2851 
2852 		ret = device_create_file(&sc->hdev->dev, &dev_attr_firmware_version);
2853 		if (ret) {
2854 			hid_err(sc->hdev, "can't create sysfs firmware_version attribute err: %d\n", ret);
2855 			goto err_stop;
2856 		}
2857 		sc->fw_version_created = true;
2858 
2859 		ret = device_create_file(&sc->hdev->dev, &dev_attr_hardware_version);
2860 		if (ret) {
2861 			hid_err(sc->hdev, "can't create sysfs hardware_version attribute err: %d\n", ret);
2862 			goto err_stop;
2863 		}
2864 		sc->hw_version_created = true;
2865 
2866 		/*
2867 		 * The Dualshock 4 touchpad supports 2 touches and has a
2868 		 * resolution of 1920x942 (44.86 dots/mm).
2869 		 */
2870 		ret = sony_register_touchpad(sc, 2, 1920, 942, 0, 0, 0);
2871 		if (ret) {
2872 			hid_err(sc->hdev,
2873 			"Unable to initialize multi-touch slots: %d\n",
2874 			ret);
2875 			goto err_stop;
2876 		}
2877 
2878 		ret = sony_register_sensors(sc);
2879 		if (ret) {
2880 			hid_err(sc->hdev,
2881 			"Unable to initialize motion sensors: %d\n", ret);
2882 			goto err_stop;
2883 		}
2884 
2885 		if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) {
2886 			sc->ds4_bt_poll_interval = DS4_BT_DEFAULT_POLL_INTERVAL_MS;
2887 			ret = device_create_file(&sc->hdev->dev, &dev_attr_bt_poll_interval);
2888 			if (ret)
2889 				hid_warn(sc->hdev,
2890 				 "can't create sysfs bt_poll_interval attribute err: %d\n",
2891 				 ret);
2892 		}
2893 
2894 		if (sc->quirks & DUALSHOCK4_DONGLE) {
2895 			INIT_WORK(&sc->hotplug_worker, dualshock4_calibration_work);
2896 			sc->hotplug_worker_initialized = 1;
2897 			sc->ds4_dongle_state = DONGLE_DISCONNECTED;
2898 		}
2899 
2900 		sony_init_output_report(sc, dualshock4_send_output_report);
2901 	} else if (sc->quirks & NSG_MRXU_REMOTE) {
2902 		/*
2903 		 * The NSG-MRxU touchpad supports 2 touches and has a
2904 		 * resolution of 1667x1868
2905 		 */
2906 		ret = sony_register_touchpad(sc, 2,
2907 			NSG_MRXU_MAX_X, NSG_MRXU_MAX_Y, 15, 15, 1);
2908 		if (ret) {
2909 			hid_err(sc->hdev,
2910 			"Unable to initialize multi-touch slots: %d\n",
2911 			ret);
2912 			goto err_stop;
2913 		}
2914 
2915 	} else if (sc->quirks & MOTION_CONTROLLER) {
2916 		sony_init_output_report(sc, motion_send_output_report);
2917 	} else {
2918 		ret = 0;
2919 	}
2920 
2921 	if (sc->quirks & SONY_LED_SUPPORT) {
2922 		ret = sony_leds_init(sc);
2923 		if (ret < 0)
2924 			goto err_stop;
2925 	}
2926 
2927 	if (sc->quirks & SONY_BATTERY_SUPPORT) {
2928 		ret = sony_battery_probe(sc, append_dev_id);
2929 		if (ret < 0)
2930 			goto err_stop;
2931 
2932 		/* Open the device to receive reports with battery info */
2933 		ret = hid_hw_open(hdev);
2934 		if (ret < 0) {
2935 			hid_err(hdev, "hw open failed\n");
2936 			goto err_stop;
2937 		}
2938 	}
2939 
2940 	if (sc->quirks & SONY_FF_SUPPORT) {
2941 		ret = sony_init_ff(sc);
2942 		if (ret < 0)
2943 			goto err_close;
2944 	}
2945 
2946 	return 0;
2947 err_close:
2948 	hid_hw_close(hdev);
2949 err_stop:
2950 	/* Piggy back on the default ds4_bt_ poll_interval to determine
2951 	 * if we need to remove the file as we don't know for sure if we
2952 	 * executed that logic.
2953 	 */
2954 	if (sc->ds4_bt_poll_interval)
2955 		device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval);
2956 	if (sc->fw_version_created)
2957 		device_remove_file(&sc->hdev->dev, &dev_attr_firmware_version);
2958 	if (sc->hw_version_created)
2959 		device_remove_file(&sc->hdev->dev, &dev_attr_hardware_version);
2960 	sony_cancel_work_sync(sc);
2961 	sony_remove_dev_list(sc);
2962 	sony_release_device_id(sc);
2963 	return ret;
2964 }
2965 
2966 static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
2967 {
2968 	int ret;
2969 	unsigned long quirks = id->driver_data;
2970 	struct sony_sc *sc;
2971 	struct usb_device *usbdev;
2972 	unsigned int connect_mask = HID_CONNECT_DEFAULT;
2973 
2974 	if (!strcmp(hdev->name, "FutureMax Dance Mat"))
2975 		quirks |= FUTUREMAX_DANCE_MAT;
2976 
2977 	if (!strcmp(hdev->name, "SHANWAN PS3 GamePad"))
2978 		quirks |= SHANWAN_GAMEPAD;
2979 
2980 	sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL);
2981 	if (sc == NULL) {
2982 		hid_err(hdev, "can't alloc sony descriptor\n");
2983 		return -ENOMEM;
2984 	}
2985 
2986 	spin_lock_init(&sc->lock);
2987 
2988 	sc->quirks = quirks;
2989 	hid_set_drvdata(hdev, sc);
2990 	sc->hdev = hdev;
2991 	usbdev = to_usb_device(sc->hdev->dev.parent->parent);
2992 
2993 	ret = hid_parse(hdev);
2994 	if (ret) {
2995 		hid_err(hdev, "parse failed\n");
2996 		return ret;
2997 	}
2998 
2999 	if (sc->quirks & VAIO_RDESC_CONSTANT)
3000 		connect_mask |= HID_CONNECT_HIDDEV_FORCE;
3001 	else if (sc->quirks & SIXAXIS_CONTROLLER)
3002 		connect_mask |= HID_CONNECT_HIDDEV_FORCE;
3003 
3004 	/* Patch the hw version on DS3/4 compatible devices, so applications can
3005 	 * distinguish between the default HID mappings and the mappings defined
3006 	 * by the Linux game controller spec. This is important for the SDL2
3007 	 * library, which has a game controller database, which uses device ids
3008 	 * in combination with version as a key.
3009 	 */
3010 	if (sc->quirks & (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER))
3011 		hdev->version |= 0x8000;
3012 
3013 	ret = hid_hw_start(hdev, connect_mask);
3014 	if (ret) {
3015 		hid_err(hdev, "hw start failed\n");
3016 		return ret;
3017 	}
3018 
3019 	/* sony_input_configured can fail, but this doesn't result
3020 	 * in hid_hw_start failures (intended). Check whether
3021 	 * the HID layer claimed the device else fail.
3022 	 * We don't know the actual reason for the failure, most
3023 	 * likely it is due to EEXIST in case of double connection
3024 	 * of USB and Bluetooth, but could have been due to ENOMEM
3025 	 * or other reasons as well.
3026 	 */
3027 	if (!(hdev->claimed & HID_CLAIMED_INPUT)) {
3028 		hid_err(hdev, "failed to claim input\n");
3029 		hid_hw_stop(hdev);
3030 		return -ENODEV;
3031 	}
3032 
3033 	if (sc->quirks & GHL_GUITAR_PS3WIIU) {
3034 		sc->ghl_urb = usb_alloc_urb(0, GFP_ATOMIC);
3035 		if (!sc->ghl_urb)
3036 			return -ENOMEM;
3037 		ret = ghl_init_urb(sc, usbdev);
3038 		if (ret) {
3039 			hid_err(hdev, "error preparing URB\n");
3040 			return ret;
3041 		}
3042 
3043 		timer_setup(&sc->ghl_poke_timer, ghl_magic_poke, 0);
3044 		mod_timer(&sc->ghl_poke_timer,
3045 			  jiffies + GHL_GUITAR_POKE_INTERVAL*HZ);
3046 	}
3047 
3048 	return ret;
3049 }
3050 
3051 static void sony_remove(struct hid_device *hdev)
3052 {
3053 	struct sony_sc *sc = hid_get_drvdata(hdev);
3054 
3055 	if (sc->quirks & GHL_GUITAR_PS3WIIU) {
3056 		del_timer_sync(&sc->ghl_poke_timer);
3057 		usb_free_urb(sc->ghl_urb);
3058 	}
3059 
3060 	hid_hw_close(hdev);
3061 
3062 	if (sc->quirks & DUALSHOCK4_CONTROLLER_BT)
3063 		device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval);
3064 
3065 	if (sc->fw_version_created)
3066 		device_remove_file(&sc->hdev->dev, &dev_attr_firmware_version);
3067 
3068 	if (sc->hw_version_created)
3069 		device_remove_file(&sc->hdev->dev, &dev_attr_hardware_version);
3070 
3071 	sony_cancel_work_sync(sc);
3072 
3073 	sony_remove_dev_list(sc);
3074 
3075 	sony_release_device_id(sc);
3076 
3077 	hid_hw_stop(hdev);
3078 }
3079 
3080 #ifdef CONFIG_PM
3081 
3082 static int sony_suspend(struct hid_device *hdev, pm_message_t message)
3083 {
3084 #ifdef CONFIG_SONY_FF
3085 
3086 	/* On suspend stop any running force-feedback events */
3087 	if (SONY_FF_SUPPORT) {
3088 		struct sony_sc *sc = hid_get_drvdata(hdev);
3089 
3090 		sc->left = sc->right = 0;
3091 		sony_send_output_report(sc);
3092 	}
3093 
3094 #endif
3095 	return 0;
3096 }
3097 
3098 static int sony_resume(struct hid_device *hdev)
3099 {
3100 	struct sony_sc *sc = hid_get_drvdata(hdev);
3101 
3102 	/*
3103 	 * The Sixaxis and navigation controllers on USB need to be
3104 	 * reinitialized on resume or they won't behave properly.
3105 	 */
3106 	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) ||
3107 		(sc->quirks & NAVIGATION_CONTROLLER_USB)) {
3108 		sixaxis_set_operational_usb(sc->hdev);
3109 		sc->defer_initialization = 1;
3110 	}
3111 
3112 	return 0;
3113 }
3114 
3115 #endif
3116 
3117 static const struct hid_device_id sony_devices[] = {
3118 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
3119 		.driver_data = SIXAXIS_CONTROLLER_USB },
3120 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
3121 		.driver_data = NAVIGATION_CONTROLLER_USB },
3122 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
3123 		.driver_data = NAVIGATION_CONTROLLER_BT },
3124 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER),
3125 		.driver_data = MOTION_CONTROLLER_USB },
3126 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER),
3127 		.driver_data = MOTION_CONTROLLER_BT },
3128 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
3129 		.driver_data = SIXAXIS_CONTROLLER_BT },
3130 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
3131 		.driver_data = VAIO_RDESC_CONSTANT },
3132 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE),
3133 		.driver_data = VAIO_RDESC_CONSTANT },
3134 	/*
3135 	 * Wired Buzz Controller. Reported as Sony Hub from its USB ID and as
3136 	 * Logitech joystick from the device descriptor.
3137 	 */
3138 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER),
3139 		.driver_data = BUZZ_CONTROLLER },
3140 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER),
3141 		.driver_data = BUZZ_CONTROLLER },
3142 	/* PS3 BD Remote Control */
3143 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE),
3144 		.driver_data = PS3REMOTE },
3145 	/* Logitech Harmony Adapter for PS3 */
3146 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3),
3147 		.driver_data = PS3REMOTE },
3148 	/* SMK-Link PS3 BD Remote Control */
3149 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE),
3150 		.driver_data = PS3REMOTE },
3151 	/* Sony Dualshock 4 controllers for PS4 */
3152 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
3153 		.driver_data = DUALSHOCK4_CONTROLLER_USB },
3154 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
3155 		.driver_data = DUALSHOCK4_CONTROLLER_BT },
3156 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2),
3157 		.driver_data = DUALSHOCK4_CONTROLLER_USB },
3158 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2),
3159 		.driver_data = DUALSHOCK4_CONTROLLER_BT },
3160 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE),
3161 		.driver_data = DUALSHOCK4_DONGLE },
3162 	/* Nyko Core Controller for PS3 */
3163 	{ HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER),
3164 		.driver_data = SIXAXIS_CONTROLLER_USB | SINO_LITE_CONTROLLER },
3165 	/* SMK-Link NSG-MR5U Remote Control */
3166 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR5U_REMOTE),
3167 		.driver_data = NSG_MR5U_REMOTE_BT },
3168 	/* SMK-Link NSG-MR7U Remote Control */
3169 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR7U_REMOTE),
3170 		.driver_data = NSG_MR7U_REMOTE_BT },
3171 	/* Guitar Hero Live PS3 and Wii U guitar dongles */
3172 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE_DONGLE),
3173 		.driver_data = GHL_GUITAR_PS3WIIU | GH_GUITAR_CONTROLLER },
3174 	/* Guitar Hero PC Guitar Dongle */
3175 	{ HID_USB_DEVICE(USB_VENDOR_ID_ACTIVISION, USB_DEVICE_ID_ACTIVISION_GUITAR_DONGLE),
3176 		.driver_data = GH_GUITAR_CONTROLLER },
3177 	/* Guitar Hero PS3 World Tour Guitar Dongle */
3178 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GUITAR_DONGLE),
3179 		.driver_data = GH_GUITAR_CONTROLLER },
3180 	{ }
3181 };
3182 MODULE_DEVICE_TABLE(hid, sony_devices);
3183 
3184 static struct hid_driver sony_driver = {
3185 	.name             = "sony",
3186 	.id_table         = sony_devices,
3187 	.input_mapping    = sony_mapping,
3188 	.input_configured = sony_input_configured,
3189 	.probe            = sony_probe,
3190 	.remove           = sony_remove,
3191 	.report_fixup     = sony_report_fixup,
3192 	.raw_event        = sony_raw_event,
3193 
3194 #ifdef CONFIG_PM
3195 	.suspend          = sony_suspend,
3196 	.resume	          = sony_resume,
3197 	.reset_resume     = sony_resume,
3198 #endif
3199 };
3200 
3201 static int __init sony_init(void)
3202 {
3203 	dbg_hid("Sony:%s\n", __func__);
3204 
3205 	return hid_register_driver(&sony_driver);
3206 }
3207 
3208 static void __exit sony_exit(void)
3209 {
3210 	dbg_hid("Sony:%s\n", __func__);
3211 
3212 	hid_unregister_driver(&sony_driver);
3213 	ida_destroy(&sony_device_id_allocator);
3214 }
3215 module_init(sony_init);
3216 module_exit(sony_exit);
3217 
3218 MODULE_LICENSE("GPL");
3219