• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/hid/usbhid/
1/*
2 *  USB HID support for Linux
3 *
4 *  Copyright (c) 1999 Andreas Gal
5 *  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
6 *  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
7 *  Copyright (c) 2007-2008 Oliver Neukum
8 *  Copyright (c) 2006-2010 Jiri Kosina
9 */
10
11/*
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
15 * any later version.
16 */
17
18#include <linux/module.h>
19#include <linux/slab.h>
20#include <linux/init.h>
21#include <linux/kernel.h>
22#include <linux/list.h>
23#include <linux/mm.h>
24#include <linux/mutex.h>
25#include <linux/spinlock.h>
26#include <asm/unaligned.h>
27#include <asm/byteorder.h>
28#include <linux/input.h>
29#include <linux/wait.h>
30#include <linux/workqueue.h>
31
32#include <linux/usb.h>
33
34#include <linux/hid.h>
35#include <linux/hiddev.h>
36#include <linux/hid-debug.h>
37#include <linux/hidraw.h>
38#include "usbhid.h"
39
40/*
41 * Version Information
42 */
43
44#define DRIVER_DESC "USB HID core driver"
45#define DRIVER_LICENSE "GPL"
46
47/*
48 * Module parameters.
49 */
50
51static unsigned int hid_mousepoll_interval;
52module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644);
53MODULE_PARM_DESC(mousepoll, "Polling interval of mice");
54
55static unsigned int ignoreled;
56module_param_named(ignoreled, ignoreled, uint, 0644);
57MODULE_PARM_DESC(ignoreled, "Autosuspend with active leds");
58
59/* Quirks specified at module load time */
60static char *quirks_param[MAX_USBHID_BOOT_QUIRKS] = { [ 0 ... (MAX_USBHID_BOOT_QUIRKS - 1) ] = NULL };
61module_param_array_named(quirks, quirks_param, charp, NULL, 0444);
62MODULE_PARM_DESC(quirks, "Add/modify USB HID quirks by specifying "
63		" quirks=vendorID:productID:quirks"
64		" where vendorID, productID, and quirks are all in"
65		" 0x-prefixed hex");
66/*
67 * Input submission and I/O error handler.
68 */
69static DEFINE_MUTEX(hid_open_mut);
70static struct workqueue_struct *resumption_waker;
71
72static void hid_io_error(struct hid_device *hid);
73static int hid_submit_out(struct hid_device *hid);
74static int hid_submit_ctrl(struct hid_device *hid);
75static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid);
76
77/* Start up the input URB */
78static int hid_start_in(struct hid_device *hid)
79{
80	unsigned long flags;
81	int rc = 0;
82	struct usbhid_device *usbhid = hid->driver_data;
83
84	spin_lock_irqsave(&usbhid->lock, flags);
85	if (hid->open > 0 &&
86			!test_bit(HID_DISCONNECTED, &usbhid->iofl) &&
87			!test_bit(HID_REPORTED_IDLE, &usbhid->iofl) &&
88			!test_and_set_bit(HID_IN_RUNNING, &usbhid->iofl)) {
89		rc = usb_submit_urb(usbhid->urbin, GFP_ATOMIC);
90		if (rc != 0)
91			clear_bit(HID_IN_RUNNING, &usbhid->iofl);
92	}
93	spin_unlock_irqrestore(&usbhid->lock, flags);
94	return rc;
95}
96
97/* I/O retry timer routine */
98static void hid_retry_timeout(unsigned long _hid)
99{
100	struct hid_device *hid = (struct hid_device *) _hid;
101	struct usbhid_device *usbhid = hid->driver_data;
102
103	dev_dbg(&usbhid->intf->dev, "retrying intr urb\n");
104	if (hid_start_in(hid))
105		hid_io_error(hid);
106}
107
108/* Workqueue routine to reset the device or clear a halt */
109static void hid_reset(struct work_struct *work)
110{
111	struct usbhid_device *usbhid =
112		container_of(work, struct usbhid_device, reset_work);
113	struct hid_device *hid = usbhid->hid;
114	int rc = 0;
115
116	if (test_bit(HID_CLEAR_HALT, &usbhid->iofl)) {
117		dev_dbg(&usbhid->intf->dev, "clear halt\n");
118		rc = usb_clear_halt(hid_to_usb_dev(hid), usbhid->urbin->pipe);
119		clear_bit(HID_CLEAR_HALT, &usbhid->iofl);
120		hid_start_in(hid);
121	}
122
123	else if (test_bit(HID_RESET_PENDING, &usbhid->iofl)) {
124		dev_dbg(&usbhid->intf->dev, "resetting device\n");
125		rc = usb_lock_device_for_reset(hid_to_usb_dev(hid), usbhid->intf);
126		if (rc == 0) {
127			rc = usb_reset_device(hid_to_usb_dev(hid));
128			usb_unlock_device(hid_to_usb_dev(hid));
129		}
130		clear_bit(HID_RESET_PENDING, &usbhid->iofl);
131	}
132
133	switch (rc) {
134	case 0:
135		if (!test_bit(HID_IN_RUNNING, &usbhid->iofl))
136			hid_io_error(hid);
137		break;
138	default:
139		err_hid("can't reset device, %s-%s/input%d, status %d",
140				hid_to_usb_dev(hid)->bus->bus_name,
141				hid_to_usb_dev(hid)->devpath,
142				usbhid->ifnum, rc);
143		/* FALLTHROUGH */
144	case -EHOSTUNREACH:
145	case -ENODEV:
146	case -EINTR:
147		break;
148	}
149}
150
151/* Main I/O error handler */
152static void hid_io_error(struct hid_device *hid)
153{
154	unsigned long flags;
155	struct usbhid_device *usbhid = hid->driver_data;
156
157	spin_lock_irqsave(&usbhid->lock, flags);
158
159	/* Stop when disconnected */
160	if (test_bit(HID_DISCONNECTED, &usbhid->iofl))
161		goto done;
162
163	/* If it has been a while since the last error, we'll assume
164	 * this a brand new error and reset the retry timeout. */
165	if (time_after(jiffies, usbhid->stop_retry + HZ/2))
166		usbhid->retry_delay = 0;
167
168	/* When an error occurs, retry at increasing intervals */
169	if (usbhid->retry_delay == 0) {
170		usbhid->retry_delay = 13;	/* Then 26, 52, 104, 104, ... */
171		usbhid->stop_retry = jiffies + msecs_to_jiffies(1000);
172	} else if (usbhid->retry_delay < 100)
173		usbhid->retry_delay *= 2;
174
175	if (time_after(jiffies, usbhid->stop_retry)) {
176
177		/* Retries failed, so do a port reset */
178		if (!test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) {
179			schedule_work(&usbhid->reset_work);
180			goto done;
181		}
182	}
183
184	mod_timer(&usbhid->io_retry,
185			jiffies + msecs_to_jiffies(usbhid->retry_delay));
186done:
187	spin_unlock_irqrestore(&usbhid->lock, flags);
188}
189
190static void usbhid_mark_busy(struct usbhid_device *usbhid)
191{
192	struct usb_interface *intf = usbhid->intf;
193
194	usb_mark_last_busy(interface_to_usbdev(intf));
195}
196
197static int usbhid_restart_out_queue(struct usbhid_device *usbhid)
198{
199	struct hid_device *hid = usb_get_intfdata(usbhid->intf);
200	int kicked;
201
202	if (!hid)
203		return 0;
204
205	if ((kicked = (usbhid->outhead != usbhid->outtail))) {
206		dbg("Kicking head %d tail %d", usbhid->outhead, usbhid->outtail);
207		if (hid_submit_out(hid)) {
208			clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
209			wake_up(&usbhid->wait);
210		}
211	}
212	return kicked;
213}
214
215static int usbhid_restart_ctrl_queue(struct usbhid_device *usbhid)
216{
217	struct hid_device *hid = usb_get_intfdata(usbhid->intf);
218	int kicked;
219
220	WARN_ON(hid == NULL);
221	if (!hid)
222		return 0;
223
224	if ((kicked = (usbhid->ctrlhead != usbhid->ctrltail))) {
225		dbg("Kicking head %d tail %d", usbhid->ctrlhead, usbhid->ctrltail);
226		if (hid_submit_ctrl(hid)) {
227			clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
228			wake_up(&usbhid->wait);
229		}
230	}
231	return kicked;
232}
233
234/*
235 * Input interrupt completion handler.
236 */
237
238static void hid_irq_in(struct urb *urb)
239{
240	struct hid_device	*hid = urb->context;
241	struct usbhid_device 	*usbhid = hid->driver_data;
242	int			status;
243
244	switch (urb->status) {
245	case 0:			/* success */
246		usbhid_mark_busy(usbhid);
247		usbhid->retry_delay = 0;
248		hid_input_report(urb->context, HID_INPUT_REPORT,
249				 urb->transfer_buffer,
250				 urb->actual_length, 1);
251		/*
252		 * autosuspend refused while keys are pressed
253		 * because most keyboards don't wake up when
254		 * a key is released
255		 */
256		if (hid_check_keys_pressed(hid))
257			set_bit(HID_KEYS_PRESSED, &usbhid->iofl);
258		else
259			clear_bit(HID_KEYS_PRESSED, &usbhid->iofl);
260		break;
261	case -EPIPE:		/* stall */
262		usbhid_mark_busy(usbhid);
263		clear_bit(HID_IN_RUNNING, &usbhid->iofl);
264		set_bit(HID_CLEAR_HALT, &usbhid->iofl);
265		schedule_work(&usbhid->reset_work);
266		return;
267	case -ECONNRESET:	/* unlink */
268	case -ENOENT:
269	case -ESHUTDOWN:	/* unplug */
270		clear_bit(HID_IN_RUNNING, &usbhid->iofl);
271		return;
272	case -EILSEQ:		/* protocol error or unplug */
273	case -EPROTO:		/* protocol error or unplug */
274	case -ETIME:		/* protocol error or unplug */
275	case -ETIMEDOUT:	/* Should never happen, but... */
276		usbhid_mark_busy(usbhid);
277		clear_bit(HID_IN_RUNNING, &usbhid->iofl);
278		hid_io_error(hid);
279		return;
280	default:		/* error */
281		dev_warn(&urb->dev->dev, "input irq status %d  "
282				"received\n", urb->status);
283	}
284
285	status = usb_submit_urb(urb, GFP_ATOMIC);
286	if (status) {
287		clear_bit(HID_IN_RUNNING, &usbhid->iofl);
288		if (status != -EPERM) {
289			err_hid("can't resubmit intr, %s-%s/input%d, status %d",
290					hid_to_usb_dev(hid)->bus->bus_name,
291					hid_to_usb_dev(hid)->devpath,
292					usbhid->ifnum, status);
293			hid_io_error(hid);
294		}
295	}
296}
297
298static int hid_submit_out(struct hid_device *hid)
299{
300	struct hid_report *report;
301	char *raw_report;
302	struct usbhid_device *usbhid = hid->driver_data;
303
304	report = usbhid->out[usbhid->outtail].report;
305	raw_report = usbhid->out[usbhid->outtail].raw_report;
306
307	if (!test_bit(HID_REPORTED_IDLE, &usbhid->iofl)) {
308		usbhid->urbout->transfer_buffer_length = ((report->size - 1) >> 3) + 1 + (report->id > 0);
309		usbhid->urbout->dev = hid_to_usb_dev(hid);
310		memcpy(usbhid->outbuf, raw_report, usbhid->urbout->transfer_buffer_length);
311		kfree(raw_report);
312
313		dbg_hid("submitting out urb\n");
314
315		if (usb_submit_urb(usbhid->urbout, GFP_ATOMIC)) {
316			err_hid("usb_submit_urb(out) failed");
317			return -1;
318		}
319		usbhid->last_out = jiffies;
320	} else {
321		/*
322		 * queue work to wake up the device.
323		 * as the work queue is freezeable, this is safe
324		 * with respect to STD and STR
325		 */
326		queue_work(resumption_waker, &usbhid->restart_work);
327	}
328
329	return 0;
330}
331
332static int hid_submit_ctrl(struct hid_device *hid)
333{
334	struct hid_report *report;
335	unsigned char dir;
336	char *raw_report;
337	int len;
338	struct usbhid_device *usbhid = hid->driver_data;
339
340	report = usbhid->ctrl[usbhid->ctrltail].report;
341	raw_report = usbhid->ctrl[usbhid->ctrltail].raw_report;
342	dir = usbhid->ctrl[usbhid->ctrltail].dir;
343
344	if (!test_bit(HID_REPORTED_IDLE, &usbhid->iofl)) {
345		len = ((report->size - 1) >> 3) + 1 + (report->id > 0);
346		if (dir == USB_DIR_OUT) {
347			usbhid->urbctrl->pipe = usb_sndctrlpipe(hid_to_usb_dev(hid), 0);
348			usbhid->urbctrl->transfer_buffer_length = len;
349			memcpy(usbhid->ctrlbuf, raw_report, len);
350			kfree(raw_report);
351		} else {
352			int maxpacket, padlen;
353
354			usbhid->urbctrl->pipe = usb_rcvctrlpipe(hid_to_usb_dev(hid), 0);
355			maxpacket = usb_maxpacket(hid_to_usb_dev(hid), usbhid->urbctrl->pipe, 0);
356			if (maxpacket > 0) {
357				padlen = DIV_ROUND_UP(len, maxpacket);
358				padlen *= maxpacket;
359				if (padlen > usbhid->bufsize)
360					padlen = usbhid->bufsize;
361			} else
362				padlen = 0;
363			usbhid->urbctrl->transfer_buffer_length = padlen;
364		}
365		usbhid->urbctrl->dev = hid_to_usb_dev(hid);
366
367		usbhid->cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | dir;
368		usbhid->cr->bRequest = (dir == USB_DIR_OUT) ? HID_REQ_SET_REPORT : HID_REQ_GET_REPORT;
369		usbhid->cr->wValue = cpu_to_le16(((report->type + 1) << 8) | report->id);
370		usbhid->cr->wIndex = cpu_to_le16(usbhid->ifnum);
371		usbhid->cr->wLength = cpu_to_le16(len);
372
373		dbg_hid("submitting ctrl urb: %s wValue=0x%04x wIndex=0x%04x wLength=%u\n",
374			usbhid->cr->bRequest == HID_REQ_SET_REPORT ? "Set_Report" : "Get_Report",
375			usbhid->cr->wValue, usbhid->cr->wIndex, usbhid->cr->wLength);
376
377		if (usb_submit_urb(usbhid->urbctrl, GFP_ATOMIC)) {
378			err_hid("usb_submit_urb(ctrl) failed");
379			return -1;
380		}
381		usbhid->last_ctrl = jiffies;
382	} else {
383		/*
384		 * queue work to wake up the device.
385		 * as the work queue is freezeable, this is safe
386		 * with respect to STD and STR
387		 */
388		queue_work(resumption_waker, &usbhid->restart_work);
389	}
390
391	return 0;
392}
393
394/*
395 * Output interrupt completion handler.
396 */
397
398static void hid_irq_out(struct urb *urb)
399{
400	struct hid_device *hid = urb->context;
401	struct usbhid_device *usbhid = hid->driver_data;
402	unsigned long flags;
403	int unplug = 0;
404
405	switch (urb->status) {
406	case 0:			/* success */
407		break;
408	case -ESHUTDOWN:	/* unplug */
409		unplug = 1;
410	case -EILSEQ:		/* protocol error or unplug */
411	case -EPROTO:		/* protocol error or unplug */
412	case -ECONNRESET:	/* unlink */
413	case -ENOENT:
414		break;
415	default:		/* error */
416		dev_warn(&urb->dev->dev, "output irq status %d "
417				"received\n", urb->status);
418	}
419
420	spin_lock_irqsave(&usbhid->lock, flags);
421
422	if (unplug)
423		usbhid->outtail = usbhid->outhead;
424	else
425		usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1);
426
427	if (usbhid->outhead != usbhid->outtail) {
428		if (hid_submit_out(hid)) {
429			clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
430			wake_up(&usbhid->wait);
431		}
432		spin_unlock_irqrestore(&usbhid->lock, flags);
433		return;
434	}
435
436	clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
437	spin_unlock_irqrestore(&usbhid->lock, flags);
438	wake_up(&usbhid->wait);
439}
440
441/*
442 * Control pipe completion handler.
443 */
444
445static void hid_ctrl(struct urb *urb)
446{
447	struct hid_device *hid = urb->context;
448	struct usbhid_device *usbhid = hid->driver_data;
449	int unplug = 0, status = urb->status;
450
451	spin_lock(&usbhid->lock);
452
453	switch (status) {
454	case 0:			/* success */
455		if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN)
456			hid_input_report(urb->context,
457				usbhid->ctrl[usbhid->ctrltail].report->type,
458				urb->transfer_buffer, urb->actual_length, 0);
459		break;
460	case -ESHUTDOWN:	/* unplug */
461		unplug = 1;
462	case -EILSEQ:		/* protocol error or unplug */
463	case -EPROTO:		/* protocol error or unplug */
464	case -ECONNRESET:	/* unlink */
465	case -ENOENT:
466	case -EPIPE:		/* report not available */
467		break;
468	default:		/* error */
469		dev_warn(&urb->dev->dev, "ctrl urb status %d "
470				"received\n", status);
471	}
472
473	if (unplug)
474		usbhid->ctrltail = usbhid->ctrlhead;
475	else
476		usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1);
477
478	if (usbhid->ctrlhead != usbhid->ctrltail) {
479		if (hid_submit_ctrl(hid)) {
480			clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
481			wake_up(&usbhid->wait);
482		}
483		spin_unlock(&usbhid->lock);
484		return;
485	}
486
487	clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
488	spin_unlock(&usbhid->lock);
489	wake_up(&usbhid->wait);
490}
491
492static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *report,
493				   unsigned char dir)
494{
495	int head;
496	struct usbhid_device *usbhid = hid->driver_data;
497	int len = ((report->size - 1) >> 3) + 1 + (report->id > 0);
498
499	if ((hid->quirks & HID_QUIRK_NOGET) && dir == USB_DIR_IN)
500		return;
501
502	if (usbhid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) {
503		if ((head = (usbhid->outhead + 1) & (HID_OUTPUT_FIFO_SIZE - 1)) == usbhid->outtail) {
504			dev_warn(&hid->dev, "output queue full\n");
505			return;
506		}
507
508		usbhid->out[usbhid->outhead].raw_report = kmalloc(len, GFP_ATOMIC);
509		if (!usbhid->out[usbhid->outhead].raw_report) {
510			dev_warn(&hid->dev, "output queueing failed\n");
511			return;
512		}
513		hid_output_report(report, usbhid->out[usbhid->outhead].raw_report);
514		usbhid->out[usbhid->outhead].report = report;
515		usbhid->outhead = head;
516
517		if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl)) {
518			if (hid_submit_out(hid))
519				clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
520		} else {
521			/*
522			 * the queue is known to run
523			 * but an earlier request may be stuck
524			 * we may need to time out
525			 * no race because this is called under
526			 * spinlock
527			 */
528			if (time_after(jiffies, usbhid->last_out + HZ * 5))
529				usb_unlink_urb(usbhid->urbout);
530		}
531		return;
532	}
533
534	if ((head = (usbhid->ctrlhead + 1) & (HID_CONTROL_FIFO_SIZE - 1)) == usbhid->ctrltail) {
535		dev_warn(&hid->dev, "control queue full\n");
536		return;
537	}
538
539	if (dir == USB_DIR_OUT) {
540		usbhid->ctrl[usbhid->ctrlhead].raw_report = kmalloc(len, GFP_ATOMIC);
541		if (!usbhid->ctrl[usbhid->ctrlhead].raw_report) {
542			dev_warn(&hid->dev, "control queueing failed\n");
543			return;
544		}
545		hid_output_report(report, usbhid->ctrl[usbhid->ctrlhead].raw_report);
546	}
547	usbhid->ctrl[usbhid->ctrlhead].report = report;
548	usbhid->ctrl[usbhid->ctrlhead].dir = dir;
549	usbhid->ctrlhead = head;
550
551	if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl)) {
552		if (hid_submit_ctrl(hid))
553			clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
554	} else {
555		/*
556		 * the queue is known to run
557		 * but an earlier request may be stuck
558		 * we may need to time out
559		 * no race because this is called under
560		 * spinlock
561		 */
562		if (time_after(jiffies, usbhid->last_ctrl + HZ * 5))
563			usb_unlink_urb(usbhid->urbctrl);
564	}
565}
566
567void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char dir)
568{
569	struct usbhid_device *usbhid = hid->driver_data;
570	unsigned long flags;
571
572	spin_lock_irqsave(&usbhid->lock, flags);
573	__usbhid_submit_report(hid, report, dir);
574	spin_unlock_irqrestore(&usbhid->lock, flags);
575}
576EXPORT_SYMBOL_GPL(usbhid_submit_report);
577
578static int usb_hidinput_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
579{
580	struct hid_device *hid = input_get_drvdata(dev);
581	struct usbhid_device *usbhid = hid->driver_data;
582	struct hid_field *field;
583	unsigned long flags;
584	int offset;
585
586	if (type == EV_FF)
587		return input_ff_event(dev, type, code, value);
588
589	if (type != EV_LED)
590		return -1;
591
592	if ((offset = hidinput_find_field(hid, type, code, &field)) == -1) {
593		dev_warn(&dev->dev, "event field not found\n");
594		return -1;
595	}
596
597	hid_set_field(field, offset, value);
598	if (value) {
599		spin_lock_irqsave(&usbhid->lock, flags);
600		usbhid->ledcount++;
601		spin_unlock_irqrestore(&usbhid->lock, flags);
602	} else {
603		spin_lock_irqsave(&usbhid->lock, flags);
604		usbhid->ledcount--;
605		spin_unlock_irqrestore(&usbhid->lock, flags);
606	}
607	usbhid_submit_report(hid, field->report, USB_DIR_OUT);
608
609	return 0;
610}
611
612int usbhid_wait_io(struct hid_device *hid)
613{
614	struct usbhid_device *usbhid = hid->driver_data;
615
616	if (!wait_event_timeout(usbhid->wait,
617				(!test_bit(HID_CTRL_RUNNING, &usbhid->iofl) &&
618				!test_bit(HID_OUT_RUNNING, &usbhid->iofl)),
619					10*HZ)) {
620		dbg_hid("timeout waiting for ctrl or out queue to clear\n");
621		return -1;
622	}
623
624	return 0;
625}
626EXPORT_SYMBOL_GPL(usbhid_wait_io);
627
628static int hid_set_idle(struct usb_device *dev, int ifnum, int report, int idle)
629{
630	return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
631		HID_REQ_SET_IDLE, USB_TYPE_CLASS | USB_RECIP_INTERFACE, (idle << 8) | report,
632		ifnum, NULL, 0, USB_CTRL_SET_TIMEOUT);
633}
634
635static int hid_get_class_descriptor(struct usb_device *dev, int ifnum,
636		unsigned char type, void *buf, int size)
637{
638	int result, retries = 4;
639
640	memset(buf, 0, size);
641
642	do {
643		result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
644				USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN,
645				(type << 8), ifnum, buf, size, USB_CTRL_GET_TIMEOUT);
646		retries--;
647	} while (result < size && retries);
648	return result;
649}
650
651int usbhid_open(struct hid_device *hid)
652{
653	struct usbhid_device *usbhid = hid->driver_data;
654	int res;
655
656	mutex_lock(&hid_open_mut);
657	if (!hid->open++) {
658		res = usb_autopm_get_interface(usbhid->intf);
659		/* the device must be awake to reliable request remote wakeup */
660		if (res < 0) {
661			hid->open--;
662			mutex_unlock(&hid_open_mut);
663			return -EIO;
664		}
665		usbhid->intf->needs_remote_wakeup = 1;
666		if (hid_start_in(hid))
667			hid_io_error(hid);
668
669		usb_autopm_put_interface(usbhid->intf);
670	}
671	mutex_unlock(&hid_open_mut);
672	return 0;
673}
674
675void usbhid_close(struct hid_device *hid)
676{
677	struct usbhid_device *usbhid = hid->driver_data;
678
679	mutex_lock(&hid_open_mut);
680
681	/* protecting hid->open to make sure we don't restart
682	 * data acquistion due to a resumption we no longer
683	 * care about
684	 */
685	spin_lock_irq(&usbhid->lock);
686	if (!--hid->open) {
687		spin_unlock_irq(&usbhid->lock);
688		hid_cancel_delayed_stuff(usbhid);
689		usb_kill_urb(usbhid->urbin);
690		usbhid->intf->needs_remote_wakeup = 0;
691	} else {
692		spin_unlock_irq(&usbhid->lock);
693	}
694	mutex_unlock(&hid_open_mut);
695}
696
697/*
698 * Initialize all reports
699 */
700
701void usbhid_init_reports(struct hid_device *hid)
702{
703	struct hid_report *report;
704	struct usbhid_device *usbhid = hid->driver_data;
705	int err, ret;
706
707	list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].report_list, list)
708		usbhid_submit_report(hid, report, USB_DIR_IN);
709
710	list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].report_list, list)
711		usbhid_submit_report(hid, report, USB_DIR_IN);
712
713	err = 0;
714	ret = usbhid_wait_io(hid);
715	while (ret) {
716		err |= ret;
717		if (test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
718			usb_kill_urb(usbhid->urbctrl);
719		if (test_bit(HID_OUT_RUNNING, &usbhid->iofl))
720			usb_kill_urb(usbhid->urbout);
721		ret = usbhid_wait_io(hid);
722	}
723
724	if (err)
725		dev_warn(&hid->dev, "timeout initializing reports\n");
726}
727
728/*
729 * Reset LEDs which BIOS might have left on. For now, just NumLock (0x01).
730 */
731static int hid_find_field_early(struct hid_device *hid, unsigned int page,
732    unsigned int hid_code, struct hid_field **pfield)
733{
734	struct hid_report *report;
735	struct hid_field *field;
736	struct hid_usage *usage;
737	int i, j;
738
739	list_for_each_entry(report, &hid->report_enum[HID_OUTPUT_REPORT].report_list, list) {
740		for (i = 0; i < report->maxfield; i++) {
741			field = report->field[i];
742			for (j = 0; j < field->maxusage; j++) {
743				usage = &field->usage[j];
744				if ((usage->hid & HID_USAGE_PAGE) == page &&
745				    (usage->hid & 0xFFFF) == hid_code) {
746					*pfield = field;
747					return j;
748				}
749			}
750		}
751	}
752	return -1;
753}
754
755void usbhid_set_leds(struct hid_device *hid)
756{
757	struct hid_field *field;
758	int offset;
759
760	if ((offset = hid_find_field_early(hid, HID_UP_LED, 0x01, &field)) != -1) {
761		hid_set_field(field, offset, 0);
762		usbhid_submit_report(hid, field->report, USB_DIR_OUT);
763	}
764}
765EXPORT_SYMBOL_GPL(usbhid_set_leds);
766
767/*
768 * Traverse the supplied list of reports and find the longest
769 */
770static void hid_find_max_report(struct hid_device *hid, unsigned int type,
771		unsigned int *max)
772{
773	struct hid_report *report;
774	unsigned int size;
775
776	list_for_each_entry(report, &hid->report_enum[type].report_list, list) {
777		size = ((report->size - 1) >> 3) + 1 + hid->report_enum[type].numbered;
778		if (*max < size)
779			*max = size;
780	}
781}
782
783static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid)
784{
785	struct usbhid_device *usbhid = hid->driver_data;
786
787	usbhid->inbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
788			&usbhid->inbuf_dma);
789	usbhid->outbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
790			&usbhid->outbuf_dma);
791	usbhid->cr = kmalloc(sizeof(*usbhid->cr), GFP_KERNEL);
792	usbhid->ctrlbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
793			&usbhid->ctrlbuf_dma);
794	if (!usbhid->inbuf || !usbhid->outbuf || !usbhid->cr ||
795			!usbhid->ctrlbuf)
796		return -1;
797
798	return 0;
799}
800
801static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t count,
802		unsigned char report_type)
803{
804	struct usbhid_device *usbhid = hid->driver_data;
805	struct usb_device *dev = hid_to_usb_dev(hid);
806	struct usb_interface *intf = usbhid->intf;
807	struct usb_host_interface *interface = intf->cur_altsetting;
808	int ret;
809
810	if (usbhid->urbout) {
811		int actual_length;
812		int skipped_report_id = 0;
813		if (buf[0] == 0x0) {
814			/* Don't send the Report ID */
815			buf++;
816			count--;
817			skipped_report_id = 1;
818		}
819		ret = usb_interrupt_msg(dev, usbhid->urbout->pipe,
820			buf, count, &actual_length,
821			USB_CTRL_SET_TIMEOUT);
822		/* return the number of bytes transferred */
823		if (ret == 0) {
824			ret = actual_length;
825			/* count also the report id */
826			if (skipped_report_id)
827				ret++;
828		}
829	} else {
830		int skipped_report_id = 0;
831		int report_id = buf[0];
832		if (buf[0] == 0x0) {
833			/* Don't send the Report ID */
834			buf++;
835			count--;
836			skipped_report_id = 1;
837		}
838		ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
839			HID_REQ_SET_REPORT,
840			USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
841			((report_type + 1) << 8) | report_id,
842			interface->desc.bInterfaceNumber, buf, count,
843			USB_CTRL_SET_TIMEOUT);
844		/* count also the report id, if this was a numbered report. */
845		if (ret > 0 && skipped_report_id)
846			ret++;
847	}
848
849	return ret;
850}
851
852static void usbhid_restart_queues(struct usbhid_device *usbhid)
853{
854	if (usbhid->urbout)
855		usbhid_restart_out_queue(usbhid);
856	usbhid_restart_ctrl_queue(usbhid);
857}
858
859static void __usbhid_restart_queues(struct work_struct *work)
860{
861	struct usbhid_device *usbhid =
862		container_of(work, struct usbhid_device, restart_work);
863	int r;
864
865	r = usb_autopm_get_interface(usbhid->intf);
866	if (r < 0)
867		return;
868	usb_autopm_put_interface(usbhid->intf);
869}
870
871static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid)
872{
873	struct usbhid_device *usbhid = hid->driver_data;
874
875	usb_free_coherent(dev, usbhid->bufsize, usbhid->inbuf, usbhid->inbuf_dma);
876	usb_free_coherent(dev, usbhid->bufsize, usbhid->outbuf, usbhid->outbuf_dma);
877	kfree(usbhid->cr);
878	usb_free_coherent(dev, usbhid->bufsize, usbhid->ctrlbuf, usbhid->ctrlbuf_dma);
879}
880
881static int usbhid_parse(struct hid_device *hid)
882{
883	struct usb_interface *intf = to_usb_interface(hid->dev.parent);
884	struct usb_host_interface *interface = intf->cur_altsetting;
885	struct usb_device *dev = interface_to_usbdev (intf);
886	struct hid_descriptor *hdesc;
887	u32 quirks = 0;
888	unsigned int rsize = 0;
889	char *rdesc;
890	int ret, n;
891
892	quirks = usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor),
893			le16_to_cpu(dev->descriptor.idProduct));
894
895	if (quirks & HID_QUIRK_IGNORE)
896		return -ENODEV;
897
898	/* Many keyboards and mice don't like to be polled for reports,
899	 * so we will always set the HID_QUIRK_NOGET flag for them. */
900	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT) {
901		if (interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_KEYBOARD ||
902			interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
903				quirks |= HID_QUIRK_NOGET;
904	}
905
906	if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) &&
907	    (!interface->desc.bNumEndpoints ||
908	     usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) {
909		dbg_hid("class descriptor not present\n");
910		return -ENODEV;
911	}
912
913	hid->version = le16_to_cpu(hdesc->bcdHID);
914	hid->country = hdesc->bCountryCode;
915
916	for (n = 0; n < hdesc->bNumDescriptors; n++)
917		if (hdesc->desc[n].bDescriptorType == HID_DT_REPORT)
918			rsize = le16_to_cpu(hdesc->desc[n].wDescriptorLength);
919
920	if (!rsize || rsize > HID_MAX_DESCRIPTOR_SIZE) {
921		dbg_hid("weird size of report descriptor (%u)\n", rsize);
922		return -EINVAL;
923	}
924
925	if (!(rdesc = kmalloc(rsize, GFP_KERNEL))) {
926		dbg_hid("couldn't allocate rdesc memory\n");
927		return -ENOMEM;
928	}
929
930	hid_set_idle(dev, interface->desc.bInterfaceNumber, 0, 0);
931
932	ret = hid_get_class_descriptor(dev, interface->desc.bInterfaceNumber,
933			HID_DT_REPORT, rdesc, rsize);
934	if (ret < 0) {
935		dbg_hid("reading report descriptor failed\n");
936		kfree(rdesc);
937		goto err;
938	}
939
940	ret = hid_parse_report(hid, rdesc, rsize);
941	kfree(rdesc);
942	if (ret) {
943		dbg_hid("parsing report descriptor failed\n");
944		goto err;
945	}
946
947	hid->quirks |= quirks;
948
949	return 0;
950err:
951	return ret;
952}
953
954static int usbhid_start(struct hid_device *hid)
955{
956	struct usb_interface *intf = to_usb_interface(hid->dev.parent);
957	struct usb_host_interface *interface = intf->cur_altsetting;
958	struct usb_device *dev = interface_to_usbdev(intf);
959	struct usbhid_device *usbhid = hid->driver_data;
960	unsigned int n, insize = 0;
961	int ret;
962
963	clear_bit(HID_DISCONNECTED, &usbhid->iofl);
964
965	usbhid->bufsize = HID_MIN_BUFFER_SIZE;
966	hid_find_max_report(hid, HID_INPUT_REPORT, &usbhid->bufsize);
967	hid_find_max_report(hid, HID_OUTPUT_REPORT, &usbhid->bufsize);
968	hid_find_max_report(hid, HID_FEATURE_REPORT, &usbhid->bufsize);
969
970	if (usbhid->bufsize > HID_MAX_BUFFER_SIZE)
971		usbhid->bufsize = HID_MAX_BUFFER_SIZE;
972
973	hid_find_max_report(hid, HID_INPUT_REPORT, &insize);
974
975	if (insize > HID_MAX_BUFFER_SIZE)
976		insize = HID_MAX_BUFFER_SIZE;
977
978	if (hid_alloc_buffers(dev, hid)) {
979		ret = -ENOMEM;
980		goto fail;
981	}
982
983	for (n = 0; n < interface->desc.bNumEndpoints; n++) {
984		struct usb_endpoint_descriptor *endpoint;
985		int pipe;
986		int interval;
987
988		endpoint = &interface->endpoint[n].desc;
989		if (!usb_endpoint_xfer_int(endpoint))
990			continue;
991
992		interval = endpoint->bInterval;
993
994		/* Some vendors give fullspeed interval on highspeed devides */
995		if (hid->quirks & HID_QUIRK_FULLSPEED_INTERVAL &&
996		    dev->speed == USB_SPEED_HIGH) {
997			interval = fls(endpoint->bInterval*8);
998			printk(KERN_INFO "%s: Fixing fullspeed to highspeed interval: %d -> %d\n",
999			       hid->name, endpoint->bInterval, interval);
1000		}
1001
1002		/* Change the polling interval of mice. */
1003		if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0)
1004			interval = hid_mousepoll_interval;
1005
1006		ret = -ENOMEM;
1007		if (usb_endpoint_dir_in(endpoint)) {
1008			if (usbhid->urbin)
1009				continue;
1010			if (!(usbhid->urbin = usb_alloc_urb(0, GFP_KERNEL)))
1011				goto fail;
1012			pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
1013			usb_fill_int_urb(usbhid->urbin, dev, pipe, usbhid->inbuf, insize,
1014					 hid_irq_in, hid, interval);
1015			usbhid->urbin->transfer_dma = usbhid->inbuf_dma;
1016			usbhid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1017		} else {
1018			if (usbhid->urbout)
1019				continue;
1020			if (!(usbhid->urbout = usb_alloc_urb(0, GFP_KERNEL)))
1021				goto fail;
1022			pipe = usb_sndintpipe(dev, endpoint->bEndpointAddress);
1023			usb_fill_int_urb(usbhid->urbout, dev, pipe, usbhid->outbuf, 0,
1024					 hid_irq_out, hid, interval);
1025			usbhid->urbout->transfer_dma = usbhid->outbuf_dma;
1026			usbhid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1027		}
1028	}
1029
1030	usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL);
1031	if (!usbhid->urbctrl) {
1032		ret = -ENOMEM;
1033		goto fail;
1034	}
1035
1036	usb_fill_control_urb(usbhid->urbctrl, dev, 0, (void *) usbhid->cr,
1037			     usbhid->ctrlbuf, 1, hid_ctrl, hid);
1038	usbhid->urbctrl->transfer_dma = usbhid->ctrlbuf_dma;
1039	usbhid->urbctrl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1040
1041	if (!(hid->quirks & HID_QUIRK_NO_INIT_REPORTS))
1042		usbhid_init_reports(hid);
1043
1044	set_bit(HID_STARTED, &usbhid->iofl);
1045
1046	/* Some keyboards don't work until their LEDs have been set.
1047	 * Since BIOSes do set the LEDs, it must be safe for any device
1048	 * that supports the keyboard boot protocol.
1049	 * In addition, enable remote wakeup by default for all keyboard
1050	 * devices supporting the boot protocol.
1051	 */
1052	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
1053			interface->desc.bInterfaceProtocol ==
1054				USB_INTERFACE_PROTOCOL_KEYBOARD) {
1055		usbhid_set_leds(hid);
1056		device_set_wakeup_enable(&dev->dev, 1);
1057	}
1058	return 0;
1059
1060fail:
1061	usb_free_urb(usbhid->urbin);
1062	usb_free_urb(usbhid->urbout);
1063	usb_free_urb(usbhid->urbctrl);
1064	usbhid->urbin = NULL;
1065	usbhid->urbout = NULL;
1066	usbhid->urbctrl = NULL;
1067	hid_free_buffers(dev, hid);
1068	return ret;
1069}
1070
1071static void usbhid_stop(struct hid_device *hid)
1072{
1073	struct usbhid_device *usbhid = hid->driver_data;
1074
1075	if (WARN_ON(!usbhid))
1076		return;
1077
1078	clear_bit(HID_STARTED, &usbhid->iofl);
1079	spin_lock_irq(&usbhid->lock);	/* Sync with error handler */
1080	set_bit(HID_DISCONNECTED, &usbhid->iofl);
1081	spin_unlock_irq(&usbhid->lock);
1082	usb_kill_urb(usbhid->urbin);
1083	usb_kill_urb(usbhid->urbout);
1084	usb_kill_urb(usbhid->urbctrl);
1085
1086	hid_cancel_delayed_stuff(usbhid);
1087
1088	hid->claimed = 0;
1089
1090	usb_free_urb(usbhid->urbin);
1091	usb_free_urb(usbhid->urbctrl);
1092	usb_free_urb(usbhid->urbout);
1093	usbhid->urbin = NULL; /* don't mess up next start */
1094	usbhid->urbctrl = NULL;
1095	usbhid->urbout = NULL;
1096
1097	hid_free_buffers(hid_to_usb_dev(hid), hid);
1098}
1099
1100static int usbhid_power(struct hid_device *hid, int lvl)
1101{
1102	int r = 0;
1103
1104	switch (lvl) {
1105	case PM_HINT_FULLON:
1106		r = usbhid_get_power(hid);
1107		break;
1108	case PM_HINT_NORMAL:
1109		usbhid_put_power(hid);
1110		break;
1111	}
1112	return r;
1113}
1114
1115static struct hid_ll_driver usb_hid_driver = {
1116	.parse = usbhid_parse,
1117	.start = usbhid_start,
1118	.stop = usbhid_stop,
1119	.open = usbhid_open,
1120	.close = usbhid_close,
1121	.power = usbhid_power,
1122	.hidinput_input_event = usb_hidinput_input_event,
1123};
1124
1125static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id)
1126{
1127	struct usb_host_interface *interface = intf->cur_altsetting;
1128	struct usb_device *dev = interface_to_usbdev(intf);
1129	struct usbhid_device *usbhid;
1130	struct hid_device *hid;
1131	unsigned int n, has_in = 0;
1132	size_t len;
1133	int ret;
1134
1135	dbg_hid("HID probe called for ifnum %d\n",
1136			intf->altsetting->desc.bInterfaceNumber);
1137
1138	for (n = 0; n < interface->desc.bNumEndpoints; n++)
1139		if (usb_endpoint_is_int_in(&interface->endpoint[n].desc))
1140			has_in++;
1141	if (!has_in) {
1142		dev_err(&intf->dev, "couldn't find an input interrupt "
1143				"endpoint\n");
1144		return -ENODEV;
1145	}
1146
1147	hid = hid_allocate_device();
1148	if (IS_ERR(hid))
1149		return PTR_ERR(hid);
1150
1151	usb_set_intfdata(intf, hid);
1152	hid->ll_driver = &usb_hid_driver;
1153	hid->hid_output_raw_report = usbhid_output_raw_report;
1154	hid->ff_init = hid_pidff_init;
1155#ifdef CONFIG_USB_HIDDEV
1156	hid->hiddev_connect = hiddev_connect;
1157	hid->hiddev_disconnect = hiddev_disconnect;
1158	hid->hiddev_hid_event = hiddev_hid_event;
1159	hid->hiddev_report_event = hiddev_report_event;
1160#endif
1161	hid->dev.parent = &intf->dev;
1162	hid->bus = BUS_USB;
1163	hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
1164	hid->product = le16_to_cpu(dev->descriptor.idProduct);
1165	hid->name[0] = 0;
1166	hid->quirks = usbhid_lookup_quirk(hid->vendor, hid->product);
1167	if (intf->cur_altsetting->desc.bInterfaceProtocol ==
1168			USB_INTERFACE_PROTOCOL_MOUSE)
1169		hid->type = HID_TYPE_USBMOUSE;
1170
1171	if (dev->manufacturer)
1172		strlcpy(hid->name, dev->manufacturer, sizeof(hid->name));
1173
1174	if (dev->product) {
1175		if (dev->manufacturer)
1176			strlcat(hid->name, " ", sizeof(hid->name));
1177		strlcat(hid->name, dev->product, sizeof(hid->name));
1178	}
1179
1180	if (!strlen(hid->name))
1181		snprintf(hid->name, sizeof(hid->name), "HID %04x:%04x",
1182			 le16_to_cpu(dev->descriptor.idVendor),
1183			 le16_to_cpu(dev->descriptor.idProduct));
1184
1185	usb_make_path(dev, hid->phys, sizeof(hid->phys));
1186	strlcat(hid->phys, "/input", sizeof(hid->phys));
1187	len = strlen(hid->phys);
1188	if (len < sizeof(hid->phys) - 1)
1189		snprintf(hid->phys + len, sizeof(hid->phys) - len,
1190			 "%d", intf->altsetting[0].desc.bInterfaceNumber);
1191
1192	if (usb_string(dev, dev->descriptor.iSerialNumber, hid->uniq, 64) <= 0)
1193		hid->uniq[0] = 0;
1194
1195	usbhid = kzalloc(sizeof(*usbhid), GFP_KERNEL);
1196	if (usbhid == NULL) {
1197		ret = -ENOMEM;
1198		goto err;
1199	}
1200
1201	hid->driver_data = usbhid;
1202	usbhid->hid = hid;
1203	usbhid->intf = intf;
1204	usbhid->ifnum = interface->desc.bInterfaceNumber;
1205
1206	init_waitqueue_head(&usbhid->wait);
1207	INIT_WORK(&usbhid->reset_work, hid_reset);
1208	INIT_WORK(&usbhid->restart_work, __usbhid_restart_queues);
1209	setup_timer(&usbhid->io_retry, hid_retry_timeout, (unsigned long) hid);
1210	spin_lock_init(&usbhid->lock);
1211
1212	ret = hid_add_device(hid);
1213	if (ret) {
1214		if (ret != -ENODEV)
1215			dev_err(&intf->dev, "can't add hid device: %d\n", ret);
1216		goto err_free;
1217	}
1218
1219	return 0;
1220err_free:
1221	kfree(usbhid);
1222err:
1223	hid_destroy_device(hid);
1224	return ret;
1225}
1226
1227static void usbhid_disconnect(struct usb_interface *intf)
1228{
1229	struct hid_device *hid = usb_get_intfdata(intf);
1230	struct usbhid_device *usbhid;
1231
1232	if (WARN_ON(!hid))
1233		return;
1234
1235	usbhid = hid->driver_data;
1236	hid_destroy_device(hid);
1237	kfree(usbhid);
1238}
1239
1240static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid)
1241{
1242	del_timer_sync(&usbhid->io_retry);
1243	cancel_work_sync(&usbhid->restart_work);
1244	cancel_work_sync(&usbhid->reset_work);
1245}
1246
1247static void hid_cease_io(struct usbhid_device *usbhid)
1248{
1249	del_timer(&usbhid->io_retry);
1250	usb_kill_urb(usbhid->urbin);
1251	usb_kill_urb(usbhid->urbctrl);
1252	usb_kill_urb(usbhid->urbout);
1253}
1254
1255/* Treat USB reset pretty much the same as suspend/resume */
1256static int hid_pre_reset(struct usb_interface *intf)
1257{
1258	struct hid_device *hid = usb_get_intfdata(intf);
1259	struct usbhid_device *usbhid = hid->driver_data;
1260
1261	spin_lock_irq(&usbhid->lock);
1262	set_bit(HID_RESET_PENDING, &usbhid->iofl);
1263	spin_unlock_irq(&usbhid->lock);
1264	cancel_work_sync(&usbhid->restart_work);
1265	hid_cease_io(usbhid);
1266
1267	return 0;
1268}
1269
1270/* Same routine used for post_reset and reset_resume */
1271static int hid_post_reset(struct usb_interface *intf)
1272{
1273	struct usb_device *dev = interface_to_usbdev (intf);
1274	struct hid_device *hid = usb_get_intfdata(intf);
1275	struct usbhid_device *usbhid = hid->driver_data;
1276	int status;
1277
1278	spin_lock_irq(&usbhid->lock);
1279	clear_bit(HID_RESET_PENDING, &usbhid->iofl);
1280	spin_unlock_irq(&usbhid->lock);
1281	hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0);
1282	status = hid_start_in(hid);
1283	if (status < 0)
1284		hid_io_error(hid);
1285	usbhid_restart_queues(usbhid);
1286
1287	return 0;
1288}
1289
1290int usbhid_get_power(struct hid_device *hid)
1291{
1292	struct usbhid_device *usbhid = hid->driver_data;
1293
1294	return usb_autopm_get_interface(usbhid->intf);
1295}
1296
1297void usbhid_put_power(struct hid_device *hid)
1298{
1299	struct usbhid_device *usbhid = hid->driver_data;
1300
1301	usb_autopm_put_interface(usbhid->intf);
1302}
1303
1304
1305#ifdef CONFIG_PM
1306static int hid_suspend(struct usb_interface *intf, pm_message_t message)
1307{
1308	struct hid_device *hid = usb_get_intfdata(intf);
1309	struct usbhid_device *usbhid = hid->driver_data;
1310	int status;
1311
1312	if (message.event & PM_EVENT_AUTO) {
1313		spin_lock_irq(&usbhid->lock);	/* Sync with error handler */
1314		if (!test_bit(HID_RESET_PENDING, &usbhid->iofl)
1315		    && !test_bit(HID_CLEAR_HALT, &usbhid->iofl)
1316		    && !test_bit(HID_OUT_RUNNING, &usbhid->iofl)
1317		    && !test_bit(HID_CTRL_RUNNING, &usbhid->iofl)
1318		    && !test_bit(HID_KEYS_PRESSED, &usbhid->iofl)
1319		    && (!usbhid->ledcount || ignoreled))
1320		{
1321			set_bit(HID_REPORTED_IDLE, &usbhid->iofl);
1322			spin_unlock_irq(&usbhid->lock);
1323			if (hid->driver && hid->driver->suspend) {
1324				status = hid->driver->suspend(hid, message);
1325				if (status < 0)
1326					return status;
1327			}
1328		} else {
1329			usbhid_mark_busy(usbhid);
1330			spin_unlock_irq(&usbhid->lock);
1331			return -EBUSY;
1332		}
1333
1334	} else {
1335		if (hid->driver && hid->driver->suspend) {
1336			status = hid->driver->suspend(hid, message);
1337			if (status < 0)
1338				return status;
1339		}
1340		spin_lock_irq(&usbhid->lock);
1341		set_bit(HID_REPORTED_IDLE, &usbhid->iofl);
1342		spin_unlock_irq(&usbhid->lock);
1343		if (usbhid_wait_io(hid) < 0)
1344			return -EIO;
1345	}
1346
1347	if (!ignoreled && (message.event & PM_EVENT_AUTO)) {
1348		spin_lock_irq(&usbhid->lock);
1349		if (test_bit(HID_LED_ON, &usbhid->iofl)) {
1350			spin_unlock_irq(&usbhid->lock);
1351			usbhid_mark_busy(usbhid);
1352			return -EBUSY;
1353		}
1354		spin_unlock_irq(&usbhid->lock);
1355	}
1356
1357	hid_cancel_delayed_stuff(usbhid);
1358	hid_cease_io(usbhid);
1359
1360	if ((message.event & PM_EVENT_AUTO) &&
1361			test_bit(HID_KEYS_PRESSED, &usbhid->iofl)) {
1362		/* lost race against keypresses */
1363		status = hid_start_in(hid);
1364		if (status < 0)
1365			hid_io_error(hid);
1366		usbhid_mark_busy(usbhid);
1367		return -EBUSY;
1368	}
1369	dev_dbg(&intf->dev, "suspend\n");
1370	return 0;
1371}
1372
1373static int hid_resume(struct usb_interface *intf)
1374{
1375	struct hid_device *hid = usb_get_intfdata (intf);
1376	struct usbhid_device *usbhid = hid->driver_data;
1377	int status;
1378
1379	if (!test_bit(HID_STARTED, &usbhid->iofl))
1380		return 0;
1381
1382	clear_bit(HID_REPORTED_IDLE, &usbhid->iofl);
1383	usbhid_mark_busy(usbhid);
1384
1385	if (test_bit(HID_CLEAR_HALT, &usbhid->iofl) ||
1386	    test_bit(HID_RESET_PENDING, &usbhid->iofl))
1387		schedule_work(&usbhid->reset_work);
1388	usbhid->retry_delay = 0;
1389	status = hid_start_in(hid);
1390	if (status < 0)
1391		hid_io_error(hid);
1392	usbhid_restart_queues(usbhid);
1393
1394	if (status >= 0 && hid->driver && hid->driver->resume) {
1395		int ret = hid->driver->resume(hid);
1396		if (ret < 0)
1397			status = ret;
1398	}
1399	dev_dbg(&intf->dev, "resume status %d\n", status);
1400	return 0;
1401}
1402
1403static int hid_reset_resume(struct usb_interface *intf)
1404{
1405	struct hid_device *hid = usb_get_intfdata(intf);
1406	struct usbhid_device *usbhid = hid->driver_data;
1407	int status;
1408
1409	clear_bit(HID_REPORTED_IDLE, &usbhid->iofl);
1410	status = hid_post_reset(intf);
1411	if (status >= 0 && hid->driver && hid->driver->reset_resume) {
1412		int ret = hid->driver->reset_resume(hid);
1413		if (ret < 0)
1414			status = ret;
1415	}
1416	return status;
1417}
1418
1419#endif /* CONFIG_PM */
1420
1421static const struct usb_device_id hid_usb_ids[] = {
1422	{ .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
1423		.bInterfaceClass = USB_INTERFACE_CLASS_HID },
1424	{ }						/* Terminating entry */
1425};
1426
1427MODULE_DEVICE_TABLE (usb, hid_usb_ids);
1428
1429static struct usb_driver hid_driver = {
1430	.name =		"usbhid",
1431	.probe =	usbhid_probe,
1432	.disconnect =	usbhid_disconnect,
1433#ifdef CONFIG_PM
1434	.suspend =	hid_suspend,
1435	.resume =	hid_resume,
1436	.reset_resume =	hid_reset_resume,
1437#endif
1438	.pre_reset =	hid_pre_reset,
1439	.post_reset =	hid_post_reset,
1440	.id_table =	hid_usb_ids,
1441	.supports_autosuspend = 1,
1442};
1443
1444static const struct hid_device_id hid_usb_table[] = {
1445	{ HID_USB_DEVICE(HID_ANY_ID, HID_ANY_ID) },
1446	{ }
1447};
1448
1449struct usb_interface *usbhid_find_interface(int minor)
1450{
1451	return usb_find_interface(&hid_driver, minor);
1452}
1453
1454static struct hid_driver hid_usb_driver = {
1455	.name = "generic-usb",
1456	.id_table = hid_usb_table,
1457};
1458
1459static int __init hid_init(void)
1460{
1461	int retval = -ENOMEM;
1462
1463	resumption_waker = create_freezeable_workqueue("usbhid_resumer");
1464	if (!resumption_waker)
1465		goto no_queue;
1466	retval = hid_register_driver(&hid_usb_driver);
1467	if (retval)
1468		goto hid_register_fail;
1469	retval = usbhid_quirks_init(quirks_param);
1470	if (retval)
1471		goto usbhid_quirks_init_fail;
1472	retval = hiddev_init();
1473	if (retval)
1474		goto hiddev_init_fail;
1475	retval = usb_register(&hid_driver);
1476	if (retval)
1477		goto usb_register_fail;
1478	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1479
1480	return 0;
1481usb_register_fail:
1482	hiddev_exit();
1483hiddev_init_fail:
1484	usbhid_quirks_exit();
1485usbhid_quirks_init_fail:
1486	hid_unregister_driver(&hid_usb_driver);
1487hid_register_fail:
1488	destroy_workqueue(resumption_waker);
1489no_queue:
1490	return retval;
1491}
1492
1493static void __exit hid_exit(void)
1494{
1495	usb_deregister(&hid_driver);
1496	hiddev_exit();
1497	usbhid_quirks_exit();
1498	hid_unregister_driver(&hid_usb_driver);
1499	destroy_workqueue(resumption_waker);
1500}
1501
1502module_init(hid_init);
1503module_exit(hid_exit);
1504
1505MODULE_AUTHOR("Andreas Gal");
1506MODULE_AUTHOR("Vojtech Pavlik");
1507MODULE_AUTHOR("Jiri Kosina");
1508MODULE_DESCRIPTION(DRIVER_DESC);
1509MODULE_LICENSE(DRIVER_LICENSE);
1510