Merge remote-tracking branches 'asoc/fix/atmel', 'asoc/fix/fsl', 'asoc/fix/tegra...
[linux-drm-fsl-dcu.git] / drivers / hid / hid-sony.c
1 /*
2  *  HID driver for Sony / PS2 / PS3 BD devices.
3  *
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  */
12
13 /*
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)
17  * any later version.
18  */
19
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.
23  *
24  * There will be no PIN request from the device.
25  */
26
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>
33
34 #include "hid-ids.h"
35
36 #define VAIO_RDESC_CONSTANT     (1 << 0)
37 #define SIXAXIS_CONTROLLER_USB  (1 << 1)
38 #define SIXAXIS_CONTROLLER_BT   (1 << 2)
39 #define BUZZ_CONTROLLER         (1 << 3)
40 #define PS3REMOTE               (1 << 4)
41
42 static const u8 sixaxis_rdesc_fixup[] = {
43         0x95, 0x13, 0x09, 0x01, 0x81, 0x02, 0x95, 0x0C,
44         0x81, 0x01, 0x75, 0x10, 0x95, 0x04, 0x26, 0xFF,
45         0x03, 0x46, 0xFF, 0x03, 0x09, 0x01, 0x81, 0x02
46 };
47
48 static const u8 sixaxis_rdesc_fixup2[] = {
49         0x05, 0x01, 0x09, 0x04, 0xa1, 0x01, 0xa1, 0x02,
50         0x85, 0x01, 0x75, 0x08, 0x95, 0x01, 0x15, 0x00,
51         0x26, 0xff, 0x00, 0x81, 0x03, 0x75, 0x01, 0x95,
52         0x13, 0x15, 0x00, 0x25, 0x01, 0x35, 0x00, 0x45,
53         0x01, 0x05, 0x09, 0x19, 0x01, 0x29, 0x13, 0x81,
54         0x02, 0x75, 0x01, 0x95, 0x0d, 0x06, 0x00, 0xff,
55         0x81, 0x03, 0x15, 0x00, 0x26, 0xff, 0x00, 0x05,
56         0x01, 0x09, 0x01, 0xa1, 0x00, 0x75, 0x08, 0x95,
57         0x04, 0x35, 0x00, 0x46, 0xff, 0x00, 0x09, 0x30,
58         0x09, 0x31, 0x09, 0x32, 0x09, 0x35, 0x81, 0x02,
59         0xc0, 0x05, 0x01, 0x95, 0x13, 0x09, 0x01, 0x81,
60         0x02, 0x95, 0x0c, 0x81, 0x01, 0x75, 0x10, 0x95,
61         0x04, 0x26, 0xff, 0x03, 0x46, 0xff, 0x03, 0x09,
62         0x01, 0x81, 0x02, 0xc0, 0xa1, 0x02, 0x85, 0x02,
63         0x75, 0x08, 0x95, 0x30, 0x09, 0x01, 0xb1, 0x02,
64         0xc0, 0xa1, 0x02, 0x85, 0xee, 0x75, 0x08, 0x95,
65         0x30, 0x09, 0x01, 0xb1, 0x02, 0xc0, 0xa1, 0x02,
66         0x85, 0xef, 0x75, 0x08, 0x95, 0x30, 0x09, 0x01,
67         0xb1, 0x02, 0xc0, 0xc0,
68 };
69
70 static __u8 ps3remote_rdesc[] = {
71         0x05, 0x01,          /* GUsagePage Generic Desktop */
72         0x09, 0x05,          /* LUsage 0x05 [Game Pad] */
73         0xA1, 0x01,          /* MCollection Application (mouse, keyboard) */
74
75          /* Use collection 1 for joypad buttons */
76          0xA1, 0x02,         /* MCollection Logical (interrelated data) */
77
78           /* Ignore the 1st byte, maybe it is used for a controller
79            * number but it's not needed for correct operation */
80           0x75, 0x08,        /* GReportSize 0x08 [8] */
81           0x95, 0x01,        /* GReportCount 0x01 [1] */
82           0x81, 0x01,        /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
83
84           /* Bytes from 2nd to 4th are a bitmap for joypad buttons, for these
85            * buttons multiple keypresses are allowed */
86           0x05, 0x09,        /* GUsagePage Button */
87           0x19, 0x01,        /* LUsageMinimum 0x01 [Button 1 (primary/trigger)] */
88           0x29, 0x18,        /* LUsageMaximum 0x18 [Button 24] */
89           0x14,              /* GLogicalMinimum [0] */
90           0x25, 0x01,        /* GLogicalMaximum 0x01 [1] */
91           0x75, 0x01,        /* GReportSize 0x01 [1] */
92           0x95, 0x18,        /* GReportCount 0x18 [24] */
93           0x81, 0x02,        /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
94
95           0xC0,              /* MEndCollection */
96
97          /* Use collection 2 for remote control buttons */
98          0xA1, 0x02,         /* MCollection Logical (interrelated data) */
99
100           /* 5th byte is used for remote control buttons */
101           0x05, 0x09,        /* GUsagePage Button */
102           0x18,              /* LUsageMinimum [No button pressed] */
103           0x29, 0xFE,        /* LUsageMaximum 0xFE [Button 254] */
104           0x14,              /* GLogicalMinimum [0] */
105           0x26, 0xFE, 0x00,  /* GLogicalMaximum 0x00FE [254] */
106           0x75, 0x08,        /* GReportSize 0x08 [8] */
107           0x95, 0x01,        /* GReportCount 0x01 [1] */
108           0x80,              /* MInput  */
109
110           /* Ignore bytes from 6th to 11th, 6th to 10th are always constant at
111            * 0xff and 11th is for press indication */
112           0x75, 0x08,        /* GReportSize 0x08 [8] */
113           0x95, 0x06,        /* GReportCount 0x06 [6] */
114           0x81, 0x01,        /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */
115
116           /* 12th byte is for battery strength */
117           0x05, 0x06,        /* GUsagePage Generic Device Controls */
118           0x09, 0x20,        /* LUsage 0x20 [Battery Strength] */
119           0x14,              /* GLogicalMinimum [0] */
120           0x25, 0x05,        /* GLogicalMaximum 0x05 [5] */
121           0x75, 0x08,        /* GReportSize 0x08 [8] */
122           0x95, 0x01,        /* GReportCount 0x01 [1] */
123           0x81, 0x02,        /* MInput 0x02 (Data[0] Var[1] Abs[2]) */
124
125           0xC0,              /* MEndCollection */
126
127          0xC0                /* MEndCollection [Game Pad] */
128 };
129
130 static const unsigned int ps3remote_keymap_joypad_buttons[] = {
131         [0x01] = KEY_SELECT,
132         [0x02] = BTN_THUMBL,            /* L3 */
133         [0x03] = BTN_THUMBR,            /* R3 */
134         [0x04] = BTN_START,
135         [0x05] = KEY_UP,
136         [0x06] = KEY_RIGHT,
137         [0x07] = KEY_DOWN,
138         [0x08] = KEY_LEFT,
139         [0x09] = BTN_TL2,               /* L2 */
140         [0x0a] = BTN_TR2,               /* R2 */
141         [0x0b] = BTN_TL,                /* L1 */
142         [0x0c] = BTN_TR,                /* R1 */
143         [0x0d] = KEY_OPTION,            /* options/triangle */
144         [0x0e] = KEY_BACK,              /* back/circle */
145         [0x0f] = BTN_0,                 /* cross */
146         [0x10] = KEY_SCREEN,            /* view/square */
147         [0x11] = KEY_HOMEPAGE,          /* PS button */
148         [0x14] = KEY_ENTER,
149 };
150 static const unsigned int ps3remote_keymap_remote_buttons[] = {
151         [0x00] = KEY_1,
152         [0x01] = KEY_2,
153         [0x02] = KEY_3,
154         [0x03] = KEY_4,
155         [0x04] = KEY_5,
156         [0x05] = KEY_6,
157         [0x06] = KEY_7,
158         [0x07] = KEY_8,
159         [0x08] = KEY_9,
160         [0x09] = KEY_0,
161         [0x0e] = KEY_ESC,               /* return */
162         [0x0f] = KEY_CLEAR,
163         [0x16] = KEY_EJECTCD,
164         [0x1a] = KEY_MENU,              /* top menu */
165         [0x28] = KEY_TIME,
166         [0x30] = KEY_PREVIOUS,
167         [0x31] = KEY_NEXT,
168         [0x32] = KEY_PLAY,
169         [0x33] = KEY_REWIND,            /* scan back */
170         [0x34] = KEY_FORWARD,           /* scan forward */
171         [0x38] = KEY_STOP,
172         [0x39] = KEY_PAUSE,
173         [0x40] = KEY_CONTEXT_MENU,      /* pop up/menu */
174         [0x60] = KEY_FRAMEBACK,         /* slow/step back */
175         [0x61] = KEY_FRAMEFORWARD,      /* slow/step forward */
176         [0x63] = KEY_SUBTITLE,
177         [0x64] = KEY_AUDIO,
178         [0x65] = KEY_ANGLE,
179         [0x70] = KEY_INFO,              /* display */
180         [0x80] = KEY_BLUE,
181         [0x81] = KEY_RED,
182         [0x82] = KEY_GREEN,
183         [0x83] = KEY_YELLOW,
184 };
185
186 static const unsigned int buzz_keymap[] = {
187         /* The controller has 4 remote buzzers, each with one LED and 5
188          * buttons.
189          * 
190          * We use the mapping chosen by the controller, which is:
191          *
192          * Key          Offset
193          * -------------------
194          * Buzz              1
195          * Blue              5
196          * Orange            4
197          * Green             3
198          * Yellow            2
199          *
200          * So, for example, the orange button on the third buzzer is mapped to
201          * BTN_TRIGGER_HAPPY14
202          */
203         [ 1] = BTN_TRIGGER_HAPPY1,
204         [ 2] = BTN_TRIGGER_HAPPY2,
205         [ 3] = BTN_TRIGGER_HAPPY3,
206         [ 4] = BTN_TRIGGER_HAPPY4,
207         [ 5] = BTN_TRIGGER_HAPPY5,
208         [ 6] = BTN_TRIGGER_HAPPY6,
209         [ 7] = BTN_TRIGGER_HAPPY7,
210         [ 8] = BTN_TRIGGER_HAPPY8,
211         [ 9] = BTN_TRIGGER_HAPPY9,
212         [10] = BTN_TRIGGER_HAPPY10,
213         [11] = BTN_TRIGGER_HAPPY11,
214         [12] = BTN_TRIGGER_HAPPY12,
215         [13] = BTN_TRIGGER_HAPPY13,
216         [14] = BTN_TRIGGER_HAPPY14,
217         [15] = BTN_TRIGGER_HAPPY15,
218         [16] = BTN_TRIGGER_HAPPY16,
219         [17] = BTN_TRIGGER_HAPPY17,
220         [18] = BTN_TRIGGER_HAPPY18,
221         [19] = BTN_TRIGGER_HAPPY19,
222         [20] = BTN_TRIGGER_HAPPY20,
223 };
224
225 struct sony_sc {
226         unsigned long quirks;
227
228 #ifdef CONFIG_SONY_FF
229         struct work_struct rumble_worker;
230         struct hid_device *hdev;
231         __u8 left;
232         __u8 right;
233 #endif
234
235         void *extra;
236 };
237
238 struct buzz_extra {
239         int led_state;
240         struct led_classdev *leds[4];
241 };
242
243 static __u8 *ps3remote_fixup(struct hid_device *hdev, __u8 *rdesc,
244                              unsigned int *rsize)
245 {
246         *rsize = sizeof(ps3remote_rdesc);
247         return ps3remote_rdesc;
248 }
249
250 static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi,
251                              struct hid_field *field, struct hid_usage *usage,
252                              unsigned long **bit, int *max)
253 {
254         unsigned int key = usage->hid & HID_USAGE;
255
256         if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
257                 return -1;
258
259         switch (usage->collection_index) {
260         case 1:
261                 if (key >= ARRAY_SIZE(ps3remote_keymap_joypad_buttons))
262                         return -1;
263
264                 key = ps3remote_keymap_joypad_buttons[key];
265                 if (!key)
266                         return -1;
267                 break;
268         case 2:
269                 if (key >= ARRAY_SIZE(ps3remote_keymap_remote_buttons))
270                         return -1;
271
272                 key = ps3remote_keymap_remote_buttons[key];
273                 if (!key)
274                         return -1;
275                 break;
276         default:
277                 return -1;
278         }
279
280         hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
281         return 1;
282 }
283
284
285 /* Sony Vaio VGX has wrongly mouse pointer declared as constant */
286 static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
287                 unsigned int *rsize)
288 {
289         struct sony_sc *sc = hid_get_drvdata(hdev);
290
291         /*
292          * Some Sony RF receivers wrongly declare the mouse pointer as a
293          * a constant non-data variable.
294          */
295         if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 &&
296             /* usage page: generic desktop controls */
297             /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */
298             /* usage: mouse */
299             rdesc[2] == 0x09 && rdesc[3] == 0x02 &&
300             /* input (usage page for x,y axes): constant, variable, relative */
301             rdesc[54] == 0x81 && rdesc[55] == 0x07) {
302                 hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n");
303                 /* input: data, variable, relative */
304                 rdesc[55] = 0x06;
305         }
306
307         /* The HID descriptor exposed over BT has a trailing zero byte */
308         if ((((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize == 148) ||
309                         ((sc->quirks & SIXAXIS_CONTROLLER_BT) && *rsize == 149)) &&
310                         rdesc[83] == 0x75) {
311                 hid_info(hdev, "Fixing up Sony Sixaxis report descriptor\n");
312                 memcpy((void *)&rdesc[83], (void *)&sixaxis_rdesc_fixup,
313                         sizeof(sixaxis_rdesc_fixup));
314         } else if (sc->quirks & SIXAXIS_CONTROLLER_USB &&
315                    *rsize > sizeof(sixaxis_rdesc_fixup2)) {
316                 hid_info(hdev, "Sony Sixaxis clone detected. Using original report descriptor (size: %d clone; %d new)\n",
317                          *rsize, (int)sizeof(sixaxis_rdesc_fixup2));
318                 *rsize = sizeof(sixaxis_rdesc_fixup2);
319                 memcpy(rdesc, &sixaxis_rdesc_fixup2, *rsize);
320         }
321
322         if (sc->quirks & PS3REMOTE)
323                 return ps3remote_fixup(hdev, rdesc, rsize);
324
325         return rdesc;
326 }
327
328 static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
329                 __u8 *rd, int size)
330 {
331         struct sony_sc *sc = hid_get_drvdata(hdev);
332
333         /* Sixaxis HID report has acclerometers/gyro with MSByte first, this
334          * has to be BYTE_SWAPPED before passing up to joystick interface
335          */
336         if ((sc->quirks & (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)) &&
337                         rd[0] == 0x01 && size == 49) {
338                 swap(rd[41], rd[42]);
339                 swap(rd[43], rd[44]);
340                 swap(rd[45], rd[46]);
341                 swap(rd[47], rd[48]);
342         }
343
344         return 0;
345 }
346
347 static int sony_mapping(struct hid_device *hdev, struct hid_input *hi,
348                         struct hid_field *field, struct hid_usage *usage,
349                         unsigned long **bit, int *max)
350 {
351         struct sony_sc *sc = hid_get_drvdata(hdev);
352
353         if (sc->quirks & BUZZ_CONTROLLER) {
354                 unsigned int key = usage->hid & HID_USAGE;
355
356                 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
357                         return -1;
358
359                 switch (usage->collection_index) {
360                 case 1:
361                         if (key >= ARRAY_SIZE(buzz_keymap))
362                                 return -1;
363
364                         key = buzz_keymap[key];
365                         if (!key)
366                                 return -1;
367                         break;
368                 default:
369                         return -1;
370                 }
371
372                 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
373                 return 1;
374         }
375
376         if (sc->quirks & PS3REMOTE)
377                 return ps3remote_mapping(hdev, hi, field, usage, bit, max);
378
379         /* Let hid-core decide for the others */
380         return 0;
381 }
382
383 /*
384  * The Sony Sixaxis does not handle HID Output Reports on the Interrupt EP
385  * like it should according to usbhid/hid-core.c::usbhid_output_raw_report()
386  * so we need to override that forcing HID Output Reports on the Control EP.
387  *
388  * There is also another issue about HID Output Reports via USB, the Sixaxis
389  * does not want the report_id as part of the data packet, so we have to
390  * discard buf[0] when sending the actual control message, even for numbered
391  * reports, humpf!
392  */
393 static int sixaxis_usb_output_raw_report(struct hid_device *hid, __u8 *buf,
394                 size_t count, unsigned char report_type)
395 {
396         struct usb_interface *intf = to_usb_interface(hid->dev.parent);
397         struct usb_device *dev = interface_to_usbdev(intf);
398         struct usb_host_interface *interface = intf->cur_altsetting;
399         int report_id = buf[0];
400         int ret;
401
402         if (report_type == HID_OUTPUT_REPORT) {
403                 /* Don't send the Report ID */
404                 buf++;
405                 count--;
406         }
407
408         ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
409                 HID_REQ_SET_REPORT,
410                 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
411                 ((report_type + 1) << 8) | report_id,
412                 interface->desc.bInterfaceNumber, buf, count,
413                 USB_CTRL_SET_TIMEOUT);
414
415         /* Count also the Report ID, in case of an Output report. */
416         if (ret > 0 && report_type == HID_OUTPUT_REPORT)
417                 ret++;
418
419         return ret;
420 }
421
422 /*
423  * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
424  * to "operational".  Without this, the ps3 controller will not report any
425  * events.
426  */
427 static int sixaxis_set_operational_usb(struct hid_device *hdev)
428 {
429         int ret;
430         char *buf = kmalloc(18, GFP_KERNEL);
431
432         if (!buf)
433                 return -ENOMEM;
434
435         ret = hdev->hid_get_raw_report(hdev, 0xf2, buf, 17, HID_FEATURE_REPORT);
436
437         if (ret < 0)
438                 hid_err(hdev, "can't set operational mode\n");
439
440         kfree(buf);
441
442         return ret;
443 }
444
445 static int sixaxis_set_operational_bt(struct hid_device *hdev)
446 {
447         unsigned char buf[] = { 0xf4,  0x42, 0x03, 0x00, 0x00 };
448         return hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT);
449 }
450
451 static void buzz_set_leds(struct hid_device *hdev, int leds)
452 {
453         struct list_head *report_list =
454                 &hdev->report_enum[HID_OUTPUT_REPORT].report_list;
455         struct hid_report *report = list_entry(report_list->next,
456                 struct hid_report, list);
457         __s32 *value = report->field[0]->value;
458
459         value[0] = 0x00;
460         value[1] = (leds & 1) ? 0xff : 0x00;
461         value[2] = (leds & 2) ? 0xff : 0x00;
462         value[3] = (leds & 4) ? 0xff : 0x00;
463         value[4] = (leds & 8) ? 0xff : 0x00;
464         value[5] = 0x00;
465         value[6] = 0x00;
466         hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
467 }
468
469 static void buzz_led_set_brightness(struct led_classdev *led,
470                                     enum led_brightness value)
471 {
472         struct device *dev = led->dev->parent;
473         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
474         struct sony_sc *drv_data;
475         struct buzz_extra *buzz;
476
477         int n;
478
479         drv_data = hid_get_drvdata(hdev);
480         if (!drv_data || !drv_data->extra) {
481                 hid_err(hdev, "No device data\n");
482                 return;
483         }
484         buzz = drv_data->extra;
485
486         for (n = 0; n < 4; n++) {
487                 if (led == buzz->leds[n]) {
488                         int on = !! (buzz->led_state & (1 << n));
489                         if (value == LED_OFF && on) {
490                                 buzz->led_state &= ~(1 << n);
491                                 buzz_set_leds(hdev, buzz->led_state);
492                         } else if (value != LED_OFF && !on) {
493                                 buzz->led_state |= (1 << n);
494                                 buzz_set_leds(hdev, buzz->led_state);
495                         }
496                         break;
497                 }
498         }
499 }
500
501 static enum led_brightness buzz_led_get_brightness(struct led_classdev *led)
502 {
503         struct device *dev = led->dev->parent;
504         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
505         struct sony_sc *drv_data;
506         struct buzz_extra *buzz;
507
508         int n;
509         int on = 0;
510
511         drv_data = hid_get_drvdata(hdev);
512         if (!drv_data || !drv_data->extra) {
513                 hid_err(hdev, "No device data\n");
514                 return LED_OFF;
515         }
516         buzz = drv_data->extra;
517
518         for (n = 0; n < 4; n++) {
519                 if (led == buzz->leds[n]) {
520                         on = !! (buzz->led_state & (1 << n));
521                         break;
522                 }
523         }
524
525         return on ? LED_FULL : LED_OFF;
526 }
527
528 static int buzz_init(struct hid_device *hdev)
529 {
530         struct sony_sc *drv_data;
531         struct buzz_extra *buzz;
532         int n, ret = 0;
533         struct led_classdev *led;
534         size_t name_sz;
535         char *name;
536
537         drv_data = hid_get_drvdata(hdev);
538         BUG_ON(!(drv_data->quirks & BUZZ_CONTROLLER));
539
540         /* Validate expected report characteristics. */
541         if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 0, 0, 7))
542                 return -ENODEV;
543
544         buzz = kzalloc(sizeof(*buzz), GFP_KERNEL);
545         if (!buzz) {
546                 hid_err(hdev, "Insufficient memory, cannot allocate driver data\n");
547                 return -ENOMEM;
548         }
549         drv_data->extra = buzz;
550
551         /* Clear LEDs as we have no way of reading their initial state. This is
552          * only relevant if the driver is loaded after somebody actively set the
553          * LEDs to on */
554         buzz_set_leds(hdev, 0x00);
555
556         name_sz = strlen(dev_name(&hdev->dev)) + strlen("::buzz#") + 1;
557
558         for (n = 0; n < 4; n++) {
559                 led = kzalloc(sizeof(struct led_classdev) + name_sz, GFP_KERNEL);
560                 if (!led) {
561                         hid_err(hdev, "Couldn't allocate memory for LED %d\n", n);
562                         goto error_leds;
563                 }
564
565                 name = (void *)(&led[1]);
566                 snprintf(name, name_sz, "%s::buzz%d", dev_name(&hdev->dev), n + 1);
567                 led->name = name;
568                 led->brightness = 0;
569                 led->max_brightness = 1;
570                 led->brightness_get = buzz_led_get_brightness;
571                 led->brightness_set = buzz_led_set_brightness;
572
573                 if (led_classdev_register(&hdev->dev, led)) {
574                         hid_err(hdev, "Failed to register LED %d\n", n);
575                         kfree(led);
576                         goto error_leds;
577                 }
578
579                 buzz->leds[n] = led;
580         }
581
582         return ret;
583
584 error_leds:
585         for (n = 0; n < 4; n++) {
586                 led = buzz->leds[n];
587                 buzz->leds[n] = NULL;
588                 if (!led)
589                         continue;
590                 led_classdev_unregister(led);
591                 kfree(led);
592         }
593
594         kfree(drv_data->extra);
595         drv_data->extra = NULL;
596         return ret;
597 }
598
599 static void buzz_remove(struct hid_device *hdev)
600 {
601         struct sony_sc *drv_data;
602         struct buzz_extra *buzz;
603         struct led_classdev *led;
604         int n;
605
606         drv_data = hid_get_drvdata(hdev);
607         BUG_ON(!(drv_data->quirks & BUZZ_CONTROLLER));
608
609         buzz = drv_data->extra;
610
611         for (n = 0; n < 4; n++) {
612                 led = buzz->leds[n];
613                 buzz->leds[n] = NULL;
614                 if (!led)
615                         continue;
616                 led_classdev_unregister(led);
617                 kfree(led);
618         }
619
620         kfree(drv_data->extra);
621         drv_data->extra = NULL;
622 }
623
624 #ifdef CONFIG_SONY_FF
625 static void sony_rumble_worker(struct work_struct *work)
626 {
627         struct sony_sc *sc = container_of(work, struct sony_sc, rumble_worker);
628         unsigned char buf[] = {
629                 0x01,
630                 0x00, 0xff, 0x00, 0xff, 0x00,
631                 0x00, 0x00, 0x00, 0x00, 0x03,
632                 0xff, 0x27, 0x10, 0x00, 0x32,
633                 0xff, 0x27, 0x10, 0x00, 0x32,
634                 0xff, 0x27, 0x10, 0x00, 0x32,
635                 0xff, 0x27, 0x10, 0x00, 0x32,
636                 0x00, 0x00, 0x00, 0x00, 0x00
637         };
638
639         buf[3] = sc->right;
640         buf[5] = sc->left;
641
642         sc->hdev->hid_output_raw_report(sc->hdev, buf, sizeof(buf),
643                                         HID_OUTPUT_REPORT);
644 }
645
646 static int sony_play_effect(struct input_dev *dev, void *data,
647                             struct ff_effect *effect)
648 {
649         struct hid_device *hid = input_get_drvdata(dev);
650         struct sony_sc *sc = hid_get_drvdata(hid);
651
652         if (effect->type != FF_RUMBLE)
653                 return 0;
654
655         sc->left = effect->u.rumble.strong_magnitude / 256;
656         sc->right = effect->u.rumble.weak_magnitude ? 1 : 0;
657
658         schedule_work(&sc->rumble_worker);
659         return 0;
660 }
661
662 static int sony_init_ff(struct hid_device *hdev)
663 {
664         struct hid_input *hidinput = list_entry(hdev->inputs.next,
665                                                 struct hid_input, list);
666         struct input_dev *input_dev = hidinput->input;
667         struct sony_sc *sc = hid_get_drvdata(hdev);
668
669         sc->hdev = hdev;
670         INIT_WORK(&sc->rumble_worker, sony_rumble_worker);
671
672         input_set_capability(input_dev, EV_FF, FF_RUMBLE);
673         return input_ff_create_memless(input_dev, NULL, sony_play_effect);
674 }
675
676 static void sony_destroy_ff(struct hid_device *hdev)
677 {
678         struct sony_sc *sc = hid_get_drvdata(hdev);
679
680         cancel_work_sync(&sc->rumble_worker);
681 }
682
683 #else
684 static int sony_init_ff(struct hid_device *hdev)
685 {
686         return 0;
687 }
688
689 static void sony_destroy_ff(struct hid_device *hdev)
690 {
691 }
692 #endif
693
694 static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
695 {
696         int ret;
697         unsigned long quirks = id->driver_data;
698         struct sony_sc *sc;
699         unsigned int connect_mask = HID_CONNECT_DEFAULT;
700
701         sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL);
702         if (sc == NULL) {
703                 hid_err(hdev, "can't alloc sony descriptor\n");
704                 return -ENOMEM;
705         }
706
707         sc->quirks = quirks;
708         hid_set_drvdata(hdev, sc);
709
710         ret = hid_parse(hdev);
711         if (ret) {
712                 hid_err(hdev, "parse failed\n");
713                 return ret;
714         }
715
716         if (sc->quirks & VAIO_RDESC_CONSTANT)
717                 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
718         else if (sc->quirks & SIXAXIS_CONTROLLER_USB)
719                 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
720         else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
721                 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
722
723         ret = hid_hw_start(hdev, connect_mask);
724         if (ret) {
725                 hid_err(hdev, "hw start failed\n");
726                 return ret;
727         }
728
729         if (sc->quirks & SIXAXIS_CONTROLLER_USB) {
730                 hdev->hid_output_raw_report = sixaxis_usb_output_raw_report;
731                 ret = sixaxis_set_operational_usb(hdev);
732         }
733         else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
734                 ret = sixaxis_set_operational_bt(hdev);
735         else if (sc->quirks & BUZZ_CONTROLLER)
736                 ret = buzz_init(hdev);
737         else
738                 ret = 0;
739
740         if (ret < 0)
741                 goto err_stop;
742
743         ret = sony_init_ff(hdev);
744         if (ret < 0)
745                 goto err_stop;
746
747         return 0;
748 err_stop:
749         hid_hw_stop(hdev);
750         return ret;
751 }
752
753 static void sony_remove(struct hid_device *hdev)
754 {
755         struct sony_sc *sc = hid_get_drvdata(hdev);
756
757         if (sc->quirks & BUZZ_CONTROLLER)
758                 buzz_remove(hdev);
759
760         sony_destroy_ff(hdev);
761
762         hid_hw_stop(hdev);
763 }
764
765 static const struct hid_device_id sony_devices[] = {
766         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
767                 .driver_data = SIXAXIS_CONTROLLER_USB },
768         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
769                 .driver_data = SIXAXIS_CONTROLLER_USB },
770         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
771                 .driver_data = SIXAXIS_CONTROLLER_BT },
772         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
773                 .driver_data = VAIO_RDESC_CONSTANT },
774         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE),
775                 .driver_data = VAIO_RDESC_CONSTANT },
776         /* Wired Buzz Controller. Reported as Sony Hub from its USB ID and as
777          * Logitech joystick from the device descriptor. */
778         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER),
779                 .driver_data = BUZZ_CONTROLLER },
780         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER),
781                 .driver_data = BUZZ_CONTROLLER },
782         /* PS3 BD Remote Control */
783         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE),
784                 .driver_data = PS3REMOTE },
785         /* Logitech Harmony Adapter for PS3 */
786         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3),
787                 .driver_data = PS3REMOTE },
788         { }
789 };
790 MODULE_DEVICE_TABLE(hid, sony_devices);
791
792 static struct hid_driver sony_driver = {
793         .name          = "sony",
794         .id_table      = sony_devices,
795         .input_mapping = sony_mapping,
796         .probe         = sony_probe,
797         .remove        = sony_remove,
798         .report_fixup  = sony_report_fixup,
799         .raw_event     = sony_raw_event
800 };
801 module_hid_driver(sony_driver);
802
803 MODULE_LICENSE("GPL");