]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/hid/hid-wiimote-modules.c
ASoC: arizona: Improve handling of setting REFCLK to 0
[karo-tx-linux.git] / drivers / hid / hid-wiimote-modules.c
1 /*
2  * Device Modules for Nintendo Wii / Wii U HID Driver
3  * Copyright (c) 2011-2013 David Herrmann <dh.herrmann@gmail.com>
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 /*
14  * Wiimote Modules
15  * Nintendo devices provide different peripherals and many new devices lack
16  * initial features like the IR camera. Therefore, each peripheral device is
17  * implemented as an independent module and we probe on each device only the
18  * modules for the hardware that really is available.
19  *
20  * Module registration is sequential. Unregistration is done in reverse order.
21  * After device detection, the needed modules are loaded. Users can trigger
22  * re-detection which causes all modules to be unloaded and then reload the
23  * modules for the new detected device.
24  *
25  * wdata->input is a shared input device. It is always initialized prior to
26  * module registration. If at least one registered module is marked as
27  * WIIMOD_FLAG_INPUT, then the input device will get registered after all
28  * modules were registered.
29  * Please note that it is unregistered _before_ the "remove" callbacks are
30  * called. This guarantees that no input interaction is done, anymore. However,
31  * the wiimote core keeps a reference to the input device so it is freed only
32  * after all modules were removed. It is safe to send events to unregistered
33  * input devices.
34  */
35
36 #include <linux/device.h>
37 #include <linux/hid.h>
38 #include <linux/input.h>
39 #include <linux/spinlock.h>
40 #include "hid-wiimote.h"
41
42 /*
43  * Keys
44  * The initial Wii Remote provided a bunch of buttons that are reported as
45  * part of the core protocol. Many later devices dropped these and report
46  * invalid data in the core button reports. Load this only on devices which
47  * correctly send button reports.
48  * It uses the shared input device.
49  */
50
51 static const __u16 wiimod_keys_map[] = {
52         KEY_LEFT,       /* WIIPROTO_KEY_LEFT */
53         KEY_RIGHT,      /* WIIPROTO_KEY_RIGHT */
54         KEY_UP,         /* WIIPROTO_KEY_UP */
55         KEY_DOWN,       /* WIIPROTO_KEY_DOWN */
56         KEY_NEXT,       /* WIIPROTO_KEY_PLUS */
57         KEY_PREVIOUS,   /* WIIPROTO_KEY_MINUS */
58         BTN_1,          /* WIIPROTO_KEY_ONE */
59         BTN_2,          /* WIIPROTO_KEY_TWO */
60         BTN_A,          /* WIIPROTO_KEY_A */
61         BTN_B,          /* WIIPROTO_KEY_B */
62         BTN_MODE,       /* WIIPROTO_KEY_HOME */
63 };
64
65 static void wiimod_keys_in_keys(struct wiimote_data *wdata, const __u8 *keys)
66 {
67         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_LEFT],
68                                                         !!(keys[0] & 0x01));
69         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_RIGHT],
70                                                         !!(keys[0] & 0x02));
71         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_DOWN],
72                                                         !!(keys[0] & 0x04));
73         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_UP],
74                                                         !!(keys[0] & 0x08));
75         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_PLUS],
76                                                         !!(keys[0] & 0x10));
77         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_TWO],
78                                                         !!(keys[1] & 0x01));
79         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_ONE],
80                                                         !!(keys[1] & 0x02));
81         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_B],
82                                                         !!(keys[1] & 0x04));
83         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_A],
84                                                         !!(keys[1] & 0x08));
85         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_MINUS],
86                                                         !!(keys[1] & 0x10));
87         input_report_key(wdata->input, wiimod_keys_map[WIIPROTO_KEY_HOME],
88                                                         !!(keys[1] & 0x80));
89         input_sync(wdata->input);
90 }
91
92 static int wiimod_keys_probe(const struct wiimod_ops *ops,
93                              struct wiimote_data *wdata)
94 {
95         unsigned int i;
96
97         set_bit(EV_KEY, wdata->input->evbit);
98         for (i = 0; i < WIIPROTO_KEY_COUNT; ++i)
99                 set_bit(wiimod_keys_map[i], wdata->input->keybit);
100
101         return 0;
102 }
103
104 static const struct wiimod_ops wiimod_keys = {
105         .flags = WIIMOD_FLAG_INPUT,
106         .arg = 0,
107         .probe = wiimod_keys_probe,
108         .remove = NULL,
109         .in_keys = wiimod_keys_in_keys,
110 };
111
112 /*
113  * Rumble
114  * Nearly all devices provide a rumble feature. A small motor for
115  * force-feedback effects. We provide an FF_RUMBLE memless ff device on the
116  * shared input device if this module is loaded.
117  * The rumble motor is controlled via a flag on almost every output report so
118  * the wiimote core handles the rumble flag. But if a device doesn't provide
119  * the rumble motor, this flag shouldn't be set.
120  */
121
122 static int wiimod_rumble_play(struct input_dev *dev, void *data,
123                               struct ff_effect *eff)
124 {
125         struct wiimote_data *wdata = input_get_drvdata(dev);
126         __u8 value;
127         unsigned long flags;
128
129         /*
130          * The wiimote supports only a single rumble motor so if any magnitude
131          * is set to non-zero then we start the rumble motor. If both are set to
132          * zero, we stop the rumble motor.
133          */
134
135         if (eff->u.rumble.strong_magnitude || eff->u.rumble.weak_magnitude)
136                 value = 1;
137         else
138                 value = 0;
139
140         spin_lock_irqsave(&wdata->state.lock, flags);
141         wiiproto_req_rumble(wdata, value);
142         spin_unlock_irqrestore(&wdata->state.lock, flags);
143
144         return 0;
145 }
146
147 static int wiimod_rumble_probe(const struct wiimod_ops *ops,
148                                struct wiimote_data *wdata)
149 {
150         set_bit(FF_RUMBLE, wdata->input->ffbit);
151         if (input_ff_create_memless(wdata->input, NULL, wiimod_rumble_play))
152                 return -ENOMEM;
153
154         return 0;
155 }
156
157 static void wiimod_rumble_remove(const struct wiimod_ops *ops,
158                                  struct wiimote_data *wdata)
159 {
160         unsigned long flags;
161
162         spin_lock_irqsave(&wdata->state.lock, flags);
163         wiiproto_req_rumble(wdata, 0);
164         spin_unlock_irqrestore(&wdata->state.lock, flags);
165 }
166
167 static const struct wiimod_ops wiimod_rumble = {
168         .flags = WIIMOD_FLAG_INPUT,
169         .arg = 0,
170         .probe = wiimod_rumble_probe,
171         .remove = wiimod_rumble_remove,
172 };
173
174 /*
175  * Battery
176  * 1 byte of battery capacity information is sent along every protocol status
177  * report. The wiimote core caches it but we try to update it on every
178  * user-space request.
179  * This is supported by nearly every device so it's almost always enabled.
180  */
181
182 static enum power_supply_property wiimod_battery_props[] = {
183         POWER_SUPPLY_PROP_CAPACITY,
184         POWER_SUPPLY_PROP_SCOPE,
185 };
186
187 static int wiimod_battery_get_property(struct power_supply *psy,
188                                        enum power_supply_property psp,
189                                        union power_supply_propval *val)
190 {
191         struct wiimote_data *wdata = container_of(psy, struct wiimote_data,
192                                                   battery);
193         int ret = 0, state;
194         unsigned long flags;
195
196         if (psp == POWER_SUPPLY_PROP_SCOPE) {
197                 val->intval = POWER_SUPPLY_SCOPE_DEVICE;
198                 return 0;
199         } else if (psp != POWER_SUPPLY_PROP_CAPACITY) {
200                 return -EINVAL;
201         }
202
203         ret = wiimote_cmd_acquire(wdata);
204         if (ret)
205                 return ret;
206
207         spin_lock_irqsave(&wdata->state.lock, flags);
208         wiimote_cmd_set(wdata, WIIPROTO_REQ_SREQ, 0);
209         wiiproto_req_status(wdata);
210         spin_unlock_irqrestore(&wdata->state.lock, flags);
211
212         wiimote_cmd_wait(wdata);
213         wiimote_cmd_release(wdata);
214
215         spin_lock_irqsave(&wdata->state.lock, flags);
216         state = wdata->state.cmd_battery;
217         spin_unlock_irqrestore(&wdata->state.lock, flags);
218
219         val->intval = state * 100 / 255;
220         return ret;
221 }
222
223 static int wiimod_battery_probe(const struct wiimod_ops *ops,
224                                 struct wiimote_data *wdata)
225 {
226         int ret;
227
228         wdata->battery.properties = wiimod_battery_props;
229         wdata->battery.num_properties = ARRAY_SIZE(wiimod_battery_props);
230         wdata->battery.get_property = wiimod_battery_get_property;
231         wdata->battery.type = POWER_SUPPLY_TYPE_BATTERY;
232         wdata->battery.use_for_apm = 0;
233         wdata->battery.name = kasprintf(GFP_KERNEL, "wiimote_battery_%s",
234                                         wdata->hdev->uniq);
235         if (!wdata->battery.name)
236                 return -ENOMEM;
237
238         ret = power_supply_register(&wdata->hdev->dev, &wdata->battery);
239         if (ret) {
240                 hid_err(wdata->hdev, "cannot register battery device\n");
241                 goto err_free;
242         }
243
244         power_supply_powers(&wdata->battery, &wdata->hdev->dev);
245         return 0;
246
247 err_free:
248         kfree(wdata->battery.name);
249         wdata->battery.name = NULL;
250         return ret;
251 }
252
253 static void wiimod_battery_remove(const struct wiimod_ops *ops,
254                                   struct wiimote_data *wdata)
255 {
256         if (!wdata->battery.name)
257                 return;
258
259         power_supply_unregister(&wdata->battery);
260         kfree(wdata->battery.name);
261         wdata->battery.name = NULL;
262 }
263
264 static const struct wiimod_ops wiimod_battery = {
265         .flags = 0,
266         .arg = 0,
267         .probe = wiimod_battery_probe,
268         .remove = wiimod_battery_remove,
269 };
270
271 /*
272  * LED
273  * 0 to 4 player LEDs are supported by devices. The "arg" field of the
274  * wiimod_ops structure specifies which LED this module controls. This allows
275  * to register a limited number of LEDs.
276  * State is managed by wiimote core.
277  */
278
279 static enum led_brightness wiimod_led_get(struct led_classdev *led_dev)
280 {
281         struct wiimote_data *wdata;
282         struct device *dev = led_dev->dev->parent;
283         int i;
284         unsigned long flags;
285         bool value = false;
286
287         wdata = hid_get_drvdata(container_of(dev, struct hid_device, dev));
288
289         for (i = 0; i < 4; ++i) {
290                 if (wdata->leds[i] == led_dev) {
291                         spin_lock_irqsave(&wdata->state.lock, flags);
292                         value = wdata->state.flags & WIIPROTO_FLAG_LED(i + 1);
293                         spin_unlock_irqrestore(&wdata->state.lock, flags);
294                         break;
295                 }
296         }
297
298         return value ? LED_FULL : LED_OFF;
299 }
300
301 static void wiimod_led_set(struct led_classdev *led_dev,
302                            enum led_brightness value)
303 {
304         struct wiimote_data *wdata;
305         struct device *dev = led_dev->dev->parent;
306         int i;
307         unsigned long flags;
308         __u8 state, flag;
309
310         wdata = hid_get_drvdata(container_of(dev, struct hid_device, dev));
311
312         for (i = 0; i < 4; ++i) {
313                 if (wdata->leds[i] == led_dev) {
314                         flag = WIIPROTO_FLAG_LED(i + 1);
315                         spin_lock_irqsave(&wdata->state.lock, flags);
316                         state = wdata->state.flags;
317                         if (value == LED_OFF)
318                                 wiiproto_req_leds(wdata, state & ~flag);
319                         else
320                                 wiiproto_req_leds(wdata, state | flag);
321                         spin_unlock_irqrestore(&wdata->state.lock, flags);
322                         break;
323                 }
324         }
325 }
326
327 static int wiimod_led_probe(const struct wiimod_ops *ops,
328                             struct wiimote_data *wdata)
329 {
330         struct device *dev = &wdata->hdev->dev;
331         size_t namesz = strlen(dev_name(dev)) + 9;
332         struct led_classdev *led;
333         unsigned long flags;
334         char *name;
335         int ret;
336
337         led = kzalloc(sizeof(struct led_classdev) + namesz, GFP_KERNEL);
338         if (!led)
339                 return -ENOMEM;
340
341         name = (void*)&led[1];
342         snprintf(name, namesz, "%s:blue:p%lu", dev_name(dev), ops->arg);
343         led->name = name;
344         led->brightness = 0;
345         led->max_brightness = 1;
346         led->brightness_get = wiimod_led_get;
347         led->brightness_set = wiimod_led_set;
348
349         wdata->leds[ops->arg] = led;
350         ret = led_classdev_register(dev, led);
351         if (ret)
352                 goto err_free;
353
354         /* enable LED1 to stop initial LED-blinking */
355         if (ops->arg == 0) {
356                 spin_lock_irqsave(&wdata->state.lock, flags);
357                 wiiproto_req_leds(wdata, WIIPROTO_FLAG_LED1);
358                 spin_unlock_irqrestore(&wdata->state.lock, flags);
359         }
360
361         return 0;
362
363 err_free:
364         wdata->leds[ops->arg] = NULL;
365         kfree(led);
366         return ret;
367 }
368
369 static void wiimod_led_remove(const struct wiimod_ops *ops,
370                               struct wiimote_data *wdata)
371 {
372         if (!wdata->leds[ops->arg])
373                 return;
374
375         led_classdev_unregister(wdata->leds[ops->arg]);
376         kfree(wdata->leds[ops->arg]);
377         wdata->leds[ops->arg] = NULL;
378 }
379
380 static const struct wiimod_ops wiimod_leds[4] = {
381         {
382                 .flags = 0,
383                 .arg = 0,
384                 .probe = wiimod_led_probe,
385                 .remove = wiimod_led_remove,
386         },
387         {
388                 .flags = 0,
389                 .arg = 1,
390                 .probe = wiimod_led_probe,
391                 .remove = wiimod_led_remove,
392         },
393         {
394                 .flags = 0,
395                 .arg = 2,
396                 .probe = wiimod_led_probe,
397                 .remove = wiimod_led_remove,
398         },
399         {
400                 .flags = 0,
401                 .arg = 3,
402                 .probe = wiimod_led_probe,
403                 .remove = wiimod_led_remove,
404         },
405 };
406
407 /*
408  * Accelerometer
409  * 3 axis accelerometer data is part of nearly all DRMs. If not supported by a
410  * device, it's mostly cleared to 0. This module parses this data and provides
411  * it via a separate input device.
412  */
413
414 static void wiimod_accel_in_accel(struct wiimote_data *wdata,
415                                   const __u8 *accel)
416 {
417         __u16 x, y, z;
418
419         if (!(wdata->state.flags & WIIPROTO_FLAG_ACCEL))
420                 return;
421
422         /*
423          * payload is: BB BB XX YY ZZ
424          * Accelerometer data is encoded into 3 10bit values. XX, YY and ZZ
425          * contain the upper 8 bits of each value. The lower 2 bits are
426          * contained in the buttons data BB BB.
427          * Bits 6 and 7 of the first buttons byte BB is the lower 2 bits of the
428          * X accel value. Bit 5 of the second buttons byte is the 2nd bit of Y
429          * accel value and bit 6 is the second bit of the Z value.
430          * The first bit of Y and Z values is not available and always set to 0.
431          * 0x200 is returned on no movement.
432          */
433
434         x = accel[2] << 2;
435         y = accel[3] << 2;
436         z = accel[4] << 2;
437
438         x |= (accel[0] >> 5) & 0x3;
439         y |= (accel[1] >> 4) & 0x2;
440         z |= (accel[1] >> 5) & 0x2;
441
442         input_report_abs(wdata->accel, ABS_RX, x - 0x200);
443         input_report_abs(wdata->accel, ABS_RY, y - 0x200);
444         input_report_abs(wdata->accel, ABS_RZ, z - 0x200);
445         input_sync(wdata->accel);
446 }
447
448 static int wiimod_accel_open(struct input_dev *dev)
449 {
450         struct wiimote_data *wdata = input_get_drvdata(dev);
451         unsigned long flags;
452
453         spin_lock_irqsave(&wdata->state.lock, flags);
454         wiiproto_req_accel(wdata, true);
455         spin_unlock_irqrestore(&wdata->state.lock, flags);
456
457         return 0;
458 }
459
460 static void wiimod_accel_close(struct input_dev *dev)
461 {
462         struct wiimote_data *wdata = input_get_drvdata(dev);
463         unsigned long flags;
464
465         spin_lock_irqsave(&wdata->state.lock, flags);
466         wiiproto_req_accel(wdata, false);
467         spin_unlock_irqrestore(&wdata->state.lock, flags);
468 }
469
470 static int wiimod_accel_probe(const struct wiimod_ops *ops,
471                               struct wiimote_data *wdata)
472 {
473         int ret;
474
475         wdata->accel = input_allocate_device();
476         if (!wdata->accel)
477                 return -ENOMEM;
478
479         input_set_drvdata(wdata->accel, wdata);
480         wdata->accel->open = wiimod_accel_open;
481         wdata->accel->close = wiimod_accel_close;
482         wdata->accel->dev.parent = &wdata->hdev->dev;
483         wdata->accel->id.bustype = wdata->hdev->bus;
484         wdata->accel->id.vendor = wdata->hdev->vendor;
485         wdata->accel->id.product = wdata->hdev->product;
486         wdata->accel->id.version = wdata->hdev->version;
487         wdata->accel->name = WIIMOTE_NAME " Accelerometer";
488
489         set_bit(EV_ABS, wdata->accel->evbit);
490         set_bit(ABS_RX, wdata->accel->absbit);
491         set_bit(ABS_RY, wdata->accel->absbit);
492         set_bit(ABS_RZ, wdata->accel->absbit);
493         input_set_abs_params(wdata->accel, ABS_RX, -500, 500, 2, 4);
494         input_set_abs_params(wdata->accel, ABS_RY, -500, 500, 2, 4);
495         input_set_abs_params(wdata->accel, ABS_RZ, -500, 500, 2, 4);
496
497         ret = input_register_device(wdata->accel);
498         if (ret) {
499                 hid_err(wdata->hdev, "cannot register input device\n");
500                 goto err_free;
501         }
502
503         return 0;
504
505 err_free:
506         input_free_device(wdata->accel);
507         wdata->accel = NULL;
508         return ret;
509 }
510
511 static void wiimod_accel_remove(const struct wiimod_ops *ops,
512                                 struct wiimote_data *wdata)
513 {
514         if (!wdata->accel)
515                 return;
516
517         input_unregister_device(wdata->accel);
518         wdata->accel = NULL;
519 }
520
521 static const struct wiimod_ops wiimod_accel = {
522         .flags = 0,
523         .arg = 0,
524         .probe = wiimod_accel_probe,
525         .remove = wiimod_accel_remove,
526         .in_accel = wiimod_accel_in_accel,
527 };
528
529 /*
530  * IR Cam
531  * Up to 4 IR sources can be tracked by a normal Wii Remote. The IR cam needs
532  * to be initialized with a fairly complex procedure and consumes a lot of
533  * power. Therefore, as long as no application uses the IR input device, it is
534  * kept offline.
535  * Nearly no other device than the normal Wii Remotes supports the IR cam so
536  * you can disable this module for these devices.
537  */
538
539 static void wiimod_ir_in_ir(struct wiimote_data *wdata, const __u8 *ir,
540                             bool packed, unsigned int id)
541 {
542         __u16 x, y;
543         __u8 xid, yid;
544         bool sync = false;
545
546         if (!(wdata->state.flags & WIIPROTO_FLAGS_IR))
547                 return;
548
549         switch (id) {
550         case 0:
551                 xid = ABS_HAT0X;
552                 yid = ABS_HAT0Y;
553                 break;
554         case 1:
555                 xid = ABS_HAT1X;
556                 yid = ABS_HAT1Y;
557                 break;
558         case 2:
559                 xid = ABS_HAT2X;
560                 yid = ABS_HAT2Y;
561                 break;
562         case 3:
563                 xid = ABS_HAT3X;
564                 yid = ABS_HAT3Y;
565                 sync = true;
566                 break;
567         default:
568                 return;
569         }
570
571         /*
572          * Basic IR data is encoded into 3 bytes. The first two bytes are the
573          * lower 8 bit of the X/Y data, the 3rd byte contains the upper 2 bits
574          * of both.
575          * If data is packed, then the 3rd byte is put first and slightly
576          * reordered. This allows to interleave packed and non-packed data to
577          * have two IR sets in 5 bytes instead of 6.
578          * The resulting 10bit X/Y values are passed to the ABS_HAT? input dev.
579          */
580
581         if (packed) {
582                 x = ir[1] | ((ir[0] & 0x03) << 8);
583                 y = ir[2] | ((ir[0] & 0x0c) << 6);
584         } else {
585                 x = ir[0] | ((ir[2] & 0x30) << 4);
586                 y = ir[1] | ((ir[2] & 0xc0) << 2);
587         }
588
589         input_report_abs(wdata->ir, xid, x);
590         input_report_abs(wdata->ir, yid, y);
591
592         if (sync)
593                 input_sync(wdata->ir);
594 }
595
596 static int wiimod_ir_change(struct wiimote_data *wdata, __u16 mode)
597 {
598         int ret;
599         unsigned long flags;
600         __u8 format = 0;
601         static const __u8 data_enable[] = { 0x01 };
602         static const __u8 data_sens1[] = { 0x02, 0x00, 0x00, 0x71, 0x01,
603                                                 0x00, 0xaa, 0x00, 0x64 };
604         static const __u8 data_sens2[] = { 0x63, 0x03 };
605         static const __u8 data_fin[] = { 0x08 };
606
607         spin_lock_irqsave(&wdata->state.lock, flags);
608
609         if (mode == (wdata->state.flags & WIIPROTO_FLAGS_IR)) {
610                 spin_unlock_irqrestore(&wdata->state.lock, flags);
611                 return 0;
612         }
613
614         if (mode == 0) {
615                 wdata->state.flags &= ~WIIPROTO_FLAGS_IR;
616                 wiiproto_req_ir1(wdata, 0);
617                 wiiproto_req_ir2(wdata, 0);
618                 wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
619                 spin_unlock_irqrestore(&wdata->state.lock, flags);
620                 return 0;
621         }
622
623         spin_unlock_irqrestore(&wdata->state.lock, flags);
624
625         ret = wiimote_cmd_acquire(wdata);
626         if (ret)
627                 return ret;
628
629         /* send PIXEL CLOCK ENABLE cmd first */
630         spin_lock_irqsave(&wdata->state.lock, flags);
631         wiimote_cmd_set(wdata, WIIPROTO_REQ_IR1, 0);
632         wiiproto_req_ir1(wdata, 0x06);
633         spin_unlock_irqrestore(&wdata->state.lock, flags);
634
635         ret = wiimote_cmd_wait(wdata);
636         if (ret)
637                 goto unlock;
638         if (wdata->state.cmd_err) {
639                 ret = -EIO;
640                 goto unlock;
641         }
642
643         /* enable IR LOGIC */
644         spin_lock_irqsave(&wdata->state.lock, flags);
645         wiimote_cmd_set(wdata, WIIPROTO_REQ_IR2, 0);
646         wiiproto_req_ir2(wdata, 0x06);
647         spin_unlock_irqrestore(&wdata->state.lock, flags);
648
649         ret = wiimote_cmd_wait(wdata);
650         if (ret)
651                 goto unlock;
652         if (wdata->state.cmd_err) {
653                 ret = -EIO;
654                 goto unlock;
655         }
656
657         /* enable IR cam but do not make it send data, yet */
658         ret = wiimote_cmd_write(wdata, 0xb00030, data_enable,
659                                                         sizeof(data_enable));
660         if (ret)
661                 goto unlock;
662
663         /* write first sensitivity block */
664         ret = wiimote_cmd_write(wdata, 0xb00000, data_sens1,
665                                                         sizeof(data_sens1));
666         if (ret)
667                 goto unlock;
668
669         /* write second sensitivity block */
670         ret = wiimote_cmd_write(wdata, 0xb0001a, data_sens2,
671                                                         sizeof(data_sens2));
672         if (ret)
673                 goto unlock;
674
675         /* put IR cam into desired state */
676         switch (mode) {
677                 case WIIPROTO_FLAG_IR_FULL:
678                         format = 5;
679                         break;
680                 case WIIPROTO_FLAG_IR_EXT:
681                         format = 3;
682                         break;
683                 case WIIPROTO_FLAG_IR_BASIC:
684                         format = 1;
685                         break;
686         }
687         ret = wiimote_cmd_write(wdata, 0xb00033, &format, sizeof(format));
688         if (ret)
689                 goto unlock;
690
691         /* make IR cam send data */
692         ret = wiimote_cmd_write(wdata, 0xb00030, data_fin, sizeof(data_fin));
693         if (ret)
694                 goto unlock;
695
696         /* request new DRM mode compatible to IR mode */
697         spin_lock_irqsave(&wdata->state.lock, flags);
698         wdata->state.flags &= ~WIIPROTO_FLAGS_IR;
699         wdata->state.flags |= mode & WIIPROTO_FLAGS_IR;
700         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
701         spin_unlock_irqrestore(&wdata->state.lock, flags);
702
703 unlock:
704         wiimote_cmd_release(wdata);
705         return ret;
706 }
707
708 static int wiimod_ir_open(struct input_dev *dev)
709 {
710         struct wiimote_data *wdata = input_get_drvdata(dev);
711
712         return wiimod_ir_change(wdata, WIIPROTO_FLAG_IR_BASIC);
713 }
714
715 static void wiimod_ir_close(struct input_dev *dev)
716 {
717         struct wiimote_data *wdata = input_get_drvdata(dev);
718
719         wiimod_ir_change(wdata, 0);
720 }
721
722 static int wiimod_ir_probe(const struct wiimod_ops *ops,
723                            struct wiimote_data *wdata)
724 {
725         int ret;
726
727         wdata->ir = input_allocate_device();
728         if (!wdata->ir)
729                 return -ENOMEM;
730
731         input_set_drvdata(wdata->ir, wdata);
732         wdata->ir->open = wiimod_ir_open;
733         wdata->ir->close = wiimod_ir_close;
734         wdata->ir->dev.parent = &wdata->hdev->dev;
735         wdata->ir->id.bustype = wdata->hdev->bus;
736         wdata->ir->id.vendor = wdata->hdev->vendor;
737         wdata->ir->id.product = wdata->hdev->product;
738         wdata->ir->id.version = wdata->hdev->version;
739         wdata->ir->name = WIIMOTE_NAME " IR";
740
741         set_bit(EV_ABS, wdata->ir->evbit);
742         set_bit(ABS_HAT0X, wdata->ir->absbit);
743         set_bit(ABS_HAT0Y, wdata->ir->absbit);
744         set_bit(ABS_HAT1X, wdata->ir->absbit);
745         set_bit(ABS_HAT1Y, wdata->ir->absbit);
746         set_bit(ABS_HAT2X, wdata->ir->absbit);
747         set_bit(ABS_HAT2Y, wdata->ir->absbit);
748         set_bit(ABS_HAT3X, wdata->ir->absbit);
749         set_bit(ABS_HAT3Y, wdata->ir->absbit);
750         input_set_abs_params(wdata->ir, ABS_HAT0X, 0, 1023, 2, 4);
751         input_set_abs_params(wdata->ir, ABS_HAT0Y, 0, 767, 2, 4);
752         input_set_abs_params(wdata->ir, ABS_HAT1X, 0, 1023, 2, 4);
753         input_set_abs_params(wdata->ir, ABS_HAT1Y, 0, 767, 2, 4);
754         input_set_abs_params(wdata->ir, ABS_HAT2X, 0, 1023, 2, 4);
755         input_set_abs_params(wdata->ir, ABS_HAT2Y, 0, 767, 2, 4);
756         input_set_abs_params(wdata->ir, ABS_HAT3X, 0, 1023, 2, 4);
757         input_set_abs_params(wdata->ir, ABS_HAT3Y, 0, 767, 2, 4);
758
759         ret = input_register_device(wdata->ir);
760         if (ret) {
761                 hid_err(wdata->hdev, "cannot register input device\n");
762                 goto err_free;
763         }
764
765         return 0;
766
767 err_free:
768         input_free_device(wdata->ir);
769         wdata->ir = NULL;
770         return ret;
771 }
772
773 static void wiimod_ir_remove(const struct wiimod_ops *ops,
774                              struct wiimote_data *wdata)
775 {
776         if (!wdata->ir)
777                 return;
778
779         input_unregister_device(wdata->ir);
780         wdata->ir = NULL;
781 }
782
783 static const struct wiimod_ops wiimod_ir = {
784         .flags = 0,
785         .arg = 0,
786         .probe = wiimod_ir_probe,
787         .remove = wiimod_ir_remove,
788         .in_ir = wiimod_ir_in_ir,
789 };
790
791 /*
792  * Nunchuk Extension
793  * The Nintendo Wii Nunchuk was the first official extension published by
794  * Nintendo. It provides two additional keys and a separate accelerometer. It
795  * can be hotplugged to standard Wii Remotes.
796  */
797
798 enum wiimod_nunchuk_keys {
799         WIIMOD_NUNCHUK_KEY_C,
800         WIIMOD_NUNCHUK_KEY_Z,
801         WIIMOD_NUNCHUK_KEY_NUM,
802 };
803
804 static const __u16 wiimod_nunchuk_map[] = {
805         BTN_C,          /* WIIMOD_NUNCHUK_KEY_C */
806         BTN_Z,          /* WIIMOD_NUNCHUK_KEY_Z */
807 };
808
809 static void wiimod_nunchuk_in_ext(struct wiimote_data *wdata, const __u8 *ext)
810 {
811         __s16 x, y, z, bx, by;
812
813         /*   Byte |   8    7 |  6    5 |  4    3 |  2 |  1  |
814          *   -----+----------+---------+---------+----+-----+
815          *    1   |              Button X <7:0>             |
816          *    2   |              Button Y <7:0>             |
817          *   -----+----------+---------+---------+----+-----+
818          *    3   |               Speed X <9:2>             |
819          *    4   |               Speed Y <9:2>             |
820          *    5   |               Speed Z <9:2>             |
821          *   -----+----------+---------+---------+----+-----+
822          *    6   | Z <1:0>  | Y <1:0> | X <1:0> | BC | BZ  |
823          *   -----+----------+---------+---------+----+-----+
824          * Button X/Y is the analog stick. Speed X, Y and Z are the
825          * accelerometer data in the same format as the wiimote's accelerometer.
826          * The 6th byte contains the LSBs of the accelerometer data.
827          * BC and BZ are the C and Z buttons: 0 means pressed
828          *
829          * If reported interleaved with motionp, then the layout changes. The
830          * 5th and 6th byte changes to:
831          *   -----+-----------------------------------+-----+
832          *    5   |            Speed Z <9:3>          | EXT |
833          *   -----+--------+-----+-----+----+----+----+-----+
834          *    6   |Z <2:1> |Y <1>|X <1>| BC | BZ | 0  |  0  |
835          *   -----+--------+-----+-----+----+----+----+-----+
836          * All three accelerometer values lose their LSB. The other data is
837          * still available but slightly moved.
838          *
839          * Center data for button values is 128. Center value for accelerometer
840          * values it 512 / 0x200
841          */
842
843         bx = ext[0];
844         by = ext[1];
845         bx -= 128;
846         by -= 128;
847
848         x = ext[2] << 2;
849         y = ext[3] << 2;
850         z = ext[4] << 2;
851
852         if (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE) {
853                 x |= (ext[5] >> 3) & 0x02;
854                 y |= (ext[5] >> 4) & 0x02;
855                 z &= ~0x4;
856                 z |= (ext[5] >> 5) & 0x06;
857         } else {
858                 x |= (ext[5] >> 2) & 0x03;
859                 y |= (ext[5] >> 4) & 0x03;
860                 z |= (ext[5] >> 6) & 0x03;
861         }
862
863         x -= 0x200;
864         y -= 0x200;
865         z -= 0x200;
866
867         input_report_abs(wdata->extension.input, ABS_HAT0X, bx);
868         input_report_abs(wdata->extension.input, ABS_HAT0Y, by);
869
870         input_report_abs(wdata->extension.input, ABS_RX, x);
871         input_report_abs(wdata->extension.input, ABS_RY, y);
872         input_report_abs(wdata->extension.input, ABS_RZ, z);
873
874         if (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE) {
875                 input_report_key(wdata->extension.input,
876                         wiimod_nunchuk_map[WIIMOD_NUNCHUK_KEY_Z],
877                         !(ext[5] & 0x04));
878                 input_report_key(wdata->extension.input,
879                         wiimod_nunchuk_map[WIIMOD_NUNCHUK_KEY_C],
880                         !(ext[5] & 0x08));
881         } else {
882                 input_report_key(wdata->extension.input,
883                         wiimod_nunchuk_map[WIIMOD_NUNCHUK_KEY_Z],
884                         !(ext[5] & 0x01));
885                 input_report_key(wdata->extension.input,
886                         wiimod_nunchuk_map[WIIMOD_NUNCHUK_KEY_C],
887                         !(ext[5] & 0x02));
888         }
889
890         input_sync(wdata->extension.input);
891 }
892
893 static int wiimod_nunchuk_open(struct input_dev *dev)
894 {
895         struct wiimote_data *wdata = input_get_drvdata(dev);
896         unsigned long flags;
897
898         spin_lock_irqsave(&wdata->state.lock, flags);
899         wdata->state.flags |= WIIPROTO_FLAG_EXT_USED;
900         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
901         spin_unlock_irqrestore(&wdata->state.lock, flags);
902
903         return 0;
904 }
905
906 static void wiimod_nunchuk_close(struct input_dev *dev)
907 {
908         struct wiimote_data *wdata = input_get_drvdata(dev);
909         unsigned long flags;
910
911         spin_lock_irqsave(&wdata->state.lock, flags);
912         wdata->state.flags &= ~WIIPROTO_FLAG_EXT_USED;
913         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
914         spin_unlock_irqrestore(&wdata->state.lock, flags);
915 }
916
917 static int wiimod_nunchuk_probe(const struct wiimod_ops *ops,
918                                 struct wiimote_data *wdata)
919 {
920         int ret, i;
921
922         wdata->extension.input = input_allocate_device();
923         if (!wdata->extension.input)
924                 return -ENOMEM;
925
926         input_set_drvdata(wdata->extension.input, wdata);
927         wdata->extension.input->open = wiimod_nunchuk_open;
928         wdata->extension.input->close = wiimod_nunchuk_close;
929         wdata->extension.input->dev.parent = &wdata->hdev->dev;
930         wdata->extension.input->id.bustype = wdata->hdev->bus;
931         wdata->extension.input->id.vendor = wdata->hdev->vendor;
932         wdata->extension.input->id.product = wdata->hdev->product;
933         wdata->extension.input->id.version = wdata->hdev->version;
934         wdata->extension.input->name = WIIMOTE_NAME " Nunchuk";
935
936         set_bit(EV_KEY, wdata->extension.input->evbit);
937         for (i = 0; i < WIIMOD_NUNCHUK_KEY_NUM; ++i)
938                 set_bit(wiimod_nunchuk_map[i],
939                         wdata->extension.input->keybit);
940
941         set_bit(EV_ABS, wdata->extension.input->evbit);
942         set_bit(ABS_HAT0X, wdata->extension.input->absbit);
943         set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
944         input_set_abs_params(wdata->extension.input,
945                              ABS_HAT0X, -120, 120, 2, 4);
946         input_set_abs_params(wdata->extension.input,
947                              ABS_HAT0Y, -120, 120, 2, 4);
948         set_bit(ABS_RX, wdata->extension.input->absbit);
949         set_bit(ABS_RY, wdata->extension.input->absbit);
950         set_bit(ABS_RZ, wdata->extension.input->absbit);
951         input_set_abs_params(wdata->extension.input,
952                              ABS_RX, -500, 500, 2, 4);
953         input_set_abs_params(wdata->extension.input,
954                              ABS_RY, -500, 500, 2, 4);
955         input_set_abs_params(wdata->extension.input,
956                              ABS_RZ, -500, 500, 2, 4);
957
958         ret = input_register_device(wdata->extension.input);
959         if (ret)
960                 goto err_free;
961
962         return 0;
963
964 err_free:
965         input_free_device(wdata->extension.input);
966         wdata->extension.input = NULL;
967         return ret;
968 }
969
970 static void wiimod_nunchuk_remove(const struct wiimod_ops *ops,
971                                   struct wiimote_data *wdata)
972 {
973         if (!wdata->extension.input)
974                 return;
975
976         input_unregister_device(wdata->extension.input);
977         wdata->extension.input = NULL;
978 }
979
980 static const struct wiimod_ops wiimod_nunchuk = {
981         .flags = 0,
982         .arg = 0,
983         .probe = wiimod_nunchuk_probe,
984         .remove = wiimod_nunchuk_remove,
985         .in_ext = wiimod_nunchuk_in_ext,
986 };
987
988 /*
989  * Classic Controller
990  * Another official extension from Nintendo. It provides a classic
991  * gamecube-like controller that can be hotplugged on the Wii Remote.
992  * It has several hardware buttons and switches that are all reported via
993  * a normal extension device.
994  */
995
996 enum wiimod_classic_keys {
997         WIIMOD_CLASSIC_KEY_A,
998         WIIMOD_CLASSIC_KEY_B,
999         WIIMOD_CLASSIC_KEY_X,
1000         WIIMOD_CLASSIC_KEY_Y,
1001         WIIMOD_CLASSIC_KEY_ZL,
1002         WIIMOD_CLASSIC_KEY_ZR,
1003         WIIMOD_CLASSIC_KEY_PLUS,
1004         WIIMOD_CLASSIC_KEY_MINUS,
1005         WIIMOD_CLASSIC_KEY_HOME,
1006         WIIMOD_CLASSIC_KEY_LEFT,
1007         WIIMOD_CLASSIC_KEY_RIGHT,
1008         WIIMOD_CLASSIC_KEY_UP,
1009         WIIMOD_CLASSIC_KEY_DOWN,
1010         WIIMOD_CLASSIC_KEY_LT,
1011         WIIMOD_CLASSIC_KEY_RT,
1012         WIIMOD_CLASSIC_KEY_NUM,
1013 };
1014
1015 static const __u16 wiimod_classic_map[] = {
1016         BTN_A,          /* WIIMOD_CLASSIC_KEY_A */
1017         BTN_B,          /* WIIMOD_CLASSIC_KEY_B */
1018         BTN_X,          /* WIIMOD_CLASSIC_KEY_X */
1019         BTN_Y,          /* WIIMOD_CLASSIC_KEY_Y */
1020         BTN_TL2,        /* WIIMOD_CLASSIC_KEY_ZL */
1021         BTN_TR2,        /* WIIMOD_CLASSIC_KEY_ZR */
1022         KEY_NEXT,       /* WIIMOD_CLASSIC_KEY_PLUS */
1023         KEY_PREVIOUS,   /* WIIMOD_CLASSIC_KEY_MINUS */
1024         BTN_MODE,       /* WIIMOD_CLASSIC_KEY_HOME */
1025         KEY_LEFT,       /* WIIMOD_CLASSIC_KEY_LEFT */
1026         KEY_RIGHT,      /* WIIMOD_CLASSIC_KEY_RIGHT */
1027         KEY_UP,         /* WIIMOD_CLASSIC_KEY_UP */
1028         KEY_DOWN,       /* WIIMOD_CLASSIC_KEY_DOWN */
1029         BTN_TL,         /* WIIMOD_CLASSIC_KEY_LT */
1030         BTN_TR,         /* WIIMOD_CLASSIC_KEY_RT */
1031 };
1032
1033 static void wiimod_classic_in_ext(struct wiimote_data *wdata, const __u8 *ext)
1034 {
1035         __s8 rx, ry, lx, ly, lt, rt;
1036
1037         /*   Byte |  8  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |
1038          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1039          *    1   | RX <5:4>  |              LX <5:0>             |
1040          *    2   | RX <3:2>  |              LY <5:0>             |
1041          *   -----+-----+-----+-----+-----------------------------+
1042          *    3   |RX<1>| LT <5:4>  |         RY <5:1>            |
1043          *   -----+-----+-----------+-----------------------------+
1044          *    4   |     LT <3:1>    |         RT <5:1>            |
1045          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1046          *    5   | BDR | BDD | BLT | B-  | BH  | B+  | BRT |  1  |
1047          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1048          *    6   | BZL | BB  | BY  | BA  | BX  | BZR | BDL | BDU |
1049          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1050          * All buttons are 0 if pressed
1051          * RX and RY are right analog stick
1052          * LX and LY are left analog stick
1053          * LT is left trigger, RT is right trigger
1054          * BLT is 0 if left trigger is fully pressed
1055          * BRT is 0 if right trigger is fully pressed
1056          * BDR, BDD, BDL, BDU form the D-Pad with right, down, left, up buttons
1057          * BZL is left Z button and BZR is right Z button
1058          * B-, BH, B+ are +, HOME and - buttons
1059          * BB, BY, BA, BX are A, B, X, Y buttons
1060          * LSB of RX, RY, LT, and RT are not transmitted and always 0.
1061          *
1062          * With motionp enabled it changes slightly to this:
1063          *   Byte |  8  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |
1064          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1065          *    1   | RX <5:4>  |          LX <5:1>           | BDU |
1066          *    2   | RX <3:2>  |          LY <5:1>           | BDL |
1067          *   -----+-----+-----+-----+-----------------------+-----+
1068          *    3   |RX<1>| LT <5:4>  |         RY <5:1>            |
1069          *   -----+-----+-----------+-----------------------------+
1070          *    4   |     LT <3:1>    |         RT <5:1>            |
1071          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1072          *    5   | BDR | BDD | BLT | B-  | BH  | B+  | BRT | EXT |
1073          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1074          *    6   | BZL | BB  | BY  | BA  | BX  | BZR |  0  |  0  |
1075          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1076          * Only the LSBs of LX and LY are lost. BDU and BDL are moved, the rest
1077          * is the same as before.
1078          */
1079
1080         if (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE) {
1081                 lx = ext[0] & 0x3e;
1082                 ly = ext[1] & 0x3e;
1083         } else {
1084                 lx = ext[0] & 0x3f;
1085                 ly = ext[1] & 0x3f;
1086         }
1087
1088         rx = (ext[0] >> 3) & 0x18;
1089         rx |= (ext[1] >> 5) & 0x06;
1090         rx |= (ext[2] >> 7) & 0x01;
1091         ry = ext[2] & 0x1f;
1092
1093         rt = ext[3] & 0x1f;
1094         lt = (ext[2] >> 2) & 0x18;
1095         lt |= (ext[3] >> 5) & 0x07;
1096
1097         rx <<= 1;
1098         ry <<= 1;
1099         rt <<= 1;
1100         lt <<= 1;
1101
1102         input_report_abs(wdata->extension.input, ABS_HAT1X, lx - 0x20);
1103         input_report_abs(wdata->extension.input, ABS_HAT1Y, ly - 0x20);
1104         input_report_abs(wdata->extension.input, ABS_HAT2X, rx - 0x20);
1105         input_report_abs(wdata->extension.input, ABS_HAT2Y, ry - 0x20);
1106         input_report_abs(wdata->extension.input, ABS_HAT3X, rt);
1107         input_report_abs(wdata->extension.input, ABS_HAT3Y, lt);
1108
1109         input_report_key(wdata->extension.input,
1110                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_RIGHT],
1111                          !(ext[4] & 0x80));
1112         input_report_key(wdata->extension.input,
1113                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_DOWN],
1114                          !(ext[4] & 0x40));
1115         input_report_key(wdata->extension.input,
1116                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_LT],
1117                          !(ext[4] & 0x20));
1118         input_report_key(wdata->extension.input,
1119                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_MINUS],
1120                          !(ext[4] & 0x10));
1121         input_report_key(wdata->extension.input,
1122                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_HOME],
1123                          !(ext[4] & 0x08));
1124         input_report_key(wdata->extension.input,
1125                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_PLUS],
1126                          !(ext[4] & 0x04));
1127         input_report_key(wdata->extension.input,
1128                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_RT],
1129                          !(ext[4] & 0x02));
1130         input_report_key(wdata->extension.input,
1131                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_ZL],
1132                          !(ext[5] & 0x80));
1133         input_report_key(wdata->extension.input,
1134                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_B],
1135                          !(ext[5] & 0x40));
1136         input_report_key(wdata->extension.input,
1137                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_Y],
1138                          !(ext[5] & 0x20));
1139         input_report_key(wdata->extension.input,
1140                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_A],
1141                          !(ext[5] & 0x10));
1142         input_report_key(wdata->extension.input,
1143                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_X],
1144                          !(ext[5] & 0x08));
1145         input_report_key(wdata->extension.input,
1146                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_ZR],
1147                          !(ext[5] & 0x04));
1148
1149         if (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE) {
1150                 input_report_key(wdata->extension.input,
1151                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_LEFT],
1152                          !(ext[1] & 0x01));
1153                 input_report_key(wdata->extension.input,
1154                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_UP],
1155                          !(ext[0] & 0x01));
1156         } else {
1157                 input_report_key(wdata->extension.input,
1158                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_LEFT],
1159                          !(ext[5] & 0x02));
1160                 input_report_key(wdata->extension.input,
1161                          wiimod_classic_map[WIIMOD_CLASSIC_KEY_UP],
1162                          !(ext[5] & 0x01));
1163         }
1164
1165         input_sync(wdata->extension.input);
1166 }
1167
1168 static int wiimod_classic_open(struct input_dev *dev)
1169 {
1170         struct wiimote_data *wdata = input_get_drvdata(dev);
1171         unsigned long flags;
1172
1173         spin_lock_irqsave(&wdata->state.lock, flags);
1174         wdata->state.flags |= WIIPROTO_FLAG_EXT_USED;
1175         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
1176         spin_unlock_irqrestore(&wdata->state.lock, flags);
1177
1178         return 0;
1179 }
1180
1181 static void wiimod_classic_close(struct input_dev *dev)
1182 {
1183         struct wiimote_data *wdata = input_get_drvdata(dev);
1184         unsigned long flags;
1185
1186         spin_lock_irqsave(&wdata->state.lock, flags);
1187         wdata->state.flags &= ~WIIPROTO_FLAG_EXT_USED;
1188         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
1189         spin_unlock_irqrestore(&wdata->state.lock, flags);
1190 }
1191
1192 static int wiimod_classic_probe(const struct wiimod_ops *ops,
1193                                 struct wiimote_data *wdata)
1194 {
1195         int ret, i;
1196
1197         wdata->extension.input = input_allocate_device();
1198         if (!wdata->extension.input)
1199                 return -ENOMEM;
1200
1201         input_set_drvdata(wdata->extension.input, wdata);
1202         wdata->extension.input->open = wiimod_classic_open;
1203         wdata->extension.input->close = wiimod_classic_close;
1204         wdata->extension.input->dev.parent = &wdata->hdev->dev;
1205         wdata->extension.input->id.bustype = wdata->hdev->bus;
1206         wdata->extension.input->id.vendor = wdata->hdev->vendor;
1207         wdata->extension.input->id.product = wdata->hdev->product;
1208         wdata->extension.input->id.version = wdata->hdev->version;
1209         wdata->extension.input->name = WIIMOTE_NAME " Classic Controller";
1210
1211         set_bit(EV_KEY, wdata->extension.input->evbit);
1212         for (i = 0; i < WIIMOD_CLASSIC_KEY_NUM; ++i)
1213                 set_bit(wiimod_classic_map[i],
1214                         wdata->extension.input->keybit);
1215
1216         set_bit(EV_ABS, wdata->extension.input->evbit);
1217         set_bit(ABS_HAT1X, wdata->extension.input->absbit);
1218         set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
1219         set_bit(ABS_HAT2X, wdata->extension.input->absbit);
1220         set_bit(ABS_HAT2Y, wdata->extension.input->absbit);
1221         set_bit(ABS_HAT3X, wdata->extension.input->absbit);
1222         set_bit(ABS_HAT3Y, wdata->extension.input->absbit);
1223         input_set_abs_params(wdata->extension.input,
1224                              ABS_HAT1X, -30, 30, 1, 1);
1225         input_set_abs_params(wdata->extension.input,
1226                              ABS_HAT1Y, -30, 30, 1, 1);
1227         input_set_abs_params(wdata->extension.input,
1228                              ABS_HAT2X, -30, 30, 1, 1);
1229         input_set_abs_params(wdata->extension.input,
1230                              ABS_HAT2Y, -30, 30, 1, 1);
1231         input_set_abs_params(wdata->extension.input,
1232                              ABS_HAT3X, -30, 30, 1, 1);
1233         input_set_abs_params(wdata->extension.input,
1234                              ABS_HAT3Y, -30, 30, 1, 1);
1235
1236         ret = input_register_device(wdata->extension.input);
1237         if (ret)
1238                 goto err_free;
1239
1240         return 0;
1241
1242 err_free:
1243         input_free_device(wdata->extension.input);
1244         wdata->extension.input = NULL;
1245         return ret;
1246 }
1247
1248 static void wiimod_classic_remove(const struct wiimod_ops *ops,
1249                                   struct wiimote_data *wdata)
1250 {
1251         if (!wdata->extension.input)
1252                 return;
1253
1254         input_unregister_device(wdata->extension.input);
1255         wdata->extension.input = NULL;
1256 }
1257
1258 static const struct wiimod_ops wiimod_classic = {
1259         .flags = 0,
1260         .arg = 0,
1261         .probe = wiimod_classic_probe,
1262         .remove = wiimod_classic_remove,
1263         .in_ext = wiimod_classic_in_ext,
1264 };
1265
1266 /*
1267  * Balance Board Extension
1268  * The Nintendo Wii Balance Board provides four hardware weight sensor plus a
1269  * single push button. No other peripherals are available. However, the
1270  * balance-board data is sent via a standard Wii Remote extension. All other
1271  * data for non-present hardware is zeroed out.
1272  * Some 3rd party devices react allergic if we try to access normal Wii Remote
1273  * hardware, so this extension module should be the only module that is loaded
1274  * on balance boards.
1275  * The balance board needs 8 bytes extension data instead of basic 6 bytes so
1276  * it needs the WIIMOD_FLAG_EXT8 flag.
1277  */
1278
1279 static void wiimod_bboard_in_keys(struct wiimote_data *wdata, const __u8 *keys)
1280 {
1281         input_report_key(wdata->extension.input, BTN_A,
1282                          !!(keys[1] & 0x08));
1283         input_sync(wdata->extension.input);
1284 }
1285
1286 static void wiimod_bboard_in_ext(struct wiimote_data *wdata,
1287                                  const __u8 *ext)
1288 {
1289         __s32 val[4], tmp, div;
1290         unsigned int i;
1291         struct wiimote_state *s = &wdata->state;
1292
1293         /*
1294          * Balance board data layout:
1295          *
1296          *   Byte |  8  7  6  5  4  3  2  1  |
1297          *   -----+--------------------------+
1298          *    1   |    Top Right <15:8>      |
1299          *    2   |    Top Right  <7:0>      |
1300          *   -----+--------------------------+
1301          *    3   | Bottom Right <15:8>      |
1302          *    4   | Bottom Right  <7:0>      |
1303          *   -----+--------------------------+
1304          *    5   |     Top Left <15:8>      |
1305          *    6   |     Top Left  <7:0>      |
1306          *   -----+--------------------------+
1307          *    7   |  Bottom Left <15:8>      |
1308          *    8   |  Bottom Left  <7:0>      |
1309          *   -----+--------------------------+
1310          *
1311          * These values represent the weight-measurements of the Wii-balance
1312          * board with 16bit precision.
1313          *
1314          * The balance-board is never reported interleaved with motionp.
1315          */
1316
1317         val[0] = ext[0];
1318         val[0] <<= 8;
1319         val[0] |= ext[1];
1320
1321         val[1] = ext[2];
1322         val[1] <<= 8;
1323         val[1] |= ext[3];
1324
1325         val[2] = ext[4];
1326         val[2] <<= 8;
1327         val[2] |= ext[5];
1328
1329         val[3] = ext[6];
1330         val[3] <<= 8;
1331         val[3] |= ext[7];
1332
1333         /* apply calibration data */
1334         for (i = 0; i < 4; i++) {
1335                 if (val[i] <= s->calib_bboard[i][0]) {
1336                         tmp = 0;
1337                 } else if (val[i] < s->calib_bboard[i][1]) {
1338                         tmp = val[i] - s->calib_bboard[i][0];
1339                         tmp *= 1700;
1340                         div = s->calib_bboard[i][1] - s->calib_bboard[i][0];
1341                         tmp /= div ? div : 1;
1342                 } else {
1343                         tmp = val[i] - s->calib_bboard[i][1];
1344                         tmp *= 1700;
1345                         div = s->calib_bboard[i][2] - s->calib_bboard[i][1];
1346                         tmp /= div ? div : 1;
1347                         tmp += 1700;
1348                 }
1349                 val[i] = tmp;
1350         }
1351
1352         input_report_abs(wdata->extension.input, ABS_HAT0X, val[0]);
1353         input_report_abs(wdata->extension.input, ABS_HAT0Y, val[1]);
1354         input_report_abs(wdata->extension.input, ABS_HAT1X, val[2]);
1355         input_report_abs(wdata->extension.input, ABS_HAT1Y, val[3]);
1356         input_sync(wdata->extension.input);
1357 }
1358
1359 static int wiimod_bboard_open(struct input_dev *dev)
1360 {
1361         struct wiimote_data *wdata = input_get_drvdata(dev);
1362         unsigned long flags;
1363
1364         spin_lock_irqsave(&wdata->state.lock, flags);
1365         wdata->state.flags |= WIIPROTO_FLAG_EXT_USED;
1366         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
1367         spin_unlock_irqrestore(&wdata->state.lock, flags);
1368
1369         return 0;
1370 }
1371
1372 static void wiimod_bboard_close(struct input_dev *dev)
1373 {
1374         struct wiimote_data *wdata = input_get_drvdata(dev);
1375         unsigned long flags;
1376
1377         spin_lock_irqsave(&wdata->state.lock, flags);
1378         wdata->state.flags &= ~WIIPROTO_FLAG_EXT_USED;
1379         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
1380         spin_unlock_irqrestore(&wdata->state.lock, flags);
1381 }
1382
1383 static ssize_t wiimod_bboard_calib_show(struct device *dev,
1384                                         struct device_attribute *attr,
1385                                         char *out)
1386 {
1387         struct wiimote_data *wdata = dev_to_wii(dev);
1388         int i, j, ret;
1389         __u16 val;
1390         __u8 buf[24], offs;
1391
1392         ret = wiimote_cmd_acquire(wdata);
1393         if (ret)
1394                 return ret;
1395
1396         ret = wiimote_cmd_read(wdata, 0xa40024, buf, 12);
1397         if (ret != 12) {
1398                 wiimote_cmd_release(wdata);
1399                 return ret < 0 ? ret : -EIO;
1400         }
1401         ret = wiimote_cmd_read(wdata, 0xa40024 + 12, buf + 12, 12);
1402         if (ret != 12) {
1403                 wiimote_cmd_release(wdata);
1404                 return ret < 0 ? ret : -EIO;
1405         }
1406
1407         wiimote_cmd_release(wdata);
1408
1409         spin_lock_irq(&wdata->state.lock);
1410         offs = 0;
1411         for (i = 0; i < 3; ++i) {
1412                 for (j = 0; j < 4; ++j) {
1413                         wdata->state.calib_bboard[j][i] = buf[offs];
1414                         wdata->state.calib_bboard[j][i] <<= 8;
1415                         wdata->state.calib_bboard[j][i] |= buf[offs + 1];
1416                         offs += 2;
1417                 }
1418         }
1419         spin_unlock_irq(&wdata->state.lock);
1420
1421         ret = 0;
1422         for (i = 0; i < 3; ++i) {
1423                 for (j = 0; j < 4; ++j) {
1424                         val = wdata->state.calib_bboard[j][i];
1425                         if (i == 2 && j == 3)
1426                                 ret += sprintf(&out[ret], "%04x\n", val);
1427                         else
1428                                 ret += sprintf(&out[ret], "%04x:", val);
1429                 }
1430         }
1431
1432         return ret;
1433 }
1434
1435 static DEVICE_ATTR(bboard_calib, S_IRUGO, wiimod_bboard_calib_show, NULL);
1436
1437 static int wiimod_bboard_probe(const struct wiimod_ops *ops,
1438                                struct wiimote_data *wdata)
1439 {
1440         int ret, i, j;
1441         __u8 buf[24], offs;
1442
1443         wiimote_cmd_acquire_noint(wdata);
1444
1445         ret = wiimote_cmd_read(wdata, 0xa40024, buf, 12);
1446         if (ret != 12) {
1447                 wiimote_cmd_release(wdata);
1448                 return ret < 0 ? ret : -EIO;
1449         }
1450         ret = wiimote_cmd_read(wdata, 0xa40024 + 12, buf + 12, 12);
1451         if (ret != 12) {
1452                 wiimote_cmd_release(wdata);
1453                 return ret < 0 ? ret : -EIO;
1454         }
1455
1456         wiimote_cmd_release(wdata);
1457
1458         offs = 0;
1459         for (i = 0; i < 3; ++i) {
1460                 for (j = 0; j < 4; ++j) {
1461                         wdata->state.calib_bboard[j][i] = buf[offs];
1462                         wdata->state.calib_bboard[j][i] <<= 8;
1463                         wdata->state.calib_bboard[j][i] |= buf[offs + 1];
1464                         offs += 2;
1465                 }
1466         }
1467
1468         wdata->extension.input = input_allocate_device();
1469         if (!wdata->extension.input)
1470                 return -ENOMEM;
1471
1472         ret = device_create_file(&wdata->hdev->dev,
1473                                  &dev_attr_bboard_calib);
1474         if (ret) {
1475                 hid_err(wdata->hdev, "cannot create sysfs attribute\n");
1476                 goto err_free;
1477         }
1478
1479         input_set_drvdata(wdata->extension.input, wdata);
1480         wdata->extension.input->open = wiimod_bboard_open;
1481         wdata->extension.input->close = wiimod_bboard_close;
1482         wdata->extension.input->dev.parent = &wdata->hdev->dev;
1483         wdata->extension.input->id.bustype = wdata->hdev->bus;
1484         wdata->extension.input->id.vendor = wdata->hdev->vendor;
1485         wdata->extension.input->id.product = wdata->hdev->product;
1486         wdata->extension.input->id.version = wdata->hdev->version;
1487         wdata->extension.input->name = WIIMOTE_NAME " Balance Board";
1488
1489         set_bit(EV_KEY, wdata->extension.input->evbit);
1490         set_bit(BTN_A, wdata->extension.input->keybit);
1491
1492         set_bit(EV_ABS, wdata->extension.input->evbit);
1493         set_bit(ABS_HAT0X, wdata->extension.input->absbit);
1494         set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
1495         set_bit(ABS_HAT1X, wdata->extension.input->absbit);
1496         set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
1497         input_set_abs_params(wdata->extension.input,
1498                              ABS_HAT0X, 0, 65535, 2, 4);
1499         input_set_abs_params(wdata->extension.input,
1500                              ABS_HAT0Y, 0, 65535, 2, 4);
1501         input_set_abs_params(wdata->extension.input,
1502                              ABS_HAT1X, 0, 65535, 2, 4);
1503         input_set_abs_params(wdata->extension.input,
1504                              ABS_HAT1Y, 0, 65535, 2, 4);
1505
1506         ret = input_register_device(wdata->extension.input);
1507         if (ret)
1508                 goto err_file;
1509
1510         return 0;
1511
1512 err_file:
1513         device_remove_file(&wdata->hdev->dev,
1514                            &dev_attr_bboard_calib);
1515 err_free:
1516         input_free_device(wdata->extension.input);
1517         wdata->extension.input = NULL;
1518         return ret;
1519 }
1520
1521 static void wiimod_bboard_remove(const struct wiimod_ops *ops,
1522                                  struct wiimote_data *wdata)
1523 {
1524         if (!wdata->extension.input)
1525                 return;
1526
1527         input_unregister_device(wdata->extension.input);
1528         wdata->extension.input = NULL;
1529         device_remove_file(&wdata->hdev->dev,
1530                            &dev_attr_bboard_calib);
1531 }
1532
1533 static const struct wiimod_ops wiimod_bboard = {
1534         .flags = WIIMOD_FLAG_EXT8,
1535         .arg = 0,
1536         .probe = wiimod_bboard_probe,
1537         .remove = wiimod_bboard_remove,
1538         .in_keys = wiimod_bboard_in_keys,
1539         .in_ext = wiimod_bboard_in_ext,
1540 };
1541
1542 /*
1543  * Pro Controller
1544  * Released with the Wii U was the Nintendo Wii U Pro Controller. It does not
1545  * work together with the classic Wii, but only with the new Wii U. However, it
1546  * uses the same protocol and provides a builtin "classic controller pro"
1547  * extension, few standard buttons, a rumble motor, 4 LEDs and a battery.
1548  * We provide all these via a standard extension device as the device doesn't
1549  * feature an extension port.
1550  */
1551
1552 enum wiimod_pro_keys {
1553         WIIMOD_PRO_KEY_A,
1554         WIIMOD_PRO_KEY_B,
1555         WIIMOD_PRO_KEY_X,
1556         WIIMOD_PRO_KEY_Y,
1557         WIIMOD_PRO_KEY_PLUS,
1558         WIIMOD_PRO_KEY_MINUS,
1559         WIIMOD_PRO_KEY_HOME,
1560         WIIMOD_PRO_KEY_LEFT,
1561         WIIMOD_PRO_KEY_RIGHT,
1562         WIIMOD_PRO_KEY_UP,
1563         WIIMOD_PRO_KEY_DOWN,
1564         WIIMOD_PRO_KEY_TL,
1565         WIIMOD_PRO_KEY_TR,
1566         WIIMOD_PRO_KEY_ZL,
1567         WIIMOD_PRO_KEY_ZR,
1568         WIIMOD_PRO_KEY_THUMBL,
1569         WIIMOD_PRO_KEY_THUMBR,
1570         WIIMOD_PRO_KEY_NUM,
1571 };
1572
1573 static const __u16 wiimod_pro_map[] = {
1574         BTN_EAST,       /* WIIMOD_PRO_KEY_A */
1575         BTN_SOUTH,      /* WIIMOD_PRO_KEY_B */
1576         BTN_NORTH,      /* WIIMOD_PRO_KEY_X */
1577         BTN_WEST,       /* WIIMOD_PRO_KEY_Y */
1578         BTN_START,      /* WIIMOD_PRO_KEY_PLUS */
1579         BTN_SELECT,     /* WIIMOD_PRO_KEY_MINUS */
1580         BTN_MODE,       /* WIIMOD_PRO_KEY_HOME */
1581         BTN_DPAD_LEFT,  /* WIIMOD_PRO_KEY_LEFT */
1582         BTN_DPAD_RIGHT, /* WIIMOD_PRO_KEY_RIGHT */
1583         BTN_DPAD_UP,    /* WIIMOD_PRO_KEY_UP */
1584         BTN_DPAD_DOWN,  /* WIIMOD_PRO_KEY_DOWN */
1585         BTN_TL,         /* WIIMOD_PRO_KEY_TL */
1586         BTN_TR,         /* WIIMOD_PRO_KEY_TR */
1587         BTN_TL2,        /* WIIMOD_PRO_KEY_ZL */
1588         BTN_TR2,        /* WIIMOD_PRO_KEY_ZR */
1589         BTN_THUMBL,     /* WIIMOD_PRO_KEY_THUMBL */
1590         BTN_THUMBR,     /* WIIMOD_PRO_KEY_THUMBR */
1591 };
1592
1593 static void wiimod_pro_in_ext(struct wiimote_data *wdata, const __u8 *ext)
1594 {
1595         __s16 rx, ry, lx, ly;
1596
1597         /*   Byte |  8  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |
1598          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1599          *    1   |                   LX <7:0>                    |
1600          *   -----+-----------------------+-----------------------+
1601          *    2   |  0     0     0     0  |       LX <11:8>       |
1602          *   -----+-----------------------+-----------------------+
1603          *    3   |                   RX <7:0>                    |
1604          *   -----+-----------------------+-----------------------+
1605          *    4   |  0     0     0     0  |       RX <11:8>       |
1606          *   -----+-----------------------+-----------------------+
1607          *    5   |                   LY <7:0>                    |
1608          *   -----+-----------------------+-----------------------+
1609          *    6   |  0     0     0     0  |       LY <11:8>       |
1610          *   -----+-----------------------+-----------------------+
1611          *    7   |                   RY <7:0>                    |
1612          *   -----+-----------------------+-----------------------+
1613          *    8   |  0     0     0     0  |       RY <11:8>       |
1614          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1615          *    9   | BDR | BDD | BLT | B-  | BH  | B+  | BRT |  1  |
1616          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1617          *   10   | BZL | BB  | BY  | BA  | BX  | BZR | BDL | BDU |
1618          *   -----+-----+-----+-----+-----+-----+-----+-----+-----+
1619          *   11   |  1  |     BATTERY     | USB |CHARG|LTHUM|RTHUM|
1620          *   -----+-----+-----------------+-----------+-----+-----+
1621          * All buttons are low-active (0 if pressed)
1622          * RX and RY are right analog stick
1623          * LX and LY are left analog stick
1624          * BLT is left trigger, BRT is right trigger.
1625          * BDR, BDD, BDL, BDU form the D-Pad with right, down, left, up buttons
1626          * BZL is left Z button and BZR is right Z button
1627          * B-, BH, B+ are +, HOME and - buttons
1628          * BB, BY, BA, BX are A, B, X, Y buttons
1629          *
1630          * Bits marked as 0/1 are unknown and never changed during tests.
1631          *
1632          * Not entirely verified:
1633          *   CHARG: 1 if uncharging, 0 if charging
1634          *   USB: 1 if not connected, 0 if connected
1635          *   BATTERY: battery capacity from 000 (empty) to 100 (full)
1636          */
1637
1638         lx = (ext[0] & 0xff) | ((ext[1] & 0x0f) << 8);
1639         rx = (ext[2] & 0xff) | ((ext[3] & 0x0f) << 8);
1640         ly = (ext[4] & 0xff) | ((ext[5] & 0x0f) << 8);
1641         ry = (ext[6] & 0xff) | ((ext[7] & 0x0f) << 8);
1642
1643         input_report_abs(wdata->extension.input, ABS_X, lx - 0x800);
1644         input_report_abs(wdata->extension.input, ABS_Y, ly - 0x800);
1645         input_report_abs(wdata->extension.input, ABS_RX, rx - 0x800);
1646         input_report_abs(wdata->extension.input, ABS_RY, ry - 0x800);
1647
1648         input_report_key(wdata->extension.input,
1649                          wiimod_pro_map[WIIMOD_PRO_KEY_RIGHT],
1650                          !(ext[8] & 0x80));
1651         input_report_key(wdata->extension.input,
1652                          wiimod_pro_map[WIIMOD_PRO_KEY_DOWN],
1653                          !(ext[8] & 0x40));
1654         input_report_key(wdata->extension.input,
1655                          wiimod_pro_map[WIIMOD_PRO_KEY_TL],
1656                          !(ext[8] & 0x20));
1657         input_report_key(wdata->extension.input,
1658                          wiimod_pro_map[WIIMOD_PRO_KEY_MINUS],
1659                          !(ext[8] & 0x10));
1660         input_report_key(wdata->extension.input,
1661                          wiimod_pro_map[WIIMOD_PRO_KEY_HOME],
1662                          !(ext[8] & 0x08));
1663         input_report_key(wdata->extension.input,
1664                          wiimod_pro_map[WIIMOD_PRO_KEY_PLUS],
1665                          !(ext[8] & 0x04));
1666         input_report_key(wdata->extension.input,
1667                          wiimod_pro_map[WIIMOD_PRO_KEY_TR],
1668                          !(ext[8] & 0x02));
1669
1670         input_report_key(wdata->extension.input,
1671                          wiimod_pro_map[WIIMOD_PRO_KEY_ZL],
1672                          !(ext[9] & 0x80));
1673         input_report_key(wdata->extension.input,
1674                          wiimod_pro_map[WIIMOD_PRO_KEY_B],
1675                          !(ext[9] & 0x40));
1676         input_report_key(wdata->extension.input,
1677                          wiimod_pro_map[WIIMOD_PRO_KEY_Y],
1678                          !(ext[9] & 0x20));
1679         input_report_key(wdata->extension.input,
1680                          wiimod_pro_map[WIIMOD_PRO_KEY_A],
1681                          !(ext[9] & 0x10));
1682         input_report_key(wdata->extension.input,
1683                          wiimod_pro_map[WIIMOD_PRO_KEY_X],
1684                          !(ext[9] & 0x08));
1685         input_report_key(wdata->extension.input,
1686                          wiimod_pro_map[WIIMOD_PRO_KEY_ZR],
1687                          !(ext[9] & 0x04));
1688         input_report_key(wdata->extension.input,
1689                          wiimod_pro_map[WIIMOD_PRO_KEY_LEFT],
1690                          !(ext[9] & 0x02));
1691         input_report_key(wdata->extension.input,
1692                          wiimod_pro_map[WIIMOD_PRO_KEY_UP],
1693                          !(ext[9] & 0x01));
1694
1695         input_report_key(wdata->extension.input,
1696                          wiimod_pro_map[WIIMOD_PRO_KEY_THUMBL],
1697                          !(ext[10] & 0x02));
1698         input_report_key(wdata->extension.input,
1699                          wiimod_pro_map[WIIMOD_PRO_KEY_THUMBR],
1700                          !(ext[10] & 0x01));
1701
1702         input_sync(wdata->extension.input);
1703 }
1704
1705 static int wiimod_pro_open(struct input_dev *dev)
1706 {
1707         struct wiimote_data *wdata = input_get_drvdata(dev);
1708         unsigned long flags;
1709
1710         spin_lock_irqsave(&wdata->state.lock, flags);
1711         wdata->state.flags |= WIIPROTO_FLAG_EXT_USED;
1712         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
1713         spin_unlock_irqrestore(&wdata->state.lock, flags);
1714
1715         return 0;
1716 }
1717
1718 static void wiimod_pro_close(struct input_dev *dev)
1719 {
1720         struct wiimote_data *wdata = input_get_drvdata(dev);
1721         unsigned long flags;
1722
1723         spin_lock_irqsave(&wdata->state.lock, flags);
1724         wdata->state.flags &= ~WIIPROTO_FLAG_EXT_USED;
1725         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
1726         spin_unlock_irqrestore(&wdata->state.lock, flags);
1727 }
1728
1729 static int wiimod_pro_play(struct input_dev *dev, void *data,
1730                            struct ff_effect *eff)
1731 {
1732         struct wiimote_data *wdata = input_get_drvdata(dev);
1733         __u8 value;
1734         unsigned long flags;
1735
1736         /*
1737          * The wiimote supports only a single rumble motor so if any magnitude
1738          * is set to non-zero then we start the rumble motor. If both are set to
1739          * zero, we stop the rumble motor.
1740          */
1741
1742         if (eff->u.rumble.strong_magnitude || eff->u.rumble.weak_magnitude)
1743                 value = 1;
1744         else
1745                 value = 0;
1746
1747         spin_lock_irqsave(&wdata->state.lock, flags);
1748         wiiproto_req_rumble(wdata, value);
1749         spin_unlock_irqrestore(&wdata->state.lock, flags);
1750
1751         return 0;
1752 }
1753
1754 static int wiimod_pro_probe(const struct wiimod_ops *ops,
1755                             struct wiimote_data *wdata)
1756 {
1757         int ret, i;
1758
1759         wdata->extension.input = input_allocate_device();
1760         if (!wdata->extension.input)
1761                 return -ENOMEM;
1762
1763         set_bit(FF_RUMBLE, wdata->extension.input->ffbit);
1764         input_set_drvdata(wdata->extension.input, wdata);
1765
1766         if (input_ff_create_memless(wdata->extension.input, NULL,
1767                                     wiimod_pro_play)) {
1768                 ret = -ENOMEM;
1769                 goto err_free;
1770         }
1771
1772         wdata->extension.input->open = wiimod_pro_open;
1773         wdata->extension.input->close = wiimod_pro_close;
1774         wdata->extension.input->dev.parent = &wdata->hdev->dev;
1775         wdata->extension.input->id.bustype = wdata->hdev->bus;
1776         wdata->extension.input->id.vendor = wdata->hdev->vendor;
1777         wdata->extension.input->id.product = wdata->hdev->product;
1778         wdata->extension.input->id.version = wdata->hdev->version;
1779         wdata->extension.input->name = WIIMOTE_NAME " Pro Controller";
1780
1781         set_bit(EV_KEY, wdata->extension.input->evbit);
1782         for (i = 0; i < WIIMOD_PRO_KEY_NUM; ++i)
1783                 set_bit(wiimod_pro_map[i],
1784                         wdata->extension.input->keybit);
1785
1786         set_bit(EV_ABS, wdata->extension.input->evbit);
1787         set_bit(ABS_X, wdata->extension.input->absbit);
1788         set_bit(ABS_Y, wdata->extension.input->absbit);
1789         set_bit(ABS_RX, wdata->extension.input->absbit);
1790         set_bit(ABS_RY, wdata->extension.input->absbit);
1791         input_set_abs_params(wdata->extension.input,
1792                              ABS_X, -0x800, 0x800, 2, 4);
1793         input_set_abs_params(wdata->extension.input,
1794                              ABS_Y, -0x800, 0x800, 2, 4);
1795         input_set_abs_params(wdata->extension.input,
1796                              ABS_RX, -0x800, 0x800, 2, 4);
1797         input_set_abs_params(wdata->extension.input,
1798                              ABS_RY, -0x800, 0x800, 2, 4);
1799
1800         ret = input_register_device(wdata->extension.input);
1801         if (ret)
1802                 goto err_free;
1803
1804         return 0;
1805
1806 err_free:
1807         input_free_device(wdata->extension.input);
1808         wdata->extension.input = NULL;
1809         return ret;
1810 }
1811
1812 static void wiimod_pro_remove(const struct wiimod_ops *ops,
1813                               struct wiimote_data *wdata)
1814 {
1815         unsigned long flags;
1816
1817         if (!wdata->extension.input)
1818                 return;
1819
1820         spin_lock_irqsave(&wdata->state.lock, flags);
1821         wiiproto_req_rumble(wdata, 0);
1822         spin_unlock_irqrestore(&wdata->state.lock, flags);
1823
1824         input_unregister_device(wdata->extension.input);
1825         wdata->extension.input = NULL;
1826 }
1827
1828 static const struct wiimod_ops wiimod_pro = {
1829         .flags = WIIMOD_FLAG_EXT16,
1830         .arg = 0,
1831         .probe = wiimod_pro_probe,
1832         .remove = wiimod_pro_remove,
1833         .in_ext = wiimod_pro_in_ext,
1834 };
1835
1836 /*
1837  * Builtin Motion Plus
1838  * This module simply sets the WIIPROTO_FLAG_BUILTIN_MP protocol flag which
1839  * disables polling for Motion-Plus. This should be set only for devices which
1840  * don't allow MP hotplugging.
1841  */
1842
1843 static int wiimod_builtin_mp_probe(const struct wiimod_ops *ops,
1844                                    struct wiimote_data *wdata)
1845 {
1846         unsigned long flags;
1847
1848         spin_lock_irqsave(&wdata->state.lock, flags);
1849         wdata->state.flags |= WIIPROTO_FLAG_BUILTIN_MP;
1850         spin_unlock_irqrestore(&wdata->state.lock, flags);
1851
1852         return 0;
1853 }
1854
1855 static void wiimod_builtin_mp_remove(const struct wiimod_ops *ops,
1856                                      struct wiimote_data *wdata)
1857 {
1858         unsigned long flags;
1859
1860         spin_lock_irqsave(&wdata->state.lock, flags);
1861         wdata->state.flags |= WIIPROTO_FLAG_BUILTIN_MP;
1862         spin_unlock_irqrestore(&wdata->state.lock, flags);
1863 }
1864
1865 static const struct wiimod_ops wiimod_builtin_mp = {
1866         .flags = 0,
1867         .arg = 0,
1868         .probe = wiimod_builtin_mp_probe,
1869         .remove = wiimod_builtin_mp_remove,
1870 };
1871
1872 /*
1873  * No Motion Plus
1874  * This module simply sets the WIIPROTO_FLAG_NO_MP protocol flag which
1875  * disables motion-plus. This is needed for devices that advertise this but we
1876  * don't know how to use it (or whether it is actually present).
1877  */
1878
1879 static int wiimod_no_mp_probe(const struct wiimod_ops *ops,
1880                               struct wiimote_data *wdata)
1881 {
1882         unsigned long flags;
1883
1884         spin_lock_irqsave(&wdata->state.lock, flags);
1885         wdata->state.flags |= WIIPROTO_FLAG_NO_MP;
1886         spin_unlock_irqrestore(&wdata->state.lock, flags);
1887
1888         return 0;
1889 }
1890
1891 static void wiimod_no_mp_remove(const struct wiimod_ops *ops,
1892                                 struct wiimote_data *wdata)
1893 {
1894         unsigned long flags;
1895
1896         spin_lock_irqsave(&wdata->state.lock, flags);
1897         wdata->state.flags |= WIIPROTO_FLAG_NO_MP;
1898         spin_unlock_irqrestore(&wdata->state.lock, flags);
1899 }
1900
1901 static const struct wiimod_ops wiimod_no_mp = {
1902         .flags = 0,
1903         .arg = 0,
1904         .probe = wiimod_no_mp_probe,
1905         .remove = wiimod_no_mp_remove,
1906 };
1907
1908 /*
1909  * Motion Plus
1910  * The Motion Plus extension provides rotation sensors (gyro) as a small
1911  * extension device for Wii Remotes. Many devices have them built-in so
1912  * you cannot see them from the outside.
1913  * Motion Plus extensions are special because they are on a separate extension
1914  * port and allow other extensions to be used simultaneously. This is all
1915  * handled by the Wiimote Core so we don't have to deal with it.
1916  */
1917
1918 static void wiimod_mp_in_mp(struct wiimote_data *wdata, const __u8 *ext)
1919 {
1920         __s32 x, y, z;
1921
1922         /*        |   8    7    6    5    4    3 |  2  |  1  |
1923          *   -----+------------------------------+-----+-----+
1924          *    1   |               Yaw Speed <7:0>            |
1925          *    2   |              Roll Speed <7:0>            |
1926          *    3   |             Pitch Speed <7:0>            |
1927          *   -----+------------------------------+-----+-----+
1928          *    4   |       Yaw Speed <13:8>       | Yaw |Pitch|
1929          *   -----+------------------------------+-----+-----+
1930          *    5   |      Roll Speed <13:8>       |Roll | Ext |
1931          *   -----+------------------------------+-----+-----+
1932          *    6   |     Pitch Speed <13:8>       |  1  |  0  |
1933          *   -----+------------------------------+-----+-----+
1934          * The single bits Yaw, Roll, Pitch in the lower right corner specify
1935          * whether the wiimote is rotating fast (0) or slow (1). Speed for slow
1936          * roation is 440 deg/s and for fast rotation 2000 deg/s. To get a
1937          * linear scale we multiply by 2000/440 = ~4.5454 which is 18 for fast
1938          * and 9 for slow.
1939          * If the wiimote is not rotating the sensor reports 2^13 = 8192.
1940          * Ext specifies whether an extension is connected to the motionp.
1941          * which is parsed by wiimote-core.
1942          */
1943
1944         x = ext[0];
1945         y = ext[1];
1946         z = ext[2];
1947
1948         x |= (((__u16)ext[3]) << 6) & 0xff00;
1949         y |= (((__u16)ext[4]) << 6) & 0xff00;
1950         z |= (((__u16)ext[5]) << 6) & 0xff00;
1951
1952         x -= 8192;
1953         y -= 8192;
1954         z -= 8192;
1955
1956         if (!(ext[3] & 0x02))
1957                 x *= 18;
1958         else
1959                 x *= 9;
1960         if (!(ext[4] & 0x02))
1961                 y *= 18;
1962         else
1963                 y *= 9;
1964         if (!(ext[3] & 0x01))
1965                 z *= 18;
1966         else
1967                 z *= 9;
1968
1969         input_report_abs(wdata->mp, ABS_RX, x);
1970         input_report_abs(wdata->mp, ABS_RY, y);
1971         input_report_abs(wdata->mp, ABS_RZ, z);
1972         input_sync(wdata->mp);
1973 }
1974
1975 static int wiimod_mp_open(struct input_dev *dev)
1976 {
1977         struct wiimote_data *wdata = input_get_drvdata(dev);
1978         unsigned long flags;
1979
1980         spin_lock_irqsave(&wdata->state.lock, flags);
1981         wdata->state.flags |= WIIPROTO_FLAG_MP_USED;
1982         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
1983         __wiimote_schedule(wdata);
1984         spin_unlock_irqrestore(&wdata->state.lock, flags);
1985
1986         return 0;
1987 }
1988
1989 static void wiimod_mp_close(struct input_dev *dev)
1990 {
1991         struct wiimote_data *wdata = input_get_drvdata(dev);
1992         unsigned long flags;
1993
1994         spin_lock_irqsave(&wdata->state.lock, flags);
1995         wdata->state.flags &= ~WIIPROTO_FLAG_MP_USED;
1996         wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL);
1997         __wiimote_schedule(wdata);
1998         spin_unlock_irqrestore(&wdata->state.lock, flags);
1999 }
2000
2001 static int wiimod_mp_probe(const struct wiimod_ops *ops,
2002                            struct wiimote_data *wdata)
2003 {
2004         int ret;
2005
2006         wdata->mp = input_allocate_device();
2007         if (!wdata->mp)
2008                 return -ENOMEM;
2009
2010         input_set_drvdata(wdata->mp, wdata);
2011         wdata->mp->open = wiimod_mp_open;
2012         wdata->mp->close = wiimod_mp_close;
2013         wdata->mp->dev.parent = &wdata->hdev->dev;
2014         wdata->mp->id.bustype = wdata->hdev->bus;
2015         wdata->mp->id.vendor = wdata->hdev->vendor;
2016         wdata->mp->id.product = wdata->hdev->product;
2017         wdata->mp->id.version = wdata->hdev->version;
2018         wdata->mp->name = WIIMOTE_NAME " Motion Plus";
2019
2020         set_bit(EV_ABS, wdata->mp->evbit);
2021         set_bit(ABS_RX, wdata->mp->absbit);
2022         set_bit(ABS_RY, wdata->mp->absbit);
2023         set_bit(ABS_RZ, wdata->mp->absbit);
2024         input_set_abs_params(wdata->mp,
2025                              ABS_RX, -16000, 16000, 4, 8);
2026         input_set_abs_params(wdata->mp,
2027                              ABS_RY, -16000, 16000, 4, 8);
2028         input_set_abs_params(wdata->mp,
2029                              ABS_RZ, -16000, 16000, 4, 8);
2030
2031         ret = input_register_device(wdata->mp);
2032         if (ret)
2033                 goto err_free;
2034
2035         return 0;
2036
2037 err_free:
2038         input_free_device(wdata->mp);
2039         wdata->mp = NULL;
2040         return ret;
2041 }
2042
2043 static void wiimod_mp_remove(const struct wiimod_ops *ops,
2044                              struct wiimote_data *wdata)
2045 {
2046         if (!wdata->mp)
2047                 return;
2048
2049         input_unregister_device(wdata->mp);
2050         wdata->mp = NULL;
2051 }
2052
2053 const struct wiimod_ops wiimod_mp = {
2054         .flags = 0,
2055         .arg = 0,
2056         .probe = wiimod_mp_probe,
2057         .remove = wiimod_mp_remove,
2058         .in_mp = wiimod_mp_in_mp,
2059 };
2060
2061 /* module table */
2062
2063 static const struct wiimod_ops wiimod_dummy;
2064
2065 const struct wiimod_ops *wiimod_table[WIIMOD_NUM] = {
2066         [WIIMOD_KEYS] = &wiimod_keys,
2067         [WIIMOD_RUMBLE] = &wiimod_rumble,
2068         [WIIMOD_BATTERY] = &wiimod_battery,
2069         [WIIMOD_LED1] = &wiimod_leds[0],
2070         [WIIMOD_LED2] = &wiimod_leds[1],
2071         [WIIMOD_LED3] = &wiimod_leds[2],
2072         [WIIMOD_LED4] = &wiimod_leds[3],
2073         [WIIMOD_ACCEL] = &wiimod_accel,
2074         [WIIMOD_IR] = &wiimod_ir,
2075         [WIIMOD_BUILTIN_MP] = &wiimod_builtin_mp,
2076         [WIIMOD_NO_MP] = &wiimod_no_mp,
2077 };
2078
2079 const struct wiimod_ops *wiimod_ext_table[WIIMOTE_EXT_NUM] = {
2080         [WIIMOTE_EXT_NONE] = &wiimod_dummy,
2081         [WIIMOTE_EXT_UNKNOWN] = &wiimod_dummy,
2082         [WIIMOTE_EXT_NUNCHUK] = &wiimod_nunchuk,
2083         [WIIMOTE_EXT_CLASSIC_CONTROLLER] = &wiimod_classic,
2084         [WIIMOTE_EXT_BALANCE_BOARD] = &wiimod_bboard,
2085         [WIIMOTE_EXT_PRO_CONTROLLER] = &wiimod_pro,
2086 };