2 * HID driver for Sony / PS2 / PS3 / PS4 BD devices.
4 * Copyright (c) 1999 Andreas Gal
5 * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
6 * Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
7 * Copyright (c) 2008 Jiri Slaby
8 * Copyright (c) 2012 David Dillow <dave@thedillows.org>
9 * Copyright (c) 2006-2013 Jiri Kosina
10 * Copyright (c) 2013 Colin Leitner <colin.leitner@gmail.com>
11 * Copyright (c) 2014-2016 Frank Praznik <frank.praznik@gmail.com>
15 * This program is free software; you can redistribute it and/or modify it
16 * under the terms of the GNU General Public License as published by the Free
17 * Software Foundation; either version 2 of the License, or (at your option)
22 * NOTE: in order for the Sony PS3 BD Remote Control to be found by
23 * a Bluetooth host, the key combination Start+Enter has to be kept pressed
24 * for about 7 seconds with the Bluetooth Host Controller in discovering mode.
26 * There will be no PIN request from the device.
29 #include <linux/device.h>
30 #include <linux/hid.h>
31 #include <linux/module.h>
32 #include <linux/slab.h>
33 #include <linux/leds.h>
34 #include <linux/power_supply.h>
35 #include <linux/spinlock.h>
36 #include <linux/list.h>
37 #include <linux/idr.h>
38 #include <linux/input/mt.h>
39 #include <linux/crc32.h>
40 #include <asm/unaligned.h>
44 #define VAIO_RDESC_CONSTANT BIT(0)
45 #define SIXAXIS_CONTROLLER_USB BIT(1)
46 #define SIXAXIS_CONTROLLER_BT BIT(2)
47 #define BUZZ_CONTROLLER BIT(3)
48 #define PS3REMOTE BIT(4)
49 #define DUALSHOCK4_CONTROLLER_USB BIT(5)
50 #define DUALSHOCK4_CONTROLLER_BT BIT(6)
51 #define DUALSHOCK4_DONGLE BIT(7)
52 #define MOTION_CONTROLLER_USB BIT(8)
53 #define MOTION_CONTROLLER_BT BIT(9)
54 #define NAVIGATION_CONTROLLER_USB BIT(10)
55 #define NAVIGATION_CONTROLLER_BT BIT(11)
56 #define SINO_LITE_CONTROLLER BIT(12)
57 #define FUTUREMAX_DANCE_MAT BIT(13)
59 #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)
60 #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT)
61 #define NAVIGATION_CONTROLLER (NAVIGATION_CONTROLLER_USB |\
62 NAVIGATION_CONTROLLER_BT)
63 #define DUALSHOCK4_CONTROLLER (DUALSHOCK4_CONTROLLER_USB |\
64 DUALSHOCK4_CONTROLLER_BT | \
66 #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER | BUZZ_CONTROLLER |\
67 DUALSHOCK4_CONTROLLER | MOTION_CONTROLLER |\
68 NAVIGATION_CONTROLLER)
69 #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER |\
70 MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER)
71 #define SONY_FF_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER |\
73 #define SONY_BT_DEVICE (SIXAXIS_CONTROLLER_BT | DUALSHOCK4_CONTROLLER_BT |\
74 MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER_BT)
79 /* PS/3 Motion controller */
80 static u8 motion_rdesc
[] = {
81 0x05, 0x01, /* Usage Page (Desktop), */
82 0x09, 0x04, /* Usage (Joystick), */
83 0xA1, 0x01, /* Collection (Application), */
84 0xA1, 0x02, /* Collection (Logical), */
85 0x85, 0x01, /* Report ID (1), */
86 0x75, 0x01, /* Report Size (1), */
87 0x95, 0x15, /* Report Count (21), */
88 0x15, 0x00, /* Logical Minimum (0), */
89 0x25, 0x01, /* Logical Maximum (1), */
90 0x35, 0x00, /* Physical Minimum (0), */
91 0x45, 0x01, /* Physical Maximum (1), */
92 0x05, 0x09, /* Usage Page (Button), */
93 0x19, 0x01, /* Usage Minimum (01h), */
94 0x29, 0x15, /* Usage Maximum (15h), */
95 0x81, 0x02, /* Input (Variable), * Buttons */
96 0x95, 0x0B, /* Report Count (11), */
97 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
98 0x81, 0x03, /* Input (Constant, Variable), * Padding */
99 0x15, 0x00, /* Logical Minimum (0), */
100 0x26, 0xFF, 0x00, /* Logical Maximum (255), */
101 0x05, 0x01, /* Usage Page (Desktop), */
102 0xA1, 0x00, /* Collection (Physical), */
103 0x75, 0x08, /* Report Size (8), */
104 0x95, 0x01, /* Report Count (1), */
105 0x35, 0x00, /* Physical Minimum (0), */
106 0x46, 0xFF, 0x00, /* Physical Maximum (255), */
107 0x09, 0x30, /* Usage (X), */
108 0x81, 0x02, /* Input (Variable), * Trigger */
109 0xC0, /* End Collection, */
110 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
111 0x75, 0x08, /* Report Size (8), */
112 0x95, 0x07, /* Report Count (7), * skip 7 bytes */
113 0x81, 0x02, /* Input (Variable), */
114 0x05, 0x01, /* Usage Page (Desktop), */
115 0x75, 0x10, /* Report Size (16), */
116 0x46, 0xFF, 0xFF, /* Physical Maximum (65535), */
117 0x27, 0xFF, 0xFF, 0x00, 0x00, /* Logical Maximum (65535), */
118 0x95, 0x03, /* Report Count (3), * 3x Accels */
119 0x09, 0x33, /* Usage (rX), */
120 0x09, 0x34, /* Usage (rY), */
121 0x09, 0x35, /* Usage (rZ), */
122 0x81, 0x02, /* Input (Variable), */
123 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
124 0x95, 0x03, /* Report Count (3), * Skip Accels 2nd frame */
125 0x81, 0x02, /* Input (Variable), */
126 0x05, 0x01, /* Usage Page (Desktop), */
127 0x09, 0x01, /* Usage (Pointer), */
128 0x95, 0x03, /* Report Count (3), * 3x Gyros */
129 0x81, 0x02, /* Input (Variable), */
130 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
131 0x95, 0x03, /* Report Count (3), * Skip Gyros 2nd frame */
132 0x81, 0x02, /* Input (Variable), */
133 0x75, 0x0C, /* Report Size (12), */
134 0x46, 0xFF, 0x0F, /* Physical Maximum (4095), */
135 0x26, 0xFF, 0x0F, /* Logical Maximum (4095), */
136 0x95, 0x04, /* Report Count (4), * Skip Temp and Magnetometers */
137 0x81, 0x02, /* Input (Variable), */
138 0x75, 0x08, /* Report Size (8), */
139 0x46, 0xFF, 0x00, /* Physical Maximum (255), */
140 0x26, 0xFF, 0x00, /* Logical Maximum (255), */
141 0x95, 0x06, /* Report Count (6), * Skip Timestamp and Extension Bytes */
142 0x81, 0x02, /* Input (Variable), */
143 0x75, 0x08, /* Report Size (8), */
144 0x95, 0x30, /* Report Count (48), */
145 0x09, 0x01, /* Usage (Pointer), */
146 0x91, 0x02, /* Output (Variable), */
147 0x75, 0x08, /* Report Size (8), */
148 0x95, 0x30, /* Report Count (48), */
149 0x09, 0x01, /* Usage (Pointer), */
150 0xB1, 0x02, /* Feature (Variable), */
151 0xC0, /* End Collection, */
152 0xA1, 0x02, /* Collection (Logical), */
153 0x85, 0x02, /* Report ID (2), */
154 0x75, 0x08, /* Report Size (8), */
155 0x95, 0x30, /* Report Count (48), */
156 0x09, 0x01, /* Usage (Pointer), */
157 0xB1, 0x02, /* Feature (Variable), */
158 0xC0, /* End Collection, */
159 0xA1, 0x02, /* Collection (Logical), */
160 0x85, 0xEE, /* Report ID (238), */
161 0x75, 0x08, /* Report Size (8), */
162 0x95, 0x30, /* Report Count (48), */
163 0x09, 0x01, /* Usage (Pointer), */
164 0xB1, 0x02, /* Feature (Variable), */
165 0xC0, /* End Collection, */
166 0xA1, 0x02, /* Collection (Logical), */
167 0x85, 0xEF, /* Report ID (239), */
168 0x75, 0x08, /* Report Size (8), */
169 0x95, 0x30, /* Report Count (48), */
170 0x09, 0x01, /* Usage (Pointer), */
171 0xB1, 0x02, /* Feature (Variable), */
172 0xC0, /* End Collection, */
173 0xC0 /* End Collection */
176 static u8 ps3remote_rdesc
[] = {
177 0x05, 0x01, /* GUsagePage Generic Desktop */
178 0x09, 0x05, /* LUsage 0x05 [Game Pad] */
179 0xA1, 0x01, /* MCollection Application (mouse, keyboard) */
181 /* Use collection 1 for joypad buttons */
182 0xA1, 0x02, /* MCollection Logical (interrelated data) */
185 * Ignore the 1st byte, maybe it is used for a controller
186 * number but it's not needed for correct operation
188 0x75, 0x08, /* GReportSize 0x08 [8] */
189 0x95, 0x01, /* GReportCount 0x01 [1] */
190 0x81, 0x01, /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
193 * Bytes from 2nd to 4th are a bitmap for joypad buttons, for these
194 * buttons multiple keypresses are allowed
196 0x05, 0x09, /* GUsagePage Button */
197 0x19, 0x01, /* LUsageMinimum 0x01 [Button 1 (primary/trigger)] */
198 0x29, 0x18, /* LUsageMaximum 0x18 [Button 24] */
199 0x14, /* GLogicalMinimum [0] */
200 0x25, 0x01, /* GLogicalMaximum 0x01 [1] */
201 0x75, 0x01, /* GReportSize 0x01 [1] */
202 0x95, 0x18, /* GReportCount 0x18 [24] */
203 0x81, 0x02, /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
205 0xC0, /* MEndCollection */
207 /* Use collection 2 for remote control buttons */
208 0xA1, 0x02, /* MCollection Logical (interrelated data) */
210 /* 5th byte is used for remote control buttons */
211 0x05, 0x09, /* GUsagePage Button */
212 0x18, /* LUsageMinimum [No button pressed] */
213 0x29, 0xFE, /* LUsageMaximum 0xFE [Button 254] */
214 0x14, /* GLogicalMinimum [0] */
215 0x26, 0xFE, 0x00, /* GLogicalMaximum 0x00FE [254] */
216 0x75, 0x08, /* GReportSize 0x08 [8] */
217 0x95, 0x01, /* GReportCount 0x01 [1] */
221 * Ignore bytes from 6th to 11th, 6th to 10th are always constant at
222 * 0xff and 11th is for press indication
224 0x75, 0x08, /* GReportSize 0x08 [8] */
225 0x95, 0x06, /* GReportCount 0x06 [6] */
226 0x81, 0x01, /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
228 /* 12th byte is for battery strength */
229 0x05, 0x06, /* GUsagePage Generic Device Controls */
230 0x09, 0x20, /* LUsage 0x20 [Battery Strength] */
231 0x14, /* GLogicalMinimum [0] */
232 0x25, 0x05, /* GLogicalMaximum 0x05 [5] */
233 0x75, 0x08, /* GReportSize 0x08 [8] */
234 0x95, 0x01, /* GReportCount 0x01 [1] */
235 0x81, 0x02, /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
237 0xC0, /* MEndCollection */
239 0xC0 /* MEndCollection [Game Pad] */
242 static const unsigned int ps3remote_keymap_joypad_buttons
[] = {
244 [0x02] = BTN_THUMBL
, /* L3 */
245 [0x03] = BTN_THUMBR
, /* R3 */
251 [0x09] = BTN_TL2
, /* L2 */
252 [0x0a] = BTN_TR2
, /* R2 */
253 [0x0b] = BTN_TL
, /* L1 */
254 [0x0c] = BTN_TR
, /* R1 */
255 [0x0d] = KEY_OPTION
, /* options/triangle */
256 [0x0e] = KEY_BACK
, /* back/circle */
257 [0x0f] = BTN_0
, /* cross */
258 [0x10] = KEY_SCREEN
, /* view/square */
259 [0x11] = KEY_HOMEPAGE
, /* PS button */
262 static const unsigned int ps3remote_keymap_remote_buttons
[] = {
273 [0x0e] = KEY_ESC
, /* return */
275 [0x16] = KEY_EJECTCD
,
276 [0x1a] = KEY_MENU
, /* top menu */
278 [0x30] = KEY_PREVIOUS
,
281 [0x33] = KEY_REWIND
, /* scan back */
282 [0x34] = KEY_FORWARD
, /* scan forward */
285 [0x40] = KEY_CONTEXT_MENU
, /* pop up/menu */
286 [0x60] = KEY_FRAMEBACK
, /* slow/step back */
287 [0x61] = KEY_FRAMEFORWARD
, /* slow/step forward */
288 [0x63] = KEY_SUBTITLE
,
291 [0x70] = KEY_INFO
, /* display */
298 static const unsigned int buzz_keymap
[] = {
300 * The controller has 4 remote buzzers, each with one LED and 5
303 * We use the mapping chosen by the controller, which is:
306 * -------------------
313 * So, for example, the orange button on the third buzzer is mapped to
314 * BTN_TRIGGER_HAPPY14
316 [1] = BTN_TRIGGER_HAPPY1
,
317 [2] = BTN_TRIGGER_HAPPY2
,
318 [3] = BTN_TRIGGER_HAPPY3
,
319 [4] = BTN_TRIGGER_HAPPY4
,
320 [5] = BTN_TRIGGER_HAPPY5
,
321 [6] = BTN_TRIGGER_HAPPY6
,
322 [7] = BTN_TRIGGER_HAPPY7
,
323 [8] = BTN_TRIGGER_HAPPY8
,
324 [9] = BTN_TRIGGER_HAPPY9
,
325 [10] = BTN_TRIGGER_HAPPY10
,
326 [11] = BTN_TRIGGER_HAPPY11
,
327 [12] = BTN_TRIGGER_HAPPY12
,
328 [13] = BTN_TRIGGER_HAPPY13
,
329 [14] = BTN_TRIGGER_HAPPY14
,
330 [15] = BTN_TRIGGER_HAPPY15
,
331 [16] = BTN_TRIGGER_HAPPY16
,
332 [17] = BTN_TRIGGER_HAPPY17
,
333 [18] = BTN_TRIGGER_HAPPY18
,
334 [19] = BTN_TRIGGER_HAPPY19
,
335 [20] = BTN_TRIGGER_HAPPY20
,
338 /* The Navigation controller is a partial DS3 and uses the same HID report
339 * and hence the same keymap indices, however not not all axes/buttons
340 * are physically present. We use the same axis and button mapping as
341 * the DS3, which uses the Linux gamepad spec.
343 static const unsigned int navigation_absmap
[] = {
346 [0x33] = ABS_Z
, /* L2 */
349 /* Buttons not physically available on the device, but still available
350 * in the reports are explicitly set to 0 for documentation purposes.
352 static const unsigned int navigation_keymap
[] = {
353 [0x01] = 0, /* Select */
354 [0x02] = BTN_THUMBL
, /* L3 */
356 [0x04] = 0, /* Start */
357 [0x05] = BTN_DPAD_UP
, /* Up */
358 [0x06] = BTN_DPAD_RIGHT
, /* Right */
359 [0x07] = BTN_DPAD_DOWN
, /* Down */
360 [0x08] = BTN_DPAD_LEFT
, /* Left */
361 [0x09] = BTN_TL2
, /* L2 */
363 [0x0b] = BTN_TL
, /* L1 */
365 [0x0d] = BTN_NORTH
, /* Triangle */
366 [0x0e] = BTN_EAST
, /* Circle */
367 [0x0f] = BTN_SOUTH
, /* Cross */
368 [0x10] = BTN_WEST
, /* Square */
369 [0x11] = BTN_MODE
, /* PS */
372 static const unsigned int sixaxis_absmap
[] = {
375 [0x32] = ABS_RX
, /* right stick X */
376 [0x35] = ABS_RY
, /* right stick Y */
379 static const unsigned int sixaxis_keymap
[] = {
380 [0x01] = BTN_SELECT
, /* Select */
381 [0x02] = BTN_THUMBL
, /* L3 */
382 [0x03] = BTN_THUMBR
, /* R3 */
383 [0x04] = BTN_START
, /* Start */
384 [0x05] = BTN_DPAD_UP
, /* Up */
385 [0x06] = BTN_DPAD_RIGHT
, /* Right */
386 [0x07] = BTN_DPAD_DOWN
, /* Down */
387 [0x08] = BTN_DPAD_LEFT
, /* Left */
388 [0x09] = BTN_TL2
, /* L2 */
389 [0x0a] = BTN_TR2
, /* R2 */
390 [0x0b] = BTN_TL
, /* L1 */
391 [0x0c] = BTN_TR
, /* R1 */
392 [0x0d] = BTN_NORTH
, /* Triangle */
393 [0x0e] = BTN_EAST
, /* Circle */
394 [0x0f] = BTN_SOUTH
, /* Cross */
395 [0x10] = BTN_WEST
, /* Square */
396 [0x11] = BTN_MODE
, /* PS */
399 static const unsigned int ds4_absmap
[] = {
402 [0x32] = ABS_RX
, /* right stick X */
403 [0x33] = ABS_Z
, /* L2 */
404 [0x34] = ABS_RZ
, /* R2 */
405 [0x35] = ABS_RY
, /* right stick Y */
408 static const unsigned int ds4_keymap
[] = {
409 [0x1] = BTN_WEST
, /* Square */
410 [0x2] = BTN_SOUTH
, /* Cross */
411 [0x3] = BTN_EAST
, /* Circle */
412 [0x4] = BTN_NORTH
, /* Triangle */
413 [0x5] = BTN_TL
, /* L1 */
414 [0x6] = BTN_TR
, /* R1 */
415 [0x7] = BTN_TL2
, /* L2 */
416 [0x8] = BTN_TR2
, /* R2 */
417 [0x9] = BTN_SELECT
, /* Share */
418 [0xa] = BTN_START
, /* Options */
419 [0xb] = BTN_THUMBL
, /* L3 */
420 [0xc] = BTN_THUMBR
, /* R3 */
421 [0xd] = BTN_MODE
, /* PS */
424 static const struct {int x
; int y
; } ds4_hat_mapping
[] = {
425 {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1},
429 static enum power_supply_property sony_battery_props
[] = {
430 POWER_SUPPLY_PROP_PRESENT
,
431 POWER_SUPPLY_PROP_CAPACITY
,
432 POWER_SUPPLY_PROP_SCOPE
,
433 POWER_SUPPLY_PROP_STATUS
,
437 u8 time_enabled
; /* the total time the led is active (0xff means forever) */
438 u8 duty_length
; /* how long a cycle is in deciseconds (0 means "really fast") */
440 u8 duty_off
; /* % of duty_length the led is off (0xff means 100%) */
441 u8 duty_on
; /* % of duty_length the led is on (0xff mean 100%) */
444 struct sixaxis_rumble
{
446 u8 right_duration
; /* Right motor duration (0xff means forever) */
447 u8 right_motor_on
; /* Right (small) motor on/off, only supports values of 0 or 1 (off/on) */
448 u8 left_duration
; /* Left motor duration (0xff means forever) */
449 u8 left_motor_force
; /* left (large) motor, supports force values from 0 to 255 */
452 struct sixaxis_output_report
{
454 struct sixaxis_rumble rumble
;
456 u8 leds_bitmap
; /* bitmap of enabled LEDs: LED_1 = 0x02, LED_2 = 0x04, ... */
457 struct sixaxis_led led
[4]; /* LEDx at (4 - x) */
458 struct sixaxis_led _reserved
; /* LED5, not actually soldered */
461 union sixaxis_output_report_01
{
462 struct sixaxis_output_report data
;
466 struct motion_output_report_02
{
473 #define DS4_FEATURE_REPORT_0x02_SIZE 37
474 #define DS4_FEATURE_REPORT_0x05_SIZE 41
475 #define DS4_FEATURE_REPORT_0x81_SIZE 7
476 #define DS4_FEATURE_REPORT_0xA3_SIZE 49
477 #define DS4_INPUT_REPORT_0x11_SIZE 78
478 #define DS4_OUTPUT_REPORT_0x05_SIZE 32
479 #define DS4_OUTPUT_REPORT_0x11_SIZE 78
480 #define SIXAXIS_REPORT_0xF2_SIZE 17
481 #define SIXAXIS_REPORT_0xF5_SIZE 8
482 #define MOTION_REPORT_0x02_SIZE 49
484 /* Offsets relative to USB input report (0x1). Bluetooth (0x11) requires an
487 #define DS4_INPUT_REPORT_AXIS_OFFSET 1
488 #define DS4_INPUT_REPORT_BUTTON_OFFSET 5
489 #define DS4_INPUT_REPORT_TIMESTAMP_OFFSET 10
490 #define DS4_INPUT_REPORT_GYRO_X_OFFSET 13
491 #define DS4_INPUT_REPORT_BATTERY_OFFSET 30
492 #define DS4_INPUT_REPORT_TOUCHPAD_OFFSET 33
494 #define SENSOR_SUFFIX " Motion Sensors"
495 #define DS4_TOUCHPAD_SUFFIX " Touchpad"
497 /* Default to 4ms poll interval, which is same as USB (not adjustable). */
498 #define DS4_BT_DEFAULT_POLL_INTERVAL_MS 4
499 #define DS4_BT_MAX_POLL_INTERVAL_MS 62
500 #define DS4_GYRO_RES_PER_DEG_S 1024
501 #define DS4_ACC_RES_PER_G 8192
503 #define SIXAXIS_INPUT_REPORT_ACC_X_OFFSET 41
504 #define SIXAXIS_ACC_RES_PER_G 113
506 static DEFINE_SPINLOCK(sony_dev_list_lock
);
507 static LIST_HEAD(sony_device_list
);
508 static DEFINE_IDA(sony_device_id_allocator
);
510 /* Used for calibration of DS4 accelerometer and gyro. */
511 struct ds4_calibration_data
{
514 /* Calibration requires scaling against a sensitivity value, which is a
515 * float. Store sensitivity as a fraction to limit floating point
516 * calculations until final calibration.
522 enum ds4_dongle_state
{
536 struct list_head list_node
;
537 struct hid_device
*hdev
;
538 struct input_dev
*touchpad
;
539 struct input_dev
*sensor_dev
;
540 struct led_classdev
*leds
[MAX_LEDS
];
541 unsigned long quirks
;
542 struct work_struct hotplug_worker
;
543 struct work_struct state_worker
;
544 void (*send_output_report
)(struct sony_sc
*);
545 struct power_supply
*battery
;
546 struct power_supply_desc battery_desc
;
550 u8
*output_report_dmabuf
;
552 #ifdef CONFIG_SONY_FF
558 u8 hotplug_worker_initialized
;
559 u8 state_worker_initialized
;
560 u8 defer_initialization
;
564 u8 led_state
[MAX_LEDS
];
565 u8 led_delay_on
[MAX_LEDS
];
566 u8 led_delay_off
[MAX_LEDS
];
569 bool timestamp_initialized
;
571 unsigned int timestamp_us
;
573 u8 ds4_bt_poll_interval
;
574 enum ds4_dongle_state ds4_dongle_state
;
575 /* DS4 calibration data */
576 struct ds4_calibration_data ds4_calib_data
[6];
579 static void sony_set_leds(struct sony_sc
*sc
);
581 static inline void sony_schedule_work(struct sony_sc
*sc
,
582 enum sony_worker which
)
585 case SONY_WORKER_STATE
:
586 if (!sc
->defer_initialization
)
587 schedule_work(&sc
->state_worker
);
589 case SONY_WORKER_HOTPLUG
:
590 if (sc
->hotplug_worker_initialized
)
591 schedule_work(&sc
->hotplug_worker
);
596 static ssize_t
ds4_show_poll_interval(struct device
*dev
,
597 struct device_attribute
600 struct hid_device
*hdev
= to_hid_device(dev
);
601 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
603 return snprintf(buf
, PAGE_SIZE
, "%i\n", sc
->ds4_bt_poll_interval
);
606 static ssize_t
ds4_store_poll_interval(struct device
*dev
,
607 struct device_attribute
*attr
,
608 const char *buf
, size_t count
)
610 struct hid_device
*hdev
= to_hid_device(dev
);
611 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
615 if (kstrtou8(buf
, 0, &interval
))
618 if (interval
> DS4_BT_MAX_POLL_INTERVAL_MS
)
621 spin_lock_irqsave(&sc
->lock
, flags
);
622 sc
->ds4_bt_poll_interval
= interval
;
623 spin_unlock_irqrestore(&sc
->lock
, flags
);
625 sony_schedule_work(sc
, SONY_WORKER_STATE
);
630 static DEVICE_ATTR(bt_poll_interval
, 0644, ds4_show_poll_interval
,
631 ds4_store_poll_interval
);
633 static ssize_t
sony_show_firmware_version(struct device
*dev
,
634 struct device_attribute
637 struct hid_device
*hdev
= to_hid_device(dev
);
638 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
640 return snprintf(buf
, PAGE_SIZE
, "0x%04x\n", sc
->fw_version
);
643 static DEVICE_ATTR(firmware_version
, 0444, sony_show_firmware_version
, NULL
);
645 static ssize_t
sony_show_hardware_version(struct device
*dev
,
646 struct device_attribute
649 struct hid_device
*hdev
= to_hid_device(dev
);
650 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
652 return snprintf(buf
, PAGE_SIZE
, "0x%04x\n", sc
->hw_version
);
655 static DEVICE_ATTR(hardware_version
, 0444, sony_show_hardware_version
, NULL
);
657 static u8
*motion_fixup(struct hid_device
*hdev
, u8
*rdesc
,
660 *rsize
= sizeof(motion_rdesc
);
664 static u8
*ps3remote_fixup(struct hid_device
*hdev
, u8
*rdesc
,
667 *rsize
= sizeof(ps3remote_rdesc
);
668 return ps3remote_rdesc
;
671 static int ps3remote_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
672 struct hid_field
*field
, struct hid_usage
*usage
,
673 unsigned long **bit
, int *max
)
675 unsigned int key
= usage
->hid
& HID_USAGE
;
677 if ((usage
->hid
& HID_USAGE_PAGE
) != HID_UP_BUTTON
)
680 switch (usage
->collection_index
) {
682 if (key
>= ARRAY_SIZE(ps3remote_keymap_joypad_buttons
))
685 key
= ps3remote_keymap_joypad_buttons
[key
];
690 if (key
>= ARRAY_SIZE(ps3remote_keymap_remote_buttons
))
693 key
= ps3remote_keymap_remote_buttons
[key
];
701 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
705 static int navigation_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
706 struct hid_field
*field
, struct hid_usage
*usage
,
707 unsigned long **bit
, int *max
)
709 if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_BUTTON
) {
710 unsigned int key
= usage
->hid
& HID_USAGE
;
712 if (key
>= ARRAY_SIZE(sixaxis_keymap
))
715 key
= navigation_keymap
[key
];
719 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
721 } else if (usage
->hid
== HID_GD_POINTER
) {
722 /* See comment in sixaxis_mapping, basically the L2 (and R2)
723 * triggers are reported through GD Pointer.
724 * In addition we ignore any analog button 'axes' and only
725 * support digital buttons.
727 switch (usage
->usage_index
) {
729 usage
->hid
= HID_GD_Z
;
735 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, usage
->hid
& 0xf);
737 } else if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_GENDESK
) {
738 unsigned int abs
= usage
->hid
& HID_USAGE
;
740 if (abs
>= ARRAY_SIZE(navigation_absmap
))
743 abs
= navigation_absmap
[abs
];
745 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, abs
);
753 static int sixaxis_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
754 struct hid_field
*field
, struct hid_usage
*usage
,
755 unsigned long **bit
, int *max
)
757 if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_BUTTON
) {
758 unsigned int key
= usage
->hid
& HID_USAGE
;
760 if (key
>= ARRAY_SIZE(sixaxis_keymap
))
763 key
= sixaxis_keymap
[key
];
764 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
766 } else if (usage
->hid
== HID_GD_POINTER
) {
767 /* The DS3 provides analog values for most buttons and even
768 * for HAT axes through GD Pointer. L2 and R2 are reported
769 * among these as well instead of as GD Z / RZ. Remap L2
770 * and R2 and ignore other analog 'button axes' as there is
771 * no good way for reporting them.
773 switch (usage
->usage_index
) {
775 usage
->hid
= HID_GD_Z
;
778 usage
->hid
= HID_GD_RZ
;
784 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, usage
->hid
& 0xf);
786 } else if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_GENDESK
) {
787 unsigned int abs
= usage
->hid
& HID_USAGE
;
789 if (abs
>= ARRAY_SIZE(sixaxis_absmap
))
792 abs
= sixaxis_absmap
[abs
];
794 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, abs
);
801 static int ds4_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
802 struct hid_field
*field
, struct hid_usage
*usage
,
803 unsigned long **bit
, int *max
)
805 if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_BUTTON
) {
806 unsigned int key
= usage
->hid
& HID_USAGE
;
808 if (key
>= ARRAY_SIZE(ds4_keymap
))
811 key
= ds4_keymap
[key
];
812 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
814 } else if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_GENDESK
) {
815 unsigned int abs
= usage
->hid
& HID_USAGE
;
817 /* Let the HID parser deal with the HAT. */
818 if (usage
->hid
== HID_GD_HATSWITCH
)
821 if (abs
>= ARRAY_SIZE(ds4_absmap
))
824 abs
= ds4_absmap
[abs
];
825 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, abs
);
832 static u8
*sony_report_fixup(struct hid_device
*hdev
, u8
*rdesc
,
835 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
837 if (sc
->quirks
& (SINO_LITE_CONTROLLER
| FUTUREMAX_DANCE_MAT
))
841 * Some Sony RF receivers wrongly declare the mouse pointer as a
842 * a constant non-data variable.
844 if ((sc
->quirks
& VAIO_RDESC_CONSTANT
) && *rsize
>= 56 &&
845 /* usage page: generic desktop controls */
846 /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */
848 rdesc
[2] == 0x09 && rdesc
[3] == 0x02 &&
849 /* input (usage page for x,y axes): constant, variable, relative */
850 rdesc
[54] == 0x81 && rdesc
[55] == 0x07) {
851 hid_info(hdev
, "Fixing up Sony RF Receiver report descriptor\n");
852 /* input: data, variable, relative */
856 if (sc
->quirks
& MOTION_CONTROLLER
)
857 return motion_fixup(hdev
, rdesc
, rsize
);
859 if (sc
->quirks
& PS3REMOTE
)
860 return ps3remote_fixup(hdev
, rdesc
, rsize
);
865 static void sixaxis_parse_report(struct sony_sc
*sc
, u8
*rd
, int size
)
867 static const u8 sixaxis_battery_capacity
[] = { 0, 1, 25, 50, 75, 100 };
870 u8 cable_state
, battery_capacity
, battery_charging
;
873 * The sixaxis is charging if the battery value is 0xee
874 * and it is fully charged if the value is 0xef.
875 * It does not report the actual level while charging so it
876 * is set to 100% while charging is in progress.
878 offset
= (sc
->quirks
& MOTION_CONTROLLER
) ? 12 : 30;
880 if (rd
[offset
] >= 0xee) {
881 battery_capacity
= 100;
882 battery_charging
= !(rd
[offset
] & 0x01);
885 u8 index
= rd
[offset
] <= 5 ? rd
[offset
] : 5;
886 battery_capacity
= sixaxis_battery_capacity
[index
];
887 battery_charging
= 0;
891 spin_lock_irqsave(&sc
->lock
, flags
);
892 sc
->cable_state
= cable_state
;
893 sc
->battery_capacity
= battery_capacity
;
894 sc
->battery_charging
= battery_charging
;
895 spin_unlock_irqrestore(&sc
->lock
, flags
);
897 if (sc
->quirks
& SIXAXIS_CONTROLLER
) {
900 offset
= SIXAXIS_INPUT_REPORT_ACC_X_OFFSET
;
901 val
= ((rd
[offset
+1] << 8) | rd
[offset
]) - 511;
902 input_report_abs(sc
->sensor_dev
, ABS_X
, val
);
904 /* Y and Z are swapped and inversed */
905 val
= 511 - ((rd
[offset
+5] << 8) | rd
[offset
+4]);
906 input_report_abs(sc
->sensor_dev
, ABS_Y
, val
);
908 val
= 511 - ((rd
[offset
+3] << 8) | rd
[offset
+2]);
909 input_report_abs(sc
->sensor_dev
, ABS_Z
, val
);
911 input_sync(sc
->sensor_dev
);
915 static void dualshock4_parse_report(struct sony_sc
*sc
, u8
*rd
, int size
)
917 struct hid_input
*hidinput
= list_entry(sc
->hdev
->inputs
.next
,
918 struct hid_input
, list
);
919 struct input_dev
*input_dev
= hidinput
->input
;
921 int n
, m
, offset
, num_touch_data
, max_touch_data
;
922 u8 cable_state
, battery_capacity
, battery_charging
;
925 /* When using Bluetooth the header is 2 bytes longer, so skip these. */
926 int data_offset
= (sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) ? 2 : 0;
928 /* Second bit of third button byte is for the touchpad button. */
929 offset
= data_offset
+ DS4_INPUT_REPORT_BUTTON_OFFSET
;
930 input_report_key(sc
->touchpad
, BTN_LEFT
, rd
[offset
+2] & 0x2);
933 * The default behavior of the Dualshock 4 is to send reports using
934 * report type 1 when running over Bluetooth. However, when feature
935 * report 2 is requested during the controller initialization it starts
936 * sending input reports in report 17. Since report 17 is undefined
937 * in the default HID descriptor, the HID layer won't generate events.
938 * While it is possible (and this was done before) to fixup the HID
939 * descriptor to add this mapping, it was better to do this manually.
940 * The reason is there were various pieces software both open and closed
941 * source, relying on the descriptors to be the same across various
942 * operating systems. If the descriptors wouldn't match some
943 * applications e.g. games on Wine would not be able to function due
944 * to different descriptors, which such applications are not parsing.
949 offset
= data_offset
+ DS4_INPUT_REPORT_AXIS_OFFSET
;
950 input_report_abs(input_dev
, ABS_X
, rd
[offset
]);
951 input_report_abs(input_dev
, ABS_Y
, rd
[offset
+1]);
952 input_report_abs(input_dev
, ABS_RX
, rd
[offset
+2]);
953 input_report_abs(input_dev
, ABS_RY
, rd
[offset
+3]);
955 value
= rd
[offset
+4] & 0xf;
957 value
= 8; /* Center 0, 0 */
958 input_report_abs(input_dev
, ABS_HAT0X
, ds4_hat_mapping
[value
].x
);
959 input_report_abs(input_dev
, ABS_HAT0Y
, ds4_hat_mapping
[value
].y
);
961 input_report_key(input_dev
, BTN_WEST
, rd
[offset
+4] & 0x10);
962 input_report_key(input_dev
, BTN_SOUTH
, rd
[offset
+4] & 0x20);
963 input_report_key(input_dev
, BTN_EAST
, rd
[offset
+4] & 0x40);
964 input_report_key(input_dev
, BTN_NORTH
, rd
[offset
+4] & 0x80);
966 input_report_key(input_dev
, BTN_TL
, rd
[offset
+5] & 0x1);
967 input_report_key(input_dev
, BTN_TR
, rd
[offset
+5] & 0x2);
968 input_report_key(input_dev
, BTN_TL2
, rd
[offset
+5] & 0x4);
969 input_report_key(input_dev
, BTN_TR2
, rd
[offset
+5] & 0x8);
970 input_report_key(input_dev
, BTN_SELECT
, rd
[offset
+5] & 0x10);
971 input_report_key(input_dev
, BTN_START
, rd
[offset
+5] & 0x20);
972 input_report_key(input_dev
, BTN_THUMBL
, rd
[offset
+5] & 0x40);
973 input_report_key(input_dev
, BTN_THUMBR
, rd
[offset
+5] & 0x80);
975 input_report_key(input_dev
, BTN_MODE
, rd
[offset
+6] & 0x1);
977 input_report_abs(input_dev
, ABS_Z
, rd
[offset
+7]);
978 input_report_abs(input_dev
, ABS_RZ
, rd
[offset
+8]);
980 input_sync(input_dev
);
983 /* Convert timestamp (in 5.33us unit) to timestamp_us */
984 offset
= data_offset
+ DS4_INPUT_REPORT_TIMESTAMP_OFFSET
;
985 timestamp
= get_unaligned_le16(&rd
[offset
]);
986 if (!sc
->timestamp_initialized
) {
987 sc
->timestamp_us
= ((unsigned int)timestamp
* 16) / 3;
988 sc
->timestamp_initialized
= true;
992 if (sc
->prev_timestamp
> timestamp
)
993 delta
= (U16_MAX
- sc
->prev_timestamp
+ timestamp
+ 1);
995 delta
= timestamp
- sc
->prev_timestamp
;
996 sc
->timestamp_us
+= (delta
* 16) / 3;
998 sc
->prev_timestamp
= timestamp
;
999 input_event(sc
->sensor_dev
, EV_MSC
, MSC_TIMESTAMP
, sc
->timestamp_us
);
1001 offset
= data_offset
+ DS4_INPUT_REPORT_GYRO_X_OFFSET
;
1002 for (n
= 0; n
< 6; n
++) {
1003 /* Store data in int for more precision during mult_frac. */
1004 int raw_data
= (short)((rd
[offset
+1] << 8) | rd
[offset
]);
1005 struct ds4_calibration_data
*calib
= &sc
->ds4_calib_data
[n
];
1007 /* High precision is needed during calibration, but the
1008 * calibrated values are within 32-bit.
1009 * Note: we swap numerator 'x' and 'numer' in mult_frac for
1010 * precision reasons so we don't need 64-bit.
1012 int calib_data
= mult_frac(calib
->sens_numer
,
1013 raw_data
- calib
->bias
,
1016 input_report_abs(sc
->sensor_dev
, calib
->abs_code
, calib_data
);
1019 input_sync(sc
->sensor_dev
);
1022 * The lower 4 bits of byte 30 (or 32 for BT) contain the battery level
1023 * and the 5th bit contains the USB cable state.
1025 offset
= data_offset
+ DS4_INPUT_REPORT_BATTERY_OFFSET
;
1026 cable_state
= (rd
[offset
] >> 4) & 0x01;
1027 battery_capacity
= rd
[offset
] & 0x0F;
1030 * When a USB power source is connected the battery level ranges from
1031 * 0 to 10, and when running on battery power it ranges from 0 to 9.
1032 * A battery level above 10 when plugged in means charge completed.
1034 if (!cable_state
|| battery_capacity
> 10)
1035 battery_charging
= 0;
1037 battery_charging
= 1;
1041 if (battery_capacity
> 10)
1042 battery_capacity
= 10;
1044 battery_capacity
*= 10;
1046 spin_lock_irqsave(&sc
->lock
, flags
);
1047 sc
->cable_state
= cable_state
;
1048 sc
->battery_capacity
= battery_capacity
;
1049 sc
->battery_charging
= battery_charging
;
1050 spin_unlock_irqrestore(&sc
->lock
, flags
);
1053 * The Dualshock 4 multi-touch trackpad data starts at offset 33 on USB
1054 * and 35 on Bluetooth.
1055 * The first byte indicates the number of touch data in the report.
1056 * Trackpad data starts 2 bytes later (e.g. 35 for USB).
1058 offset
= data_offset
+ DS4_INPUT_REPORT_TOUCHPAD_OFFSET
;
1059 max_touch_data
= (sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) ? 4 : 3;
1060 if (rd
[offset
] > 0 && rd
[offset
] <= max_touch_data
)
1061 num_touch_data
= rd
[offset
];
1066 for (m
= 0; m
< num_touch_data
; m
++) {
1067 /* Skip past timestamp */
1071 * The first 7 bits of the first byte is a counter and bit 8 is
1072 * a touch indicator that is 0 when pressed and 1 when not
1074 * The next 3 bytes are two 12 bit touch coordinates, X and Y.
1075 * The data for the second touch is in the same format and
1076 * immediately follows the data for the first.
1078 for (n
= 0; n
< 2; n
++) {
1082 x
= rd
[offset
+1] | ((rd
[offset
+2] & 0xF) << 8);
1083 y
= ((rd
[offset
+2] & 0xF0) >> 4) | (rd
[offset
+3] << 4);
1085 active
= !(rd
[offset
] >> 7);
1086 input_mt_slot(sc
->touchpad
, n
);
1087 input_mt_report_slot_state(sc
->touchpad
, MT_TOOL_FINGER
, active
);
1090 input_report_abs(sc
->touchpad
, ABS_MT_POSITION_X
, x
);
1091 input_report_abs(sc
->touchpad
, ABS_MT_POSITION_Y
, y
);
1096 input_mt_sync_frame(sc
->touchpad
);
1097 input_sync(sc
->touchpad
);
1101 static int sony_raw_event(struct hid_device
*hdev
, struct hid_report
*report
,
1104 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
1107 * Sixaxis HID report has acclerometers/gyro with MSByte first, this
1108 * has to be BYTE_SWAPPED before passing up to joystick interface
1110 if ((sc
->quirks
& SIXAXIS_CONTROLLER
) && rd
[0] == 0x01 && size
== 49) {
1112 * When connected via Bluetooth the Sixaxis occasionally sends
1113 * a report with the second byte 0xff and the rest zeroed.
1115 * This report does not reflect the actual state of the
1116 * controller must be ignored to avoid generating false input
1122 swap(rd
[41], rd
[42]);
1123 swap(rd
[43], rd
[44]);
1124 swap(rd
[45], rd
[46]);
1125 swap(rd
[47], rd
[48]);
1127 sixaxis_parse_report(sc
, rd
, size
);
1128 } else if ((sc
->quirks
& MOTION_CONTROLLER_BT
) && rd
[0] == 0x01 && size
== 49) {
1129 sixaxis_parse_report(sc
, rd
, size
);
1130 } else if ((sc
->quirks
& NAVIGATION_CONTROLLER
) && rd
[0] == 0x01 &&
1132 sixaxis_parse_report(sc
, rd
, size
);
1133 } else if ((sc
->quirks
& DUALSHOCK4_CONTROLLER_USB
) && rd
[0] == 0x01 &&
1135 dualshock4_parse_report(sc
, rd
, size
);
1136 } else if (((sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) && rd
[0] == 0x11 &&
1143 crc
= crc32_le(0xFFFFFFFF, &bthdr
, 1);
1144 crc
= ~crc32_le(crc
, rd
, DS4_INPUT_REPORT_0x11_SIZE
-4);
1145 report_crc
= get_unaligned_le32(&rd
[DS4_INPUT_REPORT_0x11_SIZE
-4]);
1146 if (crc
!= report_crc
) {
1147 hid_dbg(sc
->hdev
, "DualShock 4 input report's CRC check failed, received crc 0x%0x != 0x%0x\n",
1152 dualshock4_parse_report(sc
, rd
, size
);
1153 } else if ((sc
->quirks
& DUALSHOCK4_DONGLE
) && rd
[0] == 0x01 &&
1155 unsigned long flags
;
1156 enum ds4_dongle_state dongle_state
;
1159 * In the case of a DS4 USB dongle, bit[2] of byte 31 indicates
1160 * if a DS4 is actually connected (indicated by '0').
1161 * For non-dongle, this bit is always 0 (connected).
1163 bool connected
= (rd
[31] & 0x04) ? false : true;
1165 spin_lock_irqsave(&sc
->lock
, flags
);
1166 dongle_state
= sc
->ds4_dongle_state
;
1167 spin_unlock_irqrestore(&sc
->lock
, flags
);
1170 * The dongle always sends input reports even when no
1171 * DS4 is attached. When a DS4 is connected, we need to
1172 * obtain calibration data before we can use it.
1173 * The code below tracks dongle state and kicks of
1174 * calibration when needed and only allows us to process
1175 * input if a DS4 is actually connected.
1177 if (dongle_state
== DONGLE_DISCONNECTED
&& connected
) {
1178 hid_info(sc
->hdev
, "DualShock 4 USB dongle: controller connected\n");
1181 spin_lock_irqsave(&sc
->lock
, flags
);
1182 sc
->ds4_dongle_state
= DONGLE_CALIBRATING
;
1183 spin_unlock_irqrestore(&sc
->lock
, flags
);
1185 sony_schedule_work(sc
, SONY_WORKER_HOTPLUG
);
1187 /* Don't process the report since we don't have
1188 * calibration data, but let hidraw have it anyway.
1191 } else if ((dongle_state
== DONGLE_CONNECTED
||
1192 dongle_state
== DONGLE_DISABLED
) && !connected
) {
1193 hid_info(sc
->hdev
, "DualShock 4 USB dongle: controller disconnected\n");
1195 spin_lock_irqsave(&sc
->lock
, flags
);
1196 sc
->ds4_dongle_state
= DONGLE_DISCONNECTED
;
1197 spin_unlock_irqrestore(&sc
->lock
, flags
);
1199 /* Return 0, so hidraw can get the report. */
1201 } else if (dongle_state
== DONGLE_CALIBRATING
||
1202 dongle_state
== DONGLE_DISABLED
||
1203 dongle_state
== DONGLE_DISCONNECTED
) {
1204 /* Return 0, so hidraw can get the report. */
1208 dualshock4_parse_report(sc
, rd
, size
);
1211 if (sc
->defer_initialization
) {
1212 sc
->defer_initialization
= 0;
1213 sony_schedule_work(sc
, SONY_WORKER_STATE
);
1219 static int sony_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
1220 struct hid_field
*field
, struct hid_usage
*usage
,
1221 unsigned long **bit
, int *max
)
1223 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
1225 if (sc
->quirks
& BUZZ_CONTROLLER
) {
1226 unsigned int key
= usage
->hid
& HID_USAGE
;
1228 if ((usage
->hid
& HID_USAGE_PAGE
) != HID_UP_BUTTON
)
1231 switch (usage
->collection_index
) {
1233 if (key
>= ARRAY_SIZE(buzz_keymap
))
1236 key
= buzz_keymap
[key
];
1244 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
1248 if (sc
->quirks
& PS3REMOTE
)
1249 return ps3remote_mapping(hdev
, hi
, field
, usage
, bit
, max
);
1251 if (sc
->quirks
& NAVIGATION_CONTROLLER
)
1252 return navigation_mapping(hdev
, hi
, field
, usage
, bit
, max
);
1254 if (sc
->quirks
& SIXAXIS_CONTROLLER
)
1255 return sixaxis_mapping(hdev
, hi
, field
, usage
, bit
, max
);
1257 if (sc
->quirks
& DUALSHOCK4_CONTROLLER
)
1258 return ds4_mapping(hdev
, hi
, field
, usage
, bit
, max
);
1261 /* Let hid-core decide for the others */
1265 static int sony_register_touchpad(struct sony_sc
*sc
, int touch_count
,
1272 sc
->touchpad
= input_allocate_device();
1276 input_set_drvdata(sc
->touchpad
, sc
);
1277 sc
->touchpad
->dev
.parent
= &sc
->hdev
->dev
;
1278 sc
->touchpad
->phys
= sc
->hdev
->phys
;
1279 sc
->touchpad
->uniq
= sc
->hdev
->uniq
;
1280 sc
->touchpad
->id
.bustype
= sc
->hdev
->bus
;
1281 sc
->touchpad
->id
.vendor
= sc
->hdev
->vendor
;
1282 sc
->touchpad
->id
.product
= sc
->hdev
->product
;
1283 sc
->touchpad
->id
.version
= sc
->hdev
->version
;
1285 /* Append a suffix to the controller name as there are various
1286 * DS4 compatible non-Sony devices with different names.
1288 name_sz
= strlen(sc
->hdev
->name
) + sizeof(DS4_TOUCHPAD_SUFFIX
);
1289 name
= kzalloc(name_sz
, GFP_KERNEL
);
1294 snprintf(name
, name_sz
, "%s" DS4_TOUCHPAD_SUFFIX
, sc
->hdev
->name
);
1295 sc
->touchpad
->name
= name
;
1297 ret
= input_mt_init_slots(sc
->touchpad
, touch_count
, INPUT_MT_POINTER
);
1301 /* We map the button underneath the touchpad to BTN_LEFT. */
1302 __set_bit(EV_KEY
, sc
->touchpad
->evbit
);
1303 __set_bit(BTN_LEFT
, sc
->touchpad
->keybit
);
1304 __set_bit(INPUT_PROP_BUTTONPAD
, sc
->touchpad
->propbit
);
1306 input_set_abs_params(sc
->touchpad
, ABS_MT_POSITION_X
, 0, w
, 0, 0);
1307 input_set_abs_params(sc
->touchpad
, ABS_MT_POSITION_Y
, 0, h
, 0, 0);
1309 ret
= input_register_device(sc
->touchpad
);
1316 kfree(sc
->touchpad
->name
);
1317 sc
->touchpad
->name
= NULL
;
1319 input_free_device(sc
->touchpad
);
1320 sc
->touchpad
= NULL
;
1325 static void sony_unregister_touchpad(struct sony_sc
*sc
)
1330 kfree(sc
->touchpad
->name
);
1331 sc
->touchpad
->name
= NULL
;
1333 input_unregister_device(sc
->touchpad
);
1334 sc
->touchpad
= NULL
;
1337 static int sony_register_sensors(struct sony_sc
*sc
)
1344 sc
->sensor_dev
= input_allocate_device();
1345 if (!sc
->sensor_dev
)
1348 input_set_drvdata(sc
->sensor_dev
, sc
);
1349 sc
->sensor_dev
->dev
.parent
= &sc
->hdev
->dev
;
1350 sc
->sensor_dev
->phys
= sc
->hdev
->phys
;
1351 sc
->sensor_dev
->uniq
= sc
->hdev
->uniq
;
1352 sc
->sensor_dev
->id
.bustype
= sc
->hdev
->bus
;
1353 sc
->sensor_dev
->id
.vendor
= sc
->hdev
->vendor
;
1354 sc
->sensor_dev
->id
.product
= sc
->hdev
->product
;
1355 sc
->sensor_dev
->id
.version
= sc
->hdev
->version
;
1357 /* Append a suffix to the controller name as there are various
1358 * DS4 compatible non-Sony devices with different names.
1360 name_sz
= strlen(sc
->hdev
->name
) + sizeof(SENSOR_SUFFIX
);
1361 name
= kzalloc(name_sz
, GFP_KERNEL
);
1366 snprintf(name
, name_sz
, "%s" SENSOR_SUFFIX
, sc
->hdev
->name
);
1367 sc
->sensor_dev
->name
= name
;
1369 if (sc
->quirks
& SIXAXIS_CONTROLLER
) {
1370 /* For the DS3 we only support the accelerometer, which works
1371 * quite well even without calibration. The device also has
1372 * a 1-axis gyro, but it is very difficult to manage from within
1373 * the driver even to get data, the sensor is inaccurate and
1374 * the behavior is very different between hardware revisions.
1376 input_set_abs_params(sc
->sensor_dev
, ABS_X
, -512, 511, 4, 0);
1377 input_set_abs_params(sc
->sensor_dev
, ABS_Y
, -512, 511, 4, 0);
1378 input_set_abs_params(sc
->sensor_dev
, ABS_Z
, -512, 511, 4, 0);
1379 input_abs_set_res(sc
->sensor_dev
, ABS_X
, SIXAXIS_ACC_RES_PER_G
);
1380 input_abs_set_res(sc
->sensor_dev
, ABS_Y
, SIXAXIS_ACC_RES_PER_G
);
1381 input_abs_set_res(sc
->sensor_dev
, ABS_Z
, SIXAXIS_ACC_RES_PER_G
);
1382 } else if (sc
->quirks
& DUALSHOCK4_CONTROLLER
) {
1383 range
= DS4_ACC_RES_PER_G
*4;
1384 input_set_abs_params(sc
->sensor_dev
, ABS_X
, -range
, range
, 16, 0);
1385 input_set_abs_params(sc
->sensor_dev
, ABS_Y
, -range
, range
, 16, 0);
1386 input_set_abs_params(sc
->sensor_dev
, ABS_Z
, -range
, range
, 16, 0);
1387 input_abs_set_res(sc
->sensor_dev
, ABS_X
, DS4_ACC_RES_PER_G
);
1388 input_abs_set_res(sc
->sensor_dev
, ABS_Y
, DS4_ACC_RES_PER_G
);
1389 input_abs_set_res(sc
->sensor_dev
, ABS_Z
, DS4_ACC_RES_PER_G
);
1391 range
= DS4_GYRO_RES_PER_DEG_S
*2048;
1392 input_set_abs_params(sc
->sensor_dev
, ABS_RX
, -range
, range
, 16, 0);
1393 input_set_abs_params(sc
->sensor_dev
, ABS_RY
, -range
, range
, 16, 0);
1394 input_set_abs_params(sc
->sensor_dev
, ABS_RZ
, -range
, range
, 16, 0);
1395 input_abs_set_res(sc
->sensor_dev
, ABS_RX
, DS4_GYRO_RES_PER_DEG_S
);
1396 input_abs_set_res(sc
->sensor_dev
, ABS_RY
, DS4_GYRO_RES_PER_DEG_S
);
1397 input_abs_set_res(sc
->sensor_dev
, ABS_RZ
, DS4_GYRO_RES_PER_DEG_S
);
1399 __set_bit(EV_MSC
, sc
->sensor_dev
->evbit
);
1400 __set_bit(MSC_TIMESTAMP
, sc
->sensor_dev
->mscbit
);
1403 __set_bit(INPUT_PROP_ACCELEROMETER
, sc
->sensor_dev
->propbit
);
1405 ret
= input_register_device(sc
->sensor_dev
);
1412 kfree(sc
->sensor_dev
->name
);
1413 sc
->sensor_dev
->name
= NULL
;
1415 input_free_device(sc
->sensor_dev
);
1416 sc
->sensor_dev
= NULL
;
1421 static void sony_unregister_sensors(struct sony_sc
*sc
)
1423 if (!sc
->sensor_dev
)
1426 kfree(sc
->sensor_dev
->name
);
1427 sc
->sensor_dev
->name
= NULL
;
1429 input_unregister_device(sc
->sensor_dev
);
1430 sc
->sensor_dev
= NULL
;
1435 * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
1436 * to "operational". Without this, the ps3 controller will not report any
1439 static int sixaxis_set_operational_usb(struct hid_device
*hdev
)
1441 const int buf_size
=
1442 max(SIXAXIS_REPORT_0xF2_SIZE
, SIXAXIS_REPORT_0xF5_SIZE
);
1446 buf
= kmalloc(buf_size
, GFP_KERNEL
);
1450 ret
= hid_hw_raw_request(hdev
, 0xf2, buf
, SIXAXIS_REPORT_0xF2_SIZE
,
1451 HID_FEATURE_REPORT
, HID_REQ_GET_REPORT
);
1453 hid_err(hdev
, "can't set operational mode: step 1\n");
1458 * Some compatible controllers like the Speedlink Strike FX and
1459 * Gasia need another query plus an USB interrupt to get operational.
1461 ret
= hid_hw_raw_request(hdev
, 0xf5, buf
, SIXAXIS_REPORT_0xF5_SIZE
,
1462 HID_FEATURE_REPORT
, HID_REQ_GET_REPORT
);
1464 hid_err(hdev
, "can't set operational mode: step 2\n");
1469 * But the USB interrupt would cause SHANWAN controllers to
1470 * start rumbling non-stop.
1472 if (strcmp(hdev
->name
, "SHANWAN PS3 GamePad")) {
1473 ret
= hid_hw_output_report(hdev
, buf
, 1);
1475 hid_info(hdev
, "can't set operational mode: step 3, ignoring\n");
1486 static int sixaxis_set_operational_bt(struct hid_device
*hdev
)
1488 static const u8 report
[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
1492 buf
= kmemdup(report
, sizeof(report
), GFP_KERNEL
);
1496 ret
= hid_hw_raw_request(hdev
, buf
[0], buf
, sizeof(report
),
1497 HID_FEATURE_REPORT
, HID_REQ_SET_REPORT
);
1505 * Request DS4 calibration data for the motion sensors.
1506 * For Bluetooth this also affects the operating mode (see below).
1508 static int dualshock4_get_calibration_data(struct sony_sc
*sc
)
1512 short gyro_pitch_bias
, gyro_pitch_plus
, gyro_pitch_minus
;
1513 short gyro_yaw_bias
, gyro_yaw_plus
, gyro_yaw_minus
;
1514 short gyro_roll_bias
, gyro_roll_plus
, gyro_roll_minus
;
1515 short gyro_speed_plus
, gyro_speed_minus
;
1516 short acc_x_plus
, acc_x_minus
;
1517 short acc_y_plus
, acc_y_minus
;
1518 short acc_z_plus
, acc_z_minus
;
1522 /* For Bluetooth we use a different request, which supports CRC.
1523 * Note: in Bluetooth mode feature report 0x02 also changes the state
1524 * of the controller, so that it sends input reports of type 0x11.
1526 if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
)) {
1527 buf
= kmalloc(DS4_FEATURE_REPORT_0x02_SIZE
, GFP_KERNEL
);
1531 ret
= hid_hw_raw_request(sc
->hdev
, 0x02, buf
,
1532 DS4_FEATURE_REPORT_0x02_SIZE
,
1534 HID_REQ_GET_REPORT
);
1543 buf
= kmalloc(DS4_FEATURE_REPORT_0x05_SIZE
, GFP_KERNEL
);
1547 for (retries
= 0; retries
< 3; retries
++) {
1548 ret
= hid_hw_raw_request(sc
->hdev
, 0x05, buf
,
1549 DS4_FEATURE_REPORT_0x05_SIZE
,
1551 HID_REQ_GET_REPORT
);
1556 crc
= crc32_le(0xFFFFFFFF, &bthdr
, 1);
1557 crc
= ~crc32_le(crc
, buf
, DS4_FEATURE_REPORT_0x05_SIZE
-4);
1558 report_crc
= get_unaligned_le32(&buf
[DS4_FEATURE_REPORT_0x05_SIZE
-4]);
1559 if (crc
!= report_crc
) {
1560 hid_warn(sc
->hdev
, "DualShock 4 calibration report's CRC check failed, received crc 0x%0x != 0x%0x\n",
1563 hid_warn(sc
->hdev
, "Retrying DualShock 4 get calibration report request\n");
1575 gyro_pitch_bias
= get_unaligned_le16(&buf
[1]);
1576 gyro_yaw_bias
= get_unaligned_le16(&buf
[3]);
1577 gyro_roll_bias
= get_unaligned_le16(&buf
[5]);
1578 if (sc
->quirks
& DUALSHOCK4_CONTROLLER_USB
) {
1579 gyro_pitch_plus
= get_unaligned_le16(&buf
[7]);
1580 gyro_pitch_minus
= get_unaligned_le16(&buf
[9]);
1581 gyro_yaw_plus
= get_unaligned_le16(&buf
[11]);
1582 gyro_yaw_minus
= get_unaligned_le16(&buf
[13]);
1583 gyro_roll_plus
= get_unaligned_le16(&buf
[15]);
1584 gyro_roll_minus
= get_unaligned_le16(&buf
[17]);
1587 gyro_pitch_plus
= get_unaligned_le16(&buf
[7]);
1588 gyro_yaw_plus
= get_unaligned_le16(&buf
[9]);
1589 gyro_roll_plus
= get_unaligned_le16(&buf
[11]);
1590 gyro_pitch_minus
= get_unaligned_le16(&buf
[13]);
1591 gyro_yaw_minus
= get_unaligned_le16(&buf
[15]);
1592 gyro_roll_minus
= get_unaligned_le16(&buf
[17]);
1594 gyro_speed_plus
= get_unaligned_le16(&buf
[19]);
1595 gyro_speed_minus
= get_unaligned_le16(&buf
[21]);
1596 acc_x_plus
= get_unaligned_le16(&buf
[23]);
1597 acc_x_minus
= get_unaligned_le16(&buf
[25]);
1598 acc_y_plus
= get_unaligned_le16(&buf
[27]);
1599 acc_y_minus
= get_unaligned_le16(&buf
[29]);
1600 acc_z_plus
= get_unaligned_le16(&buf
[31]);
1601 acc_z_minus
= get_unaligned_le16(&buf
[33]);
1603 /* Set gyroscope calibration and normalization parameters.
1604 * Data values will be normalized to 1/DS4_GYRO_RES_PER_DEG_S degree/s.
1606 speed_2x
= (gyro_speed_plus
+ gyro_speed_minus
);
1607 sc
->ds4_calib_data
[0].abs_code
= ABS_RX
;
1608 sc
->ds4_calib_data
[0].bias
= gyro_pitch_bias
;
1609 sc
->ds4_calib_data
[0].sens_numer
= speed_2x
*DS4_GYRO_RES_PER_DEG_S
;
1610 sc
->ds4_calib_data
[0].sens_denom
= gyro_pitch_plus
- gyro_pitch_minus
;
1612 sc
->ds4_calib_data
[1].abs_code
= ABS_RY
;
1613 sc
->ds4_calib_data
[1].bias
= gyro_yaw_bias
;
1614 sc
->ds4_calib_data
[1].sens_numer
= speed_2x
*DS4_GYRO_RES_PER_DEG_S
;
1615 sc
->ds4_calib_data
[1].sens_denom
= gyro_yaw_plus
- gyro_yaw_minus
;
1617 sc
->ds4_calib_data
[2].abs_code
= ABS_RZ
;
1618 sc
->ds4_calib_data
[2].bias
= gyro_roll_bias
;
1619 sc
->ds4_calib_data
[2].sens_numer
= speed_2x
*DS4_GYRO_RES_PER_DEG_S
;
1620 sc
->ds4_calib_data
[2].sens_denom
= gyro_roll_plus
- gyro_roll_minus
;
1622 /* Set accelerometer calibration and normalization parameters.
1623 * Data values will be normalized to 1/DS4_ACC_RES_PER_G G.
1625 range_2g
= acc_x_plus
- acc_x_minus
;
1626 sc
->ds4_calib_data
[3].abs_code
= ABS_X
;
1627 sc
->ds4_calib_data
[3].bias
= acc_x_plus
- range_2g
/ 2;
1628 sc
->ds4_calib_data
[3].sens_numer
= 2*DS4_ACC_RES_PER_G
;
1629 sc
->ds4_calib_data
[3].sens_denom
= range_2g
;
1631 range_2g
= acc_y_plus
- acc_y_minus
;
1632 sc
->ds4_calib_data
[4].abs_code
= ABS_Y
;
1633 sc
->ds4_calib_data
[4].bias
= acc_y_plus
- range_2g
/ 2;
1634 sc
->ds4_calib_data
[4].sens_numer
= 2*DS4_ACC_RES_PER_G
;
1635 sc
->ds4_calib_data
[4].sens_denom
= range_2g
;
1637 range_2g
= acc_z_plus
- acc_z_minus
;
1638 sc
->ds4_calib_data
[5].abs_code
= ABS_Z
;
1639 sc
->ds4_calib_data
[5].bias
= acc_z_plus
- range_2g
/ 2;
1640 sc
->ds4_calib_data
[5].sens_numer
= 2*DS4_ACC_RES_PER_G
;
1641 sc
->ds4_calib_data
[5].sens_denom
= range_2g
;
1648 static void dualshock4_calibration_work(struct work_struct
*work
)
1650 struct sony_sc
*sc
= container_of(work
, struct sony_sc
, hotplug_worker
);
1651 unsigned long flags
;
1652 enum ds4_dongle_state dongle_state
;
1655 ret
= dualshock4_get_calibration_data(sc
);
1657 /* This call is very unlikely to fail for the dongle. When it
1658 * fails we are probably in a very bad state, so mark the
1659 * dongle as disabled. We will re-enable the dongle if a new
1660 * DS4 hotplug is detect from sony_raw_event as any issues
1661 * are likely resolved then (the dongle is quite stupid).
1663 hid_err(sc
->hdev
, "DualShock 4 USB dongle: calibration failed, disabling device\n");
1664 dongle_state
= DONGLE_DISABLED
;
1666 hid_info(sc
->hdev
, "DualShock 4 USB dongle: calibration completed\n");
1667 dongle_state
= DONGLE_CONNECTED
;
1670 spin_lock_irqsave(&sc
->lock
, flags
);
1671 sc
->ds4_dongle_state
= dongle_state
;
1672 spin_unlock_irqrestore(&sc
->lock
, flags
);
1675 static int dualshock4_get_version_info(struct sony_sc
*sc
)
1680 buf
= kmalloc(DS4_FEATURE_REPORT_0xA3_SIZE
, GFP_KERNEL
);
1684 ret
= hid_hw_raw_request(sc
->hdev
, 0xA3, buf
,
1685 DS4_FEATURE_REPORT_0xA3_SIZE
,
1687 HID_REQ_GET_REPORT
);
1693 sc
->hw_version
= get_unaligned_le16(&buf
[35]);
1694 sc
->fw_version
= get_unaligned_le16(&buf
[41]);
1700 static void sixaxis_set_leds_from_id(struct sony_sc
*sc
)
1702 static const u8 sixaxis_leds
[10][4] = {
1703 { 0x01, 0x00, 0x00, 0x00 },
1704 { 0x00, 0x01, 0x00, 0x00 },
1705 { 0x00, 0x00, 0x01, 0x00 },
1706 { 0x00, 0x00, 0x00, 0x01 },
1707 { 0x01, 0x00, 0x00, 0x01 },
1708 { 0x00, 0x01, 0x00, 0x01 },
1709 { 0x00, 0x00, 0x01, 0x01 },
1710 { 0x01, 0x00, 0x01, 0x01 },
1711 { 0x00, 0x01, 0x01, 0x01 },
1712 { 0x01, 0x01, 0x01, 0x01 }
1715 int id
= sc
->device_id
;
1717 BUILD_BUG_ON(MAX_LEDS
< ARRAY_SIZE(sixaxis_leds
[0]));
1723 memcpy(sc
->led_state
, sixaxis_leds
[id
], sizeof(sixaxis_leds
[id
]));
1726 static void dualshock4_set_leds_from_id(struct sony_sc
*sc
)
1728 /* The first 4 color/index entries match what the PS4 assigns */
1729 static const u8 color_code
[7][3] = {
1730 /* Blue */ { 0x00, 0x00, 0x40 },
1731 /* Red */ { 0x40, 0x00, 0x00 },
1732 /* Green */ { 0x00, 0x40, 0x00 },
1733 /* Pink */ { 0x20, 0x00, 0x20 },
1734 /* Orange */ { 0x02, 0x01, 0x00 },
1735 /* Teal */ { 0x00, 0x01, 0x01 },
1736 /* White */ { 0x01, 0x01, 0x01 }
1739 int id
= sc
->device_id
;
1741 BUILD_BUG_ON(MAX_LEDS
< ARRAY_SIZE(color_code
[0]));
1747 memcpy(sc
->led_state
, color_code
[id
], sizeof(color_code
[id
]));
1750 static void buzz_set_leds(struct sony_sc
*sc
)
1752 struct hid_device
*hdev
= sc
->hdev
;
1753 struct list_head
*report_list
=
1754 &hdev
->report_enum
[HID_OUTPUT_REPORT
].report_list
;
1755 struct hid_report
*report
= list_entry(report_list
->next
,
1756 struct hid_report
, list
);
1757 s32
*value
= report
->field
[0]->value
;
1759 BUILD_BUG_ON(MAX_LEDS
< 4);
1762 value
[1] = sc
->led_state
[0] ? 0xff : 0x00;
1763 value
[2] = sc
->led_state
[1] ? 0xff : 0x00;
1764 value
[3] = sc
->led_state
[2] ? 0xff : 0x00;
1765 value
[4] = sc
->led_state
[3] ? 0xff : 0x00;
1768 hid_hw_request(hdev
, report
, HID_REQ_SET_REPORT
);
1771 static void sony_set_leds(struct sony_sc
*sc
)
1773 if (!(sc
->quirks
& BUZZ_CONTROLLER
))
1774 sony_schedule_work(sc
, SONY_WORKER_STATE
);
1779 static void sony_led_set_brightness(struct led_classdev
*led
,
1780 enum led_brightness value
)
1782 struct device
*dev
= led
->dev
->parent
;
1783 struct hid_device
*hdev
= to_hid_device(dev
);
1784 struct sony_sc
*drv_data
;
1789 drv_data
= hid_get_drvdata(hdev
);
1791 hid_err(hdev
, "No device data\n");
1796 * The Sixaxis on USB will override any LED settings sent to it
1797 * and keep flashing all of the LEDs until the PS button is pressed.
1798 * Updates, even if redundant, must be always be sent to the
1799 * controller to avoid having to toggle the state of an LED just to
1800 * stop the flashing later on.
1802 force_update
= !!(drv_data
->quirks
& SIXAXIS_CONTROLLER_USB
);
1804 for (n
= 0; n
< drv_data
->led_count
; n
++) {
1805 if (led
== drv_data
->leds
[n
] && (force_update
||
1806 (value
!= drv_data
->led_state
[n
] ||
1807 drv_data
->led_delay_on
[n
] ||
1808 drv_data
->led_delay_off
[n
]))) {
1810 drv_data
->led_state
[n
] = value
;
1812 /* Setting the brightness stops the blinking */
1813 drv_data
->led_delay_on
[n
] = 0;
1814 drv_data
->led_delay_off
[n
] = 0;
1816 sony_set_leds(drv_data
);
1822 static enum led_brightness
sony_led_get_brightness(struct led_classdev
*led
)
1824 struct device
*dev
= led
->dev
->parent
;
1825 struct hid_device
*hdev
= to_hid_device(dev
);
1826 struct sony_sc
*drv_data
;
1830 drv_data
= hid_get_drvdata(hdev
);
1832 hid_err(hdev
, "No device data\n");
1836 for (n
= 0; n
< drv_data
->led_count
; n
++) {
1837 if (led
== drv_data
->leds
[n
])
1838 return drv_data
->led_state
[n
];
1844 static int sony_led_blink_set(struct led_classdev
*led
, unsigned long *delay_on
,
1845 unsigned long *delay_off
)
1847 struct device
*dev
= led
->dev
->parent
;
1848 struct hid_device
*hdev
= to_hid_device(dev
);
1849 struct sony_sc
*drv_data
= hid_get_drvdata(hdev
);
1854 hid_err(hdev
, "No device data\n");
1858 /* Max delay is 255 deciseconds or 2550 milliseconds */
1859 if (*delay_on
> 2550)
1861 if (*delay_off
> 2550)
1864 /* Blink at 1 Hz if both values are zero */
1865 if (!*delay_on
&& !*delay_off
)
1866 *delay_on
= *delay_off
= 500;
1868 new_on
= *delay_on
/ 10;
1869 new_off
= *delay_off
/ 10;
1871 for (n
= 0; n
< drv_data
->led_count
; n
++) {
1872 if (led
== drv_data
->leds
[n
])
1876 /* This LED is not registered on this device */
1877 if (n
>= drv_data
->led_count
)
1880 /* Don't schedule work if the values didn't change */
1881 if (new_on
!= drv_data
->led_delay_on
[n
] ||
1882 new_off
!= drv_data
->led_delay_off
[n
]) {
1883 drv_data
->led_delay_on
[n
] = new_on
;
1884 drv_data
->led_delay_off
[n
] = new_off
;
1885 sony_schedule_work(drv_data
, SONY_WORKER_STATE
);
1891 static void sony_leds_remove(struct sony_sc
*sc
)
1893 struct led_classdev
*led
;
1896 BUG_ON(!(sc
->quirks
& SONY_LED_SUPPORT
));
1898 for (n
= 0; n
< sc
->led_count
; n
++) {
1903 led_classdev_unregister(led
);
1910 static int sony_leds_init(struct sony_sc
*sc
)
1912 struct hid_device
*hdev
= sc
->hdev
;
1915 struct led_classdev
*led
;
1919 const char *name_fmt
;
1920 static const char * const ds4_name_str
[] = { "red", "green", "blue",
1922 u8 max_brightness
[MAX_LEDS
] = { [0 ... (MAX_LEDS
- 1)] = 1 };
1923 u8 use_hw_blink
[MAX_LEDS
] = { 0 };
1925 BUG_ON(!(sc
->quirks
& SONY_LED_SUPPORT
));
1927 if (sc
->quirks
& BUZZ_CONTROLLER
) {
1930 name_len
= strlen("::buzz#");
1931 name_fmt
= "%s::buzz%d";
1932 /* Validate expected report characteristics. */
1933 if (!hid_validate_values(hdev
, HID_OUTPUT_REPORT
, 0, 0, 7))
1935 } else if (sc
->quirks
& DUALSHOCK4_CONTROLLER
) {
1936 dualshock4_set_leds_from_id(sc
);
1937 sc
->led_state
[3] = 1;
1939 memset(max_brightness
, 255, 3);
1940 use_hw_blink
[3] = 1;
1944 } else if (sc
->quirks
& MOTION_CONTROLLER
) {
1946 memset(max_brightness
, 255, 3);
1950 } else if (sc
->quirks
& NAVIGATION_CONTROLLER
) {
1951 static const u8 navigation_leds
[4] = {0x01, 0x00, 0x00, 0x00};
1953 memcpy(sc
->led_state
, navigation_leds
, sizeof(navigation_leds
));
1955 memset(use_hw_blink
, 1, 4);
1957 name_len
= strlen("::sony#");
1958 name_fmt
= "%s::sony%d";
1960 sixaxis_set_leds_from_id(sc
);
1962 memset(use_hw_blink
, 1, 4);
1964 name_len
= strlen("::sony#");
1965 name_fmt
= "%s::sony%d";
1969 * Clear LEDs as we have no way of reading their initial state. This is
1970 * only relevant if the driver is loaded after somebody actively set the
1975 name_sz
= strlen(dev_name(&hdev
->dev
)) + name_len
+ 1;
1977 for (n
= 0; n
< sc
->led_count
; n
++) {
1980 name_sz
= strlen(dev_name(&hdev
->dev
)) + strlen(ds4_name_str
[n
]) + 2;
1982 led
= kzalloc(sizeof(struct led_classdev
) + name_sz
, GFP_KERNEL
);
1984 hid_err(hdev
, "Couldn't allocate memory for LED %d\n", n
);
1989 name
= (void *)(&led
[1]);
1991 snprintf(name
, name_sz
, name_fmt
, dev_name(&hdev
->dev
),
1994 snprintf(name
, name_sz
, name_fmt
, dev_name(&hdev
->dev
), n
+ 1);
1996 led
->brightness
= sc
->led_state
[n
];
1997 led
->max_brightness
= max_brightness
[n
];
1998 led
->flags
= LED_CORE_SUSPENDRESUME
;
1999 led
->brightness_get
= sony_led_get_brightness
;
2000 led
->brightness_set
= sony_led_set_brightness
;
2002 if (use_hw_blink
[n
])
2003 led
->blink_set
= sony_led_blink_set
;
2007 ret
= led_classdev_register(&hdev
->dev
, led
);
2009 hid_err(hdev
, "Failed to register LED %d\n", n
);
2019 sony_leds_remove(sc
);
2024 static void sixaxis_send_output_report(struct sony_sc
*sc
)
2026 static const union sixaxis_output_report_01 default_report
= {
2029 0x01, 0xff, 0x00, 0xff, 0x00,
2030 0x00, 0x00, 0x00, 0x00, 0x00,
2031 0xff, 0x27, 0x10, 0x00, 0x32,
2032 0xff, 0x27, 0x10, 0x00, 0x32,
2033 0xff, 0x27, 0x10, 0x00, 0x32,
2034 0xff, 0x27, 0x10, 0x00, 0x32,
2035 0x00, 0x00, 0x00, 0x00, 0x00
2038 struct sixaxis_output_report
*report
=
2039 (struct sixaxis_output_report
*)sc
->output_report_dmabuf
;
2042 /* Initialize the report with default values */
2043 memcpy(report
, &default_report
, sizeof(struct sixaxis_output_report
));
2045 #ifdef CONFIG_SONY_FF
2046 report
->rumble
.right_motor_on
= sc
->right
? 1 : 0;
2047 report
->rumble
.left_motor_force
= sc
->left
;
2050 report
->leds_bitmap
|= sc
->led_state
[0] << 1;
2051 report
->leds_bitmap
|= sc
->led_state
[1] << 2;
2052 report
->leds_bitmap
|= sc
->led_state
[2] << 3;
2053 report
->leds_bitmap
|= sc
->led_state
[3] << 4;
2055 /* Set flag for all leds off, required for 3rd party INTEC controller */
2056 if ((report
->leds_bitmap
& 0x1E) == 0)
2057 report
->leds_bitmap
|= 0x20;
2060 * The LEDs in the report are indexed in reverse order to their
2061 * corresponding light on the controller.
2062 * Index 0 = LED 4, index 1 = LED 3, etc...
2064 * In the case of both delay values being zero (blinking disabled) the
2065 * default report values should be used or the controller LED will be
2068 for (n
= 0; n
< 4; n
++) {
2069 if (sc
->led_delay_on
[n
] || sc
->led_delay_off
[n
]) {
2070 report
->led
[3 - n
].duty_off
= sc
->led_delay_off
[n
];
2071 report
->led
[3 - n
].duty_on
= sc
->led_delay_on
[n
];
2075 hid_hw_raw_request(sc
->hdev
, report
->report_id
, (u8
*)report
,
2076 sizeof(struct sixaxis_output_report
),
2077 HID_OUTPUT_REPORT
, HID_REQ_SET_REPORT
);
2080 static void dualshock4_send_output_report(struct sony_sc
*sc
)
2082 struct hid_device
*hdev
= sc
->hdev
;
2083 u8
*buf
= sc
->output_report_dmabuf
;
2087 * NOTE: The lower 6 bits of buf[1] field of the Bluetooth report
2088 * control the interval at which Dualshock 4 reports data:
2095 if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
)) {
2096 memset(buf
, 0, DS4_OUTPUT_REPORT_0x05_SIZE
);
2098 buf
[1] = 0x07; /* blink + LEDs + motor */
2101 memset(buf
, 0, DS4_OUTPUT_REPORT_0x11_SIZE
);
2103 buf
[1] = 0xC0 /* HID + CRC */ | sc
->ds4_bt_poll_interval
;
2104 buf
[3] = 0x07; /* blink + LEDs + motor */
2108 #ifdef CONFIG_SONY_FF
2109 buf
[offset
++] = sc
->right
;
2110 buf
[offset
++] = sc
->left
;
2115 /* LED 3 is the global control */
2116 if (sc
->led_state
[3]) {
2117 buf
[offset
++] = sc
->led_state
[0];
2118 buf
[offset
++] = sc
->led_state
[1];
2119 buf
[offset
++] = sc
->led_state
[2];
2124 /* If both delay values are zero the DualShock 4 disables blinking. */
2125 buf
[offset
++] = sc
->led_delay_on
[3];
2126 buf
[offset
++] = sc
->led_delay_off
[3];
2128 if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
))
2129 hid_hw_output_report(hdev
, buf
, DS4_OUTPUT_REPORT_0x05_SIZE
);
2131 /* CRC generation */
2135 crc
= crc32_le(0xFFFFFFFF, &bthdr
, 1);
2136 crc
= ~crc32_le(crc
, buf
, DS4_OUTPUT_REPORT_0x11_SIZE
-4);
2137 put_unaligned_le32(crc
, &buf
[74]);
2138 hid_hw_output_report(hdev
, buf
, DS4_OUTPUT_REPORT_0x11_SIZE
);
2142 static void motion_send_output_report(struct sony_sc
*sc
)
2144 struct hid_device
*hdev
= sc
->hdev
;
2145 struct motion_output_report_02
*report
=
2146 (struct motion_output_report_02
*)sc
->output_report_dmabuf
;
2148 memset(report
, 0, MOTION_REPORT_0x02_SIZE
);
2150 report
->type
= 0x02; /* set leds */
2151 report
->r
= sc
->led_state
[0];
2152 report
->g
= sc
->led_state
[1];
2153 report
->b
= sc
->led_state
[2];
2155 #ifdef CONFIG_SONY_FF
2156 report
->rumble
= max(sc
->right
, sc
->left
);
2159 hid_hw_output_report(hdev
, (u8
*)report
, MOTION_REPORT_0x02_SIZE
);
2162 static inline void sony_send_output_report(struct sony_sc
*sc
)
2164 if (sc
->send_output_report
)
2165 sc
->send_output_report(sc
);
2168 static void sony_state_worker(struct work_struct
*work
)
2170 struct sony_sc
*sc
= container_of(work
, struct sony_sc
, state_worker
);
2172 sc
->send_output_report(sc
);
2175 static int sony_allocate_output_report(struct sony_sc
*sc
)
2177 if ((sc
->quirks
& SIXAXIS_CONTROLLER
) ||
2178 (sc
->quirks
& NAVIGATION_CONTROLLER
))
2179 sc
->output_report_dmabuf
=
2180 kmalloc(sizeof(union sixaxis_output_report_01
),
2182 else if (sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
)
2183 sc
->output_report_dmabuf
= kmalloc(DS4_OUTPUT_REPORT_0x11_SIZE
,
2185 else if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
))
2186 sc
->output_report_dmabuf
= kmalloc(DS4_OUTPUT_REPORT_0x05_SIZE
,
2188 else if (sc
->quirks
& MOTION_CONTROLLER
)
2189 sc
->output_report_dmabuf
= kmalloc(MOTION_REPORT_0x02_SIZE
,
2194 if (!sc
->output_report_dmabuf
)
2200 #ifdef CONFIG_SONY_FF
2201 static int sony_play_effect(struct input_dev
*dev
, void *data
,
2202 struct ff_effect
*effect
)
2204 struct hid_device
*hid
= input_get_drvdata(dev
);
2205 struct sony_sc
*sc
= hid_get_drvdata(hid
);
2207 if (effect
->type
!= FF_RUMBLE
)
2210 sc
->left
= effect
->u
.rumble
.strong_magnitude
/ 256;
2211 sc
->right
= effect
->u
.rumble
.weak_magnitude
/ 256;
2213 sony_schedule_work(sc
, SONY_WORKER_STATE
);
2217 static int sony_init_ff(struct sony_sc
*sc
)
2219 struct hid_input
*hidinput
= list_entry(sc
->hdev
->inputs
.next
,
2220 struct hid_input
, list
);
2221 struct input_dev
*input_dev
= hidinput
->input
;
2223 input_set_capability(input_dev
, EV_FF
, FF_RUMBLE
);
2224 return input_ff_create_memless(input_dev
, NULL
, sony_play_effect
);
2228 static int sony_init_ff(struct sony_sc
*sc
)
2235 static int sony_battery_get_property(struct power_supply
*psy
,
2236 enum power_supply_property psp
,
2237 union power_supply_propval
*val
)
2239 struct sony_sc
*sc
= power_supply_get_drvdata(psy
);
2240 unsigned long flags
;
2242 u8 battery_charging
, battery_capacity
, cable_state
;
2244 spin_lock_irqsave(&sc
->lock
, flags
);
2245 battery_charging
= sc
->battery_charging
;
2246 battery_capacity
= sc
->battery_capacity
;
2247 cable_state
= sc
->cable_state
;
2248 spin_unlock_irqrestore(&sc
->lock
, flags
);
2251 case POWER_SUPPLY_PROP_PRESENT
:
2254 case POWER_SUPPLY_PROP_SCOPE
:
2255 val
->intval
= POWER_SUPPLY_SCOPE_DEVICE
;
2257 case POWER_SUPPLY_PROP_CAPACITY
:
2258 val
->intval
= battery_capacity
;
2260 case POWER_SUPPLY_PROP_STATUS
:
2261 if (battery_charging
)
2262 val
->intval
= POWER_SUPPLY_STATUS_CHARGING
;
2264 if (battery_capacity
== 100 && cable_state
)
2265 val
->intval
= POWER_SUPPLY_STATUS_FULL
;
2267 val
->intval
= POWER_SUPPLY_STATUS_DISCHARGING
;
2276 static int sony_battery_probe(struct sony_sc
*sc
, int append_dev_id
)
2278 const char *battery_str_fmt
= append_dev_id
?
2279 "sony_controller_battery_%pMR_%i" :
2280 "sony_controller_battery_%pMR";
2281 struct power_supply_config psy_cfg
= { .drv_data
= sc
, };
2282 struct hid_device
*hdev
= sc
->hdev
;
2286 * Set the default battery level to 100% to avoid low battery warnings
2287 * if the battery is polled before the first device report is received.
2289 sc
->battery_capacity
= 100;
2291 sc
->battery_desc
.properties
= sony_battery_props
;
2292 sc
->battery_desc
.num_properties
= ARRAY_SIZE(sony_battery_props
);
2293 sc
->battery_desc
.get_property
= sony_battery_get_property
;
2294 sc
->battery_desc
.type
= POWER_SUPPLY_TYPE_BATTERY
;
2295 sc
->battery_desc
.use_for_apm
= 0;
2296 sc
->battery_desc
.name
= kasprintf(GFP_KERNEL
, battery_str_fmt
,
2297 sc
->mac_address
, sc
->device_id
);
2298 if (!sc
->battery_desc
.name
)
2301 sc
->battery
= power_supply_register(&hdev
->dev
, &sc
->battery_desc
,
2303 if (IS_ERR(sc
->battery
)) {
2304 ret
= PTR_ERR(sc
->battery
);
2305 hid_err(hdev
, "Unable to register battery device\n");
2309 power_supply_powers(sc
->battery
, &hdev
->dev
);
2313 kfree(sc
->battery_desc
.name
);
2314 sc
->battery_desc
.name
= NULL
;
2318 static void sony_battery_remove(struct sony_sc
*sc
)
2320 if (!sc
->battery_desc
.name
)
2323 power_supply_unregister(sc
->battery
);
2324 kfree(sc
->battery_desc
.name
);
2325 sc
->battery_desc
.name
= NULL
;
2329 * If a controller is plugged in via USB while already connected via Bluetooth
2330 * it will show up as two devices. A global list of connected controllers and
2331 * their MAC addresses is maintained to ensure that a device is only connected
2334 * Some USB-only devices masquerade as Sixaxis controllers and all have the
2335 * same dummy Bluetooth address, so a comparison of the connection type is
2336 * required. Devices are only rejected in the case where two devices have
2337 * matching Bluetooth addresses on different bus types.
2339 static inline int sony_compare_connection_type(struct sony_sc
*sc0
,
2340 struct sony_sc
*sc1
)
2342 const int sc0_not_bt
= !(sc0
->quirks
& SONY_BT_DEVICE
);
2343 const int sc1_not_bt
= !(sc1
->quirks
& SONY_BT_DEVICE
);
2345 return sc0_not_bt
== sc1_not_bt
;
2348 static int sony_check_add_dev_list(struct sony_sc
*sc
)
2350 struct sony_sc
*entry
;
2351 unsigned long flags
;
2354 spin_lock_irqsave(&sony_dev_list_lock
, flags
);
2356 list_for_each_entry(entry
, &sony_device_list
, list_node
) {
2357 ret
= memcmp(sc
->mac_address
, entry
->mac_address
,
2358 sizeof(sc
->mac_address
));
2360 if (sony_compare_connection_type(sc
, entry
)) {
2365 "controller with MAC address %pMR already connected\n",
2373 list_add(&(sc
->list_node
), &sony_device_list
);
2376 spin_unlock_irqrestore(&sony_dev_list_lock
, flags
);
2380 static void sony_remove_dev_list(struct sony_sc
*sc
)
2382 unsigned long flags
;
2384 if (sc
->list_node
.next
) {
2385 spin_lock_irqsave(&sony_dev_list_lock
, flags
);
2386 list_del(&(sc
->list_node
));
2387 spin_unlock_irqrestore(&sony_dev_list_lock
, flags
);
2391 static int sony_get_bt_devaddr(struct sony_sc
*sc
)
2395 /* HIDP stores the device MAC address as a string in the uniq field. */
2396 ret
= strlen(sc
->hdev
->uniq
);
2400 ret
= sscanf(sc
->hdev
->uniq
,
2401 "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
2402 &sc
->mac_address
[5], &sc
->mac_address
[4], &sc
->mac_address
[3],
2403 &sc
->mac_address
[2], &sc
->mac_address
[1], &sc
->mac_address
[0]);
2411 static int sony_check_add(struct sony_sc
*sc
)
2416 if ((sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) ||
2417 (sc
->quirks
& MOTION_CONTROLLER_BT
) ||
2418 (sc
->quirks
& NAVIGATION_CONTROLLER_BT
) ||
2419 (sc
->quirks
& SIXAXIS_CONTROLLER_BT
)) {
2421 * sony_get_bt_devaddr() attempts to parse the Bluetooth MAC
2422 * address from the uniq string where HIDP stores it.
2423 * As uniq cannot be guaranteed to be a MAC address in all cases
2424 * a failure of this function should not prevent the connection.
2426 if (sony_get_bt_devaddr(sc
) < 0) {
2427 hid_warn(sc
->hdev
, "UNIQ does not contain a MAC address; duplicate check skipped\n");
2430 } else if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
)) {
2431 buf
= kmalloc(DS4_FEATURE_REPORT_0x81_SIZE
, GFP_KERNEL
);
2436 * The MAC address of a DS4 controller connected via USB can be
2437 * retrieved with feature report 0x81. The address begins at
2440 ret
= hid_hw_raw_request(sc
->hdev
, 0x81, buf
,
2441 DS4_FEATURE_REPORT_0x81_SIZE
, HID_FEATURE_REPORT
,
2442 HID_REQ_GET_REPORT
);
2444 if (ret
!= DS4_FEATURE_REPORT_0x81_SIZE
) {
2445 hid_err(sc
->hdev
, "failed to retrieve feature report 0x81 with the DualShock 4 MAC address\n");
2446 ret
= ret
< 0 ? ret
: -EINVAL
;
2450 memcpy(sc
->mac_address
, &buf
[1], sizeof(sc
->mac_address
));
2452 snprintf(sc
->hdev
->uniq
, sizeof(sc
->hdev
->uniq
),
2453 "%pMR", sc
->mac_address
);
2454 } else if ((sc
->quirks
& SIXAXIS_CONTROLLER_USB
) ||
2455 (sc
->quirks
& NAVIGATION_CONTROLLER_USB
)) {
2456 buf
= kmalloc(SIXAXIS_REPORT_0xF2_SIZE
, GFP_KERNEL
);
2461 * The MAC address of a Sixaxis controller connected via USB can
2462 * be retrieved with feature report 0xf2. The address begins at
2465 ret
= hid_hw_raw_request(sc
->hdev
, 0xf2, buf
,
2466 SIXAXIS_REPORT_0xF2_SIZE
, HID_FEATURE_REPORT
,
2467 HID_REQ_GET_REPORT
);
2469 if (ret
!= SIXAXIS_REPORT_0xF2_SIZE
) {
2470 hid_err(sc
->hdev
, "failed to retrieve feature report 0xf2 with the Sixaxis MAC address\n");
2471 ret
= ret
< 0 ? ret
: -EINVAL
;
2476 * The Sixaxis device MAC in the report is big-endian and must
2479 for (n
= 0; n
< 6; n
++)
2480 sc
->mac_address
[5-n
] = buf
[4+n
];
2482 snprintf(sc
->hdev
->uniq
, sizeof(sc
->hdev
->uniq
),
2483 "%pMR", sc
->mac_address
);
2488 ret
= sony_check_add_dev_list(sc
);
2497 static int sony_set_device_id(struct sony_sc
*sc
)
2502 * Only DualShock 4 or Sixaxis controllers get an id.
2503 * All others are set to -1.
2505 if ((sc
->quirks
& SIXAXIS_CONTROLLER
) ||
2506 (sc
->quirks
& DUALSHOCK4_CONTROLLER
)) {
2507 ret
= ida_simple_get(&sony_device_id_allocator
, 0, 0,
2513 sc
->device_id
= ret
;
2521 static void sony_release_device_id(struct sony_sc
*sc
)
2523 if (sc
->device_id
>= 0) {
2524 ida_simple_remove(&sony_device_id_allocator
, sc
->device_id
);
2529 static inline void sony_init_output_report(struct sony_sc
*sc
,
2530 void (*send_output_report
)(struct sony_sc
*))
2532 sc
->send_output_report
= send_output_report
;
2534 if (!sc
->state_worker_initialized
)
2535 INIT_WORK(&sc
->state_worker
, sony_state_worker
);
2537 sc
->state_worker_initialized
= 1;
2540 static inline void sony_cancel_work_sync(struct sony_sc
*sc
)
2542 if (sc
->hotplug_worker_initialized
)
2543 cancel_work_sync(&sc
->hotplug_worker
);
2544 if (sc
->state_worker_initialized
)
2545 cancel_work_sync(&sc
->state_worker
);
2549 static int sony_input_configured(struct hid_device
*hdev
,
2550 struct hid_input
*hidinput
)
2552 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
2556 ret
= sony_set_device_id(sc
);
2558 hid_err(hdev
, "failed to allocate the device id\n");
2562 ret
= append_dev_id
= sony_check_add(sc
);
2566 ret
= sony_allocate_output_report(sc
);
2568 hid_err(hdev
, "failed to allocate the output report buffer\n");
2572 if (sc
->quirks
& NAVIGATION_CONTROLLER_USB
) {
2574 * The Sony Sixaxis does not handle HID Output Reports on the
2575 * Interrupt EP like it could, so we need to force HID Output
2576 * Reports to use HID_REQ_SET_REPORT on the Control EP.
2578 * There is also another issue about HID Output Reports via USB,
2579 * the Sixaxis does not want the report_id as part of the data
2580 * packet, so we have to discard buf[0] when sending the actual
2581 * control message, even for numbered reports, humpf!
2583 * Additionally, the Sixaxis on USB isn't properly initialized
2584 * until the PS logo button is pressed and as such won't retain
2585 * any state set by an output report, so the initial
2586 * configuration report is deferred until the first input
2589 hdev
->quirks
|= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP
;
2590 hdev
->quirks
|= HID_QUIRK_SKIP_OUTPUT_REPORT_ID
;
2591 sc
->defer_initialization
= 1;
2593 ret
= sixaxis_set_operational_usb(hdev
);
2595 hid_err(hdev
, "Failed to set controller into operational mode\n");
2599 sony_init_output_report(sc
, sixaxis_send_output_report
);
2600 } else if (sc
->quirks
& NAVIGATION_CONTROLLER_BT
) {
2602 * The Navigation controller wants output reports sent on the ctrl
2603 * endpoint when connected via Bluetooth.
2605 hdev
->quirks
|= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP
;
2607 ret
= sixaxis_set_operational_bt(hdev
);
2609 hid_err(hdev
, "Failed to set controller into operational mode\n");
2613 sony_init_output_report(sc
, sixaxis_send_output_report
);
2614 } else if (sc
->quirks
& SIXAXIS_CONTROLLER_USB
) {
2616 * The Sony Sixaxis does not handle HID Output Reports on the
2617 * Interrupt EP and the device only becomes active when the
2618 * PS button is pressed. See comment for Navigation controller
2619 * above for more details.
2621 hdev
->quirks
|= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP
;
2622 hdev
->quirks
|= HID_QUIRK_SKIP_OUTPUT_REPORT_ID
;
2623 sc
->defer_initialization
= 1;
2625 ret
= sixaxis_set_operational_usb(hdev
);
2627 hid_err(hdev
, "Failed to set controller into operational mode\n");
2631 ret
= sony_register_sensors(sc
);
2634 "Unable to initialize motion sensors: %d\n", ret
);
2638 sony_init_output_report(sc
, sixaxis_send_output_report
);
2639 } else if (sc
->quirks
& SIXAXIS_CONTROLLER_BT
) {
2641 * The Sixaxis wants output reports sent on the ctrl endpoint
2642 * when connected via Bluetooth.
2644 hdev
->quirks
|= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP
;
2646 ret
= sixaxis_set_operational_bt(hdev
);
2648 hid_err(hdev
, "Failed to set controller into operational mode\n");
2652 ret
= sony_register_sensors(sc
);
2655 "Unable to initialize motion sensors: %d\n", ret
);
2659 sony_init_output_report(sc
, sixaxis_send_output_report
);
2660 } else if (sc
->quirks
& DUALSHOCK4_CONTROLLER
) {
2661 ret
= dualshock4_get_calibration_data(sc
);
2663 hid_err(hdev
, "Failed to get calibration data from Dualshock 4\n");
2667 ret
= dualshock4_get_version_info(sc
);
2669 hid_err(sc
->hdev
, "Failed to get version data from Dualshock 4\n");
2673 ret
= device_create_file(&sc
->hdev
->dev
, &dev_attr_firmware_version
);
2675 /* Make zero for cleanup reasons of sysfs entries. */
2678 hid_err(sc
->hdev
, "can't create sysfs firmware_version attribute err: %d\n", ret
);
2682 ret
= device_create_file(&sc
->hdev
->dev
, &dev_attr_hardware_version
);
2685 hid_err(sc
->hdev
, "can't create sysfs hardware_version attribute err: %d\n", ret
);
2690 * The Dualshock 4 touchpad supports 2 touches and has a
2691 * resolution of 1920x942 (44.86 dots/mm).
2693 ret
= sony_register_touchpad(sc
, 2, 1920, 942);
2696 "Unable to initialize multi-touch slots: %d\n",
2701 ret
= sony_register_sensors(sc
);
2704 "Unable to initialize motion sensors: %d\n", ret
);
2708 if (sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) {
2709 sc
->ds4_bt_poll_interval
= DS4_BT_DEFAULT_POLL_INTERVAL_MS
;
2710 ret
= device_create_file(&sc
->hdev
->dev
, &dev_attr_bt_poll_interval
);
2713 "can't create sysfs bt_poll_interval attribute err: %d\n",
2717 if (sc
->quirks
& DUALSHOCK4_DONGLE
) {
2718 INIT_WORK(&sc
->hotplug_worker
, dualshock4_calibration_work
);
2719 sc
->hotplug_worker_initialized
= 1;
2720 sc
->ds4_dongle_state
= DONGLE_DISCONNECTED
;
2723 sony_init_output_report(sc
, dualshock4_send_output_report
);
2724 } else if (sc
->quirks
& MOTION_CONTROLLER
) {
2725 sony_init_output_report(sc
, motion_send_output_report
);
2730 if (sc
->quirks
& SONY_LED_SUPPORT
) {
2731 ret
= sony_leds_init(sc
);
2736 if (sc
->quirks
& SONY_BATTERY_SUPPORT
) {
2737 ret
= sony_battery_probe(sc
, append_dev_id
);
2741 /* Open the device to receive reports with battery info */
2742 ret
= hid_hw_open(hdev
);
2744 hid_err(hdev
, "hw open failed\n");
2749 if (sc
->quirks
& SONY_FF_SUPPORT
) {
2750 ret
= sony_init_ff(sc
);
2759 /* Piggy back on the default ds4_bt_ poll_interval to determine
2760 * if we need to remove the file as we don't know for sure if we
2761 * executed that logic.
2763 if (sc
->ds4_bt_poll_interval
)
2764 device_remove_file(&sc
->hdev
->dev
, &dev_attr_bt_poll_interval
);
2766 device_remove_file(&sc
->hdev
->dev
, &dev_attr_firmware_version
);
2768 device_remove_file(&sc
->hdev
->dev
, &dev_attr_hardware_version
);
2769 if (sc
->quirks
& SONY_LED_SUPPORT
)
2770 sony_leds_remove(sc
);
2771 if (sc
->quirks
& SONY_BATTERY_SUPPORT
)
2772 sony_battery_remove(sc
);
2774 sony_unregister_touchpad(sc
);
2776 sony_unregister_sensors(sc
);
2777 sony_cancel_work_sync(sc
);
2778 kfree(sc
->output_report_dmabuf
);
2779 sony_remove_dev_list(sc
);
2780 sony_release_device_id(sc
);
2785 static int sony_probe(struct hid_device
*hdev
, const struct hid_device_id
*id
)
2788 unsigned long quirks
= id
->driver_data
;
2790 unsigned int connect_mask
= HID_CONNECT_DEFAULT
;
2792 if (!strcmp(hdev
->name
, "FutureMax Dance Mat"))
2793 quirks
|= FUTUREMAX_DANCE_MAT
;
2795 sc
= devm_kzalloc(&hdev
->dev
, sizeof(*sc
), GFP_KERNEL
);
2797 hid_err(hdev
, "can't alloc sony descriptor\n");
2801 spin_lock_init(&sc
->lock
);
2803 sc
->quirks
= quirks
;
2804 hid_set_drvdata(hdev
, sc
);
2807 ret
= hid_parse(hdev
);
2809 hid_err(hdev
, "parse failed\n");
2813 if (sc
->quirks
& VAIO_RDESC_CONSTANT
)
2814 connect_mask
|= HID_CONNECT_HIDDEV_FORCE
;
2815 else if (sc
->quirks
& SIXAXIS_CONTROLLER
)
2816 connect_mask
|= HID_CONNECT_HIDDEV_FORCE
;
2818 /* Patch the hw version on DS3/4 compatible devices, so applications can
2819 * distinguish between the default HID mappings and the mappings defined
2820 * by the Linux game controller spec. This is important for the SDL2
2821 * library, which has a game controller database, which uses device ids
2822 * in combination with version as a key.
2824 if (sc
->quirks
& (SIXAXIS_CONTROLLER
| DUALSHOCK4_CONTROLLER
))
2825 hdev
->version
|= 0x8000;
2827 ret
= hid_hw_start(hdev
, connect_mask
);
2829 hid_err(hdev
, "hw start failed\n");
2833 /* sony_input_configured can fail, but this doesn't result
2834 * in hid_hw_start failures (intended). Check whether
2835 * the HID layer claimed the device else fail.
2836 * We don't know the actual reason for the failure, most
2837 * likely it is due to EEXIST in case of double connection
2838 * of USB and Bluetooth, but could have been due to ENOMEM
2839 * or other reasons as well.
2841 if (!(hdev
->claimed
& HID_CLAIMED_INPUT
)) {
2842 hid_err(hdev
, "failed to claim input\n");
2849 static void sony_remove(struct hid_device
*hdev
)
2851 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
2855 if (sc
->quirks
& SONY_LED_SUPPORT
)
2856 sony_leds_remove(sc
);
2858 if (sc
->quirks
& SONY_BATTERY_SUPPORT
)
2859 sony_battery_remove(sc
);
2862 sony_unregister_touchpad(sc
);
2865 sony_unregister_sensors(sc
);
2867 if (sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
)
2868 device_remove_file(&sc
->hdev
->dev
, &dev_attr_bt_poll_interval
);
2871 device_remove_file(&sc
->hdev
->dev
, &dev_attr_firmware_version
);
2874 device_remove_file(&sc
->hdev
->dev
, &dev_attr_hardware_version
);
2876 sony_cancel_work_sync(sc
);
2878 kfree(sc
->output_report_dmabuf
);
2880 sony_remove_dev_list(sc
);
2882 sony_release_device_id(sc
);
2889 static int sony_suspend(struct hid_device
*hdev
, pm_message_t message
)
2891 #ifdef CONFIG_SONY_FF
2893 /* On suspend stop any running force-feedback events */
2894 if (SONY_FF_SUPPORT
) {
2895 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
2897 sc
->left
= sc
->right
= 0;
2898 sony_send_output_report(sc
);
2905 static int sony_resume(struct hid_device
*hdev
)
2907 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
2910 * The Sixaxis and navigation controllers on USB need to be
2911 * reinitialized on resume or they won't behave properly.
2913 if ((sc
->quirks
& SIXAXIS_CONTROLLER_USB
) ||
2914 (sc
->quirks
& NAVIGATION_CONTROLLER_USB
)) {
2915 sixaxis_set_operational_usb(sc
->hdev
);
2916 sc
->defer_initialization
= 1;
2924 static const struct hid_device_id sony_devices
[] = {
2925 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS3_CONTROLLER
),
2926 .driver_data
= SIXAXIS_CONTROLLER_USB
},
2927 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER
),
2928 .driver_data
= NAVIGATION_CONTROLLER_USB
},
2929 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER
),
2930 .driver_data
= NAVIGATION_CONTROLLER_BT
},
2931 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_MOTION_CONTROLLER
),
2932 .driver_data
= MOTION_CONTROLLER_USB
},
2933 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_MOTION_CONTROLLER
),
2934 .driver_data
= MOTION_CONTROLLER_BT
},
2935 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS3_CONTROLLER
),
2936 .driver_data
= SIXAXIS_CONTROLLER_BT
},
2937 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE
),
2938 .driver_data
= VAIO_RDESC_CONSTANT
},
2939 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE
),
2940 .driver_data
= VAIO_RDESC_CONSTANT
},
2942 * Wired Buzz Controller. Reported as Sony Hub from its USB ID and as
2943 * Logitech joystick from the device descriptor.
2945 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER
),
2946 .driver_data
= BUZZ_CONTROLLER
},
2947 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER
),
2948 .driver_data
= BUZZ_CONTROLLER
},
2949 /* PS3 BD Remote Control */
2950 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS3_BDREMOTE
),
2951 .driver_data
= PS3REMOTE
},
2952 /* Logitech Harmony Adapter for PS3 */
2953 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH
, USB_DEVICE_ID_LOGITECH_HARMONY_PS3
),
2954 .driver_data
= PS3REMOTE
},
2955 /* SMK-Link PS3 BD Remote Control */
2956 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK
, USB_DEVICE_ID_SMK_PS3_BDREMOTE
),
2957 .driver_data
= PS3REMOTE
},
2958 /* Sony Dualshock 4 controllers for PS4 */
2959 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER
),
2960 .driver_data
= DUALSHOCK4_CONTROLLER_USB
},
2961 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER
),
2962 .driver_data
= DUALSHOCK4_CONTROLLER_BT
},
2963 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2
),
2964 .driver_data
= DUALSHOCK4_CONTROLLER_USB
},
2965 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2
),
2966 .driver_data
= DUALSHOCK4_CONTROLLER_BT
},
2967 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE
),
2968 .driver_data
= DUALSHOCK4_DONGLE
},
2969 /* Nyko Core Controller for PS3 */
2970 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE
, USB_DEVICE_ID_SINO_LITE_CONTROLLER
),
2971 .driver_data
= SIXAXIS_CONTROLLER_USB
| SINO_LITE_CONTROLLER
},
2974 MODULE_DEVICE_TABLE(hid
, sony_devices
);
2976 static struct hid_driver sony_driver
= {
2978 .id_table
= sony_devices
,
2979 .input_mapping
= sony_mapping
,
2980 .input_configured
= sony_input_configured
,
2981 .probe
= sony_probe
,
2982 .remove
= sony_remove
,
2983 .report_fixup
= sony_report_fixup
,
2984 .raw_event
= sony_raw_event
,
2987 .suspend
= sony_suspend
,
2988 .resume
= sony_resume
,
2989 .reset_resume
= sony_resume
,
2993 static int __init
sony_init(void)
2995 dbg_hid("Sony:%s\n", __func__
);
2997 return hid_register_driver(&sony_driver
);
3000 static void __exit
sony_exit(void)
3002 dbg_hid("Sony:%s\n", __func__
);
3004 hid_unregister_driver(&sony_driver
);
3005 ida_destroy(&sony_device_id_allocator
);
3007 module_init(sony_init
);
3008 module_exit(sony_exit
);
3010 MODULE_LICENSE("GPL");