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 
ati_remote2_set_mask(const char * val,const struct kernel_param * kp,unsigned int max)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 
ati_remote2_set_channel_mask(const char * val,const struct kernel_param * kp)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 
ati_remote2_get_channel_mask(char * buffer,const struct kernel_param * kp)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 
ati_remote2_set_mode_mask(const char * val,const struct kernel_param * kp)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 
ati_remote2_get_mode_mask(char * buffer,const struct kernel_param * kp)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 
ati_remote2_submit_urbs(struct ati_remote2 * ar2)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 
ati_remote2_kill_urbs(struct ati_remote2 * ar2)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 
ati_remote2_open(struct input_dev * idev)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 
ati_remote2_close(struct input_dev * idev)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 
ati_remote2_input_mouse(struct ati_remote2 * ar2)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 
ati_remote2_lookup(unsigned int hw_code)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 
ati_remote2_input_key(struct ati_remote2 * ar2)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 
ati_remote2_complete_mouse(struct urb * urb)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 
ati_remote2_complete_key(struct urb * urb)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 
ati_remote2_getkeycode(struct input_dev * idev,struct input_keymap_entry * ke)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 
ati_remote2_setkeycode(struct input_dev * idev,const struct input_keymap_entry * ke,unsigned int * old_keycode)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 
ati_remote2_input_init(struct ati_remote2 * ar2)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 
ati_remote2_urb_init(struct ati_remote2 * ar2)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 
ati_remote2_urb_cleanup(struct ati_remote2 * ar2)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 
ati_remote2_setup(struct ati_remote2 * ar2,unsigned int ch_mask)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 
ati_remote2_show_channel_mask(struct device * dev,struct device_attribute * attr,char * buf)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 
ati_remote2_store_channel_mask(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)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 
ati_remote2_show_mode_mask(struct device * dev,struct device_attribute * attr,char * buf)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 
ati_remote2_store_mode_mask(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)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 
ati_remote2_probe(struct usb_interface * interface,const struct usb_device_id * id)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 
ati_remote2_disconnect(struct usb_interface * interface)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 
ati_remote2_suspend(struct usb_interface * interface,pm_message_t message)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 
ati_remote2_resume(struct usb_interface * interface)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 
ati_remote2_reset_resume(struct usb_interface * interface)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 
ati_remote2_pre_reset(struct usb_interface * interface)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 
ati_remote2_post_reset(struct usb_interface * interface)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);
1039