xref: /linux/drivers/hid/hid-sony.c (revision 70eda68668d1476b459b64e69b8f36659fa9dfa8)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *  HID driver for Sony / PS2 / PS3 BD / PS4 / PS5 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-2021 Pascal Giard <pascal.giard@etsmtl.ca>
15  *  Copyright (c) 2020-2026 Sanjay Govind <sanjay.govind9@gmail.com>
16  *  Copyright (c) 2021 Daniel Nguyen <daniel.nguyen.1@ens.etsmtl.ca>
17  *  Copyright (c) 2026 Rosalie Wanders <rosalie@mailbox.org>
18  *  Copyright (c) 2026 Brenton Simpson <appsforartists@google.com>
19  */
20 
21 /*
22  */
23 
24 /*
25  * NOTE: in order for the Sony PS3 BD Remote Control to be found by
26  * a Bluetooth host, the key combination Start+Enter has to be kept pressed
27  * for about 7 seconds with the Bluetooth Host Controller in discovering mode.
28  *
29  * There will be no PIN request from the device.
30  */
31 
32 #include <linux/device.h>
33 #include <linux/hid.h>
34 #include <linux/module.h>
35 #include <linux/slab.h>
36 #include <linux/leds.h>
37 #include <linux/power_supply.h>
38 #include <linux/spinlock.h>
39 #include <linux/list.h>
40 #include <linux/idr.h>
41 #include <linux/input/mt.h>
42 #include <linux/crc32.h>
43 #include <linux/usb.h>
44 #include <linux/timer.h>
45 #include <linux/unaligned.h>
46 
47 #include "hid-ids.h"
48 
49 #define VAIO_RDESC_CONSTANT       BIT(0)
50 #define SIXAXIS_CONTROLLER_USB    BIT(1)
51 #define SIXAXIS_CONTROLLER_BT     BIT(2)
52 #define BUZZ_CONTROLLER           BIT(3)
53 #define PS3REMOTE                 BIT(4)
54 #define MOTION_CONTROLLER_USB     BIT(5)
55 #define MOTION_CONTROLLER_BT      BIT(6)
56 #define NAVIGATION_CONTROLLER_USB BIT(7)
57 #define NAVIGATION_CONTROLLER_BT  BIT(8)
58 #define SINO_LITE_CONTROLLER      BIT(9)
59 #define FUTUREMAX_DANCE_MAT       BIT(10)
60 #define NSG_MR5U_REMOTE_BT        BIT(11)
61 #define NSG_MR7U_REMOTE_BT        BIT(12)
62 #define SHANWAN_GAMEPAD           BIT(13)
63 #define INSTRUMENT                BIT(14)
64 #define GH_GUITAR_TILT            BIT(15)
65 #define GHL_GUITAR_PS3WIIU        BIT(16)
66 #define GHL_GUITAR_PS4            BIT(17)
67 #define RB4_GUITAR_PS4_USB        BIT(18)
68 #define RB4_GUITAR_PS4_BT         BIT(19)
69 #define RB4_GUITAR_PS5            BIT(20)
70 #define RB3_PRO_INSTRUMENT        BIT(21)
71 #define DJH_TURNTABLE             BIT(22)
72 
73 #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)
74 #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT)
75 #define NAVIGATION_CONTROLLER (NAVIGATION_CONTROLLER_USB |\
76 				NAVIGATION_CONTROLLER_BT)
77 #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER | BUZZ_CONTROLLER |\
78 				MOTION_CONTROLLER | NAVIGATION_CONTROLLER)
79 #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER |\
80 				RB4_GUITAR_PS5)
81 #define SONY_FF_SUPPORT (SIXAXIS_CONTROLLER | MOTION_CONTROLLER)
82 #define SONY_BT_DEVICE (SIXAXIS_CONTROLLER_BT | MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER_BT)
83 #define NSG_MRXU_REMOTE (NSG_MR5U_REMOTE_BT | NSG_MR7U_REMOTE_BT)
84 
85 #define MAX_LEDS 4
86 #define NSG_MRXU_MAX_X 1667
87 #define NSG_MRXU_MAX_Y 1868
88 
89 /* The PS3/Wii U dongles require a poke every 10 seconds, but the PS4
90  * requires one every 8 seconds. Using 8 seconds for all for simplicity.
91  */
92 #define GHL_GUITAR_POKE_INTERVAL 8 /* In seconds */
93 #define GUITAR_TILT_USAGE 44
94 
95 #define TURNTABLE_EFFECTS_KNOB_USAGE 44
96 #define TURNTABLE_PLATTER_BUTTONS_USAGE 45
97 #define TURNTABLE_CROSS_FADER_USAGE 46
98 
99 /* Magic data taken from GHLtarUtility:
100  * https://github.com/ghlre/GHLtarUtility/blob/master/PS3Guitar.cs
101  * Note: The Wii U and PS3 dongles happen to share the same!
102  */
103 static const char ghl_ps3wiiu_magic_data[] = {
104 	0x02, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
105 };
106 
107 /* Magic data for the PS4 dongles sniffed with a USB protocol
108  * analyzer.
109  */
110 static const char ghl_ps4_magic_data[] = {
111 	0x30, 0x02, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00
112 };
113 
114 /* PS/3 Motion controller */
115 static const u8 motion_rdesc[] = {
116 	0x05, 0x01,         /*  Usage Page (Desktop),               */
117 	0x09, 0x04,         /*  Usage (Joystick),                   */
118 	0xA1, 0x01,         /*  Collection (Application),           */
119 	0xA1, 0x02,         /*      Collection (Logical),           */
120 	0x85, 0x01,         /*          Report ID (1),              */
121 	0x75, 0x01,         /*          Report Size (1),            */
122 	0x95, 0x15,         /*          Report Count (21),          */
123 	0x15, 0x00,         /*          Logical Minimum (0),        */
124 	0x25, 0x01,         /*          Logical Maximum (1),        */
125 	0x35, 0x00,         /*          Physical Minimum (0),       */
126 	0x45, 0x01,         /*          Physical Maximum (1),       */
127 	0x05, 0x09,         /*          Usage Page (Button),        */
128 	0x19, 0x01,         /*          Usage Minimum (01h),        */
129 	0x29, 0x15,         /*          Usage Maximum (15h),        */
130 	0x81, 0x02,         /*          Input (Variable),           * Buttons */
131 	0x95, 0x0B,         /*          Report Count (11),          */
132 	0x06, 0x00, 0xFF,   /*          Usage Page (FF00h),         */
133 	0x81, 0x03,         /*          Input (Constant, Variable), * Padding */
134 	0x15, 0x00,         /*          Logical Minimum (0),        */
135 	0x26, 0xFF, 0x00,   /*          Logical Maximum (255),      */
136 	0x05, 0x01,         /*          Usage Page (Desktop),       */
137 	0xA1, 0x00,         /*          Collection (Physical),      */
138 	0x75, 0x08,         /*              Report Size (8),        */
139 	0x95, 0x01,         /*              Report Count (1),       */
140 	0x35, 0x00,         /*              Physical Minimum (0),   */
141 	0x46, 0xFF, 0x00,   /*              Physical Maximum (255), */
142 	0x09, 0x30,         /*              Usage (X),              */
143 	0x81, 0x02,         /*              Input (Variable),       * Trigger */
144 	0xC0,               /*          End Collection,             */
145 	0x06, 0x00, 0xFF,   /*          Usage Page (FF00h),         */
146 	0x75, 0x08,         /*          Report Size (8),            */
147 	0x95, 0x07,         /*          Report Count (7),           * skip 7 bytes */
148 	0x81, 0x02,         /*          Input (Variable),           */
149 	0x05, 0x01,         /*          Usage Page (Desktop),       */
150 	0x75, 0x10,         /*          Report Size (16),           */
151 	0x46, 0xFF, 0xFF,   /*          Physical Maximum (65535),   */
152 	0x27, 0xFF, 0xFF, 0x00, 0x00, /*      Logical Maximum (65535),    */
153 	0x95, 0x03,         /*          Report Count (3),           * 3x Accels */
154 	0x09, 0x33,         /*              Usage (rX),             */
155 	0x09, 0x34,         /*              Usage (rY),             */
156 	0x09, 0x35,         /*              Usage (rZ),             */
157 	0x81, 0x02,         /*          Input (Variable),           */
158 	0x06, 0x00, 0xFF,   /*          Usage Page (FF00h),         */
159 	0x95, 0x03,         /*          Report Count (3),           * Skip Accels 2nd frame */
160 	0x81, 0x02,         /*          Input (Variable),           */
161 	0x05, 0x01,         /*          Usage Page (Desktop),       */
162 	0x09, 0x01,         /*          Usage (Pointer),            */
163 	0x95, 0x03,         /*          Report Count (3),           * 3x Gyros */
164 	0x81, 0x02,         /*          Input (Variable),           */
165 	0x06, 0x00, 0xFF,   /*          Usage Page (FF00h),         */
166 	0x95, 0x03,         /*          Report Count (3),           * Skip Gyros 2nd frame */
167 	0x81, 0x02,         /*          Input (Variable),           */
168 	0x75, 0x0C,         /*          Report Size (12),           */
169 	0x46, 0xFF, 0x0F,   /*          Physical Maximum (4095),    */
170 	0x26, 0xFF, 0x0F,   /*          Logical Maximum (4095),     */
171 	0x95, 0x04,         /*          Report Count (4),           * Skip Temp and Magnetometers */
172 	0x81, 0x02,         /*          Input (Variable),           */
173 	0x75, 0x08,         /*          Report Size (8),            */
174 	0x46, 0xFF, 0x00,   /*          Physical Maximum (255),     */
175 	0x26, 0xFF, 0x00,   /*          Logical Maximum (255),      */
176 	0x95, 0x06,         /*          Report Count (6),           * Skip Timestamp and Extension Bytes */
177 	0x81, 0x02,         /*          Input (Variable),           */
178 	0x75, 0x08,         /*          Report Size (8),            */
179 	0x95, 0x30,         /*          Report Count (48),          */
180 	0x09, 0x01,         /*          Usage (Pointer),            */
181 	0x91, 0x02,         /*          Output (Variable),          */
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, 0x02,         /*          Report ID (2),              */
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 	0xA1, 0x02,         /*      Collection (Logical),           */
195 	0x85, 0xEE,         /*          Report ID (238),            */
196 	0x75, 0x08,         /*          Report Size (8),            */
197 	0x95, 0x30,         /*          Report Count (48),          */
198 	0x09, 0x01,         /*          Usage (Pointer),            */
199 	0xB1, 0x02,         /*          Feature (Variable),         */
200 	0xC0,               /*      End Collection,                 */
201 	0xA1, 0x02,         /*      Collection (Logical),           */
202 	0x85, 0xEF,         /*          Report ID (239),            */
203 	0x75, 0x08,         /*          Report Size (8),            */
204 	0x95, 0x30,         /*          Report Count (48),          */
205 	0x09, 0x01,         /*          Usage (Pointer),            */
206 	0xB1, 0x02,         /*          Feature (Variable),         */
207 	0xC0,               /*      End Collection,                 */
208 	0xC0                /*  End Collection                      */
209 };
210 
211 static const u8 ps3remote_rdesc[] = {
212 	0x05, 0x01,          /* GUsagePage Generic Desktop */
213 	0x09, 0x05,          /* LUsage 0x05 [Game Pad] */
214 	0xA1, 0x01,          /* MCollection Application (mouse, keyboard) */
215 
216 	 /* Use collection 1 for joypad buttons */
217 	 0xA1, 0x02,         /* MCollection Logical (interrelated data) */
218 
219 	  /*
220 	   * Ignore the 1st byte, maybe it is used for a controller
221 	   * number but it's not needed for correct operation
222 	   */
223 	  0x75, 0x08,        /* GReportSize 0x08 [8] */
224 	  0x95, 0x01,        /* GReportCount 0x01 [1] */
225 	  0x81, 0x01,        /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
226 
227 	  /*
228 	   * Bytes from 2nd to 4th are a bitmap for joypad buttons, for these
229 	   * buttons multiple keypresses are allowed
230 	   */
231 	  0x05, 0x09,        /* GUsagePage Button */
232 	  0x19, 0x01,        /* LUsageMinimum 0x01 [Button 1 (primary/trigger)] */
233 	  0x29, 0x18,        /* LUsageMaximum 0x18 [Button 24] */
234 	  0x14,              /* GLogicalMinimum [0] */
235 	  0x25, 0x01,        /* GLogicalMaximum 0x01 [1] */
236 	  0x75, 0x01,        /* GReportSize 0x01 [1] */
237 	  0x95, 0x18,        /* GReportCount 0x18 [24] */
238 	  0x81, 0x02,        /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
239 
240 	  0xC0,              /* MEndCollection */
241 
242 	 /* Use collection 2 for remote control buttons */
243 	 0xA1, 0x02,         /* MCollection Logical (interrelated data) */
244 
245 	  /* 5th byte is used for remote control buttons */
246 	  0x05, 0x09,        /* GUsagePage Button */
247 	  0x18,              /* LUsageMinimum [No button pressed] */
248 	  0x29, 0xFE,        /* LUsageMaximum 0xFE [Button 254] */
249 	  0x14,              /* GLogicalMinimum [0] */
250 	  0x26, 0xFE, 0x00,  /* GLogicalMaximum 0x00FE [254] */
251 	  0x75, 0x08,        /* GReportSize 0x08 [8] */
252 	  0x95, 0x01,        /* GReportCount 0x01 [1] */
253 	  0x80,              /* MInput  */
254 
255 	  /*
256 	   * Ignore bytes from 6th to 11th, 6th to 10th are always constant at
257 	   * 0xff and 11th is for press indication
258 	   */
259 	  0x75, 0x08,        /* GReportSize 0x08 [8] */
260 	  0x95, 0x06,        /* GReportCount 0x06 [6] */
261 	  0x81, 0x01,        /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
262 
263 	  /* 12th byte is for battery strength */
264 	  0x05, 0x06,        /* GUsagePage Generic Device Controls */
265 	  0x09, 0x20,        /* LUsage 0x20 [Battery Strength] */
266 	  0x14,              /* GLogicalMinimum [0] */
267 	  0x25, 0x05,        /* GLogicalMaximum 0x05 [5] */
268 	  0x75, 0x08,        /* GReportSize 0x08 [8] */
269 	  0x95, 0x01,        /* GReportCount 0x01 [1] */
270 	  0x81, 0x02,        /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
271 
272 	  0xC0,              /* MEndCollection */
273 
274 	 0xC0                /* MEndCollection [Game Pad] */
275 };
276 
277 static const unsigned int ps3remote_keymap_joypad_buttons[] = {
278 	[0x01] = KEY_SELECT,
279 	[0x02] = BTN_THUMBL,		/* L3 */
280 	[0x03] = BTN_THUMBR,		/* R3 */
281 	[0x04] = BTN_START,
282 	[0x05] = KEY_UP,
283 	[0x06] = KEY_RIGHT,
284 	[0x07] = KEY_DOWN,
285 	[0x08] = KEY_LEFT,
286 	[0x09] = BTN_TL2,		/* L2 */
287 	[0x0a] = BTN_TR2,		/* R2 */
288 	[0x0b] = BTN_TL,		/* L1 */
289 	[0x0c] = BTN_TR,		/* R1 */
290 	[0x0d] = KEY_OPTION,		/* options/triangle */
291 	[0x0e] = KEY_BACK,		/* back/circle */
292 	[0x0f] = BTN_0,			/* cross */
293 	[0x10] = KEY_SCREEN,		/* view/square */
294 	[0x11] = KEY_HOMEPAGE,		/* PS button */
295 	[0x14] = KEY_ENTER,
296 };
297 static const unsigned int ps3remote_keymap_remote_buttons[] = {
298 	[0x00] = KEY_1,
299 	[0x01] = KEY_2,
300 	[0x02] = KEY_3,
301 	[0x03] = KEY_4,
302 	[0x04] = KEY_5,
303 	[0x05] = KEY_6,
304 	[0x06] = KEY_7,
305 	[0x07] = KEY_8,
306 	[0x08] = KEY_9,
307 	[0x09] = KEY_0,
308 	[0x0e] = KEY_ESC,		/* return */
309 	[0x0f] = KEY_CLEAR,
310 	[0x16] = KEY_EJECTCD,
311 	[0x1a] = KEY_MENU,		/* top menu */
312 	[0x28] = KEY_TIME,
313 	[0x30] = KEY_PREVIOUS,
314 	[0x31] = KEY_NEXT,
315 	[0x32] = KEY_PLAY,
316 	[0x33] = KEY_REWIND,		/* scan back */
317 	[0x34] = KEY_FORWARD,		/* scan forward */
318 	[0x38] = KEY_STOP,
319 	[0x39] = KEY_PAUSE,
320 	[0x40] = KEY_CONTEXT_MENU,	/* pop up/menu */
321 	[0x60] = KEY_FRAMEBACK,		/* slow/step back */
322 	[0x61] = KEY_FRAMEFORWARD,	/* slow/step forward */
323 	[0x63] = KEY_SUBTITLE,
324 	[0x64] = KEY_AUDIO,
325 	[0x65] = KEY_ANGLE,
326 	[0x70] = KEY_INFO,		/* display */
327 	[0x80] = KEY_BLUE,
328 	[0x81] = KEY_RED,
329 	[0x82] = KEY_GREEN,
330 	[0x83] = KEY_YELLOW,
331 };
332 
333 static const unsigned int buzz_keymap[] = {
334 	/*
335 	 * The controller has 4 remote buzzers, each with one LED and 5
336 	 * buttons.
337 	 *
338 	 * We use the mapping chosen by the controller, which is:
339 	 *
340 	 * Key          Offset
341 	 * -------------------
342 	 * Buzz              1
343 	 * Blue              5
344 	 * Orange            4
345 	 * Green             3
346 	 * Yellow            2
347 	 *
348 	 * So, for example, the orange button on the third buzzer is mapped to
349 	 * BTN_TRIGGER_HAPPY14
350 	 */
351 	 [1] = BTN_TRIGGER_HAPPY1,
352 	 [2] = BTN_TRIGGER_HAPPY2,
353 	 [3] = BTN_TRIGGER_HAPPY3,
354 	 [4] = BTN_TRIGGER_HAPPY4,
355 	 [5] = BTN_TRIGGER_HAPPY5,
356 	 [6] = BTN_TRIGGER_HAPPY6,
357 	 [7] = BTN_TRIGGER_HAPPY7,
358 	 [8] = BTN_TRIGGER_HAPPY8,
359 	 [9] = BTN_TRIGGER_HAPPY9,
360 	[10] = BTN_TRIGGER_HAPPY10,
361 	[11] = BTN_TRIGGER_HAPPY11,
362 	[12] = BTN_TRIGGER_HAPPY12,
363 	[13] = BTN_TRIGGER_HAPPY13,
364 	[14] = BTN_TRIGGER_HAPPY14,
365 	[15] = BTN_TRIGGER_HAPPY15,
366 	[16] = BTN_TRIGGER_HAPPY16,
367 	[17] = BTN_TRIGGER_HAPPY17,
368 	[18] = BTN_TRIGGER_HAPPY18,
369 	[19] = BTN_TRIGGER_HAPPY19,
370 	[20] = BTN_TRIGGER_HAPPY20,
371 };
372 
373 /* The Navigation controller is a partial DS3 and uses the same HID report
374  * and hence the same keymap indices, however not all axes/buttons
375  * are physically present. We use the same axis and button mapping as
376  * the DS3, which uses the Linux gamepad spec.
377  */
378 static const unsigned int navigation_absmap[] = {
379 	[0x30] = ABS_X,
380 	[0x31] = ABS_Y,
381 	[0x33] = ABS_Z, /* L2 */
382 };
383 
384 /* Buttons not physically available on the device, but still available
385  * in the reports are explicitly set to 0 for documentation purposes.
386  */
387 static const unsigned int navigation_keymap[] = {
388 	[0x01] = 0, /* Select */
389 	[0x02] = BTN_THUMBL, /* L3 */
390 	[0x03] = 0, /* R3 */
391 	[0x04] = 0, /* Start */
392 	[0x05] = BTN_DPAD_UP, /* Up */
393 	[0x06] = BTN_DPAD_RIGHT, /* Right */
394 	[0x07] = BTN_DPAD_DOWN, /* Down */
395 	[0x08] = BTN_DPAD_LEFT, /* Left */
396 	[0x09] = BTN_TL2, /* L2 */
397 	[0x0a] = 0, /* R2 */
398 	[0x0b] = BTN_TL, /* L1 */
399 	[0x0c] = 0, /* R1 */
400 	[0x0d] = BTN_NORTH, /* Triangle */
401 	[0x0e] = BTN_EAST, /* Circle */
402 	[0x0f] = BTN_SOUTH, /* Cross */
403 	[0x10] = BTN_WEST, /* Square */
404 	[0x11] = BTN_MODE, /* PS */
405 };
406 
407 static const unsigned int sixaxis_absmap[] = {
408 	[0x30] = ABS_X,
409 	[0x31] = ABS_Y,
410 	[0x32] = ABS_RX, /* right stick X */
411 	[0x35] = ABS_RY, /* right stick Y */
412 };
413 
414 static const unsigned int sixaxis_keymap[] = {
415 	[0x01] = BTN_SELECT, /* Select */
416 	[0x02] = BTN_THUMBL, /* L3 */
417 	[0x03] = BTN_THUMBR, /* R3 */
418 	[0x04] = BTN_START, /* Start */
419 	[0x05] = BTN_DPAD_UP, /* Up */
420 	[0x06] = BTN_DPAD_RIGHT, /* Right */
421 	[0x07] = BTN_DPAD_DOWN, /* Down */
422 	[0x08] = BTN_DPAD_LEFT, /* Left */
423 	[0x09] = BTN_TL2, /* L2 */
424 	[0x0a] = BTN_TR2, /* R2 */
425 	[0x0b] = BTN_TL, /* L1 */
426 	[0x0c] = BTN_TR, /* R1 */
427 	[0x0d] = BTN_NORTH, /* Triangle */
428 	[0x0e] = BTN_EAST, /* Circle */
429 	[0x0f] = BTN_SOUTH, /* Cross */
430 	[0x10] = BTN_WEST, /* Square */
431 	[0x11] = BTN_MODE, /* PS */
432 };
433 
434 static const unsigned int rb4_absmap[] = {
435 	[0x30] = ABS_X,
436 	[0x31] = ABS_Y,
437 };
438 
439 static const unsigned int ps3_turntable_absmap[] = {
440 	[0x32] = ABS_X,
441 	[0x35] = ABS_Y,
442 };
443 
444 static const unsigned int instrument_keymap[] = {
445 	[0x1] = BTN_WEST,
446 	[0x2] = BTN_SOUTH,
447 	[0x3] = BTN_EAST,
448 	[0x4] = BTN_NORTH,
449 	[0x5] = BTN_TL,
450 	[0x6] = BTN_TR,
451 	[0x7] = BTN_TL2,
452 	[0x8] = BTN_TR2,
453 	[0x9] = BTN_SELECT,
454 	[0xa] = BTN_START,
455 	[0xb] = BTN_THUMBL,
456 	[0xc] = BTN_THUMBR,
457 	[0xd] = BTN_MODE,
458 };
459 
460 static enum power_supply_property sony_battery_props[] = {
461 	POWER_SUPPLY_PROP_PRESENT,
462 	POWER_SUPPLY_PROP_CAPACITY,
463 	POWER_SUPPLY_PROP_SCOPE,
464 	POWER_SUPPLY_PROP_STATUS,
465 };
466 
467 struct sixaxis_led {
468 	u8 time_enabled; /* the total time the led is active (0xff means forever) */
469 	u8 duty_length;  /* how long a cycle is in deciseconds (0 means "really fast") */
470 	u8 enabled;
471 	u8 duty_off; /* % of duty_length the led is off (0xff means 100%) */
472 	u8 duty_on;  /* % of duty_length the led is on (0xff mean 100%) */
473 } __packed;
474 static_assert(sizeof(struct sixaxis_led) == 5);
475 
476 struct sixaxis_rumble {
477 	u8 padding;
478 	u8 right_duration; /* Right motor duration (0xff means forever) */
479 	u8 right_motor_on; /* Right (small) motor on/off, only supports values of 0 or 1 (off/on) */
480 	u8 left_duration;    /* Left motor duration (0xff means forever) */
481 	u8 left_motor_force; /* left (large) motor, supports force values from 0 to 255 */
482 } __packed;
483 static_assert(sizeof(struct sixaxis_rumble) == 5);
484 
485 struct sixaxis_output_report {
486 	u8 report_id;
487 	struct sixaxis_rumble rumble;
488 	u8 padding[4];
489 	u8 leds_bitmap; /* bitmap of enabled LEDs: LED_1 = 0x02, LED_2 = 0x04, ... */
490 	struct sixaxis_led led[4];    /* LEDx at (4 - x) */
491 	struct sixaxis_led _reserved; /* LED5, not actually soldered */
492 } __packed;
493 static_assert(sizeof(struct sixaxis_output_report) == 36);
494 
495 union sixaxis_output_report_01 {
496 	struct sixaxis_output_report data;
497 	u8 buf[36];
498 };
499 static_assert(sizeof(union sixaxis_output_report_01) == 36);
500 
501 struct motion_output_report_02 {
502 	u8 type, zero;
503 	u8 r, g, b;
504 	u8 zero2;
505 	u8 rumble;
506 };
507 static_assert(sizeof(struct motion_output_report_02) == 7);
508 
509 #define SIXAXIS_REPORT_0xF2_SIZE 17
510 #define SIXAXIS_REPORT_0xF5_SIZE 8
511 #define MOTION_REPORT_0x02_SIZE 49
512 #define PRO_INSTRUMENT_0x00_SIZE 8
513 
514 #define SENSOR_SUFFIX " Motion Sensors"
515 #define TOUCHPAD_SUFFIX " Touchpad"
516 
517 #define SIXAXIS_INPUT_REPORT_ACC_X_OFFSET 41
518 #define SIXAXIS_ACC_RES_PER_G 113
519 
520 static DEFINE_SPINLOCK(sony_dev_list_lock);
521 static LIST_HEAD(sony_device_list);
522 static DEFINE_IDA(sony_device_id_allocator);
523 
524 enum sony_worker {
525 	SONY_WORKER_STATE
526 };
527 
528 struct sony_sc {
529 	spinlock_t lock;
530 	struct list_head list_node;
531 	struct hid_device *hdev;
532 	struct input_dev *input_dev;
533 	struct input_dev *touchpad;
534 	struct input_dev *sensor_dev;
535 	struct led_classdev *leds[MAX_LEDS];
536 	unsigned long quirks;
537 	struct work_struct state_worker;
538 	void (*send_output_report)(struct sony_sc *sc);
539 	struct power_supply *battery;
540 	struct power_supply_desc battery_desc;
541 	int device_id;
542 	u8 *output_report_dmabuf;
543 
544 #ifdef CONFIG_SONY_FF
545 	u8 left;
546 	u8 right;
547 #endif
548 
549 	u8 mac_address[6];
550 	u8 state_worker_initialized;
551 	u8 defer_initialization;
552 	u8 battery_capacity;
553 	int battery_status;
554 	u8 led_state[MAX_LEDS];
555 	u8 led_delay_on[MAX_LEDS];
556 	u8 led_delay_off[MAX_LEDS];
557 	u8 led_count;
558 
559 	/* GH Live */
560 	struct urb *ghl_urb;
561 	struct timer_list ghl_poke_timer;
562 
563 	/* Rock Band 3 Pro Instruments */
564 	unsigned long rb3_pro_poke_jiffies;
565 };
566 
567 static void sony_set_leds(struct sony_sc *sc);
568 
sony_schedule_work(struct sony_sc * sc,enum sony_worker which)569 static inline void sony_schedule_work(struct sony_sc *sc,
570 				      enum sony_worker which)
571 {
572 	unsigned long flags;
573 
574 	switch (which) {
575 	case SONY_WORKER_STATE:
576 		spin_lock_irqsave(&sc->lock, flags);
577 		if (!sc->defer_initialization && sc->state_worker_initialized)
578 			schedule_work(&sc->state_worker);
579 		spin_unlock_irqrestore(&sc->lock, flags);
580 		break;
581 	}
582 }
583 
ghl_magic_poke_cb(struct urb * urb)584 static void ghl_magic_poke_cb(struct urb *urb)
585 {
586 	struct sony_sc *sc = urb->context;
587 
588 	if (urb->status < 0)
589 		hid_err(sc->hdev, "URB transfer failed : %d", urb->status);
590 
591 	mod_timer(&sc->ghl_poke_timer, jiffies + GHL_GUITAR_POKE_INTERVAL*HZ);
592 }
593 
ghl_magic_poke(struct timer_list * t)594 static void ghl_magic_poke(struct timer_list *t)
595 {
596 	int ret;
597 	struct sony_sc *sc = timer_container_of(sc, t, ghl_poke_timer);
598 
599 	ret = usb_submit_urb(sc->ghl_urb, GFP_ATOMIC);
600 	if (ret < 0)
601 		hid_err(sc->hdev, "usb_submit_urb failed: %d", ret);
602 }
603 
ghl_init_urb(struct sony_sc * sc,struct usb_device * usbdev,const char ghl_magic_data[],u16 poke_size)604 static int ghl_init_urb(struct sony_sc *sc, struct usb_device *usbdev,
605 					   const char ghl_magic_data[], u16 poke_size)
606 {
607 	struct usb_ctrlrequest *cr;
608 	u8 *databuf;
609 	unsigned int pipe;
610 	u16 ghl_magic_value = (((HID_OUTPUT_REPORT + 1) << 8) | ghl_magic_data[0]);
611 
612 	pipe = usb_sndctrlpipe(usbdev, 0);
613 
614 	cr = devm_kzalloc(&sc->hdev->dev, sizeof(*cr), GFP_ATOMIC);
615 	if (!cr)
616 		return -ENOMEM;
617 
618 	databuf = devm_kzalloc(&sc->hdev->dev, poke_size, GFP_ATOMIC);
619 	if (!databuf)
620 		return -ENOMEM;
621 
622 	cr->bRequestType =
623 		USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT;
624 	cr->bRequest = USB_REQ_SET_CONFIGURATION;
625 	cr->wValue = cpu_to_le16(ghl_magic_value);
626 	cr->wIndex = 0;
627 	cr->wLength = cpu_to_le16(poke_size);
628 	memcpy(databuf, ghl_magic_data, poke_size);
629 	usb_fill_control_urb(
630 		sc->ghl_urb, usbdev, pipe,
631 		(unsigned char *) cr, databuf, poke_size,
632 		ghl_magic_poke_cb, sc);
633 	return 0;
634 }
635 
636 
637 
638 /*
639  * Sending HID_REQ_SET_REPORT enables the full report. Without this
640  * Rock Band 3 Pro instruments only report navigation events
641  */
rb3_pro_instrument_enable_full_report(struct sony_sc * sc)642 static int rb3_pro_instrument_enable_full_report(struct sony_sc *sc)
643 {
644 	struct hid_device *hdev = sc->hdev;
645 	static const u8 report[] = { 0x00, 0xE9, 0x00, 0x89, 0x1B,
646 								 0x00, 0x00, 0x00, 0x02, 0x00,
647 								 0x00, 0x00, 0x00, 0x00, 0x00,
648 								 0x00, 0x00, 0x00, 0x00, 0x00,
649 								 0x00, 0x00, 0x80, 0x00, 0x00,
650 								 0x00, 0x00, 0x89, 0x00, 0x00,
651 								 0x00, 0x00, 0x00, 0xE9, 0x01,
652 								 0x00, 0x00, 0x00, 0x00, 0x00,
653 								 0x00 };
654 	u8 *buf;
655 	int ret;
656 
657 	buf = kmemdup(report, sizeof(report), GFP_KERNEL);
658 	if (!buf)
659 		return -ENOMEM;
660 
661 	ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report),
662 				  HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
663 
664 	kfree(buf);
665 
666 	return ret;
667 }
668 
djh_turntable_mapping(struct hid_device * hdev,struct hid_input * hi,struct hid_field * field,struct hid_usage * usage,unsigned long ** bit,int * max)669 static int djh_turntable_mapping(struct hid_device *hdev, struct hid_input *hi,
670 			  struct hid_field *field, struct hid_usage *usage,
671 			  unsigned long **bit, int *max)
672 {
673 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) {
674 		unsigned int abs = usage->hid & HID_USAGE;
675 
676 		if (abs == TURNTABLE_CROSS_FADER_USAGE) {
677 			hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RX);
678 			return 1;
679 		} else if (abs == TURNTABLE_EFFECTS_KNOB_USAGE) {
680 			hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RY);
681 			return 1;
682 		} else if (abs == TURNTABLE_PLATTER_BUTTONS_USAGE) {
683 			hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RZ);
684 			return 1;
685 		}
686 	} else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
687 		unsigned int abs = usage->hid & HID_USAGE;
688 
689 		if (abs >= ARRAY_SIZE(ps3_turntable_absmap))
690 			return -1;
691 
692 		abs = ps3_turntable_absmap[abs];
693 
694 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
695 		return 1;
696 	}
697 	return 0;
698 }
699 
instrument_mapping(struct hid_device * hdev,struct hid_input * hi,struct hid_field * field,struct hid_usage * usage,unsigned long ** bit,int * max)700 static int instrument_mapping(struct hid_device *hdev, struct hid_input *hi,
701 			  struct hid_field *field, struct hid_usage *usage,
702 			  unsigned long **bit, int *max)
703 {
704 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
705 		unsigned int key = usage->hid & HID_USAGE;
706 
707 		if (key >= ARRAY_SIZE(instrument_keymap))
708 			return 0;
709 
710 		key = instrument_keymap[key];
711 		hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
712 		return 1;
713 	}
714 
715 	return 0;
716 }
717 
gh_guitar_mapping(struct hid_device * hdev,struct hid_input * hi,struct hid_field * field,struct hid_usage * usage,unsigned long ** bit,int * max)718 static int gh_guitar_mapping(struct hid_device *hdev, struct hid_input *hi,
719 			  struct hid_field *field, struct hid_usage *usage,
720 			  unsigned long **bit, int *max)
721 {
722 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) {
723 		unsigned int abs = usage->hid & HID_USAGE;
724 
725 		if (abs == GUITAR_TILT_USAGE) {
726 			hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RY);
727 			return 1;
728 		}
729 	}
730 	return 0;
731 }
732 
rb4_guitar_mapping(struct hid_device * hdev,struct hid_input * hi,struct hid_field * field,struct hid_usage * usage,unsigned long ** bit,int * max)733 static int rb4_guitar_mapping(struct hid_device *hdev, struct hid_input *hi,
734 			  struct hid_field *field, struct hid_usage *usage,
735 			  unsigned long **bit, int *max)
736 {
737 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
738 		unsigned int abs = usage->hid & HID_USAGE;
739 
740 		/* Let the HID parser deal with the HAT. */
741 		if (usage->hid == HID_GD_HATSWITCH)
742 			return 0;
743 
744 		if (abs >= ARRAY_SIZE(rb4_absmap))
745 			return 0;
746 
747 		abs = rb4_absmap[abs];
748 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
749 		return 1;
750 	}
751 
752 	return 0;
753 }
754 
motion_fixup(struct hid_device * hdev,u8 * rdesc,unsigned int * rsize)755 static const u8 *motion_fixup(struct hid_device *hdev, u8 *rdesc,
756 			      unsigned int *rsize)
757 {
758 	*rsize = sizeof(motion_rdesc);
759 	return motion_rdesc;
760 }
761 
ps3remote_fixup(struct hid_device * hdev,u8 * rdesc,unsigned int * rsize)762 static const u8 *ps3remote_fixup(struct hid_device *hdev, u8 *rdesc,
763 				 unsigned int *rsize)
764 {
765 	*rsize = sizeof(ps3remote_rdesc);
766 	return ps3remote_rdesc;
767 }
768 
ps3remote_mapping(struct hid_device * hdev,struct hid_input * hi,struct hid_field * field,struct hid_usage * usage,unsigned long ** bit,int * max)769 static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi,
770 			     struct hid_field *field, struct hid_usage *usage,
771 			     unsigned long **bit, int *max)
772 {
773 	unsigned int key = usage->hid & HID_USAGE;
774 
775 	if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
776 		return -1;
777 
778 	switch (usage->collection_index) {
779 	case 1:
780 		if (key >= ARRAY_SIZE(ps3remote_keymap_joypad_buttons))
781 			return -1;
782 
783 		key = ps3remote_keymap_joypad_buttons[key];
784 		if (!key)
785 			return -1;
786 		break;
787 	case 2:
788 		if (key >= ARRAY_SIZE(ps3remote_keymap_remote_buttons))
789 			return -1;
790 
791 		key = ps3remote_keymap_remote_buttons[key];
792 		if (!key)
793 			return -1;
794 		break;
795 	default:
796 		return -1;
797 	}
798 
799 	hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
800 	return 1;
801 }
802 
navigation_mapping(struct hid_device * hdev,struct hid_input * hi,struct hid_field * field,struct hid_usage * usage,unsigned long ** bit,int * max)803 static int navigation_mapping(struct hid_device *hdev, struct hid_input *hi,
804 			  struct hid_field *field, struct hid_usage *usage,
805 			  unsigned long **bit, int *max)
806 {
807 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
808 		unsigned int key = usage->hid & HID_USAGE;
809 
810 		if (key >= ARRAY_SIZE(sixaxis_keymap))
811 			return -1;
812 
813 		key = navigation_keymap[key];
814 		if (!key)
815 			return -1;
816 
817 		hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
818 		return 1;
819 	} else if (usage->hid == HID_GD_POINTER) {
820 		/* See comment in sixaxis_mapping, basically the L2 (and R2)
821 		 * triggers are reported through GD Pointer.
822 		 * In addition we ignore any analog button 'axes' and only
823 		 * support digital buttons.
824 		 */
825 		switch (usage->usage_index) {
826 		case 8: /* L2 */
827 			usage->hid = HID_GD_Z;
828 			break;
829 		default:
830 			return -1;
831 		}
832 
833 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, usage->hid & 0xf);
834 		return 1;
835 	} else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
836 		unsigned int abs = usage->hid & HID_USAGE;
837 
838 		if (abs >= ARRAY_SIZE(navigation_absmap))
839 			return -1;
840 
841 		abs = navigation_absmap[abs];
842 
843 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
844 		return 1;
845 	}
846 
847 	return -1;
848 }
849 
850 
sixaxis_mapping(struct hid_device * hdev,struct hid_input * hi,struct hid_field * field,struct hid_usage * usage,unsigned long ** bit,int * max)851 static int sixaxis_mapping(struct hid_device *hdev, struct hid_input *hi,
852 			  struct hid_field *field, struct hid_usage *usage,
853 			  unsigned long **bit, int *max)
854 {
855 	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
856 		unsigned int key = usage->hid & HID_USAGE;
857 
858 		if (key >= ARRAY_SIZE(sixaxis_keymap))
859 			return -1;
860 
861 		key = sixaxis_keymap[key];
862 		hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
863 		return 1;
864 	} else if (usage->hid == HID_GD_POINTER) {
865 		/* The DS3 provides analog values for most buttons and even
866 		 * for HAT axes through GD Pointer. L2 and R2 are reported
867 		 * among these as well instead of as GD Z / RZ. Remap L2
868 		 * and R2 and ignore other analog 'button axes' as there is
869 		 * no good way for reporting them.
870 		 */
871 		switch (usage->usage_index) {
872 		case 8: /* L2 */
873 			usage->hid = HID_GD_Z;
874 			break;
875 		case 9: /* R2 */
876 			usage->hid = HID_GD_RZ;
877 			break;
878 		default:
879 			return -1;
880 		}
881 
882 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, usage->hid & 0xf);
883 		return 1;
884 	} else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
885 		unsigned int abs = usage->hid & HID_USAGE;
886 
887 		if (abs >= ARRAY_SIZE(sixaxis_absmap))
888 			return -1;
889 
890 		abs = sixaxis_absmap[abs];
891 
892 		hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
893 		return 1;
894 	}
895 
896 	return -1;
897 }
898 
sony_report_fixup(struct hid_device * hdev,u8 * rdesc,unsigned int * rsize)899 static const u8 *sony_report_fixup(struct hid_device *hdev, u8 *rdesc,
900 		unsigned int *rsize)
901 {
902 	struct sony_sc *sc = hid_get_drvdata(hdev);
903 
904 	if (sc->quirks & (SINO_LITE_CONTROLLER | FUTUREMAX_DANCE_MAT))
905 		return rdesc;
906 
907 	/*
908 	 * Some Sony RF receivers wrongly declare the mouse pointer as a
909 	 * a constant non-data variable.
910 	 */
911 	if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 &&
912 	    /* usage page: generic desktop controls */
913 	    /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */
914 	    /* usage: mouse */
915 	    rdesc[2] == 0x09 && rdesc[3] == 0x02 &&
916 	    /* input (usage page for x,y axes): constant, variable, relative */
917 	    rdesc[54] == 0x81 && rdesc[55] == 0x07) {
918 		hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n");
919 		/* input: data, variable, relative */
920 		rdesc[55] = 0x06;
921 	}
922 
923 	if (sc->quirks & MOTION_CONTROLLER)
924 		return motion_fixup(hdev, rdesc, rsize);
925 
926 	if (sc->quirks & PS3REMOTE)
927 		return ps3remote_fixup(hdev, rdesc, rsize);
928 
929 	/*
930 	 * Some knock-off USB dongles incorrectly report their button count
931 	 * as 13 instead of 16 causing three non-functional buttons.
932 	 */
933 	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize >= 45 &&
934 		/* Report Count (13) */
935 		rdesc[23] == 0x95 && rdesc[24] == 0x0D &&
936 		/* Usage Maximum (13) */
937 		rdesc[37] == 0x29 && rdesc[38] == 0x0D &&
938 		/* Report Count (3) */
939 		rdesc[43] == 0x95 && rdesc[44] == 0x03) {
940 		hid_info(hdev, "Fixing up USB dongle report descriptor\n");
941 		rdesc[24] = 0x10;
942 		rdesc[38] = 0x10;
943 		rdesc[44] = 0x00;
944 	}
945 
946 	return rdesc;
947 }
948 
sixaxis_parse_report(struct sony_sc * sc,u8 * rd,int size)949 static void sixaxis_parse_report(struct sony_sc *sc, u8 *rd, int size)
950 {
951 	static const u8 sixaxis_battery_capacity[] = { 0, 1, 25, 50, 75, 100 };
952 	unsigned long flags;
953 	int offset;
954 	u8 index;
955 	u8 battery_capacity;
956 	int battery_status;
957 
958 	/*
959 	 * The sixaxis is charging if the battery value is 0xee
960 	 * and it is fully charged if the value is 0xef.
961 	 * It does not report the actual level while charging so it
962 	 * is set to 100% while charging is in progress.
963 	 */
964 	offset = (sc->quirks & MOTION_CONTROLLER) ? 12 : 30;
965 
966 	if (rd[offset] >= 0xee) {
967 		battery_capacity = 100;
968 		battery_status = (rd[offset] & 0x01) ? POWER_SUPPLY_STATUS_FULL : POWER_SUPPLY_STATUS_CHARGING;
969 	} else {
970 		index = rd[offset] <= 5 ? rd[offset] : 5;
971 		battery_capacity = sixaxis_battery_capacity[index];
972 		battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
973 	}
974 
975 	spin_lock_irqsave(&sc->lock, flags);
976 	sc->battery_capacity = battery_capacity;
977 	sc->battery_status = battery_status;
978 	spin_unlock_irqrestore(&sc->lock, flags);
979 
980 	if (sc->quirks & SIXAXIS_CONTROLLER) {
981 		int val;
982 
983 		offset = SIXAXIS_INPUT_REPORT_ACC_X_OFFSET;
984 		val = ((rd[offset+1] << 8) | rd[offset]) - 511;
985 		input_report_abs(sc->sensor_dev, ABS_X, val);
986 
987 		/* Y and Z are swapped and inversed */
988 		val = 511 - ((rd[offset+5] << 8) | rd[offset+4]);
989 		input_report_abs(sc->sensor_dev, ABS_Y, val);
990 
991 		val = 511 - ((rd[offset+3] << 8) | rd[offset+2]);
992 		input_report_abs(sc->sensor_dev, ABS_Z, val);
993 
994 		input_sync(sc->sensor_dev);
995 	}
996 }
997 
nsg_mrxu_parse_report(struct sony_sc * sc,u8 * rd,int size)998 static void nsg_mrxu_parse_report(struct sony_sc *sc, u8 *rd, int size)
999 {
1000 	int n, offset, relx, rely;
1001 	u8 active;
1002 
1003 	/*
1004 	 * The NSG-MRxU multi-touch trackpad data starts at offset 1 and
1005 	 *   the touch-related data starts at offset 2.
1006 	 * For the first byte, bit 0 is set when touchpad button is pressed.
1007 	 * Bit 2 is set when a touch is active and the drag (Fn) key is pressed.
1008 	 * This drag key is mapped to BTN_LEFT.  It is operational only when a
1009 	 *   touch point is active.
1010 	 * Bit 4 is set when only the first touch point is active.
1011 	 * Bit 6 is set when only the second touch point is active.
1012 	 * Bits 5 and 7 are set when both touch points are active.
1013 	 * The next 3 bytes are two 12 bit X/Y coordinates for the first touch.
1014 	 * The following byte, offset 5, has the touch width and length.
1015 	 *   Bits 0-4=X (width), bits 5-7=Y (length).
1016 	 * A signed relative X coordinate is at offset 6.
1017 	 * The bytes at offset 7-9 are the second touch X/Y coordinates.
1018 	 * Offset 10 has the second touch width and length.
1019 	 * Offset 11 has the relative Y coordinate.
1020 	 */
1021 	offset = 1;
1022 
1023 	input_report_key(sc->touchpad, BTN_LEFT, rd[offset] & 0x0F);
1024 	active = (rd[offset] >> 4);
1025 	relx = (s8) rd[offset+5];
1026 	rely = ((s8) rd[offset+10]) * -1;
1027 
1028 	offset++;
1029 
1030 	for (n = 0; n < 2; n++) {
1031 		u16 x, y;
1032 		u8 contactx, contacty;
1033 
1034 		x = rd[offset] | ((rd[offset+1] & 0x0F) << 8);
1035 		y = ((rd[offset+1] & 0xF0) >> 4) | (rd[offset+2] << 4);
1036 
1037 		input_mt_slot(sc->touchpad, n);
1038 		input_mt_report_slot_state(sc->touchpad, MT_TOOL_FINGER, active & 0x03);
1039 
1040 		if (active & 0x03) {
1041 			contactx = rd[offset+3] & 0x0F;
1042 			contacty = rd[offset+3] >> 4;
1043 			input_report_abs(sc->touchpad, ABS_MT_TOUCH_MAJOR,
1044 				max(contactx, contacty));
1045 			input_report_abs(sc->touchpad, ABS_MT_TOUCH_MINOR,
1046 				min(contactx, contacty));
1047 			input_report_abs(sc->touchpad, ABS_MT_ORIENTATION,
1048 				(bool) (contactx > contacty));
1049 			input_report_abs(sc->touchpad, ABS_MT_POSITION_X, x);
1050 			input_report_abs(sc->touchpad, ABS_MT_POSITION_Y,
1051 				NSG_MRXU_MAX_Y - y);
1052 			/*
1053 			 * The relative coordinates belong to the first touch
1054 			 * point, when present, or to the second touch point
1055 			 * when the first is not active.
1056 			 */
1057 			if ((n == 0) || ((n == 1) && (active & 0x01))) {
1058 				input_report_rel(sc->touchpad, REL_X, relx);
1059 				input_report_rel(sc->touchpad, REL_Y, rely);
1060 			}
1061 		}
1062 
1063 		offset += 5;
1064 		active >>= 2;
1065 	}
1066 
1067 	input_mt_sync_frame(sc->touchpad);
1068 
1069 	input_sync(sc->touchpad);
1070 }
1071 
rb4_ps4_guitar_parse_report(struct sony_sc * sc,u8 * rd,int size)1072 static void rb4_ps4_guitar_parse_report(struct sony_sc *sc, u8 *rd, int size)
1073 {
1074 	/*
1075 	 * Rock Band 4 PS4 guitars have whammy and
1076 	 * tilt functionality, they're located at
1077 	 * byte 44 and 45 respectively.
1078 	 *
1079 	 * We will map these values to the triggers
1080 	 * because the guitars don't have anything
1081 	 * mapped there.
1082 	 */
1083 	input_report_abs(sc->input_dev, ABS_Z, rd[44]);
1084 	input_report_abs(sc->input_dev, ABS_RZ, rd[45]);
1085 
1086 	input_sync(sc->input_dev);
1087 }
1088 
rb4_ps5_guitar_parse_report(struct sony_sc * sc,u8 * rd,int size)1089 static void rb4_ps5_guitar_parse_report(struct sony_sc *sc, u8 *rd, int size)
1090 {
1091 	u8 charging_status;
1092 	u8 battery_data;
1093 	u8 battery_capacity;
1094 	u8 battery_status;
1095 	unsigned long flags;
1096 
1097 	/*
1098 	 * Rock Band 4 PS5 guitars have whammy and
1099 	 * tilt functionality, they're located at
1100 	 * byte 41 and 42 respectively.
1101 	 *
1102 	 * We will map these values to the triggers
1103 	 * because the guitars don't have anything
1104 	 * mapped there.
1105 	 */
1106 	input_report_abs(sc->input_dev, ABS_Z, rd[41]);
1107 	input_report_abs(sc->input_dev, ABS_RZ, rd[42]);
1108 
1109 	/*
1110 	 * Rock Band 4 PS5 guitars also report the
1111 	 * battery status and level at byte 30.
1112 	 */
1113 	charging_status = (rd[30] >> 4) & 0x0F;
1114 	battery_data = rd[30] & 0x0F;
1115 
1116 	switch (charging_status) {
1117 	case 0x0:
1118 		battery_capacity = min(battery_data * 10 + 5, 100);
1119 		battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
1120 		break;
1121 	case 0x1:
1122 		battery_capacity = min(battery_data * 10 + 5, 100);
1123 		battery_status = POWER_SUPPLY_STATUS_CHARGING;
1124 		break;
1125 	case 0x2:
1126 		battery_capacity = 100;
1127 		battery_status = POWER_SUPPLY_STATUS_FULL;
1128 		break;
1129 	default:
1130 		battery_capacity = 0;
1131 		battery_status = POWER_SUPPLY_STATUS_UNKNOWN;
1132 		break;
1133 	}
1134 
1135 	spin_lock_irqsave(&sc->lock, flags);
1136 	sc->battery_capacity = battery_capacity;
1137 	sc->battery_status = battery_status;
1138 	spin_unlock_irqrestore(&sc->lock, flags);
1139 
1140 	input_sync(sc->input_dev);
1141 }
1142 
sony_raw_event(struct hid_device * hdev,struct hid_report * report,u8 * rd,int size)1143 static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
1144 		u8 *rd, int size)
1145 {
1146 	struct sony_sc *sc = hid_get_drvdata(hdev);
1147 
1148 	/*
1149 	 * Sixaxis HID report has acclerometers/gyro with MSByte first, this
1150 	 * has to be BYTE_SWAPPED before passing up to joystick interface
1151 	 */
1152 	if ((sc->quirks & SIXAXIS_CONTROLLER) && rd[0] == 0x01 && size == 49) {
1153 		/*
1154 		 * When connected via Bluetooth the Sixaxis occasionally sends
1155 		 * a report with the second byte 0xff and the rest zeroed.
1156 		 *
1157 		 * This report does not reflect the actual state of the
1158 		 * controller must be ignored to avoid generating false input
1159 		 * events.
1160 		 */
1161 		if (rd[1] == 0xff)
1162 			return -EINVAL;
1163 
1164 		swap(rd[41], rd[42]);
1165 		swap(rd[43], rd[44]);
1166 		swap(rd[45], rd[46]);
1167 		swap(rd[47], rd[48]);
1168 
1169 		sixaxis_parse_report(sc, rd, size);
1170 	} else if ((sc->quirks & MOTION_CONTROLLER_BT) && rd[0] == 0x01 && size == 49) {
1171 		sixaxis_parse_report(sc, rd, size);
1172 	} else if ((sc->quirks & NAVIGATION_CONTROLLER) && rd[0] == 0x01 && size == 49) {
1173 		sixaxis_parse_report(sc, rd, size);
1174 	} else if ((sc->quirks & NSG_MRXU_REMOTE) && rd[0] == 0x02 && size >= 12) {
1175 		nsg_mrxu_parse_report(sc, rd, size);
1176 		return 1;
1177 	} else if ((sc->quirks & RB4_GUITAR_PS4_USB) && rd[0] == 0x01 && size == 64) {
1178 		rb4_ps4_guitar_parse_report(sc, rd, size);
1179 		return 1;
1180 	} else if ((sc->quirks & RB4_GUITAR_PS4_BT) && rd[0] == 0x01 && size == 78) {
1181 		rb4_ps4_guitar_parse_report(sc, rd, size);
1182 		return 1;
1183 	} else if ((sc->quirks & RB4_GUITAR_PS5) && rd[0] == 0x01 && size == 64) {
1184 		rb4_ps5_guitar_parse_report(sc, rd, size);
1185 		return 1;
1186 	}
1187 
1188 	/* Rock Band 3 PS3 Pro instruments set rd[24] to 0xE0 when they're
1189 	 * sending full reports, and 0x02 when only sending navigation.
1190 	 */
1191 	if ((sc->quirks & RB3_PRO_INSTRUMENT) && size >= 25 && rd[24] == 0x02) {
1192 		/* Only attempt to enable full report every 8 seconds */
1193 		if (time_after(jiffies, sc->rb3_pro_poke_jiffies)) {
1194 			sc->rb3_pro_poke_jiffies = jiffies + secs_to_jiffies(8);
1195 			rb3_pro_instrument_enable_full_report(sc);
1196 		}
1197 	}
1198 
1199 	if (sc->defer_initialization) {
1200 		sc->defer_initialization = 0;
1201 		sony_schedule_work(sc, SONY_WORKER_STATE);
1202 	}
1203 
1204 	return 0;
1205 }
1206 
sony_mapping(struct hid_device * hdev,struct hid_input * hi,struct hid_field * field,struct hid_usage * usage,unsigned long ** bit,int * max)1207 static int sony_mapping(struct hid_device *hdev, struct hid_input *hi,
1208 			struct hid_field *field, struct hid_usage *usage,
1209 			unsigned long **bit, int *max)
1210 {
1211 	struct sony_sc *sc = hid_get_drvdata(hdev);
1212 	int ret;
1213 
1214 	if (sc->quirks & BUZZ_CONTROLLER) {
1215 		unsigned int key = usage->hid & HID_USAGE;
1216 
1217 		if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
1218 			return -1;
1219 
1220 		switch (usage->collection_index) {
1221 		case 1:
1222 			if (key >= ARRAY_SIZE(buzz_keymap))
1223 				return -1;
1224 
1225 			key = buzz_keymap[key];
1226 			if (!key)
1227 				return -1;
1228 			break;
1229 		default:
1230 			return -1;
1231 		}
1232 
1233 		hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
1234 		return 1;
1235 	}
1236 
1237 	if (sc->quirks & PS3REMOTE)
1238 		return ps3remote_mapping(hdev, hi, field, usage, bit, max);
1239 
1240 	if (sc->quirks & NAVIGATION_CONTROLLER)
1241 		return navigation_mapping(hdev, hi, field, usage, bit, max);
1242 
1243 	if (sc->quirks & SIXAXIS_CONTROLLER)
1244 		return sixaxis_mapping(hdev, hi, field, usage, bit, max);
1245 
1246 	/* INSTRUMENT quirk is used as a base mapping for instruments */
1247 	if (sc->quirks & INSTRUMENT) {
1248 		ret = instrument_mapping(hdev, hi, field, usage, bit, max);
1249 		if (ret != 0)
1250 			return ret;
1251 	}
1252 
1253 	if (sc->quirks & GH_GUITAR_TILT)
1254 		return gh_guitar_mapping(hdev, hi, field, usage, bit, max);
1255 
1256 	if (sc->quirks & DJH_TURNTABLE)
1257 		return djh_turntable_mapping(hdev, hi, field, usage, bit, max);
1258 
1259 	if (sc->quirks & (RB4_GUITAR_PS4_USB | RB4_GUITAR_PS4_BT))
1260 		return rb4_guitar_mapping(hdev, hi, field, usage, bit, max);
1261 
1262 	if (sc->quirks & RB4_GUITAR_PS5)
1263 		return rb4_guitar_mapping(hdev, hi, field, usage, bit, max);
1264 
1265 	/* Let hid-core decide for the others */
1266 	return 0;
1267 }
1268 
sony_register_touchpad(struct sony_sc * sc,int touch_count,int w,int h,int touch_major,int touch_minor,int orientation)1269 static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
1270 		int w, int h, int touch_major, int touch_minor, int orientation)
1271 {
1272 	size_t name_sz;
1273 	char *name;
1274 	int ret;
1275 
1276 	sc->touchpad = devm_input_allocate_device(&sc->hdev->dev);
1277 	if (!sc->touchpad)
1278 		return -ENOMEM;
1279 
1280 	input_set_drvdata(sc->touchpad, sc);
1281 	sc->touchpad->dev.parent = &sc->hdev->dev;
1282 	sc->touchpad->phys = sc->hdev->phys;
1283 	sc->touchpad->uniq = sc->hdev->uniq;
1284 	sc->touchpad->id.bustype = sc->hdev->bus;
1285 	sc->touchpad->id.vendor = sc->hdev->vendor;
1286 	sc->touchpad->id.product = sc->hdev->product;
1287 	sc->touchpad->id.version = sc->hdev->version;
1288 
1289 	/* This suffix was originally apended when hid-sony also
1290 	 * supported DS4 devices. The DS4 was implemented using multiple
1291 	 * evdev nodes and hence had the need to separete them out using
1292 	 * a suffix. Other devices which were added later like Sony TV remotes
1293 	 * inhirited this suffix.
1294 	 */
1295 	name_sz = strlen(sc->hdev->name) + sizeof(TOUCHPAD_SUFFIX);
1296 	name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL);
1297 	if (!name)
1298 		return -ENOMEM;
1299 	snprintf(name, name_sz, "%s" TOUCHPAD_SUFFIX, sc->hdev->name);
1300 	sc->touchpad->name = name;
1301 
1302 	/* We map the button underneath the touchpad to BTN_LEFT. */
1303 	__set_bit(EV_KEY, sc->touchpad->evbit);
1304 	__set_bit(BTN_LEFT, sc->touchpad->keybit);
1305 	__set_bit(INPUT_PROP_BUTTONPAD, sc->touchpad->propbit);
1306 
1307 	input_set_abs_params(sc->touchpad, ABS_MT_POSITION_X, 0, w, 0, 0);
1308 	input_set_abs_params(sc->touchpad, ABS_MT_POSITION_Y, 0, h, 0, 0);
1309 
1310 	if (touch_major > 0) {
1311 		input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MAJOR,
1312 			0, touch_major, 0, 0);
1313 		if (touch_minor > 0)
1314 			input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MINOR,
1315 				0, touch_minor, 0, 0);
1316 		if (orientation > 0)
1317 			input_set_abs_params(sc->touchpad, ABS_MT_ORIENTATION,
1318 				0, orientation, 0, 0);
1319 	}
1320 
1321 	if (sc->quirks & NSG_MRXU_REMOTE)
1322 		__set_bit(EV_REL, sc->touchpad->evbit);
1323 
1324 	ret = input_mt_init_slots(sc->touchpad, touch_count, INPUT_MT_POINTER);
1325 	if (ret < 0)
1326 		return ret;
1327 
1328 	ret = input_register_device(sc->touchpad);
1329 	if (ret < 0)
1330 		return ret;
1331 
1332 	return 0;
1333 }
1334 
sony_register_sensors(struct sony_sc * sc)1335 static int sony_register_sensors(struct sony_sc *sc)
1336 {
1337 	size_t name_sz;
1338 	char *name;
1339 	int ret;
1340 
1341 	sc->sensor_dev = devm_input_allocate_device(&sc->hdev->dev);
1342 	if (!sc->sensor_dev)
1343 		return -ENOMEM;
1344 
1345 	input_set_drvdata(sc->sensor_dev, sc);
1346 	sc->sensor_dev->dev.parent = &sc->hdev->dev;
1347 	sc->sensor_dev->phys = sc->hdev->phys;
1348 	sc->sensor_dev->uniq = sc->hdev->uniq;
1349 	sc->sensor_dev->id.bustype = sc->hdev->bus;
1350 	sc->sensor_dev->id.vendor = sc->hdev->vendor;
1351 	sc->sensor_dev->id.product = sc->hdev->product;
1352 	sc->sensor_dev->id.version = sc->hdev->version;
1353 
1354 	/* Append a suffix to the controller name as there are various
1355 	 * DS4 compatible non-Sony devices with different names.
1356 	 */
1357 	name_sz = strlen(sc->hdev->name) + sizeof(SENSOR_SUFFIX);
1358 	name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL);
1359 	if (!name)
1360 		return -ENOMEM;
1361 	snprintf(name, name_sz, "%s" SENSOR_SUFFIX, sc->hdev->name);
1362 	sc->sensor_dev->name = name;
1363 
1364 	if (sc->quirks & SIXAXIS_CONTROLLER) {
1365 		/* For the DS3 we only support the accelerometer, which works
1366 		 * quite well even without calibration. The device also has
1367 		 * a 1-axis gyro, but it is very difficult to manage from within
1368 		 * the driver even to get data, the sensor is inaccurate and
1369 		 * the behavior is very different between hardware revisions.
1370 		 */
1371 		input_set_abs_params(sc->sensor_dev, ABS_X, -512, 511, 4, 0);
1372 		input_set_abs_params(sc->sensor_dev, ABS_Y, -512, 511, 4, 0);
1373 		input_set_abs_params(sc->sensor_dev, ABS_Z, -512, 511, 4, 0);
1374 		input_abs_set_res(sc->sensor_dev, ABS_X, SIXAXIS_ACC_RES_PER_G);
1375 		input_abs_set_res(sc->sensor_dev, ABS_Y, SIXAXIS_ACC_RES_PER_G);
1376 		input_abs_set_res(sc->sensor_dev, ABS_Z, SIXAXIS_ACC_RES_PER_G);
1377 	}
1378 
1379 	__set_bit(INPUT_PROP_ACCELEROMETER, sc->sensor_dev->propbit);
1380 
1381 	ret = input_register_device(sc->sensor_dev);
1382 	if (ret < 0)
1383 		return ret;
1384 
1385 	return 0;
1386 }
1387 
1388 /*
1389  * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
1390  * to "operational".  Without this, the ps3 controller will not report any
1391  * events.
1392  */
sixaxis_set_operational_usb(struct hid_device * hdev)1393 static int sixaxis_set_operational_usb(struct hid_device *hdev)
1394 {
1395 	struct sony_sc *sc = hid_get_drvdata(hdev);
1396 	const int buf_size =
1397 		max(SIXAXIS_REPORT_0xF2_SIZE, SIXAXIS_REPORT_0xF5_SIZE);
1398 	u8 *buf;
1399 	int ret;
1400 
1401 	buf = kmalloc(buf_size, GFP_KERNEL);
1402 	if (!buf)
1403 		return -ENOMEM;
1404 
1405 	ret = hid_hw_raw_request(hdev, 0xf2, buf, SIXAXIS_REPORT_0xF2_SIZE,
1406 				 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
1407 	if (ret < 0) {
1408 		hid_err(hdev, "can't set operational mode: step 1\n");
1409 		goto out;
1410 	}
1411 
1412 	/*
1413 	 * Some compatible controllers like the Speedlink Strike FX and
1414 	 * Gasia need another query plus an USB interrupt to get operational.
1415 	 */
1416 	ret = hid_hw_raw_request(hdev, 0xf5, buf, SIXAXIS_REPORT_0xF5_SIZE,
1417 				 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
1418 	if (ret < 0) {
1419 		hid_err(hdev, "can't set operational mode: step 2\n");
1420 		goto out;
1421 	}
1422 
1423 	/*
1424 	 * But the USB interrupt would cause SHANWAN controllers to
1425 	 * start rumbling non-stop, so skip step 3 for these controllers.
1426 	 */
1427 	if (sc->quirks & SHANWAN_GAMEPAD)
1428 		goto out;
1429 
1430 	ret = hid_hw_output_report(hdev, buf, 1);
1431 	if (ret < 0) {
1432 		hid_info(hdev, "can't set operational mode: step 3, ignoring\n");
1433 		ret = 0;
1434 	}
1435 
1436 out:
1437 	kfree(buf);
1438 
1439 	return ret;
1440 }
1441 
sixaxis_set_operational_bt(struct hid_device * hdev)1442 static int sixaxis_set_operational_bt(struct hid_device *hdev)
1443 {
1444 	static const u8 report[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
1445 	u8 *buf;
1446 	int ret;
1447 
1448 	buf = kmemdup(report, sizeof(report), GFP_KERNEL);
1449 	if (!buf)
1450 		return -ENOMEM;
1451 
1452 	ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report),
1453 				  HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
1454 
1455 	kfree(buf);
1456 
1457 	return ret;
1458 }
1459 
sixaxis_set_leds_from_id(struct sony_sc * sc)1460 static void sixaxis_set_leds_from_id(struct sony_sc *sc)
1461 {
1462 	static const u8 sixaxis_leds[10][4] = {
1463 				{ 0x01, 0x00, 0x00, 0x00 },
1464 				{ 0x00, 0x01, 0x00, 0x00 },
1465 				{ 0x00, 0x00, 0x01, 0x00 },
1466 				{ 0x00, 0x00, 0x00, 0x01 },
1467 				{ 0x01, 0x00, 0x00, 0x01 },
1468 				{ 0x00, 0x01, 0x00, 0x01 },
1469 				{ 0x00, 0x00, 0x01, 0x01 },
1470 				{ 0x01, 0x00, 0x01, 0x01 },
1471 				{ 0x00, 0x01, 0x01, 0x01 },
1472 				{ 0x01, 0x01, 0x01, 0x01 }
1473 	};
1474 
1475 	int id = sc->device_id;
1476 
1477 	BUILD_BUG_ON(ARRAY_SIZE(sixaxis_leds[0]) > MAX_LEDS);
1478 
1479 	if (id < 0)
1480 		return;
1481 
1482 	id %= 10;
1483 	memcpy(sc->led_state, sixaxis_leds[id], sizeof(sixaxis_leds[id]));
1484 }
1485 
buzz_set_leds(struct sony_sc * sc)1486 static void buzz_set_leds(struct sony_sc *sc)
1487 {
1488 	struct hid_device *hdev = sc->hdev;
1489 	struct list_head *report_list =
1490 		&hdev->report_enum[HID_OUTPUT_REPORT].report_list;
1491 	struct hid_report *report = list_entry(report_list->next,
1492 		struct hid_report, list);
1493 	s32 *value = report->field[0]->value;
1494 
1495 	BUILD_BUG_ON(4 > MAX_LEDS);
1496 
1497 	value[0] = 0x00;
1498 	value[1] = sc->led_state[0] ? 0xff : 0x00;
1499 	value[2] = sc->led_state[1] ? 0xff : 0x00;
1500 	value[3] = sc->led_state[2] ? 0xff : 0x00;
1501 	value[4] = sc->led_state[3] ? 0xff : 0x00;
1502 	value[5] = 0x00;
1503 	value[6] = 0x00;
1504 	hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
1505 }
1506 
sony_set_leds(struct sony_sc * sc)1507 static void sony_set_leds(struct sony_sc *sc)
1508 {
1509 	if (!(sc->quirks & BUZZ_CONTROLLER))
1510 		sony_schedule_work(sc, SONY_WORKER_STATE);
1511 	else
1512 		buzz_set_leds(sc);
1513 }
1514 
sony_led_set_brightness(struct led_classdev * led,enum led_brightness value)1515 static void sony_led_set_brightness(struct led_classdev *led,
1516 				    enum led_brightness value)
1517 {
1518 	struct device *dev = led->dev->parent;
1519 	struct hid_device *hdev = to_hid_device(dev);
1520 	struct sony_sc *drv_data;
1521 
1522 	int n;
1523 	int force_update;
1524 
1525 	drv_data = hid_get_drvdata(hdev);
1526 	if (!drv_data) {
1527 		hid_err(hdev, "No device data\n");
1528 		return;
1529 	}
1530 
1531 	/*
1532 	 * The Sixaxis on USB will override any LED settings sent to it
1533 	 * and keep flashing all of the LEDs until the PS button is pressed.
1534 	 * Updates, even if redundant, must be always be sent to the
1535 	 * controller to avoid having to toggle the state of an LED just to
1536 	 * stop the flashing later on.
1537 	 */
1538 	force_update = !!(drv_data->quirks & SIXAXIS_CONTROLLER_USB);
1539 
1540 	for (n = 0; n < drv_data->led_count; n++) {
1541 		if (led == drv_data->leds[n] && (force_update ||
1542 			(value != drv_data->led_state[n] ||
1543 			drv_data->led_delay_on[n] ||
1544 			drv_data->led_delay_off[n]))) {
1545 
1546 			drv_data->led_state[n] = value;
1547 
1548 			/* Setting the brightness stops the blinking */
1549 			drv_data->led_delay_on[n] = 0;
1550 			drv_data->led_delay_off[n] = 0;
1551 
1552 			sony_set_leds(drv_data);
1553 			break;
1554 		}
1555 	}
1556 }
1557 
sony_led_get_brightness(struct led_classdev * led)1558 static enum led_brightness sony_led_get_brightness(struct led_classdev *led)
1559 {
1560 	struct device *dev = led->dev->parent;
1561 	struct hid_device *hdev = to_hid_device(dev);
1562 	struct sony_sc *drv_data;
1563 
1564 	int n;
1565 
1566 	drv_data = hid_get_drvdata(hdev);
1567 	if (!drv_data) {
1568 		hid_err(hdev, "No device data\n");
1569 		return LED_OFF;
1570 	}
1571 
1572 	for (n = 0; n < drv_data->led_count; n++) {
1573 		if (led == drv_data->leds[n])
1574 			return drv_data->led_state[n];
1575 	}
1576 
1577 	return LED_OFF;
1578 }
1579 
sony_led_blink_set(struct led_classdev * led,unsigned long * delay_on,unsigned long * delay_off)1580 static int sony_led_blink_set(struct led_classdev *led, unsigned long *delay_on,
1581 				unsigned long *delay_off)
1582 {
1583 	struct device *dev = led->dev->parent;
1584 	struct hid_device *hdev = to_hid_device(dev);
1585 	struct sony_sc *drv_data = hid_get_drvdata(hdev);
1586 	int n;
1587 	u8 new_on, new_off;
1588 
1589 	if (!drv_data) {
1590 		hid_err(hdev, "No device data\n");
1591 		return -EINVAL;
1592 	}
1593 
1594 	/* Max delay is 255 deciseconds or 2550 milliseconds */
1595 	if (*delay_on > 2550)
1596 		*delay_on = 2550;
1597 	if (*delay_off > 2550)
1598 		*delay_off = 2550;
1599 
1600 	/* Blink at 1 Hz if both values are zero */
1601 	if (!*delay_on && !*delay_off)
1602 		*delay_on = *delay_off = 500;
1603 
1604 	new_on = *delay_on / 10;
1605 	new_off = *delay_off / 10;
1606 
1607 	for (n = 0; n < drv_data->led_count; n++) {
1608 		if (led == drv_data->leds[n])
1609 			break;
1610 	}
1611 
1612 	/* This LED is not registered on this device */
1613 	if (n >= drv_data->led_count)
1614 		return -EINVAL;
1615 
1616 	/* Don't schedule work if the values didn't change */
1617 	if (new_on != drv_data->led_delay_on[n] ||
1618 		new_off != drv_data->led_delay_off[n]) {
1619 		drv_data->led_delay_on[n] = new_on;
1620 		drv_data->led_delay_off[n] = new_off;
1621 		sony_schedule_work(drv_data, SONY_WORKER_STATE);
1622 	}
1623 
1624 	return 0;
1625 }
1626 
sony_leds_init(struct sony_sc * sc)1627 static int sony_leds_init(struct sony_sc *sc)
1628 {
1629 	struct hid_device *hdev = sc->hdev;
1630 	int n, ret = 0;
1631 	int use_color_names;
1632 	struct led_classdev *led;
1633 	size_t name_sz;
1634 	char *name;
1635 	size_t name_len;
1636 	const char *name_fmt;
1637 	static const char * const color_name_str[] = { "red", "green", "blue",
1638 						  "global" };
1639 	u8 max_brightness[MAX_LEDS] = { [0 ... (MAX_LEDS - 1)] = 1 };
1640 	u8 use_hw_blink[MAX_LEDS] = { 0 };
1641 
1642 	if (sc->quirks & BUZZ_CONTROLLER) {
1643 		sc->led_count = 4;
1644 		use_color_names = 0;
1645 		name_len = strlen("::buzz#");
1646 		name_fmt = "%s::buzz%d";
1647 		/* Validate expected report characteristics. */
1648 		if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 0, 0, 7))
1649 			return -ENODEV;
1650 	} else if (sc->quirks & MOTION_CONTROLLER) {
1651 		sc->led_count = 3;
1652 		memset(max_brightness, 255, 3);
1653 		use_color_names = 1;
1654 		name_len = 0;
1655 		name_fmt = "%s:%s";
1656 	} else if (sc->quirks & NAVIGATION_CONTROLLER) {
1657 		static const u8 navigation_leds[4] = {0x01, 0x00, 0x00, 0x00};
1658 
1659 		memcpy(sc->led_state, navigation_leds, sizeof(navigation_leds));
1660 		sc->led_count = 1;
1661 		memset(use_hw_blink, 1, 4);
1662 		use_color_names = 0;
1663 		name_len = strlen("::sony#");
1664 		name_fmt = "%s::sony%d";
1665 	} else {
1666 		sixaxis_set_leds_from_id(sc);
1667 		sc->led_count = 4;
1668 		memset(use_hw_blink, 1, 4);
1669 		use_color_names = 0;
1670 		name_len = strlen("::sony#");
1671 		name_fmt = "%s::sony%d";
1672 	}
1673 
1674 	/*
1675 	 * Clear LEDs as we have no way of reading their initial state. This is
1676 	 * only relevant if the driver is loaded after somebody actively set the
1677 	 * LEDs to on
1678 	 */
1679 	sony_set_leds(sc);
1680 
1681 	name_sz = strlen(dev_name(&hdev->dev)) + name_len + 1;
1682 
1683 	for (n = 0; n < sc->led_count; n++) {
1684 
1685 		if (use_color_names)
1686 			name_sz = strlen(dev_name(&hdev->dev)) + strlen(color_name_str[n]) + 2;
1687 
1688 		led = devm_kzalloc(&hdev->dev, sizeof(struct led_classdev) + name_sz, GFP_KERNEL);
1689 		if (!led)
1690 			return -ENOMEM;
1691 
1692 		name = (void *)(&led[1]);
1693 		if (use_color_names)
1694 			snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), color_name_str[n]);
1695 		else
1696 			snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), n + 1);
1697 		led->name = name;
1698 		led->brightness = sc->led_state[n];
1699 		led->max_brightness = max_brightness[n];
1700 		led->flags = LED_CORE_SUSPENDRESUME;
1701 		led->brightness_get = sony_led_get_brightness;
1702 		led->brightness_set = sony_led_set_brightness;
1703 
1704 		if (use_hw_blink[n])
1705 			led->blink_set = sony_led_blink_set;
1706 
1707 		sc->leds[n] = led;
1708 
1709 		ret = devm_led_classdev_register(&hdev->dev, led);
1710 		if (ret) {
1711 			hid_err(hdev, "Failed to register LED %d\n", n);
1712 			return ret;
1713 		}
1714 	}
1715 
1716 	return 0;
1717 }
1718 
sixaxis_send_output_report(struct sony_sc * sc)1719 static void sixaxis_send_output_report(struct sony_sc *sc)
1720 {
1721 	static const union sixaxis_output_report_01 default_report = {
1722 		.buf = {
1723 			0x01,
1724 			0x01, 0xff, 0x00, 0xff, 0x00,
1725 			0x00, 0x00, 0x00, 0x00, 0x00,
1726 			0xff, 0x27, 0x10, 0x00, 0x32,
1727 			0xff, 0x27, 0x10, 0x00, 0x32,
1728 			0xff, 0x27, 0x10, 0x00, 0x32,
1729 			0xff, 0x27, 0x10, 0x00, 0x32,
1730 			0x00, 0x00, 0x00, 0x00, 0x00
1731 		}
1732 	};
1733 	struct sixaxis_output_report *report =
1734 		(struct sixaxis_output_report *)sc->output_report_dmabuf;
1735 	int n;
1736 
1737 	/* Initialize the report with default values */
1738 	memcpy(report, &default_report, sizeof(struct sixaxis_output_report));
1739 
1740 #ifdef CONFIG_SONY_FF
1741 	report->rumble.right_motor_on = sc->right ? 1 : 0;
1742 	report->rumble.left_motor_force = sc->left;
1743 #endif
1744 
1745 	report->leds_bitmap |= sc->led_state[0] << 1;
1746 	report->leds_bitmap |= sc->led_state[1] << 2;
1747 	report->leds_bitmap |= sc->led_state[2] << 3;
1748 	report->leds_bitmap |= sc->led_state[3] << 4;
1749 
1750 	/* Set flag for all leds off, required for 3rd party INTEC controller */
1751 	if ((report->leds_bitmap & 0x1E) == 0)
1752 		report->leds_bitmap |= 0x20;
1753 
1754 	/*
1755 	 * The LEDs in the report are indexed in reverse order to their
1756 	 * corresponding light on the controller.
1757 	 * Index 0 = LED 4, index 1 = LED 3, etc...
1758 	 *
1759 	 * In the case of both delay values being zero (blinking disabled) the
1760 	 * default report values should be used or the controller LED will be
1761 	 * always off.
1762 	 */
1763 	for (n = 0; n < 4; n++) {
1764 		if (sc->led_delay_on[n] || sc->led_delay_off[n]) {
1765 			report->led[3 - n].duty_off = sc->led_delay_off[n];
1766 			report->led[3 - n].duty_on = sc->led_delay_on[n];
1767 		}
1768 	}
1769 
1770 	/* SHANWAN controllers require output reports via intr channel */
1771 	if (sc->quirks & SHANWAN_GAMEPAD)
1772 		hid_hw_output_report(sc->hdev, (u8 *)report,
1773 				sizeof(struct sixaxis_output_report));
1774 	else
1775 		hid_hw_raw_request(sc->hdev, report->report_id, (u8 *)report,
1776 				sizeof(struct sixaxis_output_report),
1777 				HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
1778 }
1779 
motion_send_output_report(struct sony_sc * sc)1780 static void motion_send_output_report(struct sony_sc *sc)
1781 {
1782 	struct hid_device *hdev = sc->hdev;
1783 	struct motion_output_report_02 *report =
1784 		(struct motion_output_report_02 *)sc->output_report_dmabuf;
1785 
1786 	memset(report, 0, MOTION_REPORT_0x02_SIZE);
1787 
1788 	report->type = 0x02; /* set leds */
1789 	report->r = sc->led_state[0];
1790 	report->g = sc->led_state[1];
1791 	report->b = sc->led_state[2];
1792 
1793 #ifdef CONFIG_SONY_FF
1794 	report->rumble = max(sc->right, sc->left);
1795 #endif
1796 
1797 	hid_hw_output_report(hdev, (u8 *)report, MOTION_REPORT_0x02_SIZE);
1798 }
1799 
1800 #ifdef CONFIG_SONY_FF
sony_send_output_report(struct sony_sc * sc)1801 static inline void sony_send_output_report(struct sony_sc *sc)
1802 {
1803 	if (sc->send_output_report)
1804 		sc->send_output_report(sc);
1805 }
1806 #endif
1807 
sony_state_worker(struct work_struct * work)1808 static void sony_state_worker(struct work_struct *work)
1809 {
1810 	struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
1811 
1812 	sc->send_output_report(sc);
1813 }
1814 
sony_allocate_output_report(struct sony_sc * sc)1815 static int sony_allocate_output_report(struct sony_sc *sc)
1816 {
1817 	if ((sc->quirks & SIXAXIS_CONTROLLER) ||
1818 			(sc->quirks & NAVIGATION_CONTROLLER))
1819 		sc->output_report_dmabuf =
1820 			devm_kmalloc(&sc->hdev->dev,
1821 				sizeof(union sixaxis_output_report_01),
1822 				GFP_KERNEL);
1823 	else if (sc->quirks & MOTION_CONTROLLER)
1824 		sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
1825 						MOTION_REPORT_0x02_SIZE,
1826 						GFP_KERNEL);
1827 	else
1828 		return 0;
1829 
1830 	if (!sc->output_report_dmabuf)
1831 		return -ENOMEM;
1832 
1833 	return 0;
1834 }
1835 
1836 #ifdef CONFIG_SONY_FF
sony_play_effect(struct input_dev * dev,void * data,struct ff_effect * effect)1837 static int sony_play_effect(struct input_dev *dev, void *data,
1838 			    struct ff_effect *effect)
1839 {
1840 	struct hid_device *hid = input_get_drvdata(dev);
1841 	struct sony_sc *sc = hid_get_drvdata(hid);
1842 
1843 	if (effect->type != FF_RUMBLE)
1844 		return 0;
1845 
1846 	sc->left = effect->u.rumble.strong_magnitude / 256;
1847 	sc->right = effect->u.rumble.weak_magnitude / 256;
1848 
1849 	sony_schedule_work(sc, SONY_WORKER_STATE);
1850 	return 0;
1851 }
1852 
sony_init_ff(struct sony_sc * sc)1853 static int sony_init_ff(struct sony_sc *sc)
1854 {
1855 	struct hid_input *hidinput;
1856 	struct input_dev *input_dev;
1857 
1858 	if (list_empty(&sc->hdev->inputs)) {
1859 		hid_err(sc->hdev, "no inputs found\n");
1860 		return -ENODEV;
1861 	}
1862 	hidinput = list_entry(sc->hdev->inputs.next, struct hid_input, list);
1863 	input_dev = hidinput->input;
1864 
1865 	input_set_capability(input_dev, EV_FF, FF_RUMBLE);
1866 	return input_ff_create_memless(input_dev, NULL, sony_play_effect);
1867 }
1868 
1869 #else
sony_init_ff(struct sony_sc * sc)1870 static int sony_init_ff(struct sony_sc *sc)
1871 {
1872 	return 0;
1873 }
1874 
1875 #endif
1876 
sony_battery_get_property(struct power_supply * psy,enum power_supply_property psp,union power_supply_propval * val)1877 static int sony_battery_get_property(struct power_supply *psy,
1878 				     enum power_supply_property psp,
1879 				     union power_supply_propval *val)
1880 {
1881 	struct sony_sc *sc = power_supply_get_drvdata(psy);
1882 	unsigned long flags;
1883 	int ret = 0;
1884 	u8 battery_capacity;
1885 	int battery_status;
1886 
1887 	spin_lock_irqsave(&sc->lock, flags);
1888 	battery_capacity = sc->battery_capacity;
1889 	battery_status = sc->battery_status;
1890 	spin_unlock_irqrestore(&sc->lock, flags);
1891 
1892 	switch (psp) {
1893 	case POWER_SUPPLY_PROP_PRESENT:
1894 		val->intval = 1;
1895 		break;
1896 	case POWER_SUPPLY_PROP_SCOPE:
1897 		val->intval = POWER_SUPPLY_SCOPE_DEVICE;
1898 		break;
1899 	case POWER_SUPPLY_PROP_CAPACITY:
1900 		val->intval = battery_capacity;
1901 		break;
1902 	case POWER_SUPPLY_PROP_STATUS:
1903 		val->intval = battery_status;
1904 		break;
1905 	default:
1906 		ret = -EINVAL;
1907 		break;
1908 	}
1909 	return ret;
1910 }
1911 
sony_battery_probe(struct sony_sc * sc,int append_dev_id)1912 static int sony_battery_probe(struct sony_sc *sc, int append_dev_id)
1913 {
1914 	const char *battery_str_fmt = append_dev_id ?
1915 		"sony_controller_battery_%pMR_%i" :
1916 		"sony_controller_battery_%pMR";
1917 	struct power_supply_config psy_cfg = { .drv_data = sc, };
1918 	struct hid_device *hdev = sc->hdev;
1919 	int ret;
1920 
1921 	/*
1922 	 * Set the default battery level to 100% to avoid low battery warnings
1923 	 * if the battery is polled before the first device report is received.
1924 	 */
1925 	sc->battery_capacity = 100;
1926 
1927 	sc->battery_desc.properties = sony_battery_props;
1928 	sc->battery_desc.num_properties = ARRAY_SIZE(sony_battery_props);
1929 	sc->battery_desc.get_property = sony_battery_get_property;
1930 	sc->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY;
1931 	sc->battery_desc.use_for_apm = 0;
1932 	sc->battery_desc.name = devm_kasprintf(&hdev->dev, GFP_KERNEL,
1933 					  battery_str_fmt, sc->mac_address, sc->device_id);
1934 	if (!sc->battery_desc.name)
1935 		return -ENOMEM;
1936 
1937 	sc->battery = devm_power_supply_register(&hdev->dev, &sc->battery_desc,
1938 					    &psy_cfg);
1939 	if (IS_ERR(sc->battery)) {
1940 		ret = PTR_ERR(sc->battery);
1941 		hid_err(hdev, "Unable to register battery device\n");
1942 		return ret;
1943 	}
1944 
1945 	power_supply_powers(sc->battery, &hdev->dev);
1946 	return 0;
1947 }
1948 
1949 /*
1950  * If a controller is plugged in via USB while already connected via Bluetooth
1951  * it will show up as two devices. A global list of connected controllers and
1952  * their MAC addresses is maintained to ensure that a device is only connected
1953  * once.
1954  *
1955  * Some USB-only devices masquerade as Sixaxis controllers and all have the
1956  * same dummy Bluetooth address, so a comparison of the connection type is
1957  * required.  Devices are only rejected in the case where two devices have
1958  * matching Bluetooth addresses on different bus types.
1959  */
sony_compare_connection_type(struct sony_sc * sc0,struct sony_sc * sc1)1960 static inline int sony_compare_connection_type(struct sony_sc *sc0,
1961 						struct sony_sc *sc1)
1962 {
1963 	const int sc0_not_bt = !(sc0->quirks & SONY_BT_DEVICE);
1964 	const int sc1_not_bt = !(sc1->quirks & SONY_BT_DEVICE);
1965 
1966 	return sc0_not_bt == sc1_not_bt;
1967 }
1968 
sony_check_add_dev_list(struct sony_sc * sc)1969 static int sony_check_add_dev_list(struct sony_sc *sc)
1970 {
1971 	struct sony_sc *entry;
1972 	unsigned long flags;
1973 	int ret;
1974 
1975 	spin_lock_irqsave(&sony_dev_list_lock, flags);
1976 
1977 	list_for_each_entry(entry, &sony_device_list, list_node) {
1978 		ret = memcmp(sc->mac_address, entry->mac_address,
1979 				sizeof(sc->mac_address));
1980 		if (!ret) {
1981 			if (sony_compare_connection_type(sc, entry)) {
1982 				ret = 1;
1983 			} else {
1984 				ret = -EEXIST;
1985 				hid_info(sc->hdev,
1986 				"controller with MAC address %pMR already connected\n",
1987 				sc->mac_address);
1988 			}
1989 			goto unlock;
1990 		}
1991 	}
1992 
1993 	ret = 0;
1994 	list_add(&(sc->list_node), &sony_device_list);
1995 
1996 unlock:
1997 	spin_unlock_irqrestore(&sony_dev_list_lock, flags);
1998 	return ret;
1999 }
2000 
sony_remove_dev_list(struct sony_sc * sc)2001 static void sony_remove_dev_list(struct sony_sc *sc)
2002 {
2003 	unsigned long flags;
2004 
2005 	if (sc->list_node.next) {
2006 		spin_lock_irqsave(&sony_dev_list_lock, flags);
2007 		list_del(&(sc->list_node));
2008 		spin_unlock_irqrestore(&sony_dev_list_lock, flags);
2009 	}
2010 }
2011 
sony_get_bt_devaddr(struct sony_sc * sc)2012 static int sony_get_bt_devaddr(struct sony_sc *sc)
2013 {
2014 	int ret;
2015 
2016 	/* HIDP stores the device MAC address as a string in the uniq field. */
2017 	ret = strlen(sc->hdev->uniq);
2018 	if (ret != 17)
2019 		return -EINVAL;
2020 
2021 	ret = sscanf(sc->hdev->uniq,
2022 		"%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
2023 		&sc->mac_address[5], &sc->mac_address[4], &sc->mac_address[3],
2024 		&sc->mac_address[2], &sc->mac_address[1], &sc->mac_address[0]);
2025 
2026 	if (ret != 6)
2027 		return -EINVAL;
2028 
2029 	return 0;
2030 }
2031 
sony_check_add(struct sony_sc * sc)2032 static int sony_check_add(struct sony_sc *sc)
2033 {
2034 	u8 *buf = NULL;
2035 	int n, ret;
2036 
2037 	if ((sc->quirks & MOTION_CONTROLLER_BT) ||
2038 	    (sc->quirks & NAVIGATION_CONTROLLER_BT) ||
2039 	    (sc->quirks & SIXAXIS_CONTROLLER_BT)) {
2040 		/*
2041 		 * sony_get_bt_devaddr() attempts to parse the Bluetooth MAC
2042 		 * address from the uniq string where HIDP stores it.
2043 		 * As uniq cannot be guaranteed to be a MAC address in all cases
2044 		 * a failure of this function should not prevent the connection.
2045 		 */
2046 		if (sony_get_bt_devaddr(sc) < 0) {
2047 			hid_warn(sc->hdev, "UNIQ does not contain a MAC address; duplicate check skipped\n");
2048 			return 0;
2049 		}
2050 	} else if ((sc->quirks & SIXAXIS_CONTROLLER_USB) ||
2051 			(sc->quirks & NAVIGATION_CONTROLLER_USB)) {
2052 		buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL);
2053 		if (!buf)
2054 			return -ENOMEM;
2055 
2056 		/*
2057 		 * The MAC address of a Sixaxis controller connected via USB can
2058 		 * be retrieved with feature report 0xf2. The address begins at
2059 		 * offset 4.
2060 		 */
2061 		ret = hid_hw_raw_request(sc->hdev, 0xf2, buf,
2062 				SIXAXIS_REPORT_0xF2_SIZE, HID_FEATURE_REPORT,
2063 				HID_REQ_GET_REPORT);
2064 
2065 		if (ret != SIXAXIS_REPORT_0xF2_SIZE) {
2066 			hid_err(sc->hdev, "failed to retrieve feature report 0xf2 with the Sixaxis MAC address\n");
2067 			ret = ret < 0 ? ret : -EINVAL;
2068 			goto out_free;
2069 		}
2070 
2071 		/*
2072 		 * The Sixaxis device MAC in the report is big-endian and must
2073 		 * be byte-swapped.
2074 		 */
2075 		for (n = 0; n < 6; n++)
2076 			sc->mac_address[5-n] = buf[4+n];
2077 
2078 		snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq),
2079 			 "%pMR", sc->mac_address);
2080 	} else {
2081 		return 0;
2082 	}
2083 
2084 	ret = sony_check_add_dev_list(sc);
2085 
2086 out_free:
2087 
2088 	kfree(buf);
2089 
2090 	return ret;
2091 }
2092 
sony_set_device_id(struct sony_sc * sc)2093 static int sony_set_device_id(struct sony_sc *sc)
2094 {
2095 	int ret;
2096 
2097 	/*
2098 	 * Only Sixaxis controllers get an id.
2099 	 * All others are set to -1.
2100 	 */
2101 	if (sc->quirks & SIXAXIS_CONTROLLER) {
2102 		ret = ida_alloc(&sony_device_id_allocator, GFP_KERNEL);
2103 		if (ret < 0) {
2104 			sc->device_id = -1;
2105 			return ret;
2106 		}
2107 		sc->device_id = ret;
2108 	} else {
2109 		sc->device_id = -1;
2110 	}
2111 
2112 	return 0;
2113 }
2114 
sony_release_device_id(struct sony_sc * sc)2115 static void sony_release_device_id(struct sony_sc *sc)
2116 {
2117 	if (sc->device_id >= 0) {
2118 		ida_free(&sony_device_id_allocator, sc->device_id);
2119 		sc->device_id = -1;
2120 	}
2121 }
2122 
sony_init_output_report(struct sony_sc * sc,void (* send_output_report)(struct sony_sc *))2123 static inline void sony_init_output_report(struct sony_sc *sc,
2124 				void (*send_output_report)(struct sony_sc *))
2125 {
2126 	sc->send_output_report = send_output_report;
2127 
2128 	if (!sc->state_worker_initialized)
2129 		INIT_WORK(&sc->state_worker, sony_state_worker);
2130 
2131 	sc->state_worker_initialized = 1;
2132 }
2133 
sony_cancel_work_sync(struct sony_sc * sc)2134 static inline void sony_cancel_work_sync(struct sony_sc *sc)
2135 {
2136 	unsigned long flags;
2137 
2138 	if (sc->state_worker_initialized) {
2139 		spin_lock_irqsave(&sc->lock, flags);
2140 		sc->state_worker_initialized = 0;
2141 		spin_unlock_irqrestore(&sc->lock, flags);
2142 		cancel_work_sync(&sc->state_worker);
2143 	}
2144 }
2145 
sony_input_configured(struct hid_device * hdev,struct hid_input * hidinput)2146 static int sony_input_configured(struct hid_device *hdev,
2147 					struct hid_input *hidinput)
2148 {
2149 	struct sony_sc *sc = hid_get_drvdata(hdev);
2150 	int append_dev_id;
2151 	int ret;
2152 
2153 	ret = sony_set_device_id(sc);
2154 	if (ret < 0) {
2155 		hid_err(hdev, "failed to allocate the device id\n");
2156 		goto err_stop;
2157 	}
2158 
2159 	ret = append_dev_id = sony_check_add(sc);
2160 	if (ret < 0)
2161 		goto err_stop;
2162 
2163 	ret = sony_allocate_output_report(sc);
2164 	if (ret < 0) {
2165 		hid_err(hdev, "failed to allocate the output report buffer\n");
2166 		goto err_stop;
2167 	}
2168 
2169 	if (sc->quirks & NAVIGATION_CONTROLLER_USB) {
2170 		/*
2171 		 * The Sony Sixaxis does not handle HID Output Reports on the
2172 		 * Interrupt EP like it could, so we need to force HID Output
2173 		 * Reports to use HID_REQ_SET_REPORT on the Control EP.
2174 		 *
2175 		 * There is also another issue about HID Output Reports via USB,
2176 		 * the Sixaxis does not want the report_id as part of the data
2177 		 * packet, so we have to discard buf[0] when sending the actual
2178 		 * control message, even for numbered reports, humpf!
2179 		 *
2180 		 * Additionally, the Sixaxis on USB isn't properly initialized
2181 		 * until the PS logo button is pressed and as such won't retain
2182 		 * any state set by an output report, so the initial
2183 		 * configuration report is deferred until the first input
2184 		 * report arrives.
2185 		 */
2186 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2187 		hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID;
2188 		sc->defer_initialization = 1;
2189 
2190 		ret = sixaxis_set_operational_usb(hdev);
2191 		if (ret < 0) {
2192 			hid_err(hdev, "Failed to set controller into operational mode\n");
2193 			goto err_stop;
2194 		}
2195 
2196 		sony_init_output_report(sc, sixaxis_send_output_report);
2197 	} else if (sc->quirks & NAVIGATION_CONTROLLER_BT) {
2198 		/*
2199 		 * The Navigation controller wants output reports sent on the ctrl
2200 		 * endpoint when connected via Bluetooth.
2201 		 */
2202 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2203 
2204 		ret = sixaxis_set_operational_bt(hdev);
2205 		if (ret < 0) {
2206 			hid_err(hdev, "Failed to set controller into operational mode\n");
2207 			goto err_stop;
2208 		}
2209 
2210 		sony_init_output_report(sc, sixaxis_send_output_report);
2211 	} else if (sc->quirks & RB3_PRO_INSTRUMENT) {
2212 		/*
2213 		 * Rock Band 3 PS3 Pro Instruments also do not handle HID Output
2214 		 * Reports on the interrupt EP like they should, so we need to force
2215 		 * HID output reports to use HID_REQ_SET_REPORT on the Control EP.
2216 		 *
2217 		 * There is also another issue about HID Output Reports via USB,
2218 		 * these instruments do not want the report_id as part of the data
2219 		 * packet, so we have to discard buf[0] when sending the actual
2220 		 * control message, even for numbered reports.
2221 		 */
2222 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2223 		hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID;
2224 	} else if (sc->quirks & SIXAXIS_CONTROLLER_USB) {
2225 		/*
2226 		 * The Sony Sixaxis does not handle HID Output Reports on the
2227 		 * Interrupt EP and the device only becomes active when the
2228 		 * PS button is pressed. See comment for Navigation controller
2229 		 * above for more details.
2230 		 */
2231 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2232 		hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID;
2233 		sc->defer_initialization = 1;
2234 
2235 		ret = sixaxis_set_operational_usb(hdev);
2236 		if (ret < 0) {
2237 			hid_err(hdev, "Failed to set controller into operational mode\n");
2238 			goto err_stop;
2239 		}
2240 
2241 		ret = sony_register_sensors(sc);
2242 		if (ret) {
2243 			hid_err(sc->hdev,
2244 			"Unable to initialize motion sensors: %d\n", ret);
2245 			goto err_stop;
2246 		}
2247 
2248 		sony_init_output_report(sc, sixaxis_send_output_report);
2249 	} else if (sc->quirks & SIXAXIS_CONTROLLER_BT) {
2250 		/*
2251 		 * The Sixaxis wants output reports sent on the ctrl endpoint
2252 		 * when connected via Bluetooth.
2253 		 */
2254 		hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2255 
2256 		ret = sixaxis_set_operational_bt(hdev);
2257 		if (ret < 0) {
2258 			hid_err(hdev, "Failed to set controller into operational mode\n");
2259 			goto err_stop;
2260 		}
2261 
2262 		ret = sony_register_sensors(sc);
2263 		if (ret) {
2264 			hid_err(sc->hdev,
2265 			"Unable to initialize motion sensors: %d\n", ret);
2266 			goto err_stop;
2267 		}
2268 
2269 		sony_init_output_report(sc, sixaxis_send_output_report);
2270 	} else if (sc->quirks & NSG_MRXU_REMOTE) {
2271 		/*
2272 		 * The NSG-MRxU touchpad supports 2 touches and has a
2273 		 * resolution of 1667x1868
2274 		 */
2275 		ret = sony_register_touchpad(sc, 2,
2276 			NSG_MRXU_MAX_X, NSG_MRXU_MAX_Y, 15, 15, 1);
2277 		if (ret) {
2278 			hid_err(sc->hdev,
2279 			"Unable to initialize multi-touch slots: %d\n",
2280 			ret);
2281 			goto err_stop;
2282 		}
2283 
2284 	} else if (sc->quirks & MOTION_CONTROLLER) {
2285 		sony_init_output_report(sc, motion_send_output_report);
2286 	}
2287 
2288 	if (sc->quirks & SONY_LED_SUPPORT) {
2289 		ret = sony_leds_init(sc);
2290 		if (ret < 0)
2291 			goto err_stop;
2292 	}
2293 
2294 	if (sc->quirks & SONY_BATTERY_SUPPORT) {
2295 		ret = sony_battery_probe(sc, append_dev_id);
2296 		if (ret < 0)
2297 			goto err_stop;
2298 
2299 		/* Open the device to receive reports with battery info */
2300 		ret = hid_hw_open(hdev);
2301 		if (ret < 0) {
2302 			hid_err(hdev, "hw open failed\n");
2303 			goto err_stop;
2304 		}
2305 	}
2306 
2307 	if (sc->quirks & SONY_FF_SUPPORT) {
2308 		ret = sony_init_ff(sc);
2309 		if (ret < 0)
2310 			goto err_close;
2311 	}
2312 
2313 	sc->input_dev = hidinput->input;
2314 	return 0;
2315 err_close:
2316 	hid_hw_close(hdev);
2317 err_stop:
2318 	sony_cancel_work_sync(sc);
2319 	sony_remove_dev_list(sc);
2320 	sony_release_device_id(sc);
2321 	return ret;
2322 }
2323 
sony_probe(struct hid_device * hdev,const struct hid_device_id * id)2324 static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
2325 {
2326 	int ret;
2327 	unsigned long quirks = id->driver_data;
2328 	struct sony_sc *sc;
2329 	struct usb_device *usbdev;
2330 	unsigned int connect_mask = HID_CONNECT_DEFAULT;
2331 
2332 	if (!strcmp(hdev->name, "FutureMax Dance Mat"))
2333 		quirks |= FUTUREMAX_DANCE_MAT;
2334 
2335 	if (!strcmp(hdev->name, "SHANWAN PS3 GamePad") ||
2336 	    !strcmp(hdev->name, "ShanWan PS(R) Ga`epad"))
2337 		quirks |= SHANWAN_GAMEPAD;
2338 
2339 	sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL);
2340 	if (!sc)
2341 		return -ENOMEM;
2342 
2343 	spin_lock_init(&sc->lock);
2344 
2345 	sc->quirks = quirks;
2346 	hid_set_drvdata(hdev, sc);
2347 	sc->hdev = hdev;
2348 
2349 	ret = hid_parse(hdev);
2350 	if (ret) {
2351 		hid_err(hdev, "parse failed\n");
2352 		return ret;
2353 	}
2354 
2355 	if (sc->quirks & VAIO_RDESC_CONSTANT)
2356 		connect_mask |= HID_CONNECT_HIDDEV_FORCE;
2357 	else if (sc->quirks & SIXAXIS_CONTROLLER)
2358 		connect_mask |= HID_CONNECT_HIDDEV_FORCE;
2359 
2360 	/* Patch the hw version on DS3 compatible devices, so applications can
2361 	 * distinguish between the default HID mappings and the mappings defined
2362 	 * by the Linux game controller spec. This is important for the SDL2
2363 	 * library, which has a game controller database, which uses device ids
2364 	 * in combination with version as a key.
2365 	 */
2366 	if (sc->quirks & SIXAXIS_CONTROLLER)
2367 		hdev->version |= 0x8000;
2368 
2369 	ret = hid_hw_start(hdev, connect_mask);
2370 	if (ret) {
2371 		hid_err(hdev, "hw start failed\n");
2372 		return ret;
2373 	}
2374 
2375 	/* sony_input_configured can fail, but this doesn't result
2376 	 * in hid_hw_start failures (intended). Check whether
2377 	 * the HID layer claimed the device else fail.
2378 	 * We don't know the actual reason for the failure, most
2379 	 * likely it is due to EEXIST in case of double connection
2380 	 * of USB and Bluetooth, but could have been due to ENOMEM
2381 	 * or other reasons as well.
2382 	 */
2383 	if (!(hdev->claimed & HID_CLAIMED_INPUT)) {
2384 		hid_err(hdev, "failed to claim input\n");
2385 		ret = -ENODEV;
2386 		goto err;
2387 	}
2388 
2389 	if (sc->quirks & RB3_PRO_INSTRUMENT)
2390 		sc->rb3_pro_poke_jiffies = 0;
2391 
2392 	if (sc->quirks & (GHL_GUITAR_PS3WIIU | GHL_GUITAR_PS4)) {
2393 		if (!hid_is_usb(hdev)) {
2394 			ret = -EINVAL;
2395 			goto err;
2396 		}
2397 
2398 		usbdev = to_usb_device(sc->hdev->dev.parent->parent);
2399 
2400 		sc->ghl_urb = usb_alloc_urb(0, GFP_ATOMIC);
2401 		if (!sc->ghl_urb) {
2402 			ret = -ENOMEM;
2403 			goto err;
2404 		}
2405 
2406 		if (sc->quirks & GHL_GUITAR_PS3WIIU)
2407 			ret = ghl_init_urb(sc, usbdev, ghl_ps3wiiu_magic_data,
2408 							   ARRAY_SIZE(ghl_ps3wiiu_magic_data));
2409 		else if (sc->quirks & GHL_GUITAR_PS4)
2410 			ret = ghl_init_urb(sc, usbdev, ghl_ps4_magic_data,
2411 							   ARRAY_SIZE(ghl_ps4_magic_data));
2412 		if (ret) {
2413 			hid_err(hdev, "error preparing URB\n");
2414 			goto err;
2415 		}
2416 
2417 		timer_setup(&sc->ghl_poke_timer, ghl_magic_poke, 0);
2418 		mod_timer(&sc->ghl_poke_timer,
2419 			  jiffies + GHL_GUITAR_POKE_INTERVAL*HZ);
2420 	}
2421 
2422 	return ret;
2423 
2424 err:
2425 	usb_free_urb(sc->ghl_urb);
2426 
2427 	hid_hw_stop(hdev);
2428 	return ret;
2429 }
2430 
sony_remove(struct hid_device * hdev)2431 static void sony_remove(struct hid_device *hdev)
2432 {
2433 	struct sony_sc *sc = hid_get_drvdata(hdev);
2434 
2435 	if (sc->quirks & (GHL_GUITAR_PS3WIIU | GHL_GUITAR_PS4)) {
2436 		timer_delete_sync(&sc->ghl_poke_timer);
2437 		usb_free_urb(sc->ghl_urb);
2438 	}
2439 
2440 	hid_hw_close(hdev);
2441 
2442 	sony_cancel_work_sync(sc);
2443 
2444 	sony_remove_dev_list(sc);
2445 
2446 	sony_release_device_id(sc);
2447 
2448 	hid_hw_stop(hdev);
2449 }
2450 
2451 
sony_suspend(struct hid_device * hdev,pm_message_t message)2452 static int sony_suspend(struct hid_device *hdev, pm_message_t message)
2453 {
2454 #ifdef CONFIG_SONY_FF
2455 	struct sony_sc *sc = hid_get_drvdata(hdev);
2456 
2457 	/* On suspend stop any running force-feedback events */
2458 	if (sc->quirks & SONY_FF_SUPPORT) {
2459 		sc->left = sc->right = 0;
2460 		sony_send_output_report(sc);
2461 	}
2462 
2463 #endif
2464 	return 0;
2465 }
2466 
sony_resume(struct hid_device * hdev)2467 static int sony_resume(struct hid_device *hdev)
2468 {
2469 	struct sony_sc *sc = hid_get_drvdata(hdev);
2470 
2471 	/*
2472 	 * The Sixaxis and navigation controllers on USB need to be
2473 	 * reinitialized on resume or they won't behave properly.
2474 	 */
2475 	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) ||
2476 		(sc->quirks & NAVIGATION_CONTROLLER_USB)) {
2477 		sixaxis_set_operational_usb(sc->hdev);
2478 		sc->defer_initialization = 1;
2479 	}
2480 
2481 	return 0;
2482 }
2483 
2484 static const struct hid_device_id sony_devices[] = {
2485 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
2486 		.driver_data = SIXAXIS_CONTROLLER_USB },
2487 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
2488 		.driver_data = NAVIGATION_CONTROLLER_USB },
2489 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
2490 		.driver_data = NAVIGATION_CONTROLLER_BT },
2491 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER),
2492 		.driver_data = MOTION_CONTROLLER_USB },
2493 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER),
2494 		.driver_data = MOTION_CONTROLLER_BT },
2495 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
2496 		.driver_data = SIXAXIS_CONTROLLER_BT },
2497 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
2498 		.driver_data = VAIO_RDESC_CONSTANT },
2499 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE),
2500 		.driver_data = VAIO_RDESC_CONSTANT },
2501 	/*
2502 	 * Wired Buzz Controller. Reported as Sony Hub from its USB ID and as
2503 	 * Logitech joystick from the device descriptor.
2504 	 */
2505 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER),
2506 		.driver_data = BUZZ_CONTROLLER },
2507 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER),
2508 		.driver_data = BUZZ_CONTROLLER },
2509 	/* PS3 BD Remote Control */
2510 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE),
2511 		.driver_data = PS3REMOTE },
2512 	/* Logitech Harmony Adapter for PS3 */
2513 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3),
2514 		.driver_data = PS3REMOTE },
2515 	/* SMK-Link PS3 BD Remote Control */
2516 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE),
2517 		.driver_data = PS3REMOTE },
2518 	/* Nyko Core Controller for PS3 */
2519 	{ HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER),
2520 		.driver_data = SIXAXIS_CONTROLLER_USB | SINO_LITE_CONTROLLER },
2521 	/* SMK-Link NSG-MR5U Remote Control */
2522 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR5U_REMOTE),
2523 		.driver_data = NSG_MR5U_REMOTE_BT },
2524 	/* SMK-Link NSG-MR7U Remote Control */
2525 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR7U_REMOTE),
2526 		.driver_data = NSG_MR7U_REMOTE_BT },
2527 	/* Guitar Hero Live PS3 and Wii U guitar dongles */
2528 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE),
2529 		.driver_data = GHL_GUITAR_PS3WIIU | GH_GUITAR_TILT | INSTRUMENT },
2530 	/* Guitar Hero PC Guitar Dongle */
2531 	{ HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_GUITAR_DONGLE),
2532 		.driver_data = GH_GUITAR_TILT | INSTRUMENT },
2533 	/* Guitar Hero PS3 Guitar Dongle */
2534 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_GUITAR),
2535 		.driver_data = GH_GUITAR_TILT | INSTRUMENT },
2536 	/* Guitar Hero PS3 Drum Dongle */
2537 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_DRUMS),
2538 		.driver_data = INSTRUMENT },
2539 	/* DJ Hero PS3 Guitar Dongle */
2540 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_DJH_TURNTABLE),
2541 		.driver_data = DJH_TURNTABLE | INSTRUMENT },
2542 	/* Guitar Hero Live PS4 guitar dongles */
2543 	{ HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_PS4_GHLIVE_DONGLE),
2544 		.driver_data = GHL_GUITAR_PS4 | GH_GUITAR_TILT | INSTRUMENT },
2545 	/* Rock Band 1 Wii instruments */
2546 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB1_GUITAR),
2547 		.driver_data = INSTRUMENT },
2548 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB1_DRUMS),
2549 		.driver_data = INSTRUMENT },
2550 	/* Rock Band 2 Wii instruments */
2551 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_GUITAR),
2552 		.driver_data = INSTRUMENT },
2553 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_DRUMS),
2554 		.driver_data = INSTRUMENT },
2555 	/* Rock Band 3 Wii instruments */
2556 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_DRUMS_MODE),
2557 		.driver_data = INSTRUMENT },
2558 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MUSTANG_GUITAR),
2559 		.driver_data = INSTRUMENT },
2560 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_MUSTANG_MODE),
2561 		.driver_data = INSTRUMENT },
2562 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_SQUIER_MODE),
2563 		.driver_data = INSTRUMENT },
2564 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_KEYBOARD),
2565 		.driver_data = INSTRUMENT },
2566 	{ HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_KEYBOARD_MODE),
2567 		.driver_data = INSTRUMENT },
2568 	/* Rock Band 3 PS3 instruments */
2569 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB_GUITAR),
2570 		.driver_data = INSTRUMENT },
2571 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB_DRUMS),
2572 		.driver_data = INSTRUMENT },
2573 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_DRUMS_MODE),
2574 		.driver_data = INSTRUMENT },
2575 	/* Rock Band 3 PS3 Pro instruments */
2576 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MUSTANG_GUITAR),
2577 		.driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT },
2578 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_MUSTANG_MODE),
2579 		.driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT },
2580 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_SQUIER_MODE),
2581 		.driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT },
2582 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_KEYBOARD),
2583 		.driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT },
2584 	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_KEYBOARD_MODE),
2585 		.driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT },
2586 	/* Rock Band 4 PS4 guitars */
2587 	{ HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_RIFFMASTER),
2588 		.driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT },
2589 	{ HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS4_GIBSON_SG),
2590 		.driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT },
2591 	{ HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS4_GIBSON_SG_DONGLE),
2592 		.driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT },
2593 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_JAGUAR),
2594 		.driver_data = RB4_GUITAR_PS4_BT | INSTRUMENT },
2595 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_PS4_STRATOCASTER),
2596 		.driver_data = RB4_GUITAR_PS4_BT | INSTRUMENT },
2597 	/* Rock Band 4 PS5 guitars */
2598 	{ HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS5_RIFFMASTER),
2599 		.driver_data = RB4_GUITAR_PS5 | INSTRUMENT },
2600 	{ HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS5_GIBSON_SG),
2601 		.driver_data = RB4_GUITAR_PS5 | INSTRUMENT },
2602 	{ HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS5_GIBSON_SG_DONGLE),
2603 		.driver_data = RB4_GUITAR_PS5 | INSTRUMENT },
2604 	{ }
2605 };
2606 MODULE_DEVICE_TABLE(hid, sony_devices);
2607 
2608 static struct hid_driver sony_driver = {
2609 	.name             = "sony",
2610 	.id_table         = sony_devices,
2611 	.input_mapping    = sony_mapping,
2612 	.input_configured = sony_input_configured,
2613 	.probe            = sony_probe,
2614 	.remove           = sony_remove,
2615 	.report_fixup     = sony_report_fixup,
2616 	.raw_event        = sony_raw_event,
2617 	.suspend          = pm_ptr(sony_suspend),
2618 	.resume	          = pm_ptr(sony_resume),
2619 	.reset_resume     = pm_ptr(sony_resume),
2620 };
2621 
sony_init(void)2622 static int __init sony_init(void)
2623 {
2624 	dbg_hid("Sony:%s\n", __func__);
2625 
2626 	return hid_register_driver(&sony_driver);
2627 }
2628 
sony_exit(void)2629 static void __exit sony_exit(void)
2630 {
2631 	dbg_hid("Sony:%s\n", __func__);
2632 
2633 	hid_unregister_driver(&sony_driver);
2634 	ida_destroy(&sony_device_id_allocator);
2635 }
2636 module_init(sony_init);
2637 module_exit(sony_exit);
2638 
2639 MODULE_DESCRIPTION("HID driver for Sony / PS2 / PS3 BD / PS4 / PS5 devices");
2640 MODULE_LICENSE("GPL");
2641