]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/hid/hid-sony.c
ASoC: wm8711: Use IS_ENABLED() macro
[karo-tx-linux.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         void *extra;
229 };
230
231 struct buzz_extra {
232         int led_state;
233         struct led_classdev *leds[4];
234 };
235
236 static __u8 *ps3remote_fixup(struct hid_device *hdev, __u8 *rdesc,
237                              unsigned int *rsize)
238 {
239         *rsize = sizeof(ps3remote_rdesc);
240         return ps3remote_rdesc;
241 }
242
243 static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi,
244                              struct hid_field *field, struct hid_usage *usage,
245                              unsigned long **bit, int *max)
246 {
247         unsigned int key = usage->hid & HID_USAGE;
248
249         if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
250                 return -1;
251
252         switch (usage->collection_index) {
253         case 1:
254                 if (key >= ARRAY_SIZE(ps3remote_keymap_joypad_buttons))
255                         return -1;
256
257                 key = ps3remote_keymap_joypad_buttons[key];
258                 if (!key)
259                         return -1;
260                 break;
261         case 2:
262                 if (key >= ARRAY_SIZE(ps3remote_keymap_remote_buttons))
263                         return -1;
264
265                 key = ps3remote_keymap_remote_buttons[key];
266                 if (!key)
267                         return -1;
268                 break;
269         default:
270                 return -1;
271         }
272
273         hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
274         return 1;
275 }
276
277
278 /* Sony Vaio VGX has wrongly mouse pointer declared as constant */
279 static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
280                 unsigned int *rsize)
281 {
282         struct sony_sc *sc = hid_get_drvdata(hdev);
283
284         /*
285          * Some Sony RF receivers wrongly declare the mouse pointer as a
286          * a constant non-data variable.
287          */
288         if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 &&
289             /* usage page: generic desktop controls */
290             /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */
291             /* usage: mouse */
292             rdesc[2] == 0x09 && rdesc[3] == 0x02 &&
293             /* input (usage page for x,y axes): constant, variable, relative */
294             rdesc[54] == 0x81 && rdesc[55] == 0x07) {
295                 hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n");
296                 /* input: data, variable, relative */
297                 rdesc[55] = 0x06;
298         }
299
300         /* The HID descriptor exposed over BT has a trailing zero byte */
301         if ((((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize == 148) ||
302                         ((sc->quirks & SIXAXIS_CONTROLLER_BT) && *rsize == 149)) &&
303                         rdesc[83] == 0x75) {
304                 hid_info(hdev, "Fixing up Sony Sixaxis report descriptor\n");
305                 memcpy((void *)&rdesc[83], (void *)&sixaxis_rdesc_fixup,
306                         sizeof(sixaxis_rdesc_fixup));
307         } else if (sc->quirks & SIXAXIS_CONTROLLER_USB &&
308                    *rsize > sizeof(sixaxis_rdesc_fixup2)) {
309                 hid_info(hdev, "Sony Sixaxis clone detected. Using original report descriptor (size: %d clone; %d new)\n",
310                          *rsize, (int)sizeof(sixaxis_rdesc_fixup2));
311                 *rsize = sizeof(sixaxis_rdesc_fixup2);
312                 memcpy(rdesc, &sixaxis_rdesc_fixup2, *rsize);
313         }
314
315         if (sc->quirks & PS3REMOTE)
316                 return ps3remote_fixup(hdev, rdesc, rsize);
317
318         return rdesc;
319 }
320
321 static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
322                 __u8 *rd, int size)
323 {
324         struct sony_sc *sc = hid_get_drvdata(hdev);
325
326         /* Sixaxis HID report has acclerometers/gyro with MSByte first, this
327          * has to be BYTE_SWAPPED before passing up to joystick interface
328          */
329         if ((sc->quirks & (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)) &&
330                         rd[0] == 0x01 && size == 49) {
331                 swap(rd[41], rd[42]);
332                 swap(rd[43], rd[44]);
333                 swap(rd[45], rd[46]);
334                 swap(rd[47], rd[48]);
335         }
336
337         return 0;
338 }
339
340 static int sony_mapping(struct hid_device *hdev, struct hid_input *hi,
341                         struct hid_field *field, struct hid_usage *usage,
342                         unsigned long **bit, int *max)
343 {
344         struct sony_sc *sc = hid_get_drvdata(hdev);
345
346         if (sc->quirks & BUZZ_CONTROLLER) {
347                 unsigned int key = usage->hid & HID_USAGE;
348
349                 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
350                         return -1;
351
352                 switch (usage->collection_index) {
353                 case 1:
354                         if (key >= ARRAY_SIZE(buzz_keymap))
355                                 return -1;
356
357                         key = buzz_keymap[key];
358                         if (!key)
359                                 return -1;
360                         break;
361                 default:
362                         return -1;
363                 }
364
365                 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
366                 return 1;
367         }
368
369         if (sc->quirks & PS3REMOTE)
370                 return ps3remote_mapping(hdev, hi, field, usage, bit, max);
371
372         /* Let hid-core decide for the others */
373         return 0;
374 }
375
376 /*
377  * The Sony Sixaxis does not handle HID Output Reports on the Interrupt EP
378  * like it should according to usbhid/hid-core.c::usbhid_output_raw_report()
379  * so we need to override that forcing HID Output Reports on the Control EP.
380  *
381  * There is also another issue about HID Output Reports via USB, the Sixaxis
382  * does not want the report_id as part of the data packet, so we have to
383  * discard buf[0] when sending the actual control message, even for numbered
384  * reports, humpf!
385  */
386 static int sixaxis_usb_output_raw_report(struct hid_device *hid, __u8 *buf,
387                 size_t count, unsigned char report_type)
388 {
389         struct usb_interface *intf = to_usb_interface(hid->dev.parent);
390         struct usb_device *dev = interface_to_usbdev(intf);
391         struct usb_host_interface *interface = intf->cur_altsetting;
392         int report_id = buf[0];
393         int ret;
394
395         if (report_type == HID_OUTPUT_REPORT) {
396                 /* Don't send the Report ID */
397                 buf++;
398                 count--;
399         }
400
401         ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
402                 HID_REQ_SET_REPORT,
403                 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
404                 ((report_type + 1) << 8) | report_id,
405                 interface->desc.bInterfaceNumber, buf, count,
406                 USB_CTRL_SET_TIMEOUT);
407
408         /* Count also the Report ID, in case of an Output report. */
409         if (ret > 0 && report_type == HID_OUTPUT_REPORT)
410                 ret++;
411
412         return ret;
413 }
414
415 /*
416  * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
417  * to "operational".  Without this, the ps3 controller will not report any
418  * events.
419  */
420 static int sixaxis_set_operational_usb(struct hid_device *hdev)
421 {
422         int ret;
423         char *buf = kmalloc(18, GFP_KERNEL);
424
425         if (!buf)
426                 return -ENOMEM;
427
428         ret = hdev->hid_get_raw_report(hdev, 0xf2, buf, 17, HID_FEATURE_REPORT);
429
430         if (ret < 0)
431                 hid_err(hdev, "can't set operational mode\n");
432
433         kfree(buf);
434
435         return ret;
436 }
437
438 static int sixaxis_set_operational_bt(struct hid_device *hdev)
439 {
440         unsigned char buf[] = { 0xf4,  0x42, 0x03, 0x00, 0x00 };
441         return hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT);
442 }
443
444 static void buzz_set_leds(struct hid_device *hdev, int leds)
445 {
446         struct list_head *report_list =
447                 &hdev->report_enum[HID_OUTPUT_REPORT].report_list;
448         struct hid_report *report = list_entry(report_list->next,
449                 struct hid_report, list);
450         __s32 *value = report->field[0]->value;
451
452         value[0] = 0x00;
453         value[1] = (leds & 1) ? 0xff : 0x00;
454         value[2] = (leds & 2) ? 0xff : 0x00;
455         value[3] = (leds & 4) ? 0xff : 0x00;
456         value[4] = (leds & 8) ? 0xff : 0x00;
457         value[5] = 0x00;
458         value[6] = 0x00;
459         hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
460 }
461
462 static void buzz_led_set_brightness(struct led_classdev *led,
463                                     enum led_brightness value)
464 {
465         struct device *dev = led->dev->parent;
466         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
467         struct sony_sc *drv_data;
468         struct buzz_extra *buzz;
469
470         int n;
471
472         drv_data = hid_get_drvdata(hdev);
473         if (!drv_data || !drv_data->extra) {
474                 hid_err(hdev, "No device data\n");
475                 return;
476         }
477         buzz = drv_data->extra;
478
479         for (n = 0; n < 4; n++) {
480                 if (led == buzz->leds[n]) {
481                         int on = !! (buzz->led_state & (1 << n));
482                         if (value == LED_OFF && on) {
483                                 buzz->led_state &= ~(1 << n);
484                                 buzz_set_leds(hdev, buzz->led_state);
485                         } else if (value != LED_OFF && !on) {
486                                 buzz->led_state |= (1 << n);
487                                 buzz_set_leds(hdev, buzz->led_state);
488                         }
489                         break;
490                 }
491         }
492 }
493
494 static enum led_brightness buzz_led_get_brightness(struct led_classdev *led)
495 {
496         struct device *dev = led->dev->parent;
497         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
498         struct sony_sc *drv_data;
499         struct buzz_extra *buzz;
500
501         int n;
502         int on = 0;
503
504         drv_data = hid_get_drvdata(hdev);
505         if (!drv_data || !drv_data->extra) {
506                 hid_err(hdev, "No device data\n");
507                 return LED_OFF;
508         }
509         buzz = drv_data->extra;
510
511         for (n = 0; n < 4; n++) {
512                 if (led == buzz->leds[n]) {
513                         on = !! (buzz->led_state & (1 << n));
514                         break;
515                 }
516         }
517
518         return on ? LED_FULL : LED_OFF;
519 }
520
521 static int buzz_init(struct hid_device *hdev)
522 {
523         struct sony_sc *drv_data;
524         struct buzz_extra *buzz;
525         int n, ret = 0;
526         struct led_classdev *led;
527         size_t name_sz;
528         char *name;
529
530         drv_data = hid_get_drvdata(hdev);
531         BUG_ON(!(drv_data->quirks & BUZZ_CONTROLLER));
532
533         /* Validate expected report characteristics. */
534         if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 0, 0, 7))
535                 return -ENODEV;
536
537         buzz = kzalloc(sizeof(*buzz), GFP_KERNEL);
538         if (!buzz) {
539                 hid_err(hdev, "Insufficient memory, cannot allocate driver data\n");
540                 return -ENOMEM;
541         }
542         drv_data->extra = buzz;
543
544         /* Clear LEDs as we have no way of reading their initial state. This is
545          * only relevant if the driver is loaded after somebody actively set the
546          * LEDs to on */
547         buzz_set_leds(hdev, 0x00);
548
549         name_sz = strlen(dev_name(&hdev->dev)) + strlen("::buzz#") + 1;
550
551         for (n = 0; n < 4; n++) {
552                 led = kzalloc(sizeof(struct led_classdev) + name_sz, GFP_KERNEL);
553                 if (!led) {
554                         hid_err(hdev, "Couldn't allocate memory for LED %d\n", n);
555                         goto error_leds;
556                 }
557
558                 name = (void *)(&led[1]);
559                 snprintf(name, name_sz, "%s::buzz%d", dev_name(&hdev->dev), n + 1);
560                 led->name = name;
561                 led->brightness = 0;
562                 led->max_brightness = 1;
563                 led->brightness_get = buzz_led_get_brightness;
564                 led->brightness_set = buzz_led_set_brightness;
565
566                 if (led_classdev_register(&hdev->dev, led)) {
567                         hid_err(hdev, "Failed to register LED %d\n", n);
568                         kfree(led);
569                         goto error_leds;
570                 }
571
572                 buzz->leds[n] = led;
573         }
574
575         return ret;
576
577 error_leds:
578         for (n = 0; n < 4; n++) {
579                 led = buzz->leds[n];
580                 buzz->leds[n] = NULL;
581                 if (!led)
582                         continue;
583                 led_classdev_unregister(led);
584                 kfree(led);
585         }
586
587         kfree(drv_data->extra);
588         drv_data->extra = NULL;
589         return ret;
590 }
591
592 static void buzz_remove(struct hid_device *hdev)
593 {
594         struct sony_sc *drv_data;
595         struct buzz_extra *buzz;
596         struct led_classdev *led;
597         int n;
598
599         drv_data = hid_get_drvdata(hdev);
600         BUG_ON(!(drv_data->quirks & BUZZ_CONTROLLER));
601
602         buzz = drv_data->extra;
603
604         for (n = 0; n < 4; n++) {
605                 led = buzz->leds[n];
606                 buzz->leds[n] = NULL;
607                 if (!led)
608                         continue;
609                 led_classdev_unregister(led);
610                 kfree(led);
611         }
612
613         kfree(drv_data->extra);
614         drv_data->extra = NULL;
615 }
616
617 #ifdef CONFIG_SONY_FF
618 static int sony_play_effect(struct input_dev *dev, void *data,
619                             struct ff_effect *effect)
620 {
621         unsigned char buf[] = {
622                 0x01,
623                 0x00, 0xff, 0x00, 0xff, 0x00,
624                 0x00, 0x00, 0x00, 0x00, 0x03,
625                 0xff, 0x27, 0x10, 0x00, 0x32,
626                 0xff, 0x27, 0x10, 0x00, 0x32,
627                 0xff, 0x27, 0x10, 0x00, 0x32,
628                 0xff, 0x27, 0x10, 0x00, 0x32,
629                 0x00, 0x00, 0x00, 0x00, 0x00
630         };
631         __u8 left;
632         __u8 right;
633         struct hid_device *hid = input_get_drvdata(dev);
634
635         if (effect->type != FF_RUMBLE)
636                 return 0;
637
638         left = effect->u.rumble.strong_magnitude / 256;
639         right = effect->u.rumble.weak_magnitude ? 1 : 0;
640
641         buf[3] = right;
642         buf[5] = left;
643
644         return hid->hid_output_raw_report(hid, buf, sizeof(buf),
645                                           HID_OUTPUT_REPORT);
646 }
647
648 static int sony_init_ff(struct hid_device *hdev)
649 {
650         struct hid_input *hidinput = list_entry(hdev->inputs.next,
651                                                 struct hid_input, list);
652         struct input_dev *input_dev = hidinput->input;
653
654         input_set_capability(input_dev, EV_FF, FF_RUMBLE);
655         return input_ff_create_memless(input_dev, NULL, sony_play_effect);
656 }
657
658 #else
659 static int sony_init_ff(struct hid_device *hdev)
660 {
661         return 0;
662 }
663 #endif
664
665 static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
666 {
667         int ret;
668         unsigned long quirks = id->driver_data;
669         struct sony_sc *sc;
670         unsigned int connect_mask = HID_CONNECT_DEFAULT;
671
672         sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL);
673         if (sc == NULL) {
674                 hid_err(hdev, "can't alloc sony descriptor\n");
675                 return -ENOMEM;
676         }
677
678         sc->quirks = quirks;
679         hid_set_drvdata(hdev, sc);
680
681         ret = hid_parse(hdev);
682         if (ret) {
683                 hid_err(hdev, "parse failed\n");
684                 return ret;
685         }
686
687         if (sc->quirks & VAIO_RDESC_CONSTANT)
688                 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
689         else if (sc->quirks & SIXAXIS_CONTROLLER_USB)
690                 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
691         else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
692                 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
693
694         ret = hid_hw_start(hdev, connect_mask);
695         if (ret) {
696                 hid_err(hdev, "hw start failed\n");
697                 return ret;
698         }
699
700         if (sc->quirks & SIXAXIS_CONTROLLER_USB) {
701                 hdev->hid_output_raw_report = sixaxis_usb_output_raw_report;
702                 ret = sixaxis_set_operational_usb(hdev);
703         }
704         else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
705                 ret = sixaxis_set_operational_bt(hdev);
706         else if (sc->quirks & BUZZ_CONTROLLER)
707                 ret = buzz_init(hdev);
708         else
709                 ret = 0;
710
711         if (ret < 0)
712                 goto err_stop;
713
714         ret = sony_init_ff(hdev);
715         if (ret < 0)
716                 goto err_stop;
717
718         return 0;
719 err_stop:
720         hid_hw_stop(hdev);
721         return ret;
722 }
723
724 static void sony_remove(struct hid_device *hdev)
725 {
726         struct sony_sc *sc = hid_get_drvdata(hdev);
727
728         if (sc->quirks & BUZZ_CONTROLLER)
729                 buzz_remove(hdev);
730
731         hid_hw_stop(hdev);
732 }
733
734 static const struct hid_device_id sony_devices[] = {
735         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
736                 .driver_data = SIXAXIS_CONTROLLER_USB },
737         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
738                 .driver_data = SIXAXIS_CONTROLLER_USB },
739         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
740                 .driver_data = SIXAXIS_CONTROLLER_BT },
741         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
742                 .driver_data = VAIO_RDESC_CONSTANT },
743         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE),
744                 .driver_data = VAIO_RDESC_CONSTANT },
745         /* Wired Buzz Controller. Reported as Sony Hub from its USB ID and as
746          * Logitech joystick from the device descriptor. */
747         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER),
748                 .driver_data = BUZZ_CONTROLLER },
749         { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER),
750                 .driver_data = BUZZ_CONTROLLER },
751         /* PS3 BD Remote Control */
752         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE),
753                 .driver_data = PS3REMOTE },
754         /* Logitech Harmony Adapter for PS3 */
755         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3),
756                 .driver_data = PS3REMOTE },
757         { }
758 };
759 MODULE_DEVICE_TABLE(hid, sony_devices);
760
761 static struct hid_driver sony_driver = {
762         .name          = "sony",
763         .id_table      = sony_devices,
764         .input_mapping = sony_mapping,
765         .probe         = sony_probe,
766         .remove        = sony_remove,
767         .report_fixup  = sony_report_fixup,
768         .raw_event     = sony_raw_event
769 };
770 module_hid_driver(sony_driver);
771
772 MODULE_LICENSE("GPL");