HID: wiimote: Helper functions for synchronous requests
[pandora-kernel.git] / drivers / hid / hid-wiimote.c
1 /*
2  * HID driver for Nintendo Wiimote devices
3  * Copyright (c) 2011 David Herrmann
4  */
5
6 /*
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by the Free
9  * Software Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  */
12
13 #include <linux/completion.h>
14 #include <linux/device.h>
15 #include <linux/hid.h>
16 #include <linux/input.h>
17 #include <linux/leds.h>
18 #include <linux/module.h>
19 #include <linux/mutex.h>
20 #include <linux/spinlock.h>
21 #include "hid-ids.h"
22
23 #define WIIMOTE_VERSION "0.1"
24 #define WIIMOTE_NAME "Nintendo Wii Remote"
25 #define WIIMOTE_BUFSIZE 32
26
27 struct wiimote_buf {
28         __u8 data[HID_MAX_BUFFER_SIZE];
29         size_t size;
30 };
31
32 struct wiimote_state {
33         spinlock_t lock;
34         __u8 flags;
35         __u8 accel_split[2];
36
37         /* synchronous cmd requests */
38         struct mutex sync;
39         struct completion ready;
40         int cmd;
41         __u32 opt;
42 };
43
44 struct wiimote_data {
45         struct hid_device *hdev;
46         struct input_dev *input;
47         struct led_classdev *leds[4];
48         struct input_dev *accel;
49         struct input_dev *ir;
50
51         spinlock_t qlock;
52         __u8 head;
53         __u8 tail;
54         struct wiimote_buf outq[WIIMOTE_BUFSIZE];
55         struct work_struct worker;
56
57         struct wiimote_state state;
58 };
59
60 #define WIIPROTO_FLAG_LED1              0x01
61 #define WIIPROTO_FLAG_LED2              0x02
62 #define WIIPROTO_FLAG_LED3              0x04
63 #define WIIPROTO_FLAG_LED4              0x08
64 #define WIIPROTO_FLAG_RUMBLE            0x10
65 #define WIIPROTO_FLAG_ACCEL             0x20
66 #define WIIPROTO_FLAG_IR_BASIC          0x40
67 #define WIIPROTO_FLAG_IR_EXT            0x80
68 #define WIIPROTO_FLAG_IR_FULL           0xc0 /* IR_BASIC | IR_EXT */
69 #define WIIPROTO_FLAGS_LEDS (WIIPROTO_FLAG_LED1 | WIIPROTO_FLAG_LED2 | \
70                                         WIIPROTO_FLAG_LED3 | WIIPROTO_FLAG_LED4)
71 #define WIIPROTO_FLAGS_IR (WIIPROTO_FLAG_IR_BASIC | WIIPROTO_FLAG_IR_EXT | \
72                                                         WIIPROTO_FLAG_IR_FULL)
73
74 /* return flag for led \num */
75 #define WIIPROTO_FLAG_LED(num) (WIIPROTO_FLAG_LED1 << (num - 1))
76
77 enum wiiproto_reqs {
78         WIIPROTO_REQ_NULL = 0x0,
79         WIIPROTO_REQ_RUMBLE = 0x10,
80         WIIPROTO_REQ_LED = 0x11,
81         WIIPROTO_REQ_DRM = 0x12,
82         WIIPROTO_REQ_WMEM = 0x16,
83         WIIPROTO_REQ_RMEM = 0x17,
84         WIIPROTO_REQ_STATUS = 0x20,
85         WIIPROTO_REQ_DATA = 0x21,
86         WIIPROTO_REQ_RETURN = 0x22,
87         WIIPROTO_REQ_DRM_K = 0x30,
88         WIIPROTO_REQ_DRM_KA = 0x31,
89         WIIPROTO_REQ_DRM_KE = 0x32,
90         WIIPROTO_REQ_DRM_KAI = 0x33,
91         WIIPROTO_REQ_DRM_KEE = 0x34,
92         WIIPROTO_REQ_DRM_KAE = 0x35,
93         WIIPROTO_REQ_DRM_KIE = 0x36,
94         WIIPROTO_REQ_DRM_KAIE = 0x37,
95         WIIPROTO_REQ_DRM_E = 0x3d,
96         WIIPROTO_REQ_DRM_SKAI1 = 0x3e,
97         WIIPROTO_REQ_DRM_SKAI2 = 0x3f,
98 };
99
100 enum wiiproto_keys {
101         WIIPROTO_KEY_LEFT,
102         WIIPROTO_KEY_RIGHT,
103         WIIPROTO_KEY_UP,
104         WIIPROTO_KEY_DOWN,
105         WIIPROTO_KEY_PLUS,
106         WIIPROTO_KEY_MINUS,
107         WIIPROTO_KEY_ONE,
108         WIIPROTO_KEY_TWO,
109         WIIPROTO_KEY_A,
110         WIIPROTO_KEY_B,
111         WIIPROTO_KEY_HOME,
112         WIIPROTO_KEY_COUNT
113 };
114
115 static __u16 wiiproto_keymap[] = {
116         KEY_LEFT,       /* WIIPROTO_KEY_LEFT */
117         KEY_RIGHT,      /* WIIPROTO_KEY_RIGHT */
118         KEY_UP,         /* WIIPROTO_KEY_UP */
119         KEY_DOWN,       /* WIIPROTO_KEY_DOWN */
120         KEY_NEXT,       /* WIIPROTO_KEY_PLUS */
121         KEY_PREVIOUS,   /* WIIPROTO_KEY_MINUS */
122         BTN_1,          /* WIIPROTO_KEY_ONE */
123         BTN_2,          /* WIIPROTO_KEY_TWO */
124         BTN_A,          /* WIIPROTO_KEY_A */
125         BTN_B,          /* WIIPROTO_KEY_B */
126         BTN_MODE,       /* WIIPROTO_KEY_HOME */
127 };
128
129 /* requires the state.lock spinlock to be held */
130 static inline bool wiimote_cmd_pending(struct wiimote_data *wdata, int cmd,
131                                                                 __u32 opt)
132 {
133         return wdata->state.cmd == cmd && wdata->state.opt == opt;
134 }
135
136 /* requires the state.lock spinlock to be held */
137 static inline void wiimote_cmd_complete(struct wiimote_data *wdata)
138 {
139         wdata->state.cmd = WIIPROTO_REQ_NULL;
140         complete(&wdata->state.ready);
141 }
142
143 static inline int wiimote_cmd_acquire(struct wiimote_data *wdata)
144 {
145         return mutex_lock_interruptible(&wdata->state.sync) ? -ERESTARTSYS : 0;
146 }
147
148 /* requires the state.lock spinlock to be held */
149 static inline void wiimote_cmd_set(struct wiimote_data *wdata, int cmd,
150                                                                 __u32 opt)
151 {
152         INIT_COMPLETION(wdata->state.ready);
153         wdata->state.cmd = cmd;
154         wdata->state.opt = opt;
155 }
156
157 static inline void wiimote_cmd_release(struct wiimote_data *wdata)
158 {
159         mutex_unlock(&wdata->state.sync);
160 }
161
162 static inline int wiimote_cmd_wait(struct wiimote_data *wdata)
163 {
164         int ret;
165
166         ret = wait_for_completion_interruptible_timeout(&wdata->state.ready, HZ);
167         if (ret < 0)
168                 return -ERESTARTSYS;
169         else if (ret == 0)
170                 return -EIO;
171         else
172                 return 0;
173 }
174
175 static ssize_t wiimote_hid_send(struct hid_device *hdev, __u8 *buffer,
176                                                                 size_t count)
177 {
178         __u8 *buf;
179         ssize_t ret;
180
181         if (!hdev->hid_output_raw_report)
182                 return -ENODEV;
183
184         buf = kmemdup(buffer, count, GFP_KERNEL);
185         if (!buf)
186                 return -ENOMEM;
187
188         ret = hdev->hid_output_raw_report(hdev, buf, count, HID_OUTPUT_REPORT);
189
190         kfree(buf);
191         return ret;
192 }
193
194 static void wiimote_worker(struct work_struct *work)
195 {
196         struct wiimote_data *wdata = container_of(work, struct wiimote_data,
197                                                                         worker);
198         unsigned long flags;
199
200         spin_lock_irqsave(&wdata->qlock, flags);
201
202         while (wdata->head != wdata->tail) {
203                 spin_unlock_irqrestore(&wdata->qlock, flags);
204                 wiimote_hid_send(wdata->hdev, wdata->outq[wdata->tail].data,
205                                                 wdata->outq[wdata->tail].size);
206                 spin_lock_irqsave(&wdata->qlock, flags);
207
208                 wdata->tail = (wdata->tail + 1) % WIIMOTE_BUFSIZE;
209         }
210
211         spin_unlock_irqrestore(&wdata->qlock, flags);
212 }
213
214 static void wiimote_queue(struct wiimote_data *wdata, const __u8 *buffer,
215                                                                 size_t count)
216 {
217         unsigned long flags;
218         __u8 newhead;
219
220         if (count > HID_MAX_BUFFER_SIZE) {
221                 hid_warn(wdata->hdev, "Sending too large output report\n");
222                 return;
223         }
224
225         /*
226          * Copy new request into our output queue and check whether the
227          * queue is full. If it is full, discard this request.
228          * If it is empty we need to start a new worker that will
229          * send out the buffer to the hid device.
230          * If the queue is not empty, then there must be a worker
231          * that is currently sending out our buffer and this worker
232          * will reschedule itself until the queue is empty.
233          */
234
235         spin_lock_irqsave(&wdata->qlock, flags);
236
237         memcpy(wdata->outq[wdata->head].data, buffer, count);
238         wdata->outq[wdata->head].size = count;
239         newhead = (wdata->head + 1) % WIIMOTE_BUFSIZE;
240
241         if (wdata->head == wdata->tail) {
242                 wdata->head = newhead;
243                 schedule_work(&wdata->worker);
244         } else if (newhead != wdata->tail) {
245                 wdata->head = newhead;
246         } else {
247                 hid_warn(wdata->hdev, "Output queue is full");
248         }
249
250         spin_unlock_irqrestore(&wdata->qlock, flags);
251 }
252
253 /*
254  * This sets the rumble bit on the given output report if rumble is
255  * currently enabled.
256  * \cmd1 must point to the second byte in the output report => &cmd[1]
257  * This must be called on nearly every output report before passing it
258  * into the output queue!
259  */
260 static inline void wiiproto_keep_rumble(struct wiimote_data *wdata, __u8 *cmd1)
261 {
262         if (wdata->state.flags & WIIPROTO_FLAG_RUMBLE)
263                 *cmd1 |= 0x01;
264 }
265
266 static void wiiproto_req_rumble(struct wiimote_data *wdata, __u8 rumble)
267 {
268         __u8 cmd[2];
269
270         rumble = !!rumble;
271         if (rumble == !!(wdata->state.flags & WIIPROTO_FLAG_RUMBLE))
272                 return;
273
274         if (rumble)
275                 wdata->state.flags |= WIIPROTO_FLAG_RUMBLE;
276         else
277                 wdata->state.flags &= ~WIIPROTO_FLAG_RUMBLE;
278
279         cmd[0] = WIIPROTO_REQ_RUMBLE;
280         cmd[1] = 0;
281
282         wiiproto_keep_rumble(wdata, &cmd[1]);
283         wiimote_queue(wdata, cmd, sizeof(cmd));
284 }
285
286 static void wiiproto_req_leds(struct wiimote_data *wdata, int leds)
287 {
288         __u8 cmd[2];
289
290         leds &= WIIPROTO_FLAGS_LEDS;
291         if ((wdata->state.flags & WIIPROTO_FLAGS_LEDS) == leds)
292                 return;
293         wdata->state.flags = (wdata->state.flags & ~WIIPROTO_FLAGS_LEDS) | leds;
294
295         cmd[0] = WIIPROTO_REQ_LED;
296         cmd[1] = 0;
297
298         if (leds & WIIPROTO_FLAG_LED1)
299                 cmd[1] |= 0x10;
300         if (leds & WIIPROTO_FLAG_LED2)
301                 cmd[1] |= 0x20;
302         if (leds & WIIPROTO_FLAG_LED3)
303                 cmd[1] |= 0x40;
304         if (leds & WIIPROTO_FLAG_LED4)
305                 cmd[1] |= 0x80;
306
307         wiiproto_keep_rumble(wdata, &cmd[1]);
308         wiimote_queue(wdata, cmd, sizeof(cmd));
309 }
310
311 /*
312  * Check what peripherals of the wiimote are currently
313  * active and select a proper DRM that supports all of
314  * the requested data inputs.
315  */
316 static __u8 select_drm(struct wiimote_data *wdata)
317 {
318         __u8 ir = wdata->state.flags & WIIPROTO_FLAGS_IR;
319
320         if (ir == WIIPROTO_FLAG_IR_BASIC) {
321                 if (wdata->state.flags & WIIPROTO_FLAG_ACCEL)
322                         return WIIPROTO_REQ_DRM_KAIE;
323                 else
324                         return WIIPROTO_REQ_DRM_KIE;
325         } else if (ir == WIIPROTO_FLAG_IR_EXT) {
326                 return WIIPROTO_REQ_DRM_KAI;
327         } else if (ir == WIIPROTO_FLAG_IR_FULL) {
328                 return WIIPROTO_REQ_DRM_SKAI1;
329         } else {
330                 if (wdata->state.flags & WIIPROTO_FLAG_ACCEL)
331                         return WIIPROTO_REQ_DRM_KA;
332                 else
333                         return WIIPROTO_REQ_DRM_K;
334         }
335 }
336
337 static void wiiproto_req_drm(struct wiimote_data *wdata, __u8 drm)
338 {
339         __u8 cmd[3];
340
341         if (drm == WIIPROTO_REQ_NULL)
342                 drm = select_drm(wdata);
343
344         cmd[0] = WIIPROTO_REQ_DRM;
345         cmd[1] = 0;
346         cmd[2] = drm;
347
348         wiiproto_keep_rumble(wdata, &cmd[1]);
349         wiimote_queue(wdata, cmd, sizeof(cmd));
350 }
351
352 static void wiiproto_req_accel(struct wiimote_data *wdata, __u8 accel)
353 {
354         accel = !!accel;
355         if (accel == !!(wdata->state.flags & WIIPROTO_FLAG_ACCEL))
356                 return;
357
358         if (accel)
359                 wdata->state.flags |= WIIPROTO_FLAG_ACCEL;
360         else
361                 wdata->state.flags &= ~WIIPROTO_FLAG_ACCEL;
362
363         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
364 }
365
366 #define wiiproto_req_wreg(wdata, os, buf, sz) \
367                         wiiproto_req_wmem((wdata), false, (os), (buf), (sz))
368
369 #define wiiproto_req_weeprom(wdata, os, buf, sz) \
370                         wiiproto_req_wmem((wdata), true, (os), (buf), (sz))
371
372 static void wiiproto_req_wmem(struct wiimote_data *wdata, bool eeprom,
373                                 __u32 offset, const __u8 *buf, __u8 size)
374 {
375         __u8 cmd[22];
376
377         if (size > 16 || size == 0) {
378                 hid_warn(wdata->hdev, "Invalid length %d wmem request\n", size);
379                 return;
380         }
381
382         memset(cmd, 0, sizeof(cmd));
383         cmd[0] = WIIPROTO_REQ_WMEM;
384         cmd[2] = (offset >> 16) & 0xff;
385         cmd[3] = (offset >> 8) & 0xff;
386         cmd[4] = offset & 0xff;
387         cmd[5] = size;
388         memcpy(&cmd[6], buf, size);
389
390         if (!eeprom)
391                 cmd[1] |= 0x04;
392
393         wiiproto_keep_rumble(wdata, &cmd[1]);
394         wiimote_queue(wdata, cmd, sizeof(cmd));
395 }
396
397 static enum led_brightness wiimote_leds_get(struct led_classdev *led_dev)
398 {
399         struct wiimote_data *wdata;
400         struct device *dev = led_dev->dev->parent;
401         int i;
402         unsigned long flags;
403         bool value = false;
404
405         wdata = hid_get_drvdata(container_of(dev, struct hid_device, dev));
406
407         for (i = 0; i < 4; ++i) {
408                 if (wdata->leds[i] == led_dev) {
409                         spin_lock_irqsave(&wdata->state.lock, flags);
410                         value = wdata->state.flags & WIIPROTO_FLAG_LED(i + 1);
411                         spin_unlock_irqrestore(&wdata->state.lock, flags);
412                         break;
413                 }
414         }
415
416         return value ? LED_FULL : LED_OFF;
417 }
418
419 static void wiimote_leds_set(struct led_classdev *led_dev,
420                                                 enum led_brightness value)
421 {
422         struct wiimote_data *wdata;
423         struct device *dev = led_dev->dev->parent;
424         int i;
425         unsigned long flags;
426         __u8 state, flag;
427
428         wdata = hid_get_drvdata(container_of(dev, struct hid_device, dev));
429
430         for (i = 0; i < 4; ++i) {
431                 if (wdata->leds[i] == led_dev) {
432                         flag = WIIPROTO_FLAG_LED(i + 1);
433                         spin_lock_irqsave(&wdata->state.lock, flags);
434                         state = wdata->state.flags;
435                         if (value == LED_OFF)
436                                 wiiproto_req_leds(wdata, state & ~flag);
437                         else
438                                 wiiproto_req_leds(wdata, state | flag);
439                         spin_unlock_irqrestore(&wdata->state.lock, flags);
440                         break;
441                 }
442         }
443 }
444
445 static int wiimote_ff_play(struct input_dev *dev, void *data,
446                                                         struct ff_effect *eff)
447 {
448         struct wiimote_data *wdata = input_get_drvdata(dev);
449         __u8 value;
450         unsigned long flags;
451
452         /*
453          * The wiimote supports only a single rumble motor so if any magnitude
454          * is set to non-zero then we start the rumble motor. If both are set to
455          * zero, we stop the rumble motor.
456          */
457
458         if (eff->u.rumble.strong_magnitude || eff->u.rumble.weak_magnitude)
459                 value = 1;
460         else
461                 value = 0;
462
463         spin_lock_irqsave(&wdata->state.lock, flags);
464         wiiproto_req_rumble(wdata, value);
465         spin_unlock_irqrestore(&wdata->state.lock, flags);
466
467         return 0;
468 }
469
470 static int wiimote_input_open(struct input_dev *dev)
471 {
472         struct wiimote_data *wdata = input_get_drvdata(dev);
473
474         return hid_hw_open(wdata->hdev);
475 }
476
477 static void wiimote_input_close(struct input_dev *dev)
478 {
479         struct wiimote_data *wdata = input_get_drvdata(dev);
480
481         hid_hw_close(wdata->hdev);
482 }
483
484 static int wiimote_accel_open(struct input_dev *dev)
485 {
486         struct wiimote_data *wdata = input_get_drvdata(dev);
487         int ret;
488         unsigned long flags;
489
490         ret = hid_hw_open(wdata->hdev);
491         if (ret)
492                 return ret;
493
494         spin_lock_irqsave(&wdata->state.lock, flags);
495         wiiproto_req_accel(wdata, true);
496         spin_unlock_irqrestore(&wdata->state.lock, flags);
497
498         return 0;
499 }
500
501 static void wiimote_accel_close(struct input_dev *dev)
502 {
503         struct wiimote_data *wdata = input_get_drvdata(dev);
504         unsigned long flags;
505
506         spin_lock_irqsave(&wdata->state.lock, flags);
507         wiiproto_req_accel(wdata, false);
508         spin_unlock_irqrestore(&wdata->state.lock, flags);
509
510         hid_hw_close(wdata->hdev);
511 }
512
513 static void handler_keys(struct wiimote_data *wdata, const __u8 *payload)
514 {
515         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_LEFT],
516                                                         !!(payload[0] & 0x01));
517         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_RIGHT],
518                                                         !!(payload[0] & 0x02));
519         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_DOWN],
520                                                         !!(payload[0] & 0x04));
521         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_UP],
522                                                         !!(payload[0] & 0x08));
523         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_PLUS],
524                                                         !!(payload[0] & 0x10));
525         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_TWO],
526                                                         !!(payload[1] & 0x01));
527         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_ONE],
528                                                         !!(payload[1] & 0x02));
529         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_B],
530                                                         !!(payload[1] & 0x04));
531         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_A],
532                                                         !!(payload[1] & 0x08));
533         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_MINUS],
534                                                         !!(payload[1] & 0x10));
535         input_report_key(wdata->input, wiiproto_keymap[WIIPROTO_KEY_HOME],
536                                                         !!(payload[1] & 0x80));
537         input_sync(wdata->input);
538 }
539
540 static void handler_accel(struct wiimote_data *wdata, const __u8 *payload)
541 {
542         __u16 x, y, z;
543
544         if (!(wdata->state.flags & WIIPROTO_FLAG_ACCEL))
545                 return;
546
547         /*
548          * payload is: BB BB XX YY ZZ
549          * Accelerometer data is encoded into 3 10bit values. XX, YY and ZZ
550          * contain the upper 8 bits of each value. The lower 2 bits are
551          * contained in the buttons data BB BB.
552          * Bits 6 and 7 of the first buttons byte BB is the lower 2 bits of the
553          * X accel value. Bit 5 of the second buttons byte is the 2nd bit of Y
554          * accel value and bit 6 is the second bit of the Z value.
555          * The first bit of Y and Z values is not available and always set to 0.
556          * 0x200 is returned on no movement.
557          */
558
559         x = payload[2] << 2;
560         y = payload[3] << 2;
561         z = payload[4] << 2;
562
563         x |= (payload[0] >> 5) & 0x3;
564         y |= (payload[1] >> 4) & 0x2;
565         z |= (payload[1] >> 5) & 0x2;
566
567         input_report_abs(wdata->accel, ABS_RX, x - 0x200);
568         input_report_abs(wdata->accel, ABS_RY, y - 0x200);
569         input_report_abs(wdata->accel, ABS_RZ, z - 0x200);
570         input_sync(wdata->accel);
571 }
572
573 #define ir_to_input0(wdata, ir, packed) __ir_to_input((wdata), (ir), (packed), \
574                                                         ABS_HAT0X, ABS_HAT0Y)
575 #define ir_to_input1(wdata, ir, packed) __ir_to_input((wdata), (ir), (packed), \
576                                                         ABS_HAT1X, ABS_HAT1Y)
577 #define ir_to_input2(wdata, ir, packed) __ir_to_input((wdata), (ir), (packed), \
578                                                         ABS_HAT2X, ABS_HAT2Y)
579 #define ir_to_input3(wdata, ir, packed) __ir_to_input((wdata), (ir), (packed), \
580                                                         ABS_HAT3X, ABS_HAT3Y)
581
582 static void __ir_to_input(struct wiimote_data *wdata, const __u8 *ir,
583                                                 bool packed, __u8 xid, __u8 yid)
584 {
585         __u16 x, y;
586
587         if (!(wdata->state.flags & WIIPROTO_FLAGS_IR))
588                 return;
589
590         /*
591          * Basic IR data is encoded into 3 bytes. The first two bytes are the
592          * upper 8 bit of the X/Y data, the 3rd byte contains the lower 2 bits
593          * of both.
594          * If data is packed, then the 3rd byte is put first and slightly
595          * reordered. This allows to interleave packed and non-packed data to
596          * have two IR sets in 5 bytes instead of 6.
597          * The resulting 10bit X/Y values are passed to the ABS_HATXY input dev.
598          */
599
600         if (packed) {
601                 x = ir[1] << 2;
602                 y = ir[2] << 2;
603
604                 x |= ir[0] & 0x3;
605                 y |= (ir[0] >> 2) & 0x3;
606         } else {
607                 x = ir[0] << 2;
608                 y = ir[1] << 2;
609
610                 x |= (ir[2] >> 4) & 0x3;
611                 y |= (ir[2] >> 6) & 0x3;
612         }
613
614         input_report_abs(wdata->ir, xid, x);
615         input_report_abs(wdata->ir, yid, y);
616 }
617
618 static void handler_status(struct wiimote_data *wdata, const __u8 *payload)
619 {
620         handler_keys(wdata, payload);
621
622         /* on status reports the drm is reset so we need to resend the drm */
623         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
624 }
625
626 static void handler_data(struct wiimote_data *wdata, const __u8 *payload)
627 {
628         handler_keys(wdata, payload);
629 }
630
631 static void handler_return(struct wiimote_data *wdata, const __u8 *payload)
632 {
633         __u8 err = payload[3];
634         __u8 cmd = payload[2];
635
636         handler_keys(wdata, payload);
637
638         if (err)
639                 hid_warn(wdata->hdev, "Remote error %hhu on req %hhu\n", err,
640                                                                         cmd);
641 }
642
643 static void handler_drm_KA(struct wiimote_data *wdata, const __u8 *payload)
644 {
645         handler_keys(wdata, payload);
646         handler_accel(wdata, payload);
647 }
648
649 static void handler_drm_KE(struct wiimote_data *wdata, const __u8 *payload)
650 {
651         handler_keys(wdata, payload);
652 }
653
654 static void handler_drm_KAI(struct wiimote_data *wdata, const __u8 *payload)
655 {
656         handler_keys(wdata, payload);
657         handler_accel(wdata, payload);
658         ir_to_input0(wdata, &payload[5], false);
659         ir_to_input1(wdata, &payload[8], false);
660         ir_to_input2(wdata, &payload[11], false);
661         ir_to_input3(wdata, &payload[14], false);
662         input_sync(wdata->ir);
663 }
664
665 static void handler_drm_KEE(struct wiimote_data *wdata, const __u8 *payload)
666 {
667         handler_keys(wdata, payload);
668 }
669
670 static void handler_drm_KIE(struct wiimote_data *wdata, const __u8 *payload)
671 {
672         handler_keys(wdata, payload);
673         ir_to_input0(wdata, &payload[2], false);
674         ir_to_input1(wdata, &payload[4], true);
675         ir_to_input2(wdata, &payload[7], false);
676         ir_to_input3(wdata, &payload[9], true);
677         input_sync(wdata->ir);
678 }
679
680 static void handler_drm_KAE(struct wiimote_data *wdata, const __u8 *payload)
681 {
682         handler_keys(wdata, payload);
683         handler_accel(wdata, payload);
684 }
685
686 static void handler_drm_KAIE(struct wiimote_data *wdata, const __u8 *payload)
687 {
688         handler_keys(wdata, payload);
689         handler_accel(wdata, payload);
690         ir_to_input0(wdata, &payload[5], false);
691         ir_to_input1(wdata, &payload[7], true);
692         ir_to_input2(wdata, &payload[10], false);
693         ir_to_input3(wdata, &payload[12], true);
694         input_sync(wdata->ir);
695 }
696
697 static void handler_drm_E(struct wiimote_data *wdata, const __u8 *payload)
698 {
699 }
700
701 static void handler_drm_SKAI1(struct wiimote_data *wdata, const __u8 *payload)
702 {
703         handler_keys(wdata, payload);
704
705         wdata->state.accel_split[0] = payload[2];
706         wdata->state.accel_split[1] = (payload[0] >> 1) & (0x10 | 0x20);
707         wdata->state.accel_split[1] |= (payload[1] << 1) & (0x40 | 0x80);
708
709         ir_to_input0(wdata, &payload[3], false);
710         ir_to_input1(wdata, &payload[12], false);
711         input_sync(wdata->ir);
712 }
713
714 static void handler_drm_SKAI2(struct wiimote_data *wdata, const __u8 *payload)
715 {
716         __u8 buf[5];
717
718         handler_keys(wdata, payload);
719
720         wdata->state.accel_split[1] |= (payload[0] >> 5) & (0x01 | 0x02);
721         wdata->state.accel_split[1] |= (payload[1] >> 3) & (0x04 | 0x08);
722
723         buf[0] = 0;
724         buf[1] = 0;
725         buf[2] = wdata->state.accel_split[0];
726         buf[3] = payload[2];
727         buf[4] = wdata->state.accel_split[1];
728         handler_accel(wdata, buf);
729
730         ir_to_input2(wdata, &payload[3], false);
731         ir_to_input3(wdata, &payload[12], false);
732         input_sync(wdata->ir);
733 }
734
735 struct wiiproto_handler {
736         __u8 id;
737         size_t size;
738         void (*func)(struct wiimote_data *wdata, const __u8 *payload);
739 };
740
741 static struct wiiproto_handler handlers[] = {
742         { .id = WIIPROTO_REQ_STATUS, .size = 6, .func = handler_status },
743         { .id = WIIPROTO_REQ_DATA, .size = 21, .func = handler_data },
744         { .id = WIIPROTO_REQ_RETURN, .size = 4, .func = handler_return },
745         { .id = WIIPROTO_REQ_DRM_K, .size = 2, .func = handler_keys },
746         { .id = WIIPROTO_REQ_DRM_KA, .size = 5, .func = handler_drm_KA },
747         { .id = WIIPROTO_REQ_DRM_KE, .size = 10, .func = handler_drm_KE },
748         { .id = WIIPROTO_REQ_DRM_KAI, .size = 17, .func = handler_drm_KAI },
749         { .id = WIIPROTO_REQ_DRM_KEE, .size = 21, .func = handler_drm_KEE },
750         { .id = WIIPROTO_REQ_DRM_KAE, .size = 21, .func = handler_drm_KAE },
751         { .id = WIIPROTO_REQ_DRM_KIE, .size = 21, .func = handler_drm_KIE },
752         { .id = WIIPROTO_REQ_DRM_KAIE, .size = 21, .func = handler_drm_KAIE },
753         { .id = WIIPROTO_REQ_DRM_E, .size = 21, .func = handler_drm_E },
754         { .id = WIIPROTO_REQ_DRM_SKAI1, .size = 21, .func = handler_drm_SKAI1 },
755         { .id = WIIPROTO_REQ_DRM_SKAI2, .size = 21, .func = handler_drm_SKAI2 },
756         { .id = 0 }
757 };
758
759 static int wiimote_hid_event(struct hid_device *hdev, struct hid_report *report,
760                                                         u8 *raw_data, int size)
761 {
762         struct wiimote_data *wdata = hid_get_drvdata(hdev);
763         struct wiiproto_handler *h;
764         int i;
765         unsigned long flags;
766         bool handled = false;
767
768         if (size < 1)
769                 return -EINVAL;
770
771         spin_lock_irqsave(&wdata->state.lock, flags);
772
773         for (i = 0; handlers[i].id; ++i) {
774                 h = &handlers[i];
775                 if (h->id == raw_data[0] && h->size < size) {
776                         h->func(wdata, &raw_data[1]);
777                         handled = true;
778                 }
779         }
780
781         if (!handled)
782                 hid_warn(hdev, "Unhandled report %hhu size %d\n", raw_data[0],
783                                                                         size);
784
785         spin_unlock_irqrestore(&wdata->state.lock, flags);
786
787         return 0;
788 }
789
790 static void wiimote_leds_destroy(struct wiimote_data *wdata)
791 {
792         int i;
793         struct led_classdev *led;
794
795         for (i = 0; i < 4; ++i) {
796                 if (wdata->leds[i]) {
797                         led = wdata->leds[i];
798                         wdata->leds[i] = NULL;
799                         led_classdev_unregister(led);
800                         kfree(led);
801                 }
802         }
803 }
804
805 static int wiimote_leds_create(struct wiimote_data *wdata)
806 {
807         int i, ret;
808         struct device *dev = &wdata->hdev->dev;
809         size_t namesz = strlen(dev_name(dev)) + 9;
810         struct led_classdev *led;
811         char *name;
812
813         for (i = 0; i < 4; ++i) {
814                 led = kzalloc(sizeof(struct led_classdev) + namesz, GFP_KERNEL);
815                 if (!led) {
816                         ret = -ENOMEM;
817                         goto err;
818                 }
819                 name = (void*)&led[1];
820                 snprintf(name, namesz, "%s:blue:p%d", dev_name(dev), i);
821                 led->name = name;
822                 led->brightness = 0;
823                 led->max_brightness = 1;
824                 led->brightness_get = wiimote_leds_get;
825                 led->brightness_set = wiimote_leds_set;
826
827                 ret = led_classdev_register(dev, led);
828                 if (ret) {
829                         kfree(led);
830                         goto err;
831                 }
832                 wdata->leds[i] = led;
833         }
834
835         return 0;
836
837 err:
838         wiimote_leds_destroy(wdata);
839         return ret;
840 }
841
842 static struct wiimote_data *wiimote_create(struct hid_device *hdev)
843 {
844         struct wiimote_data *wdata;
845         int i;
846
847         wdata = kzalloc(sizeof(*wdata), GFP_KERNEL);
848         if (!wdata)
849                 return NULL;
850
851         wdata->input = input_allocate_device();
852         if (!wdata->input)
853                 goto err;
854
855         wdata->hdev = hdev;
856         hid_set_drvdata(hdev, wdata);
857
858         input_set_drvdata(wdata->input, wdata);
859         wdata->input->open = wiimote_input_open;
860         wdata->input->close = wiimote_input_close;
861         wdata->input->dev.parent = &wdata->hdev->dev;
862         wdata->input->id.bustype = wdata->hdev->bus;
863         wdata->input->id.vendor = wdata->hdev->vendor;
864         wdata->input->id.product = wdata->hdev->product;
865         wdata->input->id.version = wdata->hdev->version;
866         wdata->input->name = WIIMOTE_NAME;
867
868         set_bit(EV_KEY, wdata->input->evbit);
869         for (i = 0; i < WIIPROTO_KEY_COUNT; ++i)
870                 set_bit(wiiproto_keymap[i], wdata->input->keybit);
871
872         set_bit(FF_RUMBLE, wdata->input->ffbit);
873         if (input_ff_create_memless(wdata->input, NULL, wiimote_ff_play))
874                 goto err_input;
875
876         wdata->accel = input_allocate_device();
877         if (!wdata->accel)
878                 goto err_input;
879
880         input_set_drvdata(wdata->accel, wdata);
881         wdata->accel->open = wiimote_accel_open;
882         wdata->accel->close = wiimote_accel_close;
883         wdata->accel->dev.parent = &wdata->hdev->dev;
884         wdata->accel->id.bustype = wdata->hdev->bus;
885         wdata->accel->id.vendor = wdata->hdev->vendor;
886         wdata->accel->id.product = wdata->hdev->product;
887         wdata->accel->id.version = wdata->hdev->version;
888         wdata->accel->name = WIIMOTE_NAME " Accelerometer";
889
890         set_bit(EV_ABS, wdata->accel->evbit);
891         set_bit(ABS_RX, wdata->accel->absbit);
892         set_bit(ABS_RY, wdata->accel->absbit);
893         set_bit(ABS_RZ, wdata->accel->absbit);
894         input_set_abs_params(wdata->accel, ABS_RX, -500, 500, 2, 4);
895         input_set_abs_params(wdata->accel, ABS_RY, -500, 500, 2, 4);
896         input_set_abs_params(wdata->accel, ABS_RZ, -500, 500, 2, 4);
897
898         wdata->ir = input_allocate_device();
899         if (!wdata->ir)
900                 goto err_ir;
901
902         input_set_drvdata(wdata->ir, wdata);
903         wdata->ir->dev.parent = &wdata->hdev->dev;
904         wdata->ir->id.bustype = wdata->hdev->bus;
905         wdata->ir->id.vendor = wdata->hdev->vendor;
906         wdata->ir->id.product = wdata->hdev->product;
907         wdata->ir->id.version = wdata->hdev->version;
908         wdata->ir->name = WIIMOTE_NAME " IR";
909
910         set_bit(EV_ABS, wdata->ir->evbit);
911         set_bit(ABS_HAT0X, wdata->ir->absbit);
912         set_bit(ABS_HAT0Y, wdata->ir->absbit);
913         set_bit(ABS_HAT1X, wdata->ir->absbit);
914         set_bit(ABS_HAT1Y, wdata->ir->absbit);
915         set_bit(ABS_HAT2X, wdata->ir->absbit);
916         set_bit(ABS_HAT2Y, wdata->ir->absbit);
917         set_bit(ABS_HAT3X, wdata->ir->absbit);
918         set_bit(ABS_HAT3Y, wdata->ir->absbit);
919         input_set_abs_params(wdata->ir, ABS_HAT0X, 0, 1023, 2, 4);
920         input_set_abs_params(wdata->ir, ABS_HAT0Y, 0, 767, 2, 4);
921         input_set_abs_params(wdata->ir, ABS_HAT1X, 0, 1023, 2, 4);
922         input_set_abs_params(wdata->ir, ABS_HAT1Y, 0, 767, 2, 4);
923         input_set_abs_params(wdata->ir, ABS_HAT2X, 0, 1023, 2, 4);
924         input_set_abs_params(wdata->ir, ABS_HAT2Y, 0, 767, 2, 4);
925         input_set_abs_params(wdata->ir, ABS_HAT3X, 0, 1023, 2, 4);
926         input_set_abs_params(wdata->ir, ABS_HAT3Y, 0, 767, 2, 4);
927
928         spin_lock_init(&wdata->qlock);
929         INIT_WORK(&wdata->worker, wiimote_worker);
930
931         spin_lock_init(&wdata->state.lock);
932         init_completion(&wdata->state.ready);
933         mutex_init(&wdata->state.sync);
934
935         return wdata;
936
937 err_ir:
938         input_free_device(wdata->accel);
939 err_input:
940         input_free_device(wdata->input);
941 err:
942         kfree(wdata);
943         return NULL;
944 }
945
946 static void wiimote_destroy(struct wiimote_data *wdata)
947 {
948         wiimote_leds_destroy(wdata);
949
950         input_unregister_device(wdata->accel);
951         input_unregister_device(wdata->ir);
952         input_unregister_device(wdata->input);
953         cancel_work_sync(&wdata->worker);
954         hid_hw_stop(wdata->hdev);
955
956         kfree(wdata);
957 }
958
959 static int wiimote_hid_probe(struct hid_device *hdev,
960                                 const struct hid_device_id *id)
961 {
962         struct wiimote_data *wdata;
963         int ret;
964
965         wdata = wiimote_create(hdev);
966         if (!wdata) {
967                 hid_err(hdev, "Can't alloc device\n");
968                 return -ENOMEM;
969         }
970
971         ret = hid_parse(hdev);
972         if (ret) {
973                 hid_err(hdev, "HID parse failed\n");
974                 goto err;
975         }
976
977         ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW);
978         if (ret) {
979                 hid_err(hdev, "HW start failed\n");
980                 goto err;
981         }
982
983         ret = input_register_device(wdata->accel);
984         if (ret) {
985                 hid_err(hdev, "Cannot register input device\n");
986                 goto err_stop;
987         }
988
989         ret = input_register_device(wdata->ir);
990         if (ret) {
991                 hid_err(hdev, "Cannot register input device\n");
992                 goto err_ir;
993         }
994
995         ret = input_register_device(wdata->input);
996         if (ret) {
997                 hid_err(hdev, "Cannot register input device\n");
998                 goto err_input;
999         }
1000
1001         ret = wiimote_leds_create(wdata);
1002         if (ret)
1003                 goto err_free;
1004
1005         hid_info(hdev, "New device registered\n");
1006
1007         /* by default set led1 after device initialization */
1008         spin_lock_irq(&wdata->state.lock);
1009         wiiproto_req_leds(wdata, WIIPROTO_FLAG_LED1);
1010         spin_unlock_irq(&wdata->state.lock);
1011
1012         return 0;
1013
1014 err_free:
1015         wiimote_destroy(wdata);
1016         return ret;
1017
1018 err_input:
1019         input_unregister_device(wdata->ir);
1020         wdata->ir = NULL;
1021 err_ir:
1022         input_unregister_device(wdata->accel);
1023         wdata->accel = NULL;
1024 err_stop:
1025         hid_hw_stop(hdev);
1026 err:
1027         input_free_device(wdata->ir);
1028         input_free_device(wdata->accel);
1029         input_free_device(wdata->input);
1030         kfree(wdata);
1031         return ret;
1032 }
1033
1034 static void wiimote_hid_remove(struct hid_device *hdev)
1035 {
1036         struct wiimote_data *wdata = hid_get_drvdata(hdev);
1037
1038         hid_info(hdev, "Device removed\n");
1039         wiimote_destroy(wdata);
1040 }
1041
1042 static const struct hid_device_id wiimote_hid_devices[] = {
1043         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
1044                                 USB_DEVICE_ID_NINTENDO_WIIMOTE) },
1045         { }
1046 };
1047 MODULE_DEVICE_TABLE(hid, wiimote_hid_devices);
1048
1049 static struct hid_driver wiimote_hid_driver = {
1050         .name = "wiimote",
1051         .id_table = wiimote_hid_devices,
1052         .probe = wiimote_hid_probe,
1053         .remove = wiimote_hid_remove,
1054         .raw_event = wiimote_hid_event,
1055 };
1056
1057 static int __init wiimote_init(void)
1058 {
1059         int ret;
1060
1061         ret = hid_register_driver(&wiimote_hid_driver);
1062         if (ret)
1063                 pr_err("Can't register wiimote hid driver\n");
1064
1065         return ret;
1066 }
1067
1068 static void __exit wiimote_exit(void)
1069 {
1070         hid_unregister_driver(&wiimote_hid_driver);
1071 }
1072
1073 module_init(wiimote_init);
1074 module_exit(wiimote_exit);
1075 MODULE_LICENSE("GPL");
1076 MODULE_AUTHOR("David Herrmann <dh.herrmann@gmail.com>");
1077 MODULE_DESCRIPTION(WIIMOTE_NAME " Device Driver");
1078 MODULE_VERSION(WIIMOTE_VERSION);