GNU Linux-libre 4.19.264-gnu1
[releases.git] / drivers / input / misc / ati_remote2.c
1 /*
2  * ati_remote2 - ATI/Philips USB RF remote driver
3  *
4  * Copyright (C) 2005-2008 Ville Syrjala <syrjala@sci.fi>
5  * Copyright (C) 2007-2008 Peter Stokes <linux@dadeos.co.uk>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2
9  * as published by the Free Software Foundation.
10  */
11
12 #include <linux/usb/input.h>
13 #include <linux/slab.h>
14 #include <linux/module.h>
15
16 #define DRIVER_DESC    "ATI/Philips USB RF remote driver"
17
18 MODULE_DESCRIPTION(DRIVER_DESC);
19 MODULE_AUTHOR("Ville Syrjala <syrjala@sci.fi>");
20 MODULE_LICENSE("GPL");
21
22 /*
23  * ATI Remote Wonder II Channel Configuration
24  *
25  * The remote control can be assigned one of sixteen "channels" in order to facilitate
26  * the use of multiple remote controls within range of each other.
27  * A remote's "channel" may be altered by pressing and holding the "PC" button for
28  * approximately 3 seconds, after which the button will slowly flash the count of the
29  * currently configured "channel", using the numeric keypad enter a number between 1 and
30  * 16 and then press the "PC" button again, the button will slowly flash the count of the
31  * newly configured "channel".
32  */
33
34 enum {
35         ATI_REMOTE2_MAX_CHANNEL_MASK = 0xFFFF,
36         ATI_REMOTE2_MAX_MODE_MASK = 0x1F,
37 };
38
39 static int ati_remote2_set_mask(const char *val,
40                                 const struct kernel_param *kp,
41                                 unsigned int max)
42 {
43         unsigned int mask;
44         int ret;
45
46         if (!val)
47                 return -EINVAL;
48
49         ret = kstrtouint(val, 0, &mask);
50         if (ret)
51                 return ret;
52
53         if (mask & ~max)
54                 return -EINVAL;
55
56         *(unsigned int *)kp->arg = mask;
57
58         return 0;
59 }
60
61 static int ati_remote2_set_channel_mask(const char *val,
62                                         const struct kernel_param *kp)
63 {
64         pr_debug("%s()\n", __func__);
65
66         return ati_remote2_set_mask(val, kp, ATI_REMOTE2_MAX_CHANNEL_MASK);
67 }
68
69 static int ati_remote2_get_channel_mask(char *buffer,
70                                         const struct kernel_param *kp)
71 {
72         pr_debug("%s()\n", __func__);
73
74         return sprintf(buffer, "0x%04x", *(unsigned int *)kp->arg);
75 }
76
77 static int ati_remote2_set_mode_mask(const char *val,
78                                      const struct kernel_param *kp)
79 {
80         pr_debug("%s()\n", __func__);
81
82         return ati_remote2_set_mask(val, kp, ATI_REMOTE2_MAX_MODE_MASK);
83 }
84
85 static int ati_remote2_get_mode_mask(char *buffer,
86                                      const struct kernel_param *kp)
87 {
88         pr_debug("%s()\n", __func__);
89
90         return sprintf(buffer, "0x%02x", *(unsigned int *)kp->arg);
91 }
92
93 static unsigned int channel_mask = ATI_REMOTE2_MAX_CHANNEL_MASK;
94 #define param_check_channel_mask(name, p) __param_check(name, p, unsigned int)
95 static const struct kernel_param_ops param_ops_channel_mask = {
96         .set = ati_remote2_set_channel_mask,
97         .get = ati_remote2_get_channel_mask,
98 };
99 module_param(channel_mask, channel_mask, 0644);
100 MODULE_PARM_DESC(channel_mask, "Bitmask of channels to accept <15:Channel16>...<1:Channel2><0:Channel1>");
101
102 static unsigned int mode_mask = ATI_REMOTE2_MAX_MODE_MASK;
103 #define param_check_mode_mask(name, p) __param_check(name, p, unsigned int)
104 static const struct kernel_param_ops param_ops_mode_mask = {
105         .set = ati_remote2_set_mode_mask,
106         .get = ati_remote2_get_mode_mask,
107 };
108 module_param(mode_mask, mode_mask, 0644);
109 MODULE_PARM_DESC(mode_mask, "Bitmask of modes to accept <4:PC><3:AUX4><2:AUX3><1:AUX2><0:AUX1>");
110
111 static const struct usb_device_id ati_remote2_id_table[] = {
112         { USB_DEVICE(0x0471, 0x0602) }, /* ATI Remote Wonder II */
113         { }
114 };
115 MODULE_DEVICE_TABLE(usb, ati_remote2_id_table);
116
117 static DEFINE_MUTEX(ati_remote2_mutex);
118
119 enum {
120         ATI_REMOTE2_OPENED = 0x1,
121         ATI_REMOTE2_SUSPENDED = 0x2,
122 };
123
124 enum {
125         ATI_REMOTE2_AUX1,
126         ATI_REMOTE2_AUX2,
127         ATI_REMOTE2_AUX3,
128         ATI_REMOTE2_AUX4,
129         ATI_REMOTE2_PC,
130         ATI_REMOTE2_MODES,
131 };
132
133 static const struct {
134         u8  hw_code;
135         u16 keycode;
136 } ati_remote2_key_table[] = {
137         { 0x00, KEY_0 },
138         { 0x01, KEY_1 },
139         { 0x02, KEY_2 },
140         { 0x03, KEY_3 },
141         { 0x04, KEY_4 },
142         { 0x05, KEY_5 },
143         { 0x06, KEY_6 },
144         { 0x07, KEY_7 },
145         { 0x08, KEY_8 },
146         { 0x09, KEY_9 },
147         { 0x0c, KEY_POWER },
148         { 0x0d, KEY_MUTE },
149         { 0x10, KEY_VOLUMEUP },
150         { 0x11, KEY_VOLUMEDOWN },
151         { 0x20, KEY_CHANNELUP },
152         { 0x21, KEY_CHANNELDOWN },
153         { 0x28, KEY_FORWARD },
154         { 0x29, KEY_REWIND },
155         { 0x2c, KEY_PLAY },
156         { 0x30, KEY_PAUSE },
157         { 0x31, KEY_STOP },
158         { 0x37, KEY_RECORD },
159         { 0x38, KEY_DVD },
160         { 0x39, KEY_TV },
161         { 0x3f, KEY_PROG1 }, /* AUX1-AUX4 and PC */
162         { 0x54, KEY_MENU },
163         { 0x58, KEY_UP },
164         { 0x59, KEY_DOWN },
165         { 0x5a, KEY_LEFT },
166         { 0x5b, KEY_RIGHT },
167         { 0x5c, KEY_OK },
168         { 0x78, KEY_A },
169         { 0x79, KEY_B },
170         { 0x7a, KEY_C },
171         { 0x7b, KEY_D },
172         { 0x7c, KEY_E },
173         { 0x7d, KEY_F },
174         { 0x82, KEY_ENTER },
175         { 0x8e, KEY_VENDOR },
176         { 0x96, KEY_COFFEE },
177         { 0xa9, BTN_LEFT },
178         { 0xaa, BTN_RIGHT },
179         { 0xbe, KEY_QUESTION },
180         { 0xd0, KEY_EDIT },
181         { 0xd5, KEY_FRONT },
182         { 0xf9, KEY_INFO },
183 };
184
185 struct ati_remote2 {
186         struct input_dev *idev;
187         struct usb_device *udev;
188
189         struct usb_interface *intf[2];
190         struct usb_endpoint_descriptor *ep[2];
191         struct urb *urb[2];
192         void *buf[2];
193         dma_addr_t buf_dma[2];
194
195         unsigned long jiffies;
196         int mode;
197
198         char name[64];
199         char phys[64];
200
201         /* Each mode (AUX1-AUX4 and PC) can have an independent keymap. */
202         u16 keycode[ATI_REMOTE2_MODES][ARRAY_SIZE(ati_remote2_key_table)];
203
204         unsigned int flags;
205
206         unsigned int channel_mask;
207         unsigned int mode_mask;
208 };
209
210 static int ati_remote2_probe(struct usb_interface *interface, const struct usb_device_id *id);
211 static void ati_remote2_disconnect(struct usb_interface *interface);
212 static int ati_remote2_suspend(struct usb_interface *interface, pm_message_t message);
213 static int ati_remote2_resume(struct usb_interface *interface);
214 static int ati_remote2_reset_resume(struct usb_interface *interface);
215 static int ati_remote2_pre_reset(struct usb_interface *interface);
216 static int ati_remote2_post_reset(struct usb_interface *interface);
217
218 static struct usb_driver ati_remote2_driver = {
219         .name       = "ati_remote2",
220         .probe      = ati_remote2_probe,
221         .disconnect = ati_remote2_disconnect,
222         .id_table   = ati_remote2_id_table,
223         .suspend    = ati_remote2_suspend,
224         .resume     = ati_remote2_resume,
225         .reset_resume = ati_remote2_reset_resume,
226         .pre_reset  = ati_remote2_pre_reset,
227         .post_reset = ati_remote2_post_reset,
228         .supports_autosuspend = 1,
229 };
230
231 static int ati_remote2_submit_urbs(struct ati_remote2 *ar2)
232 {
233         int r;
234
235         r = usb_submit_urb(ar2->urb[0], GFP_KERNEL);
236         if (r) {
237                 dev_err(&ar2->intf[0]->dev,
238                         "%s(): usb_submit_urb() = %d\n", __func__, r);
239                 return r;
240         }
241         r = usb_submit_urb(ar2->urb[1], GFP_KERNEL);
242         if (r) {
243                 usb_kill_urb(ar2->urb[0]);
244                 dev_err(&ar2->intf[1]->dev,
245                         "%s(): usb_submit_urb() = %d\n", __func__, r);
246                 return r;
247         }
248
249         return 0;
250 }
251
252 static void ati_remote2_kill_urbs(struct ati_remote2 *ar2)
253 {
254         usb_kill_urb(ar2->urb[1]);
255         usb_kill_urb(ar2->urb[0]);
256 }
257
258 static int ati_remote2_open(struct input_dev *idev)
259 {
260         struct ati_remote2 *ar2 = input_get_drvdata(idev);
261         int r;
262
263         dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
264
265         r = usb_autopm_get_interface(ar2->intf[0]);
266         if (r) {
267                 dev_err(&ar2->intf[0]->dev,
268                         "%s(): usb_autopm_get_interface() = %d\n", __func__, r);
269                 goto fail1;
270         }
271
272         mutex_lock(&ati_remote2_mutex);
273
274         if (!(ar2->flags & ATI_REMOTE2_SUSPENDED)) {
275                 r = ati_remote2_submit_urbs(ar2);
276                 if (r)
277                         goto fail2;
278         }
279
280         ar2->flags |= ATI_REMOTE2_OPENED;
281
282         mutex_unlock(&ati_remote2_mutex);
283
284         usb_autopm_put_interface(ar2->intf[0]);
285
286         return 0;
287
288  fail2:
289         mutex_unlock(&ati_remote2_mutex);
290         usb_autopm_put_interface(ar2->intf[0]);
291  fail1:
292         return r;
293 }
294
295 static void ati_remote2_close(struct input_dev *idev)
296 {
297         struct ati_remote2 *ar2 = input_get_drvdata(idev);
298
299         dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
300
301         mutex_lock(&ati_remote2_mutex);
302
303         if (!(ar2->flags & ATI_REMOTE2_SUSPENDED))
304                 ati_remote2_kill_urbs(ar2);
305
306         ar2->flags &= ~ATI_REMOTE2_OPENED;
307
308         mutex_unlock(&ati_remote2_mutex);
309 }
310
311 static void ati_remote2_input_mouse(struct ati_remote2 *ar2)
312 {
313         struct input_dev *idev = ar2->idev;
314         u8 *data = ar2->buf[0];
315         int channel, mode;
316
317         channel = data[0] >> 4;
318
319         if (!((1 << channel) & ar2->channel_mask))
320                 return;
321
322         mode = data[0] & 0x0F;
323
324         if (mode > ATI_REMOTE2_PC) {
325                 dev_err(&ar2->intf[0]->dev,
326                         "Unknown mode byte (%02x %02x %02x %02x)\n",
327                         data[3], data[2], data[1], data[0]);
328                 return;
329         }
330
331         if (!((1 << mode) & ar2->mode_mask))
332                 return;
333
334         input_event(idev, EV_REL, REL_X, (s8) data[1]);
335         input_event(idev, EV_REL, REL_Y, (s8) data[2]);
336         input_sync(idev);
337 }
338
339 static int ati_remote2_lookup(unsigned int hw_code)
340 {
341         int i;
342
343         for (i = 0; i < ARRAY_SIZE(ati_remote2_key_table); i++)
344                 if (ati_remote2_key_table[i].hw_code == hw_code)
345                         return i;
346
347         return -1;
348 }
349
350 static void ati_remote2_input_key(struct ati_remote2 *ar2)
351 {
352         struct input_dev *idev = ar2->idev;
353         u8 *data = ar2->buf[1];
354         int channel, mode, hw_code, index;
355
356         channel = data[0] >> 4;
357
358         if (!((1 << channel) & ar2->channel_mask))
359                 return;
360
361         mode = data[0] & 0x0F;
362
363         if (mode > ATI_REMOTE2_PC) {
364                 dev_err(&ar2->intf[1]->dev,
365                         "Unknown mode byte (%02x %02x %02x %02x)\n",
366                         data[3], data[2], data[1], data[0]);
367                 return;
368         }
369
370         hw_code = data[2];
371         if (hw_code == 0x3f) {
372                 /*
373                  * For some incomprehensible reason the mouse pad generates
374                  * events which look identical to the events from the last
375                  * pressed mode key. Naturally we don't want to generate key
376                  * events for the mouse pad so we filter out any subsequent
377                  * events from the same mode key.
378                  */
379                 if (ar2->mode == mode)
380                         return;
381
382                 if (data[1] == 0)
383                         ar2->mode = mode;
384         }
385
386         if (!((1 << mode) & ar2->mode_mask))
387                 return;
388
389         index = ati_remote2_lookup(hw_code);
390         if (index < 0) {
391                 dev_err(&ar2->intf[1]->dev,
392                         "Unknown code byte (%02x %02x %02x %02x)\n",
393                         data[3], data[2], data[1], data[0]);
394                 return;
395         }
396
397         switch (data[1]) {
398         case 0: /* release */
399                 break;
400         case 1: /* press */
401                 ar2->jiffies = jiffies + msecs_to_jiffies(idev->rep[REP_DELAY]);
402                 break;
403         case 2: /* repeat */
404
405                 /* No repeat for mouse buttons. */
406                 if (ar2->keycode[mode][index] == BTN_LEFT ||
407                     ar2->keycode[mode][index] == BTN_RIGHT)
408                         return;
409
410                 if (!time_after_eq(jiffies, ar2->jiffies))
411                         return;
412
413                 ar2->jiffies = jiffies + msecs_to_jiffies(idev->rep[REP_PERIOD]);
414                 break;
415         default:
416                 dev_err(&ar2->intf[1]->dev,
417                         "Unknown state byte (%02x %02x %02x %02x)\n",
418                         data[3], data[2], data[1], data[0]);
419                 return;
420         }
421
422         input_event(idev, EV_KEY, ar2->keycode[mode][index], data[1]);
423         input_sync(idev);
424 }
425
426 static void ati_remote2_complete_mouse(struct urb *urb)
427 {
428         struct ati_remote2 *ar2 = urb->context;
429         int r;
430
431         switch (urb->status) {
432         case 0:
433                 usb_mark_last_busy(ar2->udev);
434                 ati_remote2_input_mouse(ar2);
435                 break;
436         case -ENOENT:
437         case -EILSEQ:
438         case -ECONNRESET:
439         case -ESHUTDOWN:
440                 dev_dbg(&ar2->intf[0]->dev,
441                         "%s(): urb status = %d\n", __func__, urb->status);
442                 return;
443         default:
444                 usb_mark_last_busy(ar2->udev);
445                 dev_err(&ar2->intf[0]->dev,
446                         "%s(): urb status = %d\n", __func__, urb->status);
447         }
448
449         r = usb_submit_urb(urb, GFP_ATOMIC);
450         if (r)
451                 dev_err(&ar2->intf[0]->dev,
452                         "%s(): usb_submit_urb() = %d\n", __func__, r);
453 }
454
455 static void ati_remote2_complete_key(struct urb *urb)
456 {
457         struct ati_remote2 *ar2 = urb->context;
458         int r;
459
460         switch (urb->status) {
461         case 0:
462                 usb_mark_last_busy(ar2->udev);
463                 ati_remote2_input_key(ar2);
464                 break;
465         case -ENOENT:
466         case -EILSEQ:
467         case -ECONNRESET:
468         case -ESHUTDOWN:
469                 dev_dbg(&ar2->intf[1]->dev,
470                         "%s(): urb status = %d\n", __func__, urb->status);
471                 return;
472         default:
473                 usb_mark_last_busy(ar2->udev);
474                 dev_err(&ar2->intf[1]->dev,
475                         "%s(): urb status = %d\n", __func__, urb->status);
476         }
477
478         r = usb_submit_urb(urb, GFP_ATOMIC);
479         if (r)
480                 dev_err(&ar2->intf[1]->dev,
481                         "%s(): usb_submit_urb() = %d\n", __func__, r);
482 }
483
484 static int ati_remote2_getkeycode(struct input_dev *idev,
485                                   struct input_keymap_entry *ke)
486 {
487         struct ati_remote2 *ar2 = input_get_drvdata(idev);
488         unsigned int mode;
489         int offset;
490         unsigned int index;
491         unsigned int scancode;
492
493         if (ke->flags & INPUT_KEYMAP_BY_INDEX) {
494                 index = ke->index;
495                 if (index >= ATI_REMOTE2_MODES *
496                                 ARRAY_SIZE(ati_remote2_key_table))
497                         return -EINVAL;
498
499                 mode = ke->index / ARRAY_SIZE(ati_remote2_key_table);
500                 offset = ke->index % ARRAY_SIZE(ati_remote2_key_table);
501                 scancode = (mode << 8) + ati_remote2_key_table[offset].hw_code;
502         } else {
503                 if (input_scancode_to_scalar(ke, &scancode))
504                         return -EINVAL;
505
506                 mode = scancode >> 8;
507                 if (mode > ATI_REMOTE2_PC)
508                         return -EINVAL;
509
510                 offset = ati_remote2_lookup(scancode & 0xff);
511                 if (offset < 0)
512                         return -EINVAL;
513
514                 index = mode * ARRAY_SIZE(ati_remote2_key_table) + offset;
515         }
516
517         ke->keycode = ar2->keycode[mode][offset];
518         ke->len = sizeof(scancode);
519         memcpy(&ke->scancode, &scancode, sizeof(scancode));
520         ke->index = index;
521
522         return 0;
523 }
524
525 static int ati_remote2_setkeycode(struct input_dev *idev,
526                                   const struct input_keymap_entry *ke,
527                                   unsigned int *old_keycode)
528 {
529         struct ati_remote2 *ar2 = input_get_drvdata(idev);
530         unsigned int mode;
531         int offset;
532         unsigned int index;
533         unsigned int scancode;
534
535         if (ke->flags & INPUT_KEYMAP_BY_INDEX) {
536                 if (ke->index >= ATI_REMOTE2_MODES *
537                                 ARRAY_SIZE(ati_remote2_key_table))
538                         return -EINVAL;
539
540                 mode = ke->index / ARRAY_SIZE(ati_remote2_key_table);
541                 offset = ke->index % ARRAY_SIZE(ati_remote2_key_table);
542         } else {
543                 if (input_scancode_to_scalar(ke, &scancode))
544                         return -EINVAL;
545
546                 mode = scancode >> 8;
547                 if (mode > ATI_REMOTE2_PC)
548                         return -EINVAL;
549
550                 offset = ati_remote2_lookup(scancode & 0xff);
551                 if (offset < 0)
552                         return -EINVAL;
553         }
554
555         *old_keycode = ar2->keycode[mode][offset];
556         ar2->keycode[mode][offset] = ke->keycode;
557         __set_bit(ke->keycode, idev->keybit);
558
559         for (mode = 0; mode < ATI_REMOTE2_MODES; mode++) {
560                 for (index = 0; index < ARRAY_SIZE(ati_remote2_key_table); index++) {
561                         if (ar2->keycode[mode][index] == *old_keycode)
562                                 return 0;
563                 }
564         }
565
566         __clear_bit(*old_keycode, idev->keybit);
567
568         return 0;
569 }
570
571 static int ati_remote2_input_init(struct ati_remote2 *ar2)
572 {
573         struct input_dev *idev;
574         int index, mode, retval;
575
576         idev = input_allocate_device();
577         if (!idev)
578                 return -ENOMEM;
579
580         ar2->idev = idev;
581         input_set_drvdata(idev, ar2);
582
583         idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | BIT_MASK(EV_REL);
584         idev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
585                 BIT_MASK(BTN_RIGHT);
586         idev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
587
588         for (mode = 0; mode < ATI_REMOTE2_MODES; mode++) {
589                 for (index = 0; index < ARRAY_SIZE(ati_remote2_key_table); index++) {
590                         ar2->keycode[mode][index] = ati_remote2_key_table[index].keycode;
591                         __set_bit(ar2->keycode[mode][index], idev->keybit);
592                 }
593         }
594
595         /* AUX1-AUX4 and PC generate the same scancode. */
596         index = ati_remote2_lookup(0x3f);
597         ar2->keycode[ATI_REMOTE2_AUX1][index] = KEY_PROG1;
598         ar2->keycode[ATI_REMOTE2_AUX2][index] = KEY_PROG2;
599         ar2->keycode[ATI_REMOTE2_AUX3][index] = KEY_PROG3;
600         ar2->keycode[ATI_REMOTE2_AUX4][index] = KEY_PROG4;
601         ar2->keycode[ATI_REMOTE2_PC][index] = KEY_PC;
602         __set_bit(KEY_PROG1, idev->keybit);
603         __set_bit(KEY_PROG2, idev->keybit);
604         __set_bit(KEY_PROG3, idev->keybit);
605         __set_bit(KEY_PROG4, idev->keybit);
606         __set_bit(KEY_PC, idev->keybit);
607
608         idev->rep[REP_DELAY]  = 250;
609         idev->rep[REP_PERIOD] = 33;
610
611         idev->open = ati_remote2_open;
612         idev->close = ati_remote2_close;
613
614         idev->getkeycode = ati_remote2_getkeycode;
615         idev->setkeycode = ati_remote2_setkeycode;
616
617         idev->name = ar2->name;
618         idev->phys = ar2->phys;
619
620         usb_to_input_id(ar2->udev, &idev->id);
621         idev->dev.parent = &ar2->udev->dev;
622
623         retval = input_register_device(idev);
624         if (retval)
625                 input_free_device(idev);
626
627         return retval;
628 }
629
630 static int ati_remote2_urb_init(struct ati_remote2 *ar2)
631 {
632         struct usb_device *udev = ar2->udev;
633         int i, pipe, maxp;
634
635         for (i = 0; i < 2; i++) {
636                 ar2->buf[i] = usb_alloc_coherent(udev, 4, GFP_KERNEL, &ar2->buf_dma[i]);
637                 if (!ar2->buf[i])
638                         return -ENOMEM;
639
640                 ar2->urb[i] = usb_alloc_urb(0, GFP_KERNEL);
641                 if (!ar2->urb[i])
642                         return -ENOMEM;
643
644                 pipe = usb_rcvintpipe(udev, ar2->ep[i]->bEndpointAddress);
645                 maxp = usb_maxpacket(udev, pipe, usb_pipeout(pipe));
646                 maxp = maxp > 4 ? 4 : maxp;
647
648                 usb_fill_int_urb(ar2->urb[i], udev, pipe, ar2->buf[i], maxp,
649                                  i ? ati_remote2_complete_key : ati_remote2_complete_mouse,
650                                  ar2, ar2->ep[i]->bInterval);
651                 ar2->urb[i]->transfer_dma = ar2->buf_dma[i];
652                 ar2->urb[i]->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
653         }
654
655         return 0;
656 }
657
658 static void ati_remote2_urb_cleanup(struct ati_remote2 *ar2)
659 {
660         int i;
661
662         for (i = 0; i < 2; i++) {
663                 usb_free_urb(ar2->urb[i]);
664                 usb_free_coherent(ar2->udev, 4, ar2->buf[i], ar2->buf_dma[i]);
665         }
666 }
667
668 static int ati_remote2_setup(struct ati_remote2 *ar2, unsigned int ch_mask)
669 {
670         int r, i, channel;
671
672         /*
673          * Configure receiver to only accept input from remote "channel"
674          *  channel == 0  -> Accept input from any remote channel
675          *  channel == 1  -> Only accept input from remote channel 1
676          *  channel == 2  -> Only accept input from remote channel 2
677          *  ...
678          *  channel == 16 -> Only accept input from remote channel 16
679          */
680
681         channel = 0;
682         for (i = 0; i < 16; i++) {
683                 if ((1 << i) & ch_mask) {
684                         if (!(~(1 << i) & ch_mask))
685                                 channel = i + 1;
686                         break;
687                 }
688         }
689
690         r = usb_control_msg(ar2->udev, usb_sndctrlpipe(ar2->udev, 0),
691                             0x20,
692                             USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
693                             channel, 0x0, NULL, 0, USB_CTRL_SET_TIMEOUT);
694         if (r) {
695                 dev_err(&ar2->udev->dev, "%s - failed to set channel due to error: %d\n",
696                         __func__, r);
697                 return r;
698         }
699
700         return 0;
701 }
702
703 static ssize_t ati_remote2_show_channel_mask(struct device *dev,
704                                              struct device_attribute *attr,
705                                              char *buf)
706 {
707         struct usb_device *udev = to_usb_device(dev);
708         struct usb_interface *intf = usb_ifnum_to_if(udev, 0);
709         struct ati_remote2 *ar2 = usb_get_intfdata(intf);
710
711         return sprintf(buf, "0x%04x\n", ar2->channel_mask);
712 }
713
714 static ssize_t ati_remote2_store_channel_mask(struct device *dev,
715                                               struct device_attribute *attr,
716                                               const char *buf, size_t count)
717 {
718         struct usb_device *udev = to_usb_device(dev);
719         struct usb_interface *intf = usb_ifnum_to_if(udev, 0);
720         struct ati_remote2 *ar2 = usb_get_intfdata(intf);
721         unsigned int mask;
722         int r;
723
724         r = kstrtouint(buf, 0, &mask);
725         if (r)
726                 return r;
727
728         if (mask & ~ATI_REMOTE2_MAX_CHANNEL_MASK)
729                 return -EINVAL;
730
731         r = usb_autopm_get_interface(ar2->intf[0]);
732         if (r) {
733                 dev_err(&ar2->intf[0]->dev,
734                         "%s(): usb_autopm_get_interface() = %d\n", __func__, r);
735                 return r;
736         }
737
738         mutex_lock(&ati_remote2_mutex);
739
740         if (mask != ar2->channel_mask) {
741                 r = ati_remote2_setup(ar2, mask);
742                 if (!r)
743                         ar2->channel_mask = mask;
744         }
745
746         mutex_unlock(&ati_remote2_mutex);
747
748         usb_autopm_put_interface(ar2->intf[0]);
749
750         return r ? r : count;
751 }
752
753 static ssize_t ati_remote2_show_mode_mask(struct device *dev,
754                                           struct device_attribute *attr,
755                                           char *buf)
756 {
757         struct usb_device *udev = to_usb_device(dev);
758         struct usb_interface *intf = usb_ifnum_to_if(udev, 0);
759         struct ati_remote2 *ar2 = usb_get_intfdata(intf);
760
761         return sprintf(buf, "0x%02x\n", ar2->mode_mask);
762 }
763
764 static ssize_t ati_remote2_store_mode_mask(struct device *dev,
765                                            struct device_attribute *attr,
766                                            const char *buf, size_t count)
767 {
768         struct usb_device *udev = to_usb_device(dev);
769         struct usb_interface *intf = usb_ifnum_to_if(udev, 0);
770         struct ati_remote2 *ar2 = usb_get_intfdata(intf);
771         unsigned int mask;
772         int err;
773
774         err = kstrtouint(buf, 0, &mask);
775         if (err)
776                 return err;
777
778         if (mask & ~ATI_REMOTE2_MAX_MODE_MASK)
779                 return -EINVAL;
780
781         ar2->mode_mask = mask;
782
783         return count;
784 }
785
786 static DEVICE_ATTR(channel_mask, 0644, ati_remote2_show_channel_mask,
787                    ati_remote2_store_channel_mask);
788
789 static DEVICE_ATTR(mode_mask, 0644, ati_remote2_show_mode_mask,
790                    ati_remote2_store_mode_mask);
791
792 static struct attribute *ati_remote2_attrs[] = {
793         &dev_attr_channel_mask.attr,
794         &dev_attr_mode_mask.attr,
795         NULL,
796 };
797
798 static struct attribute_group ati_remote2_attr_group = {
799         .attrs = ati_remote2_attrs,
800 };
801
802 static int ati_remote2_probe(struct usb_interface *interface, const struct usb_device_id *id)
803 {
804         struct usb_device *udev = interface_to_usbdev(interface);
805         struct usb_host_interface *alt = interface->cur_altsetting;
806         struct ati_remote2 *ar2;
807         int r;
808
809         if (alt->desc.bInterfaceNumber)
810                 return -ENODEV;
811
812         ar2 = kzalloc(sizeof (struct ati_remote2), GFP_KERNEL);
813         if (!ar2)
814                 return -ENOMEM;
815
816         ar2->udev = udev;
817
818         /* Sanity check, first interface must have an endpoint */
819         if (alt->desc.bNumEndpoints < 1 || !alt->endpoint) {
820                 dev_err(&interface->dev,
821                         "%s(): interface 0 must have an endpoint\n", __func__);
822                 r = -ENODEV;
823                 goto fail1;
824         }
825         ar2->intf[0] = interface;
826         ar2->ep[0] = &alt->endpoint[0].desc;
827
828         /* Sanity check, the device must have two interfaces */
829         ar2->intf[1] = usb_ifnum_to_if(udev, 1);
830         if ((udev->actconfig->desc.bNumInterfaces < 2) || !ar2->intf[1]) {
831                 dev_err(&interface->dev, "%s(): need 2 interfaces, found %d\n",
832                         __func__, udev->actconfig->desc.bNumInterfaces);
833                 r = -ENODEV;
834                 goto fail1;
835         }
836
837         r = usb_driver_claim_interface(&ati_remote2_driver, ar2->intf[1], ar2);
838         if (r)
839                 goto fail1;
840
841         /* Sanity check, second interface must have an endpoint */
842         alt = ar2->intf[1]->cur_altsetting;
843         if (alt->desc.bNumEndpoints < 1 || !alt->endpoint) {
844                 dev_err(&interface->dev,
845                         "%s(): interface 1 must have an endpoint\n", __func__);
846                 r = -ENODEV;
847                 goto fail2;
848         }
849         ar2->ep[1] = &alt->endpoint[0].desc;
850
851         r = ati_remote2_urb_init(ar2);
852         if (r)
853                 goto fail3;
854
855         ar2->channel_mask = channel_mask;
856         ar2->mode_mask = mode_mask;
857
858         r = ati_remote2_setup(ar2, ar2->channel_mask);
859         if (r)
860                 goto fail3;
861
862         usb_make_path(udev, ar2->phys, sizeof(ar2->phys));
863         strlcat(ar2->phys, "/input0", sizeof(ar2->phys));
864
865         strlcat(ar2->name, "ATI Remote Wonder II", sizeof(ar2->name));
866
867         r = sysfs_create_group(&udev->dev.kobj, &ati_remote2_attr_group);
868         if (r)
869                 goto fail3;
870
871         r = ati_remote2_input_init(ar2);
872         if (r)
873                 goto fail4;
874
875         usb_set_intfdata(interface, ar2);
876
877         interface->needs_remote_wakeup = 1;
878
879         return 0;
880
881  fail4:
882         sysfs_remove_group(&udev->dev.kobj, &ati_remote2_attr_group);
883  fail3:
884         ati_remote2_urb_cleanup(ar2);
885  fail2:
886         usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]);
887  fail1:
888         kfree(ar2);
889
890         return r;
891 }
892
893 static void ati_remote2_disconnect(struct usb_interface *interface)
894 {
895         struct ati_remote2 *ar2;
896         struct usb_host_interface *alt = interface->cur_altsetting;
897
898         if (alt->desc.bInterfaceNumber)
899                 return;
900
901         ar2 = usb_get_intfdata(interface);
902         usb_set_intfdata(interface, NULL);
903
904         input_unregister_device(ar2->idev);
905
906         sysfs_remove_group(&ar2->udev->dev.kobj, &ati_remote2_attr_group);
907
908         ati_remote2_urb_cleanup(ar2);
909
910         usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]);
911
912         kfree(ar2);
913 }
914
915 static int ati_remote2_suspend(struct usb_interface *interface,
916                                pm_message_t message)
917 {
918         struct ati_remote2 *ar2;
919         struct usb_host_interface *alt = interface->cur_altsetting;
920
921         if (alt->desc.bInterfaceNumber)
922                 return 0;
923
924         ar2 = usb_get_intfdata(interface);
925
926         dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
927
928         mutex_lock(&ati_remote2_mutex);
929
930         if (ar2->flags & ATI_REMOTE2_OPENED)
931                 ati_remote2_kill_urbs(ar2);
932
933         ar2->flags |= ATI_REMOTE2_SUSPENDED;
934
935         mutex_unlock(&ati_remote2_mutex);
936
937         return 0;
938 }
939
940 static int ati_remote2_resume(struct usb_interface *interface)
941 {
942         struct ati_remote2 *ar2;
943         struct usb_host_interface *alt = interface->cur_altsetting;
944         int r = 0;
945
946         if (alt->desc.bInterfaceNumber)
947                 return 0;
948
949         ar2 = usb_get_intfdata(interface);
950
951         dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
952
953         mutex_lock(&ati_remote2_mutex);
954
955         if (ar2->flags & ATI_REMOTE2_OPENED)
956                 r = ati_remote2_submit_urbs(ar2);
957
958         if (!r)
959                 ar2->flags &= ~ATI_REMOTE2_SUSPENDED;
960
961         mutex_unlock(&ati_remote2_mutex);
962
963         return r;
964 }
965
966 static int ati_remote2_reset_resume(struct usb_interface *interface)
967 {
968         struct ati_remote2 *ar2;
969         struct usb_host_interface *alt = interface->cur_altsetting;
970         int r = 0;
971
972         if (alt->desc.bInterfaceNumber)
973                 return 0;
974
975         ar2 = usb_get_intfdata(interface);
976
977         dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
978
979         mutex_lock(&ati_remote2_mutex);
980
981         r = ati_remote2_setup(ar2, ar2->channel_mask);
982         if (r)
983                 goto out;
984
985         if (ar2->flags & ATI_REMOTE2_OPENED)
986                 r = ati_remote2_submit_urbs(ar2);
987
988         if (!r)
989                 ar2->flags &= ~ATI_REMOTE2_SUSPENDED;
990
991  out:
992         mutex_unlock(&ati_remote2_mutex);
993
994         return r;
995 }
996
997 static int ati_remote2_pre_reset(struct usb_interface *interface)
998 {
999         struct ati_remote2 *ar2;
1000         struct usb_host_interface *alt = interface->cur_altsetting;
1001
1002         if (alt->desc.bInterfaceNumber)
1003                 return 0;
1004
1005         ar2 = usb_get_intfdata(interface);
1006
1007         dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
1008
1009         mutex_lock(&ati_remote2_mutex);
1010
1011         if (ar2->flags == ATI_REMOTE2_OPENED)
1012                 ati_remote2_kill_urbs(ar2);
1013
1014         return 0;
1015 }
1016
1017 static int ati_remote2_post_reset(struct usb_interface *interface)
1018 {
1019         struct ati_remote2 *ar2;
1020         struct usb_host_interface *alt = interface->cur_altsetting;
1021         int r = 0;
1022
1023         if (alt->desc.bInterfaceNumber)
1024                 return 0;
1025
1026         ar2 = usb_get_intfdata(interface);
1027
1028         dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
1029
1030         if (ar2->flags == ATI_REMOTE2_OPENED)
1031                 r = ati_remote2_submit_urbs(ar2);
1032
1033         mutex_unlock(&ati_remote2_mutex);
1034
1035         return r;
1036 }
1037
1038 module_usb_driver(ati_remote2_driver);