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