2 * HID driver for Sony / PS2 / PS3 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>
14 * This program is free software; you can redistribute it and/or modify it
15 * under the terms of the GNU General Public License as published by the Free
16 * Software Foundation; either version 2 of the License, or (at your option)
20 /* NOTE: in order for the Sony PS3 BD Remote Control to be found by
21 * a Bluetooth host, the key combination Start+Enter has to be kept pressed
22 * for about 7 seconds with the Bluetooth Host Controller in discovering mode.
24 * There will be no PIN request from the device.
27 #include <linux/device.h>
28 #include <linux/hid.h>
29 #include <linux/module.h>
30 #include <linux/slab.h>
31 #include <linux/usb.h>
32 #include <linux/leds.h>
36 #define VAIO_RDESC_CONSTANT BIT(0)
37 #define SIXAXIS_CONTROLLER_USB BIT(1)
38 #define SIXAXIS_CONTROLLER_BT BIT(2)
39 #define BUZZ_CONTROLLER BIT(3)
40 #define PS3REMOTE BIT(4)
41 #define DUALSHOCK4_CONTROLLER_USB BIT(5)
42 #define DUALSHOCK4_CONTROLLER_BT BIT(6)
44 #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER_USB | BUZZ_CONTROLLER | DUALSHOCK4_CONTROLLER_USB)
48 static const u8 sixaxis_rdesc_fixup[] = {
49 0x95, 0x13, 0x09, 0x01, 0x81, 0x02, 0x95, 0x0C,
50 0x81, 0x01, 0x75, 0x10, 0x95, 0x04, 0x26, 0xFF,
51 0x03, 0x46, 0xFF, 0x03, 0x09, 0x01, 0x81, 0x02
54 static const u8 sixaxis_rdesc_fixup2[] = {
55 0x05, 0x01, 0x09, 0x04, 0xa1, 0x01, 0xa1, 0x02,
56 0x85, 0x01, 0x75, 0x08, 0x95, 0x01, 0x15, 0x00,
57 0x26, 0xff, 0x00, 0x81, 0x03, 0x75, 0x01, 0x95,
58 0x13, 0x15, 0x00, 0x25, 0x01, 0x35, 0x00, 0x45,
59 0x01, 0x05, 0x09, 0x19, 0x01, 0x29, 0x13, 0x81,
60 0x02, 0x75, 0x01, 0x95, 0x0d, 0x06, 0x00, 0xff,
61 0x81, 0x03, 0x15, 0x00, 0x26, 0xff, 0x00, 0x05,
62 0x01, 0x09, 0x01, 0xa1, 0x00, 0x75, 0x08, 0x95,
63 0x04, 0x35, 0x00, 0x46, 0xff, 0x00, 0x09, 0x30,
64 0x09, 0x31, 0x09, 0x32, 0x09, 0x35, 0x81, 0x02,
65 0xc0, 0x05, 0x01, 0x95, 0x13, 0x09, 0x01, 0x81,
66 0x02, 0x95, 0x0c, 0x81, 0x01, 0x75, 0x10, 0x95,
67 0x04, 0x26, 0xff, 0x03, 0x46, 0xff, 0x03, 0x09,
68 0x01, 0x81, 0x02, 0xc0, 0xa1, 0x02, 0x85, 0x02,
69 0x75, 0x08, 0x95, 0x30, 0x09, 0x01, 0xb1, 0x02,
70 0xc0, 0xa1, 0x02, 0x85, 0xee, 0x75, 0x08, 0x95,
71 0x30, 0x09, 0x01, 0xb1, 0x02, 0xc0, 0xa1, 0x02,
72 0x85, 0xef, 0x75, 0x08, 0x95, 0x30, 0x09, 0x01,
73 0xb1, 0x02, 0xc0, 0xc0,
76 static __u8 ps3remote_rdesc[] = {
77 0x05, 0x01, /* GUsagePage Generic Desktop */
78 0x09, 0x05, /* LUsage 0x05 [Game Pad] */
79 0xA1, 0x01, /* MCollection Application (mouse, keyboard) */
81 /* Use collection 1 for joypad buttons */
82 0xA1, 0x02, /* MCollection Logical (interrelated data) */
84 /* Ignore the 1st byte, maybe it is used for a controller
85 * number but it's not needed for correct operation */
86 0x75, 0x08, /* GReportSize 0x08 [8] */
87 0x95, 0x01, /* GReportCount 0x01 [1] */
88 0x81, 0x01, /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
90 /* Bytes from 2nd to 4th are a bitmap for joypad buttons, for these
91 * buttons multiple keypresses are allowed */
92 0x05, 0x09, /* GUsagePage Button */
93 0x19, 0x01, /* LUsageMinimum 0x01 [Button 1 (primary/trigger)] */
94 0x29, 0x18, /* LUsageMaximum 0x18 [Button 24] */
95 0x14, /* GLogicalMinimum [0] */
96 0x25, 0x01, /* GLogicalMaximum 0x01 [1] */
97 0x75, 0x01, /* GReportSize 0x01 [1] */
98 0x95, 0x18, /* GReportCount 0x18 [24] */
99 0x81, 0x02, /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
101 0xC0, /* MEndCollection */
103 /* Use collection 2 for remote control buttons */
104 0xA1, 0x02, /* MCollection Logical (interrelated data) */
106 /* 5th byte is used for remote control buttons */
107 0x05, 0x09, /* GUsagePage Button */
108 0x18, /* LUsageMinimum [No button pressed] */
109 0x29, 0xFE, /* LUsageMaximum 0xFE [Button 254] */
110 0x14, /* GLogicalMinimum [0] */
111 0x26, 0xFE, 0x00, /* GLogicalMaximum 0x00FE [254] */
112 0x75, 0x08, /* GReportSize 0x08 [8] */
113 0x95, 0x01, /* GReportCount 0x01 [1] */
116 /* Ignore bytes from 6th to 11th, 6th to 10th are always constant at
117 * 0xff and 11th is for press indication */
118 0x75, 0x08, /* GReportSize 0x08 [8] */
119 0x95, 0x06, /* GReportCount 0x06 [6] */
120 0x81, 0x01, /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
122 /* 12th byte is for battery strength */
123 0x05, 0x06, /* GUsagePage Generic Device Controls */
124 0x09, 0x20, /* LUsage 0x20 [Battery Strength] */
125 0x14, /* GLogicalMinimum [0] */
126 0x25, 0x05, /* GLogicalMaximum 0x05 [5] */
127 0x75, 0x08, /* GReportSize 0x08 [8] */
128 0x95, 0x01, /* GReportCount 0x01 [1] */
129 0x81, 0x02, /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
131 0xC0, /* MEndCollection */
133 0xC0 /* MEndCollection [Game Pad] */
136 static const unsigned int ps3remote_keymap_joypad_buttons[] = {
138 [0x02] = BTN_THUMBL, /* L3 */
139 [0x03] = BTN_THUMBR, /* R3 */
145 [0x09] = BTN_TL2, /* L2 */
146 [0x0a] = BTN_TR2, /* R2 */
147 [0x0b] = BTN_TL, /* L1 */
148 [0x0c] = BTN_TR, /* R1 */
149 [0x0d] = KEY_OPTION, /* options/triangle */
150 [0x0e] = KEY_BACK, /* back/circle */
151 [0x0f] = BTN_0, /* cross */
152 [0x10] = KEY_SCREEN, /* view/square */
153 [0x11] = KEY_HOMEPAGE, /* PS button */
156 static const unsigned int ps3remote_keymap_remote_buttons[] = {
167 [0x0e] = KEY_ESC, /* return */
169 [0x16] = KEY_EJECTCD,
170 [0x1a] = KEY_MENU, /* top menu */
172 [0x30] = KEY_PREVIOUS,
175 [0x33] = KEY_REWIND, /* scan back */
176 [0x34] = KEY_FORWARD, /* scan forward */
179 [0x40] = KEY_CONTEXT_MENU, /* pop up/menu */
180 [0x60] = KEY_FRAMEBACK, /* slow/step back */
181 [0x61] = KEY_FRAMEFORWARD, /* slow/step forward */
182 [0x63] = KEY_SUBTITLE,
185 [0x70] = KEY_INFO, /* display */
192 static const unsigned int buzz_keymap[] = {
193 /* The controller has 4 remote buzzers, each with one LED and 5
196 * We use the mapping chosen by the controller, which is:
199 * -------------------
206 * So, for example, the orange button on the third buzzer is mapped to
207 * BTN_TRIGGER_HAPPY14
209 [ 1] = BTN_TRIGGER_HAPPY1,
210 [ 2] = BTN_TRIGGER_HAPPY2,
211 [ 3] = BTN_TRIGGER_HAPPY3,
212 [ 4] = BTN_TRIGGER_HAPPY4,
213 [ 5] = BTN_TRIGGER_HAPPY5,
214 [ 6] = BTN_TRIGGER_HAPPY6,
215 [ 7] = BTN_TRIGGER_HAPPY7,
216 [ 8] = BTN_TRIGGER_HAPPY8,
217 [ 9] = BTN_TRIGGER_HAPPY9,
218 [10] = BTN_TRIGGER_HAPPY10,
219 [11] = BTN_TRIGGER_HAPPY11,
220 [12] = BTN_TRIGGER_HAPPY12,
221 [13] = BTN_TRIGGER_HAPPY13,
222 [14] = BTN_TRIGGER_HAPPY14,
223 [15] = BTN_TRIGGER_HAPPY15,
224 [16] = BTN_TRIGGER_HAPPY16,
225 [17] = BTN_TRIGGER_HAPPY17,
226 [18] = BTN_TRIGGER_HAPPY18,
227 [19] = BTN_TRIGGER_HAPPY19,
228 [20] = BTN_TRIGGER_HAPPY20,
232 struct hid_device *hdev;
233 struct led_classdev *leds[MAX_LEDS];
234 unsigned long quirks;
235 struct work_struct state_worker;
237 #ifdef CONFIG_SONY_FF
242 __u8 led_state[MAX_LEDS];
246 static __u8 *ps3remote_fixup(struct hid_device *hdev, __u8 *rdesc,
249 *rsize = sizeof(ps3remote_rdesc);
250 return ps3remote_rdesc;
253 static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi,
254 struct hid_field *field, struct hid_usage *usage,
255 unsigned long **bit, int *max)
257 unsigned int key = usage->hid & HID_USAGE;
259 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
262 switch (usage->collection_index) {
264 if (key >= ARRAY_SIZE(ps3remote_keymap_joypad_buttons))
267 key = ps3remote_keymap_joypad_buttons[key];
272 if (key >= ARRAY_SIZE(ps3remote_keymap_remote_buttons))
275 key = ps3remote_keymap_remote_buttons[key];
283 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
288 /* Sony Vaio VGX has wrongly mouse pointer declared as constant */
289 static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
292 struct sony_sc *sc = hid_get_drvdata(hdev);
295 * Some Sony RF receivers wrongly declare the mouse pointer as a
296 * a constant non-data variable.
298 if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 &&
299 /* usage page: generic desktop controls */
300 /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */
302 rdesc[2] == 0x09 && rdesc[3] == 0x02 &&
303 /* input (usage page for x,y axes): constant, variable, relative */
304 rdesc[54] == 0x81 && rdesc[55] == 0x07) {
305 hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n");
306 /* input: data, variable, relative */
310 /* The HID descriptor exposed over BT has a trailing zero byte */
311 if ((((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize == 148) ||
312 ((sc->quirks & SIXAXIS_CONTROLLER_BT) && *rsize == 149)) &&
314 hid_info(hdev, "Fixing up Sony Sixaxis report descriptor\n");
315 memcpy((void *)&rdesc[83], (void *)&sixaxis_rdesc_fixup,
316 sizeof(sixaxis_rdesc_fixup));
317 } else if (sc->quirks & SIXAXIS_CONTROLLER_USB &&
318 *rsize > sizeof(sixaxis_rdesc_fixup2)) {
319 hid_info(hdev, "Sony Sixaxis clone detected. Using original report descriptor (size: %d clone; %d new)\n",
320 *rsize, (int)sizeof(sixaxis_rdesc_fixup2));
321 *rsize = sizeof(sixaxis_rdesc_fixup2);
322 memcpy(rdesc, &sixaxis_rdesc_fixup2, *rsize);
325 if (sc->quirks & PS3REMOTE)
326 return ps3remote_fixup(hdev, rdesc, rsize);
331 static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
334 struct sony_sc *sc = hid_get_drvdata(hdev);
336 /* Sixaxis HID report has acclerometers/gyro with MSByte first, this
337 * has to be BYTE_SWAPPED before passing up to joystick interface
339 if ((sc->quirks & (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)) &&
340 rd[0] == 0x01 && size == 49) {
341 swap(rd[41], rd[42]);
342 swap(rd[43], rd[44]);
343 swap(rd[45], rd[46]);
344 swap(rd[47], rd[48]);
350 static int sony_mapping(struct hid_device *hdev, struct hid_input *hi,
351 struct hid_field *field, struct hid_usage *usage,
352 unsigned long **bit, int *max)
354 struct sony_sc *sc = hid_get_drvdata(hdev);
356 if (sc->quirks & BUZZ_CONTROLLER) {
357 unsigned int key = usage->hid & HID_USAGE;
359 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
362 switch (usage->collection_index) {
364 if (key >= ARRAY_SIZE(buzz_keymap))
367 key = buzz_keymap[key];
375 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
379 if (sc->quirks & PS3REMOTE)
380 return ps3remote_mapping(hdev, hi, field, usage, bit, max);
382 /* Let hid-core decide for the others */
387 * The Sony Sixaxis does not handle HID Output Reports on the Interrupt EP
388 * like it should according to usbhid/hid-core.c::usbhid_output_raw_report()
389 * so we need to override that forcing HID Output Reports on the Control EP.
391 * There is also another issue about HID Output Reports via USB, the Sixaxis
392 * does not want the report_id as part of the data packet, so we have to
393 * discard buf[0] when sending the actual control message, even for numbered
396 static int sixaxis_usb_output_raw_report(struct hid_device *hid, __u8 *buf,
397 size_t count, unsigned char report_type)
399 struct usb_interface *intf = to_usb_interface(hid->dev.parent);
400 struct usb_device *dev = interface_to_usbdev(intf);
401 struct usb_host_interface *interface = intf->cur_altsetting;
402 int report_id = buf[0];
405 if (report_type == HID_OUTPUT_REPORT) {
406 /* Don't send the Report ID */
411 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
413 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
414 ((report_type + 1) << 8) | report_id,
415 interface->desc.bInterfaceNumber, buf, count,
416 USB_CTRL_SET_TIMEOUT);
418 /* Count also the Report ID, in case of an Output report. */
419 if (ret > 0 && report_type == HID_OUTPUT_REPORT)
426 * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
427 * to "operational". Without this, the ps3 controller will not report any
430 static int sixaxis_set_operational_usb(struct hid_device *hdev)
433 char *buf = kmalloc(18, GFP_KERNEL);
438 ret = hdev->hid_get_raw_report(hdev, 0xf2, buf, 17, HID_FEATURE_REPORT);
441 hid_err(hdev, "can't set operational mode\n");
448 static int sixaxis_set_operational_bt(struct hid_device *hdev)
450 unsigned char buf[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
451 return hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT);
454 static void buzz_set_leds(struct hid_device *hdev, const __u8 *leds)
456 struct list_head *report_list =
457 &hdev->report_enum[HID_OUTPUT_REPORT].report_list;
458 struct hid_report *report = list_entry(report_list->next,
459 struct hid_report, list);
460 __s32 *value = report->field[0]->value;
463 value[1] = leds[0] ? 0xff : 0x00;
464 value[2] = leds[1] ? 0xff : 0x00;
465 value[3] = leds[2] ? 0xff : 0x00;
466 value[4] = leds[3] ? 0xff : 0x00;
469 hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
472 static void sony_set_leds(struct hid_device *hdev, const __u8 *leds, int count)
474 struct sony_sc *drv_data = hid_get_drvdata(hdev);
477 BUG_ON(count > MAX_LEDS);
479 if (drv_data->quirks & BUZZ_CONTROLLER && count == 4) {
480 buzz_set_leds(hdev, leds);
481 } else if ((drv_data->quirks & SIXAXIS_CONTROLLER_USB) ||
482 (drv_data->quirks & DUALSHOCK4_CONTROLLER_USB)) {
483 for (n = 0; n < count; n++)
484 drv_data->led_state[n] = leds[n];
485 schedule_work(&drv_data->state_worker);
489 static void sony_led_set_brightness(struct led_classdev *led,
490 enum led_brightness value)
492 struct device *dev = led->dev->parent;
493 struct hid_device *hdev = container_of(dev, struct hid_device, dev);
494 struct sony_sc *drv_data;
498 drv_data = hid_get_drvdata(hdev);
500 hid_err(hdev, "No device data\n");
504 for (n = 0; n < drv_data->led_count; n++) {
505 if (led == drv_data->leds[n]) {
506 if (value != drv_data->led_state[n]) {
507 drv_data->led_state[n] = value;
508 sony_set_leds(hdev, drv_data->led_state, drv_data->led_count);
515 static enum led_brightness sony_led_get_brightness(struct led_classdev *led)
517 struct device *dev = led->dev->parent;
518 struct hid_device *hdev = container_of(dev, struct hid_device, dev);
519 struct sony_sc *drv_data;
524 drv_data = hid_get_drvdata(hdev);
526 hid_err(hdev, "No device data\n");
530 for (n = 0; n < drv_data->led_count; n++) {
531 if (led == drv_data->leds[n]) {
532 on = !!(drv_data->led_state[n]);
537 return on ? LED_FULL : LED_OFF;
540 static void sony_leds_remove(struct hid_device *hdev)
542 struct sony_sc *drv_data;
543 struct led_classdev *led;
546 drv_data = hid_get_drvdata(hdev);
547 BUG_ON(!(drv_data->quirks & SONY_LED_SUPPORT));
549 for (n = 0; n < drv_data->led_count; n++) {
550 led = drv_data->leds[n];
551 drv_data->leds[n] = NULL;
554 led_classdev_unregister(led);
558 drv_data->led_count = 0;
561 static int sony_leds_init(struct hid_device *hdev)
563 struct sony_sc *drv_data;
566 struct led_classdev *led;
570 const char *name_fmt;
571 static const __u8 initial_values[MAX_LEDS] = { 0x00, 0x00, 0x00, 0x00 };
573 drv_data = hid_get_drvdata(hdev);
574 BUG_ON(!(drv_data->quirks & SONY_LED_SUPPORT));
576 if (drv_data->quirks & BUZZ_CONTROLLER) {
577 name_len = strlen("::buzz#");
578 name_fmt = "%s::buzz%d";
579 /* Validate expected report characteristics. */
580 if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 0, 0, 7))
583 name_len = strlen("::sony#");
584 name_fmt = "%s::sony%d";
587 if (drv_data->quirks & DUALSHOCK4_CONTROLLER_USB) {
588 drv_data->led_count = 3;
589 max_brightness = 255;
591 drv_data->led_count = 4;
595 /* Clear LEDs as we have no way of reading their initial state. This is
596 * only relevant if the driver is loaded after somebody actively set the
598 sony_set_leds(hdev, initial_values, drv_data->led_count);
600 name_sz = strlen(dev_name(&hdev->dev)) + name_len + 1;
602 for (n = 0; n < drv_data->led_count; n++) {
603 led = kzalloc(sizeof(struct led_classdev) + name_sz, GFP_KERNEL);
605 hid_err(hdev, "Couldn't allocate memory for LED %d\n", n);
610 name = (void *)(&led[1]);
611 snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), n + 1);
614 led->max_brightness = max_brightness;
615 led->brightness_get = sony_led_get_brightness;
616 led->brightness_set = sony_led_set_brightness;
618 ret = led_classdev_register(&hdev->dev, led);
620 hid_err(hdev, "Failed to register LED %d\n", n);
625 drv_data->leds[n] = led;
631 sony_leds_remove(hdev);
636 static void sixaxis_state_worker(struct work_struct *work)
638 struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
639 unsigned char buf[] = {
641 0x00, 0xff, 0x00, 0xff, 0x00,
642 0x00, 0x00, 0x00, 0x00, 0x00,
643 0xff, 0x27, 0x10, 0x00, 0x32,
644 0xff, 0x27, 0x10, 0x00, 0x32,
645 0xff, 0x27, 0x10, 0x00, 0x32,
646 0xff, 0x27, 0x10, 0x00, 0x32,
647 0x00, 0x00, 0x00, 0x00, 0x00
650 #ifdef CONFIG_SONY_FF
651 buf[3] = sc->right ? 1 : 0;
655 buf[10] |= sc->led_state[0] << 1;
656 buf[10] |= sc->led_state[1] << 2;
657 buf[10] |= sc->led_state[2] << 3;
658 buf[10] |= sc->led_state[3] << 4;
660 sc->hdev->hid_output_raw_report(sc->hdev, buf, sizeof(buf),
664 static void dualshock4_state_worker(struct work_struct *work)
666 struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
667 struct hid_device *hdev = sc->hdev;
668 struct list_head *head, *list;
669 struct hid_report *report;
672 list = &hdev->report_enum[HID_OUTPUT_REPORT].report_list;
674 list_for_each(head, list) {
675 report = list_entry(head, struct hid_report, list);
677 /* Report 5 is used to send data to the controller via USB */
678 if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) && report->id == 5)
683 hid_err(hdev, "Dualshock 4 output report not found\n");
687 value = report->field[0]->value;
690 #ifdef CONFIG_SONY_FF
691 value[3] = sc->right;
695 value[5] = sc->led_state[0];
696 value[6] = sc->led_state[1];
697 value[7] = sc->led_state[2];
699 hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
702 #ifdef CONFIG_SONY_FF
703 static int sony_play_effect(struct input_dev *dev, void *data,
704 struct ff_effect *effect)
706 struct hid_device *hid = input_get_drvdata(dev);
707 struct sony_sc *sc = hid_get_drvdata(hid);
709 if (effect->type != FF_RUMBLE)
712 sc->left = effect->u.rumble.strong_magnitude / 256;
713 sc->right = effect->u.rumble.weak_magnitude / 256;
715 schedule_work(&sc->state_worker);
719 static int sony_init_ff(struct hid_device *hdev)
721 struct hid_input *hidinput = list_entry(hdev->inputs.next,
722 struct hid_input, list);
723 struct input_dev *input_dev = hidinput->input;
725 input_set_capability(input_dev, EV_FF, FF_RUMBLE);
726 return input_ff_create_memless(input_dev, NULL, sony_play_effect);
729 static void sony_destroy_ff(struct hid_device *hdev)
731 struct sony_sc *sc = hid_get_drvdata(hdev);
733 cancel_work_sync(&sc->state_worker);
737 static int sony_init_ff(struct hid_device *hdev)
742 static void sony_destroy_ff(struct hid_device *hdev)
747 static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
750 unsigned long quirks = id->driver_data;
752 unsigned int connect_mask = HID_CONNECT_DEFAULT;
754 sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL);
756 hid_err(hdev, "can't alloc sony descriptor\n");
761 hid_set_drvdata(hdev, sc);
764 ret = hid_parse(hdev);
766 hid_err(hdev, "parse failed\n");
770 if (sc->quirks & VAIO_RDESC_CONSTANT)
771 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
772 else if (sc->quirks & SIXAXIS_CONTROLLER_USB)
773 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
774 else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
775 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
777 ret = hid_hw_start(hdev, connect_mask);
779 hid_err(hdev, "hw start failed\n");
783 if (sc->quirks & SIXAXIS_CONTROLLER_USB) {
784 hdev->hid_output_raw_report = sixaxis_usb_output_raw_report;
785 ret = sixaxis_set_operational_usb(hdev);
786 INIT_WORK(&sc->state_worker, sixaxis_state_worker);
788 else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
789 ret = sixaxis_set_operational_bt(hdev);
790 else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
792 INIT_WORK(&sc->state_worker, dualshock4_state_worker);
800 if (sc->quirks & SONY_LED_SUPPORT) {
801 ret = sony_leds_init(hdev);
806 ret = sony_init_ff(hdev);
812 if (sc->quirks & SONY_LED_SUPPORT)
813 sony_leds_remove(hdev);
818 static void sony_remove(struct hid_device *hdev)
820 struct sony_sc *sc = hid_get_drvdata(hdev);
822 if (sc->quirks & SONY_LED_SUPPORT)
823 sony_leds_remove(hdev);
825 sony_destroy_ff(hdev);
830 static const struct hid_device_id sony_devices[] = {
831 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
832 .driver_data = SIXAXIS_CONTROLLER_USB },
833 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
834 .driver_data = SIXAXIS_CONTROLLER_USB },
835 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
836 .driver_data = SIXAXIS_CONTROLLER_BT },
837 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
838 .driver_data = VAIO_RDESC_CONSTANT },
839 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE),
840 .driver_data = VAIO_RDESC_CONSTANT },
841 /* Wired Buzz Controller. Reported as Sony Hub from its USB ID and as
842 * Logitech joystick from the device descriptor. */
843 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER),
844 .driver_data = BUZZ_CONTROLLER },
845 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER),
846 .driver_data = BUZZ_CONTROLLER },
847 /* PS3 BD Remote Control */
848 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE),
849 .driver_data = PS3REMOTE },
850 /* Logitech Harmony Adapter for PS3 */
851 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3),
852 .driver_data = PS3REMOTE },
853 /* Sony Dualshock 4 controllers for PS4 */
854 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
855 .driver_data = DUALSHOCK4_CONTROLLER_USB },
856 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
857 .driver_data = DUALSHOCK4_CONTROLLER_BT },
860 MODULE_DEVICE_TABLE(hid, sony_devices);
862 static struct hid_driver sony_driver = {
864 .id_table = sony_devices,
865 .input_mapping = sony_mapping,
867 .remove = sony_remove,
868 .report_fixup = sony_report_fixup,
869 .raw_event = sony_raw_event
871 module_hid_driver(sony_driver);
873 MODULE_LICENSE("GPL");