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_INPUT_REPORT_0x11_SIZE 78
477 #define DS4_OUTPUT_REPORT_0x05_SIZE 32
478 #define DS4_OUTPUT_REPORT_0x11_SIZE 78
479 #define SIXAXIS_REPORT_0xF2_SIZE 17
480 #define SIXAXIS_REPORT_0xF5_SIZE 8
481 #define MOTION_REPORT_0x02_SIZE 49
483 /* Offsets relative to USB input report (0x1). Bluetooth (0x11) requires an
486 #define DS4_INPUT_REPORT_AXIS_OFFSET 1
487 #define DS4_INPUT_REPORT_BUTTON_OFFSET 5
488 #define DS4_INPUT_REPORT_TIMESTAMP_OFFSET 10
489 #define DS4_INPUT_REPORT_GYRO_X_OFFSET 13
490 #define DS4_INPUT_REPORT_BATTERY_OFFSET 30
491 #define DS4_INPUT_REPORT_TOUCHPAD_OFFSET 33
493 #define SENSOR_SUFFIX " Motion Sensors"
494 #define DS4_TOUCHPAD_SUFFIX " Touchpad"
496 #define DS4_GYRO_RES_PER_DEG_S 1024
497 #define DS4_ACC_RES_PER_G 8192
499 #define SIXAXIS_INPUT_REPORT_ACC_X_OFFSET 41
500 #define SIXAXIS_ACC_RES_PER_G 113
502 static DEFINE_SPINLOCK(sony_dev_list_lock
);
503 static LIST_HEAD(sony_device_list
);
504 static DEFINE_IDA(sony_device_id_allocator
);
506 /* Used for calibration of DS4 accelerometer and gyro. */
507 struct ds4_calibration_data
{
510 /* Calibration requires scaling against a sensitivity value, which is a
511 * float. Store sensitivity as a fraction to limit floating point
512 * calculations until final calibration.
518 enum ds4_dongle_state
{
532 struct list_head list_node
;
533 struct hid_device
*hdev
;
534 struct input_dev
*touchpad
;
535 struct input_dev
*sensor_dev
;
536 struct led_classdev
*leds
[MAX_LEDS
];
537 unsigned long quirks
;
538 struct work_struct hotplug_worker
;
539 struct work_struct state_worker
;
540 void (*send_output_report
)(struct sony_sc
*);
541 struct power_supply
*battery
;
542 struct power_supply_desc battery_desc
;
544 u8
*output_report_dmabuf
;
546 #ifdef CONFIG_SONY_FF
552 u8 hotplug_worker_initialized
;
553 u8 state_worker_initialized
;
554 u8 defer_initialization
;
558 u8 led_state
[MAX_LEDS
];
559 u8 led_delay_on
[MAX_LEDS
];
560 u8 led_delay_off
[MAX_LEDS
];
563 bool timestamp_initialized
;
565 unsigned int timestamp_us
;
567 enum ds4_dongle_state ds4_dongle_state
;
568 /* DS4 calibration data */
569 struct ds4_calibration_data ds4_calib_data
[6];
572 static void sony_set_leds(struct sony_sc
*sc
);
574 static inline void sony_schedule_work(struct sony_sc
*sc
,
575 enum sony_worker which
)
578 case SONY_WORKER_STATE
:
579 if (!sc
->defer_initialization
)
580 schedule_work(&sc
->state_worker
);
582 case SONY_WORKER_HOTPLUG
:
583 if (sc
->hotplug_worker_initialized
)
584 schedule_work(&sc
->hotplug_worker
);
589 static u8
*motion_fixup(struct hid_device
*hdev
, u8
*rdesc
,
592 *rsize
= sizeof(motion_rdesc
);
596 static u8
*ps3remote_fixup(struct hid_device
*hdev
, u8
*rdesc
,
599 *rsize
= sizeof(ps3remote_rdesc
);
600 return ps3remote_rdesc
;
603 static int ps3remote_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
604 struct hid_field
*field
, struct hid_usage
*usage
,
605 unsigned long **bit
, int *max
)
607 unsigned int key
= usage
->hid
& HID_USAGE
;
609 if ((usage
->hid
& HID_USAGE_PAGE
) != HID_UP_BUTTON
)
612 switch (usage
->collection_index
) {
614 if (key
>= ARRAY_SIZE(ps3remote_keymap_joypad_buttons
))
617 key
= ps3remote_keymap_joypad_buttons
[key
];
622 if (key
>= ARRAY_SIZE(ps3remote_keymap_remote_buttons
))
625 key
= ps3remote_keymap_remote_buttons
[key
];
633 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
637 static int navigation_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
638 struct hid_field
*field
, struct hid_usage
*usage
,
639 unsigned long **bit
, int *max
)
641 if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_BUTTON
) {
642 unsigned int key
= usage
->hid
& HID_USAGE
;
644 if (key
>= ARRAY_SIZE(sixaxis_keymap
))
647 key
= navigation_keymap
[key
];
651 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
653 } else if (usage
->hid
== HID_GD_POINTER
) {
654 /* See comment in sixaxis_mapping, basically the L2 (and R2)
655 * triggers are reported through GD Pointer.
656 * In addition we ignore any analog button 'axes' and only
657 * support digital buttons.
659 switch (usage
->usage_index
) {
661 usage
->hid
= HID_GD_Z
;
667 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, usage
->hid
& 0xf);
669 } else if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_GENDESK
) {
670 unsigned int abs
= usage
->hid
& HID_USAGE
;
672 if (abs
>= ARRAY_SIZE(navigation_absmap
))
675 abs
= navigation_absmap
[abs
];
677 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, abs
);
685 static int sixaxis_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
686 struct hid_field
*field
, struct hid_usage
*usage
,
687 unsigned long **bit
, int *max
)
689 if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_BUTTON
) {
690 unsigned int key
= usage
->hid
& HID_USAGE
;
692 if (key
>= ARRAY_SIZE(sixaxis_keymap
))
695 key
= sixaxis_keymap
[key
];
696 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
698 } else if (usage
->hid
== HID_GD_POINTER
) {
699 /* The DS3 provides analog values for most buttons and even
700 * for HAT axes through GD Pointer. L2 and R2 are reported
701 * among these as well instead of as GD Z / RZ. Remap L2
702 * and R2 and ignore other analog 'button axes' as there is
703 * no good way for reporting them.
705 switch (usage
->usage_index
) {
707 usage
->hid
= HID_GD_Z
;
710 usage
->hid
= HID_GD_RZ
;
716 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, usage
->hid
& 0xf);
718 } else if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_GENDESK
) {
719 unsigned int abs
= usage
->hid
& HID_USAGE
;
721 if (abs
>= ARRAY_SIZE(sixaxis_absmap
))
724 abs
= sixaxis_absmap
[abs
];
726 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, abs
);
733 static int ds4_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
734 struct hid_field
*field
, struct hid_usage
*usage
,
735 unsigned long **bit
, int *max
)
737 if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_BUTTON
) {
738 unsigned int key
= usage
->hid
& HID_USAGE
;
740 if (key
>= ARRAY_SIZE(ds4_keymap
))
743 key
= ds4_keymap
[key
];
744 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
746 } else if ((usage
->hid
& HID_USAGE_PAGE
) == HID_UP_GENDESK
) {
747 unsigned int abs
= usage
->hid
& HID_USAGE
;
749 /* Let the HID parser deal with the HAT. */
750 if (usage
->hid
== HID_GD_HATSWITCH
)
753 if (abs
>= ARRAY_SIZE(ds4_absmap
))
756 abs
= ds4_absmap
[abs
];
757 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_ABS
, abs
);
764 static u8
*sony_report_fixup(struct hid_device
*hdev
, u8
*rdesc
,
767 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
769 if (sc
->quirks
& (SINO_LITE_CONTROLLER
| FUTUREMAX_DANCE_MAT
))
773 * Some Sony RF receivers wrongly declare the mouse pointer as a
774 * a constant non-data variable.
776 if ((sc
->quirks
& VAIO_RDESC_CONSTANT
) && *rsize
>= 56 &&
777 /* usage page: generic desktop controls */
778 /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */
780 rdesc
[2] == 0x09 && rdesc
[3] == 0x02 &&
781 /* input (usage page for x,y axes): constant, variable, relative */
782 rdesc
[54] == 0x81 && rdesc
[55] == 0x07) {
783 hid_info(hdev
, "Fixing up Sony RF Receiver report descriptor\n");
784 /* input: data, variable, relative */
788 if (sc
->quirks
& MOTION_CONTROLLER
)
789 return motion_fixup(hdev
, rdesc
, rsize
);
791 if (sc
->quirks
& PS3REMOTE
)
792 return ps3remote_fixup(hdev
, rdesc
, rsize
);
797 static void sixaxis_parse_report(struct sony_sc
*sc
, u8
*rd
, int size
)
799 static const u8 sixaxis_battery_capacity
[] = { 0, 1, 25, 50, 75, 100 };
802 u8 cable_state
, battery_capacity
, battery_charging
;
805 * The sixaxis is charging if the battery value is 0xee
806 * and it is fully charged if the value is 0xef.
807 * It does not report the actual level while charging so it
808 * is set to 100% while charging is in progress.
810 offset
= (sc
->quirks
& MOTION_CONTROLLER
) ? 12 : 30;
812 if (rd
[offset
] >= 0xee) {
813 battery_capacity
= 100;
814 battery_charging
= !(rd
[offset
] & 0x01);
817 u8 index
= rd
[offset
] <= 5 ? rd
[offset
] : 5;
818 battery_capacity
= sixaxis_battery_capacity
[index
];
819 battery_charging
= 0;
823 spin_lock_irqsave(&sc
->lock
, flags
);
824 sc
->cable_state
= cable_state
;
825 sc
->battery_capacity
= battery_capacity
;
826 sc
->battery_charging
= battery_charging
;
827 spin_unlock_irqrestore(&sc
->lock
, flags
);
829 if (sc
->quirks
& SIXAXIS_CONTROLLER
) {
832 offset
= SIXAXIS_INPUT_REPORT_ACC_X_OFFSET
;
833 val
= ((rd
[offset
+1] << 8) | rd
[offset
]) - 511;
834 input_report_abs(sc
->sensor_dev
, ABS_X
, val
);
836 /* Y and Z are swapped and inversed */
837 val
= 511 - ((rd
[offset
+5] << 8) | rd
[offset
+4]);
838 input_report_abs(sc
->sensor_dev
, ABS_Y
, val
);
840 val
= 511 - ((rd
[offset
+3] << 8) | rd
[offset
+2]);
841 input_report_abs(sc
->sensor_dev
, ABS_Z
, val
);
843 input_sync(sc
->sensor_dev
);
847 static void dualshock4_parse_report(struct sony_sc
*sc
, u8
*rd
, int size
)
849 struct hid_input
*hidinput
= list_entry(sc
->hdev
->inputs
.next
,
850 struct hid_input
, list
);
851 struct input_dev
*input_dev
= hidinput
->input
;
853 int n
, m
, offset
, num_touch_data
, max_touch_data
;
854 u8 cable_state
, battery_capacity
, battery_charging
;
857 /* When using Bluetooth the header is 2 bytes longer, so skip these. */
858 int data_offset
= (sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) ? 2 : 0;
860 /* Second bit of third button byte is for the touchpad button. */
861 offset
= data_offset
+ DS4_INPUT_REPORT_BUTTON_OFFSET
;
862 input_report_key(sc
->touchpad
, BTN_LEFT
, rd
[offset
+2] & 0x2);
865 * The default behavior of the Dualshock 4 is to send reports using
866 * report type 1 when running over Bluetooth. However, when feature
867 * report 2 is requested during the controller initialization it starts
868 * sending input reports in report 17. Since report 17 is undefined
869 * in the default HID descriptor, the HID layer won't generate events.
870 * While it is possible (and this was done before) to fixup the HID
871 * descriptor to add this mapping, it was better to do this manually.
872 * The reason is there were various pieces software both open and closed
873 * source, relying on the descriptors to be the same across various
874 * operating systems. If the descriptors wouldn't match some
875 * applications e.g. games on Wine would not be able to function due
876 * to different descriptors, which such applications are not parsing.
881 offset
= data_offset
+ DS4_INPUT_REPORT_AXIS_OFFSET
;
882 input_report_abs(input_dev
, ABS_X
, rd
[offset
]);
883 input_report_abs(input_dev
, ABS_Y
, rd
[offset
+1]);
884 input_report_abs(input_dev
, ABS_RX
, rd
[offset
+2]);
885 input_report_abs(input_dev
, ABS_RY
, rd
[offset
+3]);
887 value
= rd
[offset
+4] & 0xf;
889 value
= 8; /* Center 0, 0 */
890 input_report_abs(input_dev
, ABS_HAT0X
, ds4_hat_mapping
[value
].x
);
891 input_report_abs(input_dev
, ABS_HAT0Y
, ds4_hat_mapping
[value
].y
);
893 input_report_key(input_dev
, BTN_WEST
, rd
[offset
+4] & 0x10);
894 input_report_key(input_dev
, BTN_SOUTH
, rd
[offset
+4] & 0x20);
895 input_report_key(input_dev
, BTN_EAST
, rd
[offset
+4] & 0x40);
896 input_report_key(input_dev
, BTN_NORTH
, rd
[offset
+4] & 0x80);
898 input_report_key(input_dev
, BTN_TL
, rd
[offset
+5] & 0x1);
899 input_report_key(input_dev
, BTN_TR
, rd
[offset
+5] & 0x2);
900 input_report_key(input_dev
, BTN_TL2
, rd
[offset
+5] & 0x4);
901 input_report_key(input_dev
, BTN_TR2
, rd
[offset
+5] & 0x8);
902 input_report_key(input_dev
, BTN_SELECT
, rd
[offset
+5] & 0x10);
903 input_report_key(input_dev
, BTN_START
, rd
[offset
+5] & 0x20);
904 input_report_key(input_dev
, BTN_THUMBL
, rd
[offset
+5] & 0x40);
905 input_report_key(input_dev
, BTN_THUMBR
, rd
[offset
+5] & 0x80);
907 input_report_key(input_dev
, BTN_MODE
, rd
[offset
+6] & 0x1);
909 input_report_abs(input_dev
, ABS_Z
, rd
[offset
+7]);
910 input_report_abs(input_dev
, ABS_RZ
, rd
[offset
+8]);
912 input_sync(input_dev
);
915 /* Convert timestamp (in 5.33us unit) to timestamp_us */
916 offset
= data_offset
+ DS4_INPUT_REPORT_TIMESTAMP_OFFSET
;
917 timestamp
= get_unaligned_le16(&rd
[offset
]);
918 if (!sc
->timestamp_initialized
) {
919 sc
->timestamp_us
= ((unsigned int)timestamp
* 16) / 3;
920 sc
->timestamp_initialized
= true;
924 if (sc
->prev_timestamp
> timestamp
)
925 delta
= (U16_MAX
- sc
->prev_timestamp
+ timestamp
+ 1);
927 delta
= timestamp
- sc
->prev_timestamp
;
928 sc
->timestamp_us
+= (delta
* 16) / 3;
930 sc
->prev_timestamp
= timestamp
;
931 input_event(sc
->sensor_dev
, EV_MSC
, MSC_TIMESTAMP
, sc
->timestamp_us
);
933 offset
= data_offset
+ DS4_INPUT_REPORT_GYRO_X_OFFSET
;
934 for (n
= 0; n
< 6; n
++) {
935 /* Store data in int for more precision during mult_frac. */
936 int raw_data
= (short)((rd
[offset
+1] << 8) | rd
[offset
]);
937 struct ds4_calibration_data
*calib
= &sc
->ds4_calib_data
[n
];
939 /* High precision is needed during calibration, but the
940 * calibrated values are within 32-bit.
941 * Note: we swap numerator 'x' and 'numer' in mult_frac for
942 * precision reasons so we don't need 64-bit.
944 int calib_data
= mult_frac(calib
->sens_numer
,
945 raw_data
- calib
->bias
,
948 input_report_abs(sc
->sensor_dev
, calib
->abs_code
, calib_data
);
951 input_sync(sc
->sensor_dev
);
954 * The lower 4 bits of byte 30 (or 32 for BT) contain the battery level
955 * and the 5th bit contains the USB cable state.
957 offset
= data_offset
+ DS4_INPUT_REPORT_BATTERY_OFFSET
;
958 cable_state
= (rd
[offset
] >> 4) & 0x01;
959 battery_capacity
= rd
[offset
] & 0x0F;
962 * When a USB power source is connected the battery level ranges from
963 * 0 to 10, and when running on battery power it ranges from 0 to 9.
964 * A battery level above 10 when plugged in means charge completed.
966 if (!cable_state
|| battery_capacity
> 10)
967 battery_charging
= 0;
969 battery_charging
= 1;
973 if (battery_capacity
> 10)
974 battery_capacity
= 10;
976 battery_capacity
*= 10;
978 spin_lock_irqsave(&sc
->lock
, flags
);
979 sc
->cable_state
= cable_state
;
980 sc
->battery_capacity
= battery_capacity
;
981 sc
->battery_charging
= battery_charging
;
982 spin_unlock_irqrestore(&sc
->lock
, flags
);
985 * The Dualshock 4 multi-touch trackpad data starts at offset 33 on USB
986 * and 35 on Bluetooth.
987 * The first byte indicates the number of touch data in the report.
988 * Trackpad data starts 2 bytes later (e.g. 35 for USB).
990 offset
= data_offset
+ DS4_INPUT_REPORT_TOUCHPAD_OFFSET
;
991 max_touch_data
= (sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) ? 4 : 3;
992 if (rd
[offset
] > 0 && rd
[offset
] <= max_touch_data
)
993 num_touch_data
= rd
[offset
];
998 for (m
= 0; m
< num_touch_data
; m
++) {
999 /* Skip past timestamp */
1003 * The first 7 bits of the first byte is a counter and bit 8 is
1004 * a touch indicator that is 0 when pressed and 1 when not
1006 * The next 3 bytes are two 12 bit touch coordinates, X and Y.
1007 * The data for the second touch is in the same format and
1008 * immediately follows the data for the first.
1010 for (n
= 0; n
< 2; n
++) {
1014 x
= rd
[offset
+1] | ((rd
[offset
+2] & 0xF) << 8);
1015 y
= ((rd
[offset
+2] & 0xF0) >> 4) | (rd
[offset
+3] << 4);
1017 active
= !(rd
[offset
] >> 7);
1018 input_mt_slot(sc
->touchpad
, n
);
1019 input_mt_report_slot_state(sc
->touchpad
, MT_TOOL_FINGER
, active
);
1022 input_report_abs(sc
->touchpad
, ABS_MT_POSITION_X
, x
);
1023 input_report_abs(sc
->touchpad
, ABS_MT_POSITION_Y
, y
);
1028 input_mt_sync_frame(sc
->touchpad
);
1029 input_sync(sc
->touchpad
);
1033 static int sony_raw_event(struct hid_device
*hdev
, struct hid_report
*report
,
1036 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
1039 * Sixaxis HID report has acclerometers/gyro with MSByte first, this
1040 * has to be BYTE_SWAPPED before passing up to joystick interface
1042 if ((sc
->quirks
& SIXAXIS_CONTROLLER
) && rd
[0] == 0x01 && size
== 49) {
1044 * When connected via Bluetooth the Sixaxis occasionally sends
1045 * a report with the second byte 0xff and the rest zeroed.
1047 * This report does not reflect the actual state of the
1048 * controller must be ignored to avoid generating false input
1054 swap(rd
[41], rd
[42]);
1055 swap(rd
[43], rd
[44]);
1056 swap(rd
[45], rd
[46]);
1057 swap(rd
[47], rd
[48]);
1059 sixaxis_parse_report(sc
, rd
, size
);
1060 } else if ((sc
->quirks
& MOTION_CONTROLLER_BT
) && rd
[0] == 0x01 && size
== 49) {
1061 sixaxis_parse_report(sc
, rd
, size
);
1062 } else if ((sc
->quirks
& NAVIGATION_CONTROLLER
) && rd
[0] == 0x01 &&
1064 sixaxis_parse_report(sc
, rd
, size
);
1065 } else if ((sc
->quirks
& DUALSHOCK4_CONTROLLER_USB
) && rd
[0] == 0x01 &&
1067 dualshock4_parse_report(sc
, rd
, size
);
1068 } else if (((sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) && rd
[0] == 0x11 &&
1075 crc
= crc32_le(0xFFFFFFFF, &bthdr
, 1);
1076 crc
= ~crc32_le(crc
, rd
, DS4_INPUT_REPORT_0x11_SIZE
-4);
1077 report_crc
= get_unaligned_le32(&rd
[DS4_INPUT_REPORT_0x11_SIZE
-4]);
1078 if (crc
!= report_crc
) {
1079 hid_dbg(sc
->hdev
, "DualShock 4 input report's CRC check failed, received crc 0x%0x != 0x%0x\n",
1084 dualshock4_parse_report(sc
, rd
, size
);
1085 } else if ((sc
->quirks
& DUALSHOCK4_DONGLE
) && rd
[0] == 0x01 &&
1087 unsigned long flags
;
1088 enum ds4_dongle_state dongle_state
;
1091 * In the case of a DS4 USB dongle, bit[2] of byte 31 indicates
1092 * if a DS4 is actually connected (indicated by '0').
1093 * For non-dongle, this bit is always 0 (connected).
1095 bool connected
= (rd
[31] & 0x04) ? false : true;
1097 spin_lock_irqsave(&sc
->lock
, flags
);
1098 dongle_state
= sc
->ds4_dongle_state
;
1099 spin_unlock_irqrestore(&sc
->lock
, flags
);
1102 * The dongle always sends input reports even when no
1103 * DS4 is attached. When a DS4 is connected, we need to
1104 * obtain calibration data before we can use it.
1105 * The code below tracks dongle state and kicks of
1106 * calibration when needed and only allows us to process
1107 * input if a DS4 is actually connected.
1109 if (dongle_state
== DONGLE_DISCONNECTED
&& connected
) {
1110 hid_info(sc
->hdev
, "DualShock 4 USB dongle: controller connected\n");
1113 spin_lock_irqsave(&sc
->lock
, flags
);
1114 sc
->ds4_dongle_state
= DONGLE_CALIBRATING
;
1115 spin_unlock_irqrestore(&sc
->lock
, flags
);
1117 sony_schedule_work(sc
, SONY_WORKER_HOTPLUG
);
1119 /* Don't process the report since we don't have
1120 * calibration data, but let hidraw have it anyway.
1123 } else if ((dongle_state
== DONGLE_CONNECTED
||
1124 dongle_state
== DONGLE_DISABLED
) && !connected
) {
1125 hid_info(sc
->hdev
, "DualShock 4 USB dongle: controller disconnected\n");
1127 spin_lock_irqsave(&sc
->lock
, flags
);
1128 sc
->ds4_dongle_state
= DONGLE_DISCONNECTED
;
1129 spin_unlock_irqrestore(&sc
->lock
, flags
);
1131 /* Return 0, so hidraw can get the report. */
1133 } else if (dongle_state
== DONGLE_CALIBRATING
||
1134 dongle_state
== DONGLE_DISABLED
||
1135 dongle_state
== DONGLE_DISCONNECTED
) {
1136 /* Return 0, so hidraw can get the report. */
1140 dualshock4_parse_report(sc
, rd
, size
);
1143 if (sc
->defer_initialization
) {
1144 sc
->defer_initialization
= 0;
1145 sony_schedule_work(sc
, SONY_WORKER_STATE
);
1151 static int sony_mapping(struct hid_device
*hdev
, struct hid_input
*hi
,
1152 struct hid_field
*field
, struct hid_usage
*usage
,
1153 unsigned long **bit
, int *max
)
1155 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
1157 if (sc
->quirks
& BUZZ_CONTROLLER
) {
1158 unsigned int key
= usage
->hid
& HID_USAGE
;
1160 if ((usage
->hid
& HID_USAGE_PAGE
) != HID_UP_BUTTON
)
1163 switch (usage
->collection_index
) {
1165 if (key
>= ARRAY_SIZE(buzz_keymap
))
1168 key
= buzz_keymap
[key
];
1176 hid_map_usage_clear(hi
, usage
, bit
, max
, EV_KEY
, key
);
1180 if (sc
->quirks
& PS3REMOTE
)
1181 return ps3remote_mapping(hdev
, hi
, field
, usage
, bit
, max
);
1183 if (sc
->quirks
& NAVIGATION_CONTROLLER
)
1184 return navigation_mapping(hdev
, hi
, field
, usage
, bit
, max
);
1186 if (sc
->quirks
& SIXAXIS_CONTROLLER
)
1187 return sixaxis_mapping(hdev
, hi
, field
, usage
, bit
, max
);
1189 if (sc
->quirks
& DUALSHOCK4_CONTROLLER
)
1190 return ds4_mapping(hdev
, hi
, field
, usage
, bit
, max
);
1193 /* Let hid-core decide for the others */
1197 static int sony_register_touchpad(struct sony_sc
*sc
, int touch_count
,
1204 sc
->touchpad
= input_allocate_device();
1208 input_set_drvdata(sc
->touchpad
, sc
);
1209 sc
->touchpad
->dev
.parent
= &sc
->hdev
->dev
;
1210 sc
->touchpad
->phys
= sc
->hdev
->phys
;
1211 sc
->touchpad
->uniq
= sc
->hdev
->uniq
;
1212 sc
->touchpad
->id
.bustype
= sc
->hdev
->bus
;
1213 sc
->touchpad
->id
.vendor
= sc
->hdev
->vendor
;
1214 sc
->touchpad
->id
.product
= sc
->hdev
->product
;
1215 sc
->touchpad
->id
.version
= sc
->hdev
->version
;
1217 /* Append a suffix to the controller name as there are various
1218 * DS4 compatible non-Sony devices with different names.
1220 name_sz
= strlen(sc
->hdev
->name
) + sizeof(DS4_TOUCHPAD_SUFFIX
);
1221 name
= kzalloc(name_sz
, GFP_KERNEL
);
1226 snprintf(name
, name_sz
, "%s" DS4_TOUCHPAD_SUFFIX
, sc
->hdev
->name
);
1227 sc
->touchpad
->name
= name
;
1229 ret
= input_mt_init_slots(sc
->touchpad
, touch_count
, INPUT_MT_POINTER
);
1233 /* We map the button underneath the touchpad to BTN_LEFT. */
1234 __set_bit(EV_KEY
, sc
->touchpad
->evbit
);
1235 __set_bit(BTN_LEFT
, sc
->touchpad
->keybit
);
1236 __set_bit(INPUT_PROP_BUTTONPAD
, sc
->touchpad
->propbit
);
1238 input_set_abs_params(sc
->touchpad
, ABS_MT_POSITION_X
, 0, w
, 0, 0);
1239 input_set_abs_params(sc
->touchpad
, ABS_MT_POSITION_Y
, 0, h
, 0, 0);
1241 ret
= input_register_device(sc
->touchpad
);
1248 kfree(sc
->touchpad
->name
);
1249 sc
->touchpad
->name
= NULL
;
1251 input_free_device(sc
->touchpad
);
1252 sc
->touchpad
= NULL
;
1257 static void sony_unregister_touchpad(struct sony_sc
*sc
)
1262 kfree(sc
->touchpad
->name
);
1263 sc
->touchpad
->name
= NULL
;
1265 input_unregister_device(sc
->touchpad
);
1266 sc
->touchpad
= NULL
;
1269 static int sony_register_sensors(struct sony_sc
*sc
)
1276 sc
->sensor_dev
= input_allocate_device();
1277 if (!sc
->sensor_dev
)
1280 input_set_drvdata(sc
->sensor_dev
, sc
);
1281 sc
->sensor_dev
->dev
.parent
= &sc
->hdev
->dev
;
1282 sc
->sensor_dev
->phys
= sc
->hdev
->phys
;
1283 sc
->sensor_dev
->uniq
= sc
->hdev
->uniq
;
1284 sc
->sensor_dev
->id
.bustype
= sc
->hdev
->bus
;
1285 sc
->sensor_dev
->id
.vendor
= sc
->hdev
->vendor
;
1286 sc
->sensor_dev
->id
.product
= sc
->hdev
->product
;
1287 sc
->sensor_dev
->id
.version
= sc
->hdev
->version
;
1289 /* Append a suffix to the controller name as there are various
1290 * DS4 compatible non-Sony devices with different names.
1292 name_sz
= strlen(sc
->hdev
->name
) + sizeof(SENSOR_SUFFIX
);
1293 name
= kzalloc(name_sz
, GFP_KERNEL
);
1298 snprintf(name
, name_sz
, "%s" SENSOR_SUFFIX
, sc
->hdev
->name
);
1299 sc
->sensor_dev
->name
= name
;
1301 if (sc
->quirks
& SIXAXIS_CONTROLLER
) {
1302 /* For the DS3 we only support the accelerometer, which works
1303 * quite well even without calibration. The device also has
1304 * a 1-axis gyro, but it is very difficult to manage from within
1305 * the driver even to get data, the sensor is inaccurate and
1306 * the behavior is very different between hardware revisions.
1308 input_set_abs_params(sc
->sensor_dev
, ABS_X
, -512, 511, 4, 0);
1309 input_set_abs_params(sc
->sensor_dev
, ABS_Y
, -512, 511, 4, 0);
1310 input_set_abs_params(sc
->sensor_dev
, ABS_Z
, -512, 511, 4, 0);
1311 input_abs_set_res(sc
->sensor_dev
, ABS_X
, SIXAXIS_ACC_RES_PER_G
);
1312 input_abs_set_res(sc
->sensor_dev
, ABS_Y
, SIXAXIS_ACC_RES_PER_G
);
1313 input_abs_set_res(sc
->sensor_dev
, ABS_Z
, SIXAXIS_ACC_RES_PER_G
);
1314 } else if (sc
->quirks
& DUALSHOCK4_CONTROLLER
) {
1315 range
= DS4_ACC_RES_PER_G
*4;
1316 input_set_abs_params(sc
->sensor_dev
, ABS_X
, -range
, range
, 16, 0);
1317 input_set_abs_params(sc
->sensor_dev
, ABS_Y
, -range
, range
, 16, 0);
1318 input_set_abs_params(sc
->sensor_dev
, ABS_Z
, -range
, range
, 16, 0);
1319 input_abs_set_res(sc
->sensor_dev
, ABS_X
, DS4_ACC_RES_PER_G
);
1320 input_abs_set_res(sc
->sensor_dev
, ABS_Y
, DS4_ACC_RES_PER_G
);
1321 input_abs_set_res(sc
->sensor_dev
, ABS_Z
, DS4_ACC_RES_PER_G
);
1323 range
= DS4_GYRO_RES_PER_DEG_S
*2048;
1324 input_set_abs_params(sc
->sensor_dev
, ABS_RX
, -range
, range
, 16, 0);
1325 input_set_abs_params(sc
->sensor_dev
, ABS_RY
, -range
, range
, 16, 0);
1326 input_set_abs_params(sc
->sensor_dev
, ABS_RZ
, -range
, range
, 16, 0);
1327 input_abs_set_res(sc
->sensor_dev
, ABS_RX
, DS4_GYRO_RES_PER_DEG_S
);
1328 input_abs_set_res(sc
->sensor_dev
, ABS_RY
, DS4_GYRO_RES_PER_DEG_S
);
1329 input_abs_set_res(sc
->sensor_dev
, ABS_RZ
, DS4_GYRO_RES_PER_DEG_S
);
1331 __set_bit(EV_MSC
, sc
->sensor_dev
->evbit
);
1332 __set_bit(MSC_TIMESTAMP
, sc
->sensor_dev
->mscbit
);
1335 __set_bit(INPUT_PROP_ACCELEROMETER
, sc
->sensor_dev
->propbit
);
1337 ret
= input_register_device(sc
->sensor_dev
);
1344 kfree(sc
->sensor_dev
->name
);
1345 sc
->sensor_dev
->name
= NULL
;
1347 input_free_device(sc
->sensor_dev
);
1348 sc
->sensor_dev
= NULL
;
1353 static void sony_unregister_sensors(struct sony_sc
*sc
)
1355 if (!sc
->sensor_dev
)
1358 kfree(sc
->sensor_dev
->name
);
1359 sc
->sensor_dev
->name
= NULL
;
1361 input_unregister_device(sc
->sensor_dev
);
1362 sc
->sensor_dev
= NULL
;
1367 * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
1368 * to "operational". Without this, the ps3 controller will not report any
1371 static int sixaxis_set_operational_usb(struct hid_device
*hdev
)
1373 const int buf_size
=
1374 max(SIXAXIS_REPORT_0xF2_SIZE
, SIXAXIS_REPORT_0xF5_SIZE
);
1378 buf
= kmalloc(buf_size
, GFP_KERNEL
);
1382 ret
= hid_hw_raw_request(hdev
, 0xf2, buf
, SIXAXIS_REPORT_0xF2_SIZE
,
1383 HID_FEATURE_REPORT
, HID_REQ_GET_REPORT
);
1385 hid_err(hdev
, "can't set operational mode: step 1\n");
1390 * Some compatible controllers like the Speedlink Strike FX and
1391 * Gasia need another query plus an USB interrupt to get operational.
1393 ret
= hid_hw_raw_request(hdev
, 0xf5, buf
, SIXAXIS_REPORT_0xF5_SIZE
,
1394 HID_FEATURE_REPORT
, HID_REQ_GET_REPORT
);
1396 hid_err(hdev
, "can't set operational mode: step 2\n");
1400 ret
= hid_hw_output_report(hdev
, buf
, 1);
1402 hid_info(hdev
, "can't set operational mode: step 3, ignoring\n");
1412 static int sixaxis_set_operational_bt(struct hid_device
*hdev
)
1414 static const u8 report
[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
1418 buf
= kmemdup(report
, sizeof(report
), GFP_KERNEL
);
1422 ret
= hid_hw_raw_request(hdev
, buf
[0], buf
, sizeof(report
),
1423 HID_FEATURE_REPORT
, HID_REQ_SET_REPORT
);
1431 * Request DS4 calibration data for the motion sensors.
1432 * For Bluetooth this also affects the operating mode (see below).
1434 static int dualshock4_get_calibration_data(struct sony_sc
*sc
)
1438 short gyro_pitch_bias
, gyro_pitch_plus
, gyro_pitch_minus
;
1439 short gyro_yaw_bias
, gyro_yaw_plus
, gyro_yaw_minus
;
1440 short gyro_roll_bias
, gyro_roll_plus
, gyro_roll_minus
;
1441 short gyro_speed_plus
, gyro_speed_minus
;
1442 short acc_x_plus
, acc_x_minus
;
1443 short acc_y_plus
, acc_y_minus
;
1444 short acc_z_plus
, acc_z_minus
;
1448 /* For Bluetooth we use a different request, which supports CRC.
1449 * Note: in Bluetooth mode feature report 0x02 also changes the state
1450 * of the controller, so that it sends input reports of type 0x11.
1452 if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
)) {
1453 buf
= kmalloc(DS4_FEATURE_REPORT_0x02_SIZE
, GFP_KERNEL
);
1457 ret
= hid_hw_raw_request(sc
->hdev
, 0x02, buf
,
1458 DS4_FEATURE_REPORT_0x02_SIZE
,
1460 HID_REQ_GET_REPORT
);
1469 buf
= kmalloc(DS4_FEATURE_REPORT_0x05_SIZE
, GFP_KERNEL
);
1473 for (retries
= 0; retries
< 3; retries
++) {
1474 ret
= hid_hw_raw_request(sc
->hdev
, 0x05, buf
,
1475 DS4_FEATURE_REPORT_0x05_SIZE
,
1477 HID_REQ_GET_REPORT
);
1482 crc
= crc32_le(0xFFFFFFFF, &bthdr
, 1);
1483 crc
= ~crc32_le(crc
, buf
, DS4_FEATURE_REPORT_0x05_SIZE
-4);
1484 report_crc
= get_unaligned_le32(&buf
[DS4_FEATURE_REPORT_0x05_SIZE
-4]);
1485 if (crc
!= report_crc
) {
1486 hid_warn(sc
->hdev
, "DualShock 4 calibration report's CRC check failed, received crc 0x%0x != 0x%0x\n",
1489 hid_warn(sc
->hdev
, "Retrying DualShock 4 get calibration report request\n");
1501 gyro_pitch_bias
= get_unaligned_le16(&buf
[1]);
1502 gyro_yaw_bias
= get_unaligned_le16(&buf
[3]);
1503 gyro_roll_bias
= get_unaligned_le16(&buf
[5]);
1504 if (sc
->quirks
& DUALSHOCK4_CONTROLLER_USB
) {
1505 gyro_pitch_plus
= get_unaligned_le16(&buf
[7]);
1506 gyro_pitch_minus
= get_unaligned_le16(&buf
[9]);
1507 gyro_yaw_plus
= get_unaligned_le16(&buf
[11]);
1508 gyro_yaw_minus
= get_unaligned_le16(&buf
[13]);
1509 gyro_roll_plus
= get_unaligned_le16(&buf
[15]);
1510 gyro_roll_minus
= get_unaligned_le16(&buf
[17]);
1513 gyro_pitch_plus
= get_unaligned_le16(&buf
[7]);
1514 gyro_yaw_plus
= get_unaligned_le16(&buf
[9]);
1515 gyro_roll_plus
= get_unaligned_le16(&buf
[11]);
1516 gyro_pitch_minus
= get_unaligned_le16(&buf
[13]);
1517 gyro_yaw_minus
= get_unaligned_le16(&buf
[15]);
1518 gyro_roll_minus
= get_unaligned_le16(&buf
[17]);
1520 gyro_speed_plus
= get_unaligned_le16(&buf
[19]);
1521 gyro_speed_minus
= get_unaligned_le16(&buf
[21]);
1522 acc_x_plus
= get_unaligned_le16(&buf
[23]);
1523 acc_x_minus
= get_unaligned_le16(&buf
[25]);
1524 acc_y_plus
= get_unaligned_le16(&buf
[27]);
1525 acc_y_minus
= get_unaligned_le16(&buf
[29]);
1526 acc_z_plus
= get_unaligned_le16(&buf
[31]);
1527 acc_z_minus
= get_unaligned_le16(&buf
[33]);
1529 /* Set gyroscope calibration and normalization parameters.
1530 * Data values will be normalized to 1/DS4_GYRO_RES_PER_DEG_S degree/s.
1532 speed_2x
= (gyro_speed_plus
+ gyro_speed_minus
);
1533 sc
->ds4_calib_data
[0].abs_code
= ABS_RX
;
1534 sc
->ds4_calib_data
[0].bias
= gyro_pitch_bias
;
1535 sc
->ds4_calib_data
[0].sens_numer
= speed_2x
*DS4_GYRO_RES_PER_DEG_S
;
1536 sc
->ds4_calib_data
[0].sens_denom
= gyro_pitch_plus
- gyro_pitch_minus
;
1538 sc
->ds4_calib_data
[1].abs_code
= ABS_RY
;
1539 sc
->ds4_calib_data
[1].bias
= gyro_yaw_bias
;
1540 sc
->ds4_calib_data
[1].sens_numer
= speed_2x
*DS4_GYRO_RES_PER_DEG_S
;
1541 sc
->ds4_calib_data
[1].sens_denom
= gyro_yaw_plus
- gyro_yaw_minus
;
1543 sc
->ds4_calib_data
[2].abs_code
= ABS_RZ
;
1544 sc
->ds4_calib_data
[2].bias
= gyro_roll_bias
;
1545 sc
->ds4_calib_data
[2].sens_numer
= speed_2x
*DS4_GYRO_RES_PER_DEG_S
;
1546 sc
->ds4_calib_data
[2].sens_denom
= gyro_roll_plus
- gyro_roll_minus
;
1548 /* Set accelerometer calibration and normalization parameters.
1549 * Data values will be normalized to 1/DS4_ACC_RES_PER_G G.
1551 range_2g
= acc_x_plus
- acc_x_minus
;
1552 sc
->ds4_calib_data
[3].abs_code
= ABS_X
;
1553 sc
->ds4_calib_data
[3].bias
= acc_x_plus
- range_2g
/ 2;
1554 sc
->ds4_calib_data
[3].sens_numer
= 2*DS4_ACC_RES_PER_G
;
1555 sc
->ds4_calib_data
[3].sens_denom
= range_2g
;
1557 range_2g
= acc_y_plus
- acc_y_minus
;
1558 sc
->ds4_calib_data
[4].abs_code
= ABS_Y
;
1559 sc
->ds4_calib_data
[4].bias
= acc_y_plus
- range_2g
/ 2;
1560 sc
->ds4_calib_data
[4].sens_numer
= 2*DS4_ACC_RES_PER_G
;
1561 sc
->ds4_calib_data
[4].sens_denom
= range_2g
;
1563 range_2g
= acc_z_plus
- acc_z_minus
;
1564 sc
->ds4_calib_data
[5].abs_code
= ABS_Z
;
1565 sc
->ds4_calib_data
[5].bias
= acc_z_plus
- range_2g
/ 2;
1566 sc
->ds4_calib_data
[5].sens_numer
= 2*DS4_ACC_RES_PER_G
;
1567 sc
->ds4_calib_data
[5].sens_denom
= range_2g
;
1574 static void dualshock4_calibration_work(struct work_struct
*work
)
1576 struct sony_sc
*sc
= container_of(work
, struct sony_sc
, hotplug_worker
);
1577 unsigned long flags
;
1578 enum ds4_dongle_state dongle_state
;
1581 ret
= dualshock4_get_calibration_data(sc
);
1583 /* This call is very unlikely to fail for the dongle. When it
1584 * fails we are probably in a very bad state, so mark the
1585 * dongle as disabled. We will re-enable the dongle if a new
1586 * DS4 hotplug is detect from sony_raw_event as any issues
1587 * are likely resolved then (the dongle is quite stupid).
1589 hid_err(sc
->hdev
, "DualShock 4 USB dongle: calibration failed, disabling device\n");
1590 dongle_state
= DONGLE_DISABLED
;
1592 hid_info(sc
->hdev
, "DualShock 4 USB dongle: calibration completed\n");
1593 dongle_state
= DONGLE_CONNECTED
;
1596 spin_lock_irqsave(&sc
->lock
, flags
);
1597 sc
->ds4_dongle_state
= dongle_state
;
1598 spin_unlock_irqrestore(&sc
->lock
, flags
);
1601 static void sixaxis_set_leds_from_id(struct sony_sc
*sc
)
1603 static const u8 sixaxis_leds
[10][4] = {
1604 { 0x01, 0x00, 0x00, 0x00 },
1605 { 0x00, 0x01, 0x00, 0x00 },
1606 { 0x00, 0x00, 0x01, 0x00 },
1607 { 0x00, 0x00, 0x00, 0x01 },
1608 { 0x01, 0x00, 0x00, 0x01 },
1609 { 0x00, 0x01, 0x00, 0x01 },
1610 { 0x00, 0x00, 0x01, 0x01 },
1611 { 0x01, 0x00, 0x01, 0x01 },
1612 { 0x00, 0x01, 0x01, 0x01 },
1613 { 0x01, 0x01, 0x01, 0x01 }
1616 int id
= sc
->device_id
;
1618 BUILD_BUG_ON(MAX_LEDS
< ARRAY_SIZE(sixaxis_leds
[0]));
1624 memcpy(sc
->led_state
, sixaxis_leds
[id
], sizeof(sixaxis_leds
[id
]));
1627 static void dualshock4_set_leds_from_id(struct sony_sc
*sc
)
1629 /* The first 4 color/index entries match what the PS4 assigns */
1630 static const u8 color_code
[7][3] = {
1631 /* Blue */ { 0x00, 0x00, 0x40 },
1632 /* Red */ { 0x40, 0x00, 0x00 },
1633 /* Green */ { 0x00, 0x40, 0x00 },
1634 /* Pink */ { 0x20, 0x00, 0x20 },
1635 /* Orange */ { 0x02, 0x01, 0x00 },
1636 /* Teal */ { 0x00, 0x01, 0x01 },
1637 /* White */ { 0x01, 0x01, 0x01 }
1640 int id
= sc
->device_id
;
1642 BUILD_BUG_ON(MAX_LEDS
< ARRAY_SIZE(color_code
[0]));
1648 memcpy(sc
->led_state
, color_code
[id
], sizeof(color_code
[id
]));
1651 static void buzz_set_leds(struct sony_sc
*sc
)
1653 struct hid_device
*hdev
= sc
->hdev
;
1654 struct list_head
*report_list
=
1655 &hdev
->report_enum
[HID_OUTPUT_REPORT
].report_list
;
1656 struct hid_report
*report
= list_entry(report_list
->next
,
1657 struct hid_report
, list
);
1658 s32
*value
= report
->field
[0]->value
;
1660 BUILD_BUG_ON(MAX_LEDS
< 4);
1663 value
[1] = sc
->led_state
[0] ? 0xff : 0x00;
1664 value
[2] = sc
->led_state
[1] ? 0xff : 0x00;
1665 value
[3] = sc
->led_state
[2] ? 0xff : 0x00;
1666 value
[4] = sc
->led_state
[3] ? 0xff : 0x00;
1669 hid_hw_request(hdev
, report
, HID_REQ_SET_REPORT
);
1672 static void sony_set_leds(struct sony_sc
*sc
)
1674 if (!(sc
->quirks
& BUZZ_CONTROLLER
))
1675 sony_schedule_work(sc
, SONY_WORKER_STATE
);
1680 static void sony_led_set_brightness(struct led_classdev
*led
,
1681 enum led_brightness value
)
1683 struct device
*dev
= led
->dev
->parent
;
1684 struct hid_device
*hdev
= to_hid_device(dev
);
1685 struct sony_sc
*drv_data
;
1690 drv_data
= hid_get_drvdata(hdev
);
1692 hid_err(hdev
, "No device data\n");
1697 * The Sixaxis on USB will override any LED settings sent to it
1698 * and keep flashing all of the LEDs until the PS button is pressed.
1699 * Updates, even if redundant, must be always be sent to the
1700 * controller to avoid having to toggle the state of an LED just to
1701 * stop the flashing later on.
1703 force_update
= !!(drv_data
->quirks
& SIXAXIS_CONTROLLER_USB
);
1705 for (n
= 0; n
< drv_data
->led_count
; n
++) {
1706 if (led
== drv_data
->leds
[n
] && (force_update
||
1707 (value
!= drv_data
->led_state
[n
] ||
1708 drv_data
->led_delay_on
[n
] ||
1709 drv_data
->led_delay_off
[n
]))) {
1711 drv_data
->led_state
[n
] = value
;
1713 /* Setting the brightness stops the blinking */
1714 drv_data
->led_delay_on
[n
] = 0;
1715 drv_data
->led_delay_off
[n
] = 0;
1717 sony_set_leds(drv_data
);
1723 static enum led_brightness
sony_led_get_brightness(struct led_classdev
*led
)
1725 struct device
*dev
= led
->dev
->parent
;
1726 struct hid_device
*hdev
= to_hid_device(dev
);
1727 struct sony_sc
*drv_data
;
1731 drv_data
= hid_get_drvdata(hdev
);
1733 hid_err(hdev
, "No device data\n");
1737 for (n
= 0; n
< drv_data
->led_count
; n
++) {
1738 if (led
== drv_data
->leds
[n
])
1739 return drv_data
->led_state
[n
];
1745 static int sony_led_blink_set(struct led_classdev
*led
, unsigned long *delay_on
,
1746 unsigned long *delay_off
)
1748 struct device
*dev
= led
->dev
->parent
;
1749 struct hid_device
*hdev
= to_hid_device(dev
);
1750 struct sony_sc
*drv_data
= hid_get_drvdata(hdev
);
1755 hid_err(hdev
, "No device data\n");
1759 /* Max delay is 255 deciseconds or 2550 milliseconds */
1760 if (*delay_on
> 2550)
1762 if (*delay_off
> 2550)
1765 /* Blink at 1 Hz if both values are zero */
1766 if (!*delay_on
&& !*delay_off
)
1767 *delay_on
= *delay_off
= 500;
1769 new_on
= *delay_on
/ 10;
1770 new_off
= *delay_off
/ 10;
1772 for (n
= 0; n
< drv_data
->led_count
; n
++) {
1773 if (led
== drv_data
->leds
[n
])
1777 /* This LED is not registered on this device */
1778 if (n
>= drv_data
->led_count
)
1781 /* Don't schedule work if the values didn't change */
1782 if (new_on
!= drv_data
->led_delay_on
[n
] ||
1783 new_off
!= drv_data
->led_delay_off
[n
]) {
1784 drv_data
->led_delay_on
[n
] = new_on
;
1785 drv_data
->led_delay_off
[n
] = new_off
;
1786 sony_schedule_work(drv_data
, SONY_WORKER_STATE
);
1792 static void sony_leds_remove(struct sony_sc
*sc
)
1794 struct led_classdev
*led
;
1797 BUG_ON(!(sc
->quirks
& SONY_LED_SUPPORT
));
1799 for (n
= 0; n
< sc
->led_count
; n
++) {
1804 led_classdev_unregister(led
);
1811 static int sony_leds_init(struct sony_sc
*sc
)
1813 struct hid_device
*hdev
= sc
->hdev
;
1816 struct led_classdev
*led
;
1820 const char *name_fmt
;
1821 static const char * const ds4_name_str
[] = { "red", "green", "blue",
1823 u8 max_brightness
[MAX_LEDS
] = { [0 ... (MAX_LEDS
- 1)] = 1 };
1824 u8 use_hw_blink
[MAX_LEDS
] = { 0 };
1826 BUG_ON(!(sc
->quirks
& SONY_LED_SUPPORT
));
1828 if (sc
->quirks
& BUZZ_CONTROLLER
) {
1831 name_len
= strlen("::buzz#");
1832 name_fmt
= "%s::buzz%d";
1833 /* Validate expected report characteristics. */
1834 if (!hid_validate_values(hdev
, HID_OUTPUT_REPORT
, 0, 0, 7))
1836 } else if (sc
->quirks
& DUALSHOCK4_CONTROLLER
) {
1837 dualshock4_set_leds_from_id(sc
);
1838 sc
->led_state
[3] = 1;
1840 memset(max_brightness
, 255, 3);
1841 use_hw_blink
[3] = 1;
1845 } else if (sc
->quirks
& MOTION_CONTROLLER
) {
1847 memset(max_brightness
, 255, 3);
1851 } else if (sc
->quirks
& NAVIGATION_CONTROLLER
) {
1852 static const u8 navigation_leds
[4] = {0x01, 0x00, 0x00, 0x00};
1854 memcpy(sc
->led_state
, navigation_leds
, sizeof(navigation_leds
));
1856 memset(use_hw_blink
, 1, 4);
1858 name_len
= strlen("::sony#");
1859 name_fmt
= "%s::sony%d";
1861 sixaxis_set_leds_from_id(sc
);
1863 memset(use_hw_blink
, 1, 4);
1865 name_len
= strlen("::sony#");
1866 name_fmt
= "%s::sony%d";
1870 * Clear LEDs as we have no way of reading their initial state. This is
1871 * only relevant if the driver is loaded after somebody actively set the
1876 name_sz
= strlen(dev_name(&hdev
->dev
)) + name_len
+ 1;
1878 for (n
= 0; n
< sc
->led_count
; n
++) {
1881 name_sz
= strlen(dev_name(&hdev
->dev
)) + strlen(ds4_name_str
[n
]) + 2;
1883 led
= kzalloc(sizeof(struct led_classdev
) + name_sz
, GFP_KERNEL
);
1885 hid_err(hdev
, "Couldn't allocate memory for LED %d\n", n
);
1890 name
= (void *)(&led
[1]);
1892 snprintf(name
, name_sz
, name_fmt
, dev_name(&hdev
->dev
),
1895 snprintf(name
, name_sz
, name_fmt
, dev_name(&hdev
->dev
), n
+ 1);
1897 led
->brightness
= sc
->led_state
[n
];
1898 led
->max_brightness
= max_brightness
[n
];
1899 led
->flags
= LED_CORE_SUSPENDRESUME
;
1900 led
->brightness_get
= sony_led_get_brightness
;
1901 led
->brightness_set
= sony_led_set_brightness
;
1903 if (use_hw_blink
[n
])
1904 led
->blink_set
= sony_led_blink_set
;
1908 ret
= led_classdev_register(&hdev
->dev
, led
);
1910 hid_err(hdev
, "Failed to register LED %d\n", n
);
1920 sony_leds_remove(sc
);
1925 static void sixaxis_send_output_report(struct sony_sc
*sc
)
1927 static const union sixaxis_output_report_01 default_report
= {
1930 0x01, 0xff, 0x00, 0xff, 0x00,
1931 0x00, 0x00, 0x00, 0x00, 0x00,
1932 0xff, 0x27, 0x10, 0x00, 0x32,
1933 0xff, 0x27, 0x10, 0x00, 0x32,
1934 0xff, 0x27, 0x10, 0x00, 0x32,
1935 0xff, 0x27, 0x10, 0x00, 0x32,
1936 0x00, 0x00, 0x00, 0x00, 0x00
1939 struct sixaxis_output_report
*report
=
1940 (struct sixaxis_output_report
*)sc
->output_report_dmabuf
;
1943 /* Initialize the report with default values */
1944 memcpy(report
, &default_report
, sizeof(struct sixaxis_output_report
));
1946 #ifdef CONFIG_SONY_FF
1947 report
->rumble
.right_motor_on
= sc
->right
? 1 : 0;
1948 report
->rumble
.left_motor_force
= sc
->left
;
1951 report
->leds_bitmap
|= sc
->led_state
[0] << 1;
1952 report
->leds_bitmap
|= sc
->led_state
[1] << 2;
1953 report
->leds_bitmap
|= sc
->led_state
[2] << 3;
1954 report
->leds_bitmap
|= sc
->led_state
[3] << 4;
1956 /* Set flag for all leds off, required for 3rd party INTEC controller */
1957 if ((report
->leds_bitmap
& 0x1E) == 0)
1958 report
->leds_bitmap
|= 0x20;
1961 * The LEDs in the report are indexed in reverse order to their
1962 * corresponding light on the controller.
1963 * Index 0 = LED 4, index 1 = LED 3, etc...
1965 * In the case of both delay values being zero (blinking disabled) the
1966 * default report values should be used or the controller LED will be
1969 for (n
= 0; n
< 4; n
++) {
1970 if (sc
->led_delay_on
[n
] || sc
->led_delay_off
[n
]) {
1971 report
->led
[3 - n
].duty_off
= sc
->led_delay_off
[n
];
1972 report
->led
[3 - n
].duty_on
= sc
->led_delay_on
[n
];
1976 hid_hw_raw_request(sc
->hdev
, report
->report_id
, (u8
*)report
,
1977 sizeof(struct sixaxis_output_report
),
1978 HID_OUTPUT_REPORT
, HID_REQ_SET_REPORT
);
1981 static void dualshock4_send_output_report(struct sony_sc
*sc
)
1983 struct hid_device
*hdev
= sc
->hdev
;
1984 u8
*buf
= sc
->output_report_dmabuf
;
1988 * NOTE: The buf[1] field of the Bluetooth report controls
1989 * the Dualshock 4 reporting rate.
1991 * Known values include:
1993 * 0x80 - 1000hz (full speed)
1998 if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
)) {
1999 memset(buf
, 0, DS4_OUTPUT_REPORT_0x05_SIZE
);
2004 memset(buf
, 0, DS4_OUTPUT_REPORT_0x11_SIZE
);
2006 buf
[1] = 0xC0; /* HID + CRC */
2011 #ifdef CONFIG_SONY_FF
2012 buf
[offset
++] = sc
->right
;
2013 buf
[offset
++] = sc
->left
;
2018 /* LED 3 is the global control */
2019 if (sc
->led_state
[3]) {
2020 buf
[offset
++] = sc
->led_state
[0];
2021 buf
[offset
++] = sc
->led_state
[1];
2022 buf
[offset
++] = sc
->led_state
[2];
2027 /* If both delay values are zero the DualShock 4 disables blinking. */
2028 buf
[offset
++] = sc
->led_delay_on
[3];
2029 buf
[offset
++] = sc
->led_delay_off
[3];
2031 if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
))
2032 hid_hw_output_report(hdev
, buf
, DS4_OUTPUT_REPORT_0x05_SIZE
);
2034 /* CRC generation */
2038 crc
= crc32_le(0xFFFFFFFF, &bthdr
, 1);
2039 crc
= ~crc32_le(crc
, buf
, DS4_OUTPUT_REPORT_0x11_SIZE
-4);
2040 put_unaligned_le32(crc
, &buf
[74]);
2041 hid_hw_output_report(hdev
, buf
, DS4_OUTPUT_REPORT_0x11_SIZE
);
2045 static void motion_send_output_report(struct sony_sc
*sc
)
2047 struct hid_device
*hdev
= sc
->hdev
;
2048 struct motion_output_report_02
*report
=
2049 (struct motion_output_report_02
*)sc
->output_report_dmabuf
;
2051 memset(report
, 0, MOTION_REPORT_0x02_SIZE
);
2053 report
->type
= 0x02; /* set leds */
2054 report
->r
= sc
->led_state
[0];
2055 report
->g
= sc
->led_state
[1];
2056 report
->b
= sc
->led_state
[2];
2058 #ifdef CONFIG_SONY_FF
2059 report
->rumble
= max(sc
->right
, sc
->left
);
2062 hid_hw_output_report(hdev
, (u8
*)report
, MOTION_REPORT_0x02_SIZE
);
2065 static inline void sony_send_output_report(struct sony_sc
*sc
)
2067 if (sc
->send_output_report
)
2068 sc
->send_output_report(sc
);
2071 static void sony_state_worker(struct work_struct
*work
)
2073 struct sony_sc
*sc
= container_of(work
, struct sony_sc
, state_worker
);
2075 sc
->send_output_report(sc
);
2078 static int sony_allocate_output_report(struct sony_sc
*sc
)
2080 if ((sc
->quirks
& SIXAXIS_CONTROLLER
) ||
2081 (sc
->quirks
& NAVIGATION_CONTROLLER
))
2082 sc
->output_report_dmabuf
=
2083 kmalloc(sizeof(union sixaxis_output_report_01
),
2085 else if (sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
)
2086 sc
->output_report_dmabuf
= kmalloc(DS4_OUTPUT_REPORT_0x11_SIZE
,
2088 else if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
))
2089 sc
->output_report_dmabuf
= kmalloc(DS4_OUTPUT_REPORT_0x05_SIZE
,
2091 else if (sc
->quirks
& MOTION_CONTROLLER
)
2092 sc
->output_report_dmabuf
= kmalloc(MOTION_REPORT_0x02_SIZE
,
2097 if (!sc
->output_report_dmabuf
)
2103 #ifdef CONFIG_SONY_FF
2104 static int sony_play_effect(struct input_dev
*dev
, void *data
,
2105 struct ff_effect
*effect
)
2107 struct hid_device
*hid
= input_get_drvdata(dev
);
2108 struct sony_sc
*sc
= hid_get_drvdata(hid
);
2110 if (effect
->type
!= FF_RUMBLE
)
2113 sc
->left
= effect
->u
.rumble
.strong_magnitude
/ 256;
2114 sc
->right
= effect
->u
.rumble
.weak_magnitude
/ 256;
2116 sony_schedule_work(sc
, SONY_WORKER_STATE
);
2120 static int sony_init_ff(struct sony_sc
*sc
)
2122 struct hid_input
*hidinput
= list_entry(sc
->hdev
->inputs
.next
,
2123 struct hid_input
, list
);
2124 struct input_dev
*input_dev
= hidinput
->input
;
2126 input_set_capability(input_dev
, EV_FF
, FF_RUMBLE
);
2127 return input_ff_create_memless(input_dev
, NULL
, sony_play_effect
);
2131 static int sony_init_ff(struct sony_sc
*sc
)
2138 static int sony_battery_get_property(struct power_supply
*psy
,
2139 enum power_supply_property psp
,
2140 union power_supply_propval
*val
)
2142 struct sony_sc
*sc
= power_supply_get_drvdata(psy
);
2143 unsigned long flags
;
2145 u8 battery_charging
, battery_capacity
, cable_state
;
2147 spin_lock_irqsave(&sc
->lock
, flags
);
2148 battery_charging
= sc
->battery_charging
;
2149 battery_capacity
= sc
->battery_capacity
;
2150 cable_state
= sc
->cable_state
;
2151 spin_unlock_irqrestore(&sc
->lock
, flags
);
2154 case POWER_SUPPLY_PROP_PRESENT
:
2157 case POWER_SUPPLY_PROP_SCOPE
:
2158 val
->intval
= POWER_SUPPLY_SCOPE_DEVICE
;
2160 case POWER_SUPPLY_PROP_CAPACITY
:
2161 val
->intval
= battery_capacity
;
2163 case POWER_SUPPLY_PROP_STATUS
:
2164 if (battery_charging
)
2165 val
->intval
= POWER_SUPPLY_STATUS_CHARGING
;
2167 if (battery_capacity
== 100 && cable_state
)
2168 val
->intval
= POWER_SUPPLY_STATUS_FULL
;
2170 val
->intval
= POWER_SUPPLY_STATUS_DISCHARGING
;
2179 static int sony_battery_probe(struct sony_sc
*sc
, int append_dev_id
)
2181 const char *battery_str_fmt
= append_dev_id
?
2182 "sony_controller_battery_%pMR_%i" :
2183 "sony_controller_battery_%pMR";
2184 struct power_supply_config psy_cfg
= { .drv_data
= sc
, };
2185 struct hid_device
*hdev
= sc
->hdev
;
2189 * Set the default battery level to 100% to avoid low battery warnings
2190 * if the battery is polled before the first device report is received.
2192 sc
->battery_capacity
= 100;
2194 sc
->battery_desc
.properties
= sony_battery_props
;
2195 sc
->battery_desc
.num_properties
= ARRAY_SIZE(sony_battery_props
);
2196 sc
->battery_desc
.get_property
= sony_battery_get_property
;
2197 sc
->battery_desc
.type
= POWER_SUPPLY_TYPE_BATTERY
;
2198 sc
->battery_desc
.use_for_apm
= 0;
2199 sc
->battery_desc
.name
= kasprintf(GFP_KERNEL
, battery_str_fmt
,
2200 sc
->mac_address
, sc
->device_id
);
2201 if (!sc
->battery_desc
.name
)
2204 sc
->battery
= power_supply_register(&hdev
->dev
, &sc
->battery_desc
,
2206 if (IS_ERR(sc
->battery
)) {
2207 ret
= PTR_ERR(sc
->battery
);
2208 hid_err(hdev
, "Unable to register battery device\n");
2212 power_supply_powers(sc
->battery
, &hdev
->dev
);
2216 kfree(sc
->battery_desc
.name
);
2217 sc
->battery_desc
.name
= NULL
;
2221 static void sony_battery_remove(struct sony_sc
*sc
)
2223 if (!sc
->battery_desc
.name
)
2226 power_supply_unregister(sc
->battery
);
2227 kfree(sc
->battery_desc
.name
);
2228 sc
->battery_desc
.name
= NULL
;
2232 * If a controller is plugged in via USB while already connected via Bluetooth
2233 * it will show up as two devices. A global list of connected controllers and
2234 * their MAC addresses is maintained to ensure that a device is only connected
2237 * Some USB-only devices masquerade as Sixaxis controllers and all have the
2238 * same dummy Bluetooth address, so a comparison of the connection type is
2239 * required. Devices are only rejected in the case where two devices have
2240 * matching Bluetooth addresses on different bus types.
2242 static inline int sony_compare_connection_type(struct sony_sc
*sc0
,
2243 struct sony_sc
*sc1
)
2245 const int sc0_not_bt
= !(sc0
->quirks
& SONY_BT_DEVICE
);
2246 const int sc1_not_bt
= !(sc1
->quirks
& SONY_BT_DEVICE
);
2248 return sc0_not_bt
== sc1_not_bt
;
2251 static int sony_check_add_dev_list(struct sony_sc
*sc
)
2253 struct sony_sc
*entry
;
2254 unsigned long flags
;
2257 spin_lock_irqsave(&sony_dev_list_lock
, flags
);
2259 list_for_each_entry(entry
, &sony_device_list
, list_node
) {
2260 ret
= memcmp(sc
->mac_address
, entry
->mac_address
,
2261 sizeof(sc
->mac_address
));
2263 if (sony_compare_connection_type(sc
, entry
)) {
2268 "controller with MAC address %pMR already connected\n",
2276 list_add(&(sc
->list_node
), &sony_device_list
);
2279 spin_unlock_irqrestore(&sony_dev_list_lock
, flags
);
2283 static void sony_remove_dev_list(struct sony_sc
*sc
)
2285 unsigned long flags
;
2287 if (sc
->list_node
.next
) {
2288 spin_lock_irqsave(&sony_dev_list_lock
, flags
);
2289 list_del(&(sc
->list_node
));
2290 spin_unlock_irqrestore(&sony_dev_list_lock
, flags
);
2294 static int sony_get_bt_devaddr(struct sony_sc
*sc
)
2298 /* HIDP stores the device MAC address as a string in the uniq field. */
2299 ret
= strlen(sc
->hdev
->uniq
);
2303 ret
= sscanf(sc
->hdev
->uniq
,
2304 "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
2305 &sc
->mac_address
[5], &sc
->mac_address
[4], &sc
->mac_address
[3],
2306 &sc
->mac_address
[2], &sc
->mac_address
[1], &sc
->mac_address
[0]);
2314 static int sony_check_add(struct sony_sc
*sc
)
2319 if ((sc
->quirks
& DUALSHOCK4_CONTROLLER_BT
) ||
2320 (sc
->quirks
& MOTION_CONTROLLER_BT
) ||
2321 (sc
->quirks
& NAVIGATION_CONTROLLER_BT
) ||
2322 (sc
->quirks
& SIXAXIS_CONTROLLER_BT
)) {
2324 * sony_get_bt_devaddr() attempts to parse the Bluetooth MAC
2325 * address from the uniq string where HIDP stores it.
2326 * As uniq cannot be guaranteed to be a MAC address in all cases
2327 * a failure of this function should not prevent the connection.
2329 if (sony_get_bt_devaddr(sc
) < 0) {
2330 hid_warn(sc
->hdev
, "UNIQ does not contain a MAC address; duplicate check skipped\n");
2333 } else if (sc
->quirks
& (DUALSHOCK4_CONTROLLER_USB
| DUALSHOCK4_DONGLE
)) {
2334 buf
= kmalloc(DS4_FEATURE_REPORT_0x81_SIZE
, GFP_KERNEL
);
2339 * The MAC address of a DS4 controller connected via USB can be
2340 * retrieved with feature report 0x81. The address begins at
2343 ret
= hid_hw_raw_request(sc
->hdev
, 0x81, buf
,
2344 DS4_FEATURE_REPORT_0x81_SIZE
, HID_FEATURE_REPORT
,
2345 HID_REQ_GET_REPORT
);
2347 if (ret
!= DS4_FEATURE_REPORT_0x81_SIZE
) {
2348 hid_err(sc
->hdev
, "failed to retrieve feature report 0x81 with the DualShock 4 MAC address\n");
2349 ret
= ret
< 0 ? ret
: -EINVAL
;
2353 memcpy(sc
->mac_address
, &buf
[1], sizeof(sc
->mac_address
));
2355 snprintf(sc
->hdev
->uniq
, sizeof(sc
->hdev
->uniq
),
2356 "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
2357 sc
->mac_address
[5], sc
->mac_address
[4],
2358 sc
->mac_address
[3], sc
->mac_address
[2],
2359 sc
->mac_address
[1], sc
->mac_address
[0]);
2360 } else if ((sc
->quirks
& SIXAXIS_CONTROLLER_USB
) ||
2361 (sc
->quirks
& NAVIGATION_CONTROLLER_USB
)) {
2362 buf
= kmalloc(SIXAXIS_REPORT_0xF2_SIZE
, GFP_KERNEL
);
2367 * The MAC address of a Sixaxis controller connected via USB can
2368 * be retrieved with feature report 0xf2. The address begins at
2371 ret
= hid_hw_raw_request(sc
->hdev
, 0xf2, buf
,
2372 SIXAXIS_REPORT_0xF2_SIZE
, HID_FEATURE_REPORT
,
2373 HID_REQ_GET_REPORT
);
2375 if (ret
!= SIXAXIS_REPORT_0xF2_SIZE
) {
2376 hid_err(sc
->hdev
, "failed to retrieve feature report 0xf2 with the Sixaxis MAC address\n");
2377 ret
= ret
< 0 ? ret
: -EINVAL
;
2382 * The Sixaxis device MAC in the report is big-endian and must
2385 for (n
= 0; n
< 6; n
++)
2386 sc
->mac_address
[5-n
] = buf
[4+n
];
2388 snprintf(sc
->hdev
->uniq
, sizeof(sc
->hdev
->uniq
),
2389 "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
2390 sc
->mac_address
[5], sc
->mac_address
[4],
2391 sc
->mac_address
[3], sc
->mac_address
[2],
2392 sc
->mac_address
[1], sc
->mac_address
[0]);
2397 ret
= sony_check_add_dev_list(sc
);
2406 static int sony_set_device_id(struct sony_sc
*sc
)
2411 * Only DualShock 4 or Sixaxis controllers get an id.
2412 * All others are set to -1.
2414 if ((sc
->quirks
& SIXAXIS_CONTROLLER
) ||
2415 (sc
->quirks
& DUALSHOCK4_CONTROLLER
)) {
2416 ret
= ida_simple_get(&sony_device_id_allocator
, 0, 0,
2422 sc
->device_id
= ret
;
2430 static void sony_release_device_id(struct sony_sc
*sc
)
2432 if (sc
->device_id
>= 0) {
2433 ida_simple_remove(&sony_device_id_allocator
, sc
->device_id
);
2438 static inline void sony_init_output_report(struct sony_sc
*sc
,
2439 void (*send_output_report
)(struct sony_sc
*))
2441 sc
->send_output_report
= send_output_report
;
2443 if (!sc
->state_worker_initialized
)
2444 INIT_WORK(&sc
->state_worker
, sony_state_worker
);
2446 sc
->state_worker_initialized
= 1;
2449 static inline void sony_cancel_work_sync(struct sony_sc
*sc
)
2451 if (sc
->hotplug_worker_initialized
)
2452 cancel_work_sync(&sc
->hotplug_worker
);
2453 if (sc
->state_worker_initialized
)
2454 cancel_work_sync(&sc
->state_worker
);
2457 static int sony_input_configured(struct hid_device
*hdev
,
2458 struct hid_input
*hidinput
)
2460 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
2464 ret
= sony_set_device_id(sc
);
2466 hid_err(hdev
, "failed to allocate the device id\n");
2470 ret
= append_dev_id
= sony_check_add(sc
);
2474 ret
= sony_allocate_output_report(sc
);
2476 hid_err(hdev
, "failed to allocate the output report buffer\n");
2480 if (sc
->quirks
& NAVIGATION_CONTROLLER_USB
) {
2482 * The Sony Sixaxis does not handle HID Output Reports on the
2483 * Interrupt EP like it could, so we need to force HID Output
2484 * Reports to use HID_REQ_SET_REPORT on the Control EP.
2486 * There is also another issue about HID Output Reports via USB,
2487 * the Sixaxis does not want the report_id as part of the data
2488 * packet, so we have to discard buf[0] when sending the actual
2489 * control message, even for numbered reports, humpf!
2491 * Additionally, the Sixaxis on USB isn't properly initialized
2492 * until the PS logo button is pressed and as such won't retain
2493 * any state set by an output report, so the initial
2494 * configuration report is deferred until the first input
2497 hdev
->quirks
|= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP
;
2498 hdev
->quirks
|= HID_QUIRK_SKIP_OUTPUT_REPORT_ID
;
2499 sc
->defer_initialization
= 1;
2501 ret
= sixaxis_set_operational_usb(hdev
);
2503 hid_err(hdev
, "Failed to set controller into operational mode\n");
2507 sony_init_output_report(sc
, sixaxis_send_output_report
);
2508 } else if (sc
->quirks
& NAVIGATION_CONTROLLER_BT
) {
2510 * The Navigation controller wants output reports sent on the ctrl
2511 * endpoint when connected via Bluetooth.
2513 hdev
->quirks
|= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP
;
2515 ret
= sixaxis_set_operational_bt(hdev
);
2517 hid_err(hdev
, "Failed to set controller into operational mode\n");
2521 sony_init_output_report(sc
, sixaxis_send_output_report
);
2522 } else if (sc
->quirks
& SIXAXIS_CONTROLLER_USB
) {
2524 * The Sony Sixaxis does not handle HID Output Reports on the
2525 * Interrupt EP and the device only becomes active when the
2526 * PS button is pressed. See comment for Navigation controller
2527 * above for more details.
2529 hdev
->quirks
|= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP
;
2530 hdev
->quirks
|= HID_QUIRK_SKIP_OUTPUT_REPORT_ID
;
2531 sc
->defer_initialization
= 1;
2533 ret
= sixaxis_set_operational_usb(hdev
);
2535 hid_err(hdev
, "Failed to set controller into operational mode\n");
2539 ret
= sony_register_sensors(sc
);
2542 "Unable to initialize motion sensors: %d\n", ret
);
2546 sony_init_output_report(sc
, sixaxis_send_output_report
);
2547 } else if (sc
->quirks
& SIXAXIS_CONTROLLER_BT
) {
2549 * The Sixaxis wants output reports sent on the ctrl endpoint
2550 * when connected via Bluetooth.
2552 hdev
->quirks
|= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP
;
2554 ret
= sixaxis_set_operational_bt(hdev
);
2556 hid_err(hdev
, "Failed to set controller into operational mode\n");
2560 ret
= sony_register_sensors(sc
);
2563 "Unable to initialize motion sensors: %d\n", ret
);
2567 sony_init_output_report(sc
, sixaxis_send_output_report
);
2568 } else if (sc
->quirks
& DUALSHOCK4_CONTROLLER
) {
2569 ret
= dualshock4_get_calibration_data(sc
);
2571 hid_err(hdev
, "Failed to get calibration data from Dualshock 4\n");
2576 * The Dualshock 4 touchpad supports 2 touches and has a
2577 * resolution of 1920x942 (44.86 dots/mm).
2579 ret
= sony_register_touchpad(sc
, 2, 1920, 942);
2582 "Unable to initialize multi-touch slots: %d\n",
2587 ret
= sony_register_sensors(sc
);
2590 "Unable to initialize motion sensors: %d\n", ret
);
2594 if (sc
->quirks
& DUALSHOCK4_DONGLE
) {
2595 INIT_WORK(&sc
->hotplug_worker
, dualshock4_calibration_work
);
2596 sc
->hotplug_worker_initialized
= 1;
2597 sc
->ds4_dongle_state
= DONGLE_DISCONNECTED
;
2600 sony_init_output_report(sc
, dualshock4_send_output_report
);
2601 } else if (sc
->quirks
& MOTION_CONTROLLER
) {
2602 sony_init_output_report(sc
, motion_send_output_report
);
2610 if (sc
->quirks
& SONY_LED_SUPPORT
) {
2611 ret
= sony_leds_init(sc
);
2616 if (sc
->quirks
& SONY_BATTERY_SUPPORT
) {
2617 ret
= sony_battery_probe(sc
, append_dev_id
);
2621 /* Open the device to receive reports with battery info */
2622 ret
= hid_hw_open(hdev
);
2624 hid_err(hdev
, "hw open failed\n");
2629 if (sc
->quirks
& SONY_FF_SUPPORT
) {
2630 ret
= sony_init_ff(sc
);
2639 if (sc
->quirks
& SONY_LED_SUPPORT
)
2640 sony_leds_remove(sc
);
2641 if (sc
->quirks
& SONY_BATTERY_SUPPORT
)
2642 sony_battery_remove(sc
);
2643 sony_cancel_work_sync(sc
);
2644 kfree(sc
->output_report_dmabuf
);
2645 sony_remove_dev_list(sc
);
2646 sony_release_device_id(sc
);
2651 static int sony_probe(struct hid_device
*hdev
, const struct hid_device_id
*id
)
2654 unsigned long quirks
= id
->driver_data
;
2656 unsigned int connect_mask
= HID_CONNECT_DEFAULT
;
2658 if (!strcmp(hdev
->name
, "FutureMax Dance Mat"))
2659 quirks
|= FUTUREMAX_DANCE_MAT
;
2661 sc
= devm_kzalloc(&hdev
->dev
, sizeof(*sc
), GFP_KERNEL
);
2663 hid_err(hdev
, "can't alloc sony descriptor\n");
2667 spin_lock_init(&sc
->lock
);
2669 sc
->quirks
= quirks
;
2670 hid_set_drvdata(hdev
, sc
);
2673 ret
= hid_parse(hdev
);
2675 hid_err(hdev
, "parse failed\n");
2679 if (sc
->quirks
& VAIO_RDESC_CONSTANT
)
2680 connect_mask
|= HID_CONNECT_HIDDEV_FORCE
;
2681 else if (sc
->quirks
& SIXAXIS_CONTROLLER
)
2682 connect_mask
|= HID_CONNECT_HIDDEV_FORCE
;
2684 /* Patch the hw version on DS3/4 compatible devices, so applications can
2685 * distinguish between the default HID mappings and the mappings defined
2686 * by the Linux game controller spec. This is important for the SDL2
2687 * library, which has a game controller database, which uses device ids
2688 * in combination with version as a key.
2690 if (sc
->quirks
& (SIXAXIS_CONTROLLER
| DUALSHOCK4_CONTROLLER
))
2691 hdev
->version
|= 0x8000;
2693 ret
= hid_hw_start(hdev
, connect_mask
);
2695 hid_err(hdev
, "hw start failed\n");
2699 /* sony_input_configured can fail, but this doesn't result
2700 * in hid_hw_start failures (intended). Check whether
2701 * the HID layer claimed the device else fail.
2702 * We don't know the actual reason for the failure, most
2703 * likely it is due to EEXIST in case of double connection
2704 * of USB and Bluetooth, but could have been due to ENOMEM
2705 * or other reasons as well.
2707 if (!(hdev
->claimed
& HID_CLAIMED_INPUT
)) {
2708 hid_err(hdev
, "failed to claim input\n");
2715 static void sony_remove(struct hid_device
*hdev
)
2717 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
2721 if (sc
->quirks
& SONY_LED_SUPPORT
)
2722 sony_leds_remove(sc
);
2724 if (sc
->quirks
& SONY_BATTERY_SUPPORT
)
2725 sony_battery_remove(sc
);
2728 sony_unregister_touchpad(sc
);
2731 sony_unregister_sensors(sc
);
2734 sony_unregister_sensors(sc
);
2736 sony_cancel_work_sync(sc
);
2738 kfree(sc
->output_report_dmabuf
);
2740 sony_remove_dev_list(sc
);
2742 sony_release_device_id(sc
);
2749 static int sony_suspend(struct hid_device
*hdev
, pm_message_t message
)
2751 #ifdef CONFIG_SONY_FF
2753 /* On suspend stop any running force-feedback events */
2754 if (SONY_FF_SUPPORT
) {
2755 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
2757 sc
->left
= sc
->right
= 0;
2758 sony_send_output_report(sc
);
2765 static int sony_resume(struct hid_device
*hdev
)
2767 struct sony_sc
*sc
= hid_get_drvdata(hdev
);
2770 * The Sixaxis and navigation controllers on USB need to be
2771 * reinitialized on resume or they won't behave properly.
2773 if ((sc
->quirks
& SIXAXIS_CONTROLLER_USB
) ||
2774 (sc
->quirks
& NAVIGATION_CONTROLLER_USB
)) {
2775 sixaxis_set_operational_usb(sc
->hdev
);
2776 sc
->defer_initialization
= 1;
2784 static const struct hid_device_id sony_devices
[] = {
2785 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS3_CONTROLLER
),
2786 .driver_data
= SIXAXIS_CONTROLLER_USB
},
2787 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER
),
2788 .driver_data
= NAVIGATION_CONTROLLER_USB
},
2789 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER
),
2790 .driver_data
= NAVIGATION_CONTROLLER_BT
},
2791 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_MOTION_CONTROLLER
),
2792 .driver_data
= MOTION_CONTROLLER_USB
},
2793 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_MOTION_CONTROLLER
),
2794 .driver_data
= MOTION_CONTROLLER_BT
},
2795 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS3_CONTROLLER
),
2796 .driver_data
= SIXAXIS_CONTROLLER_BT
},
2797 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE
),
2798 .driver_data
= VAIO_RDESC_CONSTANT
},
2799 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE
),
2800 .driver_data
= VAIO_RDESC_CONSTANT
},
2802 * Wired Buzz Controller. Reported as Sony Hub from its USB ID and as
2803 * Logitech joystick from the device descriptor.
2805 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER
),
2806 .driver_data
= BUZZ_CONTROLLER
},
2807 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER
),
2808 .driver_data
= BUZZ_CONTROLLER
},
2809 /* PS3 BD Remote Control */
2810 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS3_BDREMOTE
),
2811 .driver_data
= PS3REMOTE
},
2812 /* Logitech Harmony Adapter for PS3 */
2813 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH
, USB_DEVICE_ID_LOGITECH_HARMONY_PS3
),
2814 .driver_data
= PS3REMOTE
},
2815 /* SMK-Link PS3 BD Remote Control */
2816 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK
, USB_DEVICE_ID_SMK_PS3_BDREMOTE
),
2817 .driver_data
= PS3REMOTE
},
2818 /* Sony Dualshock 4 controllers for PS4 */
2819 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER
),
2820 .driver_data
= DUALSHOCK4_CONTROLLER_USB
},
2821 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER
),
2822 .driver_data
= DUALSHOCK4_CONTROLLER_BT
},
2823 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2
),
2824 .driver_data
= DUALSHOCK4_CONTROLLER_USB
},
2825 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2
),
2826 .driver_data
= DUALSHOCK4_CONTROLLER_BT
},
2827 { HID_USB_DEVICE(USB_VENDOR_ID_SONY
, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE
),
2828 .driver_data
= DUALSHOCK4_DONGLE
},
2829 /* Nyko Core Controller for PS3 */
2830 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE
, USB_DEVICE_ID_SINO_LITE_CONTROLLER
),
2831 .driver_data
= SIXAXIS_CONTROLLER_USB
| SINO_LITE_CONTROLLER
},
2834 MODULE_DEVICE_TABLE(hid
, sony_devices
);
2836 static struct hid_driver sony_driver
= {
2838 .id_table
= sony_devices
,
2839 .input_mapping
= sony_mapping
,
2840 .input_configured
= sony_input_configured
,
2841 .probe
= sony_probe
,
2842 .remove
= sony_remove
,
2843 .report_fixup
= sony_report_fixup
,
2844 .raw_event
= sony_raw_event
,
2847 .suspend
= sony_suspend
,
2848 .resume
= sony_resume
,
2849 .reset_resume
= sony_resume
,
2853 static int __init
sony_init(void)
2855 dbg_hid("Sony:%s\n", __func__
);
2857 return hid_register_driver(&sony_driver
);
2860 static void __exit
sony_exit(void)
2862 dbg_hid("Sony:%s\n", __func__
);
2864 hid_unregister_driver(&sony_driver
);
2865 ida_destroy(&sony_device_id_allocator
);
2867 module_init(sony_init
);
2868 module_exit(sony_exit
);
2870 MODULE_LICENSE("GPL");