hid-core.c 42.6 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4
/*
 *  USB HID support for Linux
 *
 *  Copyright (c) 1999 Andreas Gal
5 6
 *  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
 *  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
7
 *  Copyright (c) 2007-2008 Oliver Neukum
J
Jiri Kosina 已提交
8
 *  Copyright (c) 2006-2010 Jiri Kosina
L
Linus Torvalds 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 */

/*
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 2 of the License, or (at your option)
 * any later version.
 */

#include <linux/module.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/mm.h>
24
#include <linux/mutex.h>
L
Linus Torvalds 已提交
25 26 27 28 29
#include <linux/spinlock.h>
#include <asm/unaligned.h>
#include <asm/byteorder.h>
#include <linux/input.h>
#include <linux/wait.h>
30
#include <linux/workqueue.h>
L
Linus Torvalds 已提交
31 32 33

#include <linux/usb.h>

34
#include <linux/hid.h>
L
Linus Torvalds 已提交
35
#include <linux/hiddev.h>
36
#include <linux/hid-debug.h>
J
Jiri Kosina 已提交
37
#include <linux/hidraw.h>
J
Jiri Kosina 已提交
38
#include "usbhid.h"
L
Linus Torvalds 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

/*
 * Version Information
 */

#define DRIVER_DESC "USB HID core driver"
#define DRIVER_LICENSE "GPL"

/*
 * Module parameters.
 */

static unsigned int hid_mousepoll_interval;
module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644);
MODULE_PARM_DESC(mousepoll, "Polling interval of mice");

55 56 57 58
static unsigned int ignoreled;
module_param_named(ignoreled, ignoreled, uint, 0644);
MODULE_PARM_DESC(ignoreled, "Autosuspend with active leds");

59 60 61 62 63 64 65
/* Quirks specified at module load time */
static char *quirks_param[MAX_USBHID_BOOT_QUIRKS] = { [ 0 ... (MAX_USBHID_BOOT_QUIRKS - 1) ] = NULL };
module_param_array_named(quirks, quirks_param, charp, NULL, 0444);
MODULE_PARM_DESC(quirks, "Add/modify USB HID quirks by specifying "
		" quirks=vendorID:productID:quirks"
		" where vendorID, productID, and quirks are all in"
		" 0x-prefixed hex");
L
Linus Torvalds 已提交
66
/*
67
 * Input submission and I/O error handler.
L
Linus Torvalds 已提交
68
 */
69
static DEFINE_MUTEX(hid_open_mut);
L
Linus Torvalds 已提交
70

71
static void hid_io_error(struct hid_device *hid);
72 73 74
static int hid_submit_out(struct hid_device *hid);
static int hid_submit_ctrl(struct hid_device *hid);
static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid);
75 76 77

/* Start up the input URB */
static int hid_start_in(struct hid_device *hid)
L
Linus Torvalds 已提交
78 79
{
	unsigned long flags;
80 81
	int rc = 0;
	struct usbhid_device *usbhid = hid->driver_data;
L
Linus Torvalds 已提交
82

83 84
	spin_lock_irqsave(&usbhid->lock, flags);
	if (hid->open > 0 &&
85
			!test_bit(HID_DISCONNECTED, &usbhid->iofl) &&
86
			!test_bit(HID_REPORTED_IDLE, &usbhid->iofl) &&
87 88 89 90
			!test_and_set_bit(HID_IN_RUNNING, &usbhid->iofl)) {
		rc = usb_submit_urb(usbhid->urbin, GFP_ATOMIC);
		if (rc != 0)
			clear_bit(HID_IN_RUNNING, &usbhid->iofl);
L
Linus Torvalds 已提交
91
	}
92
	spin_unlock_irqrestore(&usbhid->lock, flags);
93
	return rc;
L
Linus Torvalds 已提交
94 95
}

96 97
/* I/O retry timer routine */
static void hid_retry_timeout(unsigned long _hid)
L
Linus Torvalds 已提交
98
{
99
	struct hid_device *hid = (struct hid_device *) _hid;
J
Jiri Kosina 已提交
100
	struct usbhid_device *usbhid = hid->driver_data;
L
Linus Torvalds 已提交
101

102 103 104
	dev_dbg(&usbhid->intf->dev, "retrying intr urb\n");
	if (hid_start_in(hid))
		hid_io_error(hid);
L
Linus Torvalds 已提交
105 106
}

107 108
/* Workqueue routine to reset the device or clear a halt */
static void hid_reset(struct work_struct *work)
L
Linus Torvalds 已提交
109
{
110 111 112
	struct usbhid_device *usbhid =
		container_of(work, struct usbhid_device, reset_work);
	struct hid_device *hid = usbhid->hid;
113
	int rc = 0;
L
Linus Torvalds 已提交
114

115 116 117 118 119 120
	if (test_bit(HID_CLEAR_HALT, &usbhid->iofl)) {
		dev_dbg(&usbhid->intf->dev, "clear halt\n");
		rc = usb_clear_halt(hid_to_usb_dev(hid), usbhid->urbin->pipe);
		clear_bit(HID_CLEAR_HALT, &usbhid->iofl);
		hid_start_in(hid);
	}
L
Linus Torvalds 已提交
121

122 123
	else if (test_bit(HID_RESET_PENDING, &usbhid->iofl)) {
		dev_dbg(&usbhid->intf->dev, "resetting device\n");
124 125
		rc = usb_lock_device_for_reset(hid_to_usb_dev(hid), usbhid->intf);
		if (rc == 0) {
126
			rc = usb_reset_device(hid_to_usb_dev(hid));
127
			usb_unlock_device(hid_to_usb_dev(hid));
L
Linus Torvalds 已提交
128
		}
129
		clear_bit(HID_RESET_PENDING, &usbhid->iofl);
L
Linus Torvalds 已提交
130 131
	}

132 133 134 135 136 137
	switch (rc) {
	case 0:
		if (!test_bit(HID_IN_RUNNING, &usbhid->iofl))
			hid_io_error(hid);
		break;
	default:
138 139 140 141
		hid_err(hid, "can't reset device, %s-%s/input%d, status %d\n",
			hid_to_usb_dev(hid)->bus->bus_name,
			hid_to_usb_dev(hid)->devpath,
			usbhid->ifnum, rc);
142 143 144 145 146
		/* FALLTHROUGH */
	case -EHOSTUNREACH:
	case -ENODEV:
	case -EINTR:
		break;
L
Linus Torvalds 已提交
147 148 149
	}
}

150 151
/* Main I/O error handler */
static void hid_io_error(struct hid_device *hid)
152
{
153 154
	unsigned long flags;
	struct usbhid_device *usbhid = hid->driver_data;
155

156
	spin_lock_irqsave(&usbhid->lock, flags);
157

158
	/* Stop when disconnected */
159
	if (test_bit(HID_DISCONNECTED, &usbhid->iofl))
160
		goto done;
161

A
Alan Stern 已提交
162 163 164 165 166
	/* If it has been a while since the last error, we'll assume
	 * this a brand new error and reset the retry timeout. */
	if (time_after(jiffies, usbhid->stop_retry + HZ/2))
		usbhid->retry_delay = 0;

167 168 169 170 171 172
	/* When an error occurs, retry at increasing intervals */
	if (usbhid->retry_delay == 0) {
		usbhid->retry_delay = 13;	/* Then 26, 52, 104, 104, ... */
		usbhid->stop_retry = jiffies + msecs_to_jiffies(1000);
	} else if (usbhid->retry_delay < 100)
		usbhid->retry_delay *= 2;
173

174
	if (time_after(jiffies, usbhid->stop_retry)) {
J
Jiri Kosina 已提交
175

176 177 178 179 180
		/* Retries failed, so do a port reset */
		if (!test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) {
			schedule_work(&usbhid->reset_work);
			goto done;
		}
L
Linus Torvalds 已提交
181 182
	}

183 184 185
	mod_timer(&usbhid->io_retry,
			jiffies + msecs_to_jiffies(usbhid->retry_delay));
done:
186 187 188 189 190 191 192 193 194 195 196 197 198 199
	spin_unlock_irqrestore(&usbhid->lock, flags);
}

static void usbhid_mark_busy(struct usbhid_device *usbhid)
{
	struct usb_interface *intf = usbhid->intf;

	usb_mark_last_busy(interface_to_usbdev(intf));
}

static int usbhid_restart_out_queue(struct usbhid_device *usbhid)
{
	struct hid_device *hid = usb_get_intfdata(usbhid->intf);
	int kicked;
200
	int r;
201 202 203 204 205 206

	if (!hid)
		return 0;

	if ((kicked = (usbhid->outhead != usbhid->outtail))) {
		dbg("Kicking head %d tail %d", usbhid->outhead, usbhid->outtail);
207 208 209 210 211 212

		r = usb_autopm_get_interface_async(usbhid->intf);
		if (r < 0)
			return r;
		/* Asynchronously flush queue. */
		set_bit(HID_OUT_RUNNING, &usbhid->iofl);
213 214
		if (hid_submit_out(hid)) {
			clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
215
			usb_autopm_put_interface_async(usbhid->intf);
216
		}
217
		wake_up(&usbhid->wait);
218 219 220 221 222 223 224 225
	}
	return kicked;
}

static int usbhid_restart_ctrl_queue(struct usbhid_device *usbhid)
{
	struct hid_device *hid = usb_get_intfdata(usbhid->intf);
	int kicked;
226
	int r;
227 228 229 230 231 232 233

	WARN_ON(hid == NULL);
	if (!hid)
		return 0;

	if ((kicked = (usbhid->ctrlhead != usbhid->ctrltail))) {
		dbg("Kicking head %d tail %d", usbhid->ctrlhead, usbhid->ctrltail);
234 235 236 237 238 239

		r = usb_autopm_get_interface_async(usbhid->intf);
		if (r < 0)
			return r;
		/* Asynchronously flush queue. */
		set_bit(HID_CTRL_RUNNING, &usbhid->iofl);
240 241
		if (hid_submit_ctrl(hid)) {
			clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
242
			usb_autopm_put_interface_async(usbhid->intf);
243
		}
244
		wake_up(&usbhid->wait);
245 246
	}
	return kicked;
L
Linus Torvalds 已提交
247 248
}

249 250 251
/*
 * Input interrupt completion handler.
 */
252

253
static void hid_irq_in(struct urb *urb)
L
Linus Torvalds 已提交
254
{
255 256 257
	struct hid_device	*hid = urb->context;
	struct usbhid_device 	*usbhid = hid->driver_data;
	int			status;
L
Linus Torvalds 已提交
258

259
	switch (urb->status) {
J
Jiri Slaby 已提交
260
	case 0:			/* success */
261
		usbhid_mark_busy(usbhid);
J
Jiri Slaby 已提交
262 263 264 265
		usbhid->retry_delay = 0;
		hid_input_report(urb->context, HID_INPUT_REPORT,
				 urb->transfer_buffer,
				 urb->actual_length, 1);
266 267 268 269 270 271 272 273 274
		/*
		 * autosuspend refused while keys are pressed
		 * because most keyboards don't wake up when
		 * a key is released
		 */
		if (hid_check_keys_pressed(hid))
			set_bit(HID_KEYS_PRESSED, &usbhid->iofl);
		else
			clear_bit(HID_KEYS_PRESSED, &usbhid->iofl);
J
Jiri Slaby 已提交
275 276
		break;
	case -EPIPE:		/* stall */
277
		usbhid_mark_busy(usbhid);
J
Jiri Slaby 已提交
278 279 280 281 282 283 284 285 286 287 288 289 290
		clear_bit(HID_IN_RUNNING, &usbhid->iofl);
		set_bit(HID_CLEAR_HALT, &usbhid->iofl);
		schedule_work(&usbhid->reset_work);
		return;
	case -ECONNRESET:	/* unlink */
	case -ENOENT:
	case -ESHUTDOWN:	/* unplug */
		clear_bit(HID_IN_RUNNING, &usbhid->iofl);
		return;
	case -EILSEQ:		/* protocol error or unplug */
	case -EPROTO:		/* protocol error or unplug */
	case -ETIME:		/* protocol error or unplug */
	case -ETIMEDOUT:	/* Should never happen, but... */
291
		usbhid_mark_busy(usbhid);
J
Jiri Slaby 已提交
292 293 294 295
		clear_bit(HID_IN_RUNNING, &usbhid->iofl);
		hid_io_error(hid);
		return;
	default:		/* error */
296 297
		hid_warn(urb->dev, "input irq status %d received\n",
			 urb->status);
298
	}
L
Linus Torvalds 已提交
299

300 301 302 303
	status = usb_submit_urb(urb, GFP_ATOMIC);
	if (status) {
		clear_bit(HID_IN_RUNNING, &usbhid->iofl);
		if (status != -EPERM) {
304 305 306 307
			hid_err(hid, "can't resubmit intr, %s-%s/input%d, status %d\n",
				hid_to_usb_dev(hid)->bus->bus_name,
				hid_to_usb_dev(hid)->devpath,
				usbhid->ifnum, status);
308 309 310
			hid_io_error(hid);
		}
	}
L
Linus Torvalds 已提交
311 312
}

313
static int hid_submit_out(struct hid_device *hid)
L
Linus Torvalds 已提交
314
{
315
	struct hid_report *report;
316
	char *raw_report;
J
Jiri Kosina 已提交
317
	struct usbhid_device *usbhid = hid->driver_data;
318
	int r;
J
Jiri Kosina 已提交
319

320 321
	report = usbhid->out[usbhid->outtail].report;
	raw_report = usbhid->out[usbhid->outtail].raw_report;
L
Linus Torvalds 已提交
322

323 324 325 326 327 328
	usbhid->urbout->transfer_buffer_length = ((report->size - 1) >> 3) +
						 1 + (report->id > 0);
	usbhid->urbout->dev = hid_to_usb_dev(hid);
	memcpy(usbhid->outbuf, raw_report,
	       usbhid->urbout->transfer_buffer_length);
	kfree(raw_report);
329

330
	dbg_hid("submitting out urb\n");
331

332 333 334 335
	r = usb_submit_urb(usbhid->urbout, GFP_ATOMIC);
	if (r < 0) {
		hid_err(hid, "usb_submit_urb(out) failed: %d\n", r);
		return r;
336
	}
337
	usbhid->last_out = jiffies;
338 339 340 341
	return 0;
}

static int hid_submit_ctrl(struct hid_device *hid)
L
Linus Torvalds 已提交
342 343
{
	struct hid_report *report;
344
	unsigned char dir;
345
	char *raw_report;
346
	int len, r;
J
Jiri Kosina 已提交
347
	struct usbhid_device *usbhid = hid->driver_data;
L
Linus Torvalds 已提交
348

349
	report = usbhid->ctrl[usbhid->ctrltail].report;
350
	raw_report = usbhid->ctrl[usbhid->ctrltail].raw_report;
351
	dir = usbhid->ctrl[usbhid->ctrltail].dir;
L
Linus Torvalds 已提交
352

353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
	len = ((report->size - 1) >> 3) + 1 + (report->id > 0);
	if (dir == USB_DIR_OUT) {
		usbhid->urbctrl->pipe = usb_sndctrlpipe(hid_to_usb_dev(hid), 0);
		usbhid->urbctrl->transfer_buffer_length = len;
		memcpy(usbhid->ctrlbuf, raw_report, len);
		kfree(raw_report);
	} else {
		int maxpacket, padlen;

		usbhid->urbctrl->pipe = usb_rcvctrlpipe(hid_to_usb_dev(hid), 0);
		maxpacket = usb_maxpacket(hid_to_usb_dev(hid),
					  usbhid->urbctrl->pipe, 0);
		if (maxpacket > 0) {
			padlen = DIV_ROUND_UP(len, maxpacket);
			padlen *= maxpacket;
			if (padlen > usbhid->bufsize)
				padlen = usbhid->bufsize;
		} else
			padlen = 0;
		usbhid->urbctrl->transfer_buffer_length = padlen;
373
	}
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
	usbhid->urbctrl->dev = hid_to_usb_dev(hid);

	usbhid->cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | dir;
	usbhid->cr->bRequest = (dir == USB_DIR_OUT) ? HID_REQ_SET_REPORT :
						      HID_REQ_GET_REPORT;
	usbhid->cr->wValue = cpu_to_le16(((report->type + 1) << 8) |
					 report->id);
	usbhid->cr->wIndex = cpu_to_le16(usbhid->ifnum);
	usbhid->cr->wLength = cpu_to_le16(len);

	dbg_hid("submitting ctrl urb: %s wValue=0x%04x wIndex=0x%04x wLength=%u\n",
		usbhid->cr->bRequest == HID_REQ_SET_REPORT ? "Set_Report" :
							     "Get_Report",
		usbhid->cr->wValue, usbhid->cr->wIndex, usbhid->cr->wLength);

	r = usb_submit_urb(usbhid->urbctrl, GFP_ATOMIC);
	if (r < 0) {
		hid_err(hid, "usb_submit_urb(ctrl) failed: %d\n", r);
		return r;
	}
	usbhid->last_ctrl = jiffies;
395 396
	return 0;
}
L
Linus Torvalds 已提交
397

398 399 400
/*
 * Output interrupt completion handler.
 */
L
Linus Torvalds 已提交
401

402 403 404 405 406 407 408 409 410 411
static int irq_out_pump_restart(struct hid_device *hid)
{
	struct usbhid_device *usbhid = hid->driver_data;

	if (usbhid->outhead != usbhid->outtail)
		return hid_submit_out(hid);
	else
		return -1;
}

412 413 414 415 416 417
static void hid_irq_out(struct urb *urb)
{
	struct hid_device *hid = urb->context;
	struct usbhid_device *usbhid = hid->driver_data;
	unsigned long flags;
	int unplug = 0;
L
Linus Torvalds 已提交
418

419
	switch (urb->status) {
J
Jiri Slaby 已提交
420 421 422 423 424 425 426 427 428 429
	case 0:			/* success */
		break;
	case -ESHUTDOWN:	/* unplug */
		unplug = 1;
	case -EILSEQ:		/* protocol error or unplug */
	case -EPROTO:		/* protocol error or unplug */
	case -ECONNRESET:	/* unlink */
	case -ENOENT:
		break;
	default:		/* error */
430 431
		hid_warn(urb->dev, "output irq status %d received\n",
			 urb->status);
432
	}
L
Linus Torvalds 已提交
433

434
	spin_lock_irqsave(&usbhid->lock, flags);
L
Linus Torvalds 已提交
435

436 437 438 439
	if (unplug)
		usbhid->outtail = usbhid->outhead;
	else
		usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1);
L
Linus Torvalds 已提交
440

441
	if (!irq_out_pump_restart(hid)) {
442
		/* Successfully submitted next urb in queue */
443
		spin_unlock_irqrestore(&usbhid->lock, flags);
444 445
		return;
	}
L
Linus Torvalds 已提交
446

447
	clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
448
	spin_unlock_irqrestore(&usbhid->lock, flags);
449
	usb_autopm_put_interface_async(usbhid->intf);
J
Jiri Slaby 已提交
450
	wake_up(&usbhid->wait);
451
}
452

453 454 455
/*
 * Control pipe completion handler.
 */
456 457 458 459 460 461 462 463 464
static int ctrl_pump_restart(struct hid_device *hid)
{
	struct usbhid_device *usbhid = hid->driver_data;

	if (usbhid->ctrlhead != usbhid->ctrltail)
		return hid_submit_ctrl(hid);
	else
		return -1;
}
L
Linus Torvalds 已提交
465

466 467 468 469
static void hid_ctrl(struct urb *urb)
{
	struct hid_device *hid = urb->context;
	struct usbhid_device *usbhid = hid->driver_data;
470
	int unplug = 0, status = urb->status;
L
Linus Torvalds 已提交
471

472
	spin_lock(&usbhid->lock);
L
Linus Torvalds 已提交
473

474
	switch (status) {
J
Jiri Slaby 已提交
475 476 477 478 479 480 481 482 483 484 485 486 487 488 489
	case 0:			/* success */
		if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN)
			hid_input_report(urb->context,
				usbhid->ctrl[usbhid->ctrltail].report->type,
				urb->transfer_buffer, urb->actual_length, 0);
		break;
	case -ESHUTDOWN:	/* unplug */
		unplug = 1;
	case -EILSEQ:		/* protocol error or unplug */
	case -EPROTO:		/* protocol error or unplug */
	case -ECONNRESET:	/* unlink */
	case -ENOENT:
	case -EPIPE:		/* report not available */
		break;
	default:		/* error */
490
		hid_warn(urb->dev, "ctrl urb status %d received\n", status);
491
	}
L
Linus Torvalds 已提交
492

493 494 495 496
	if (unplug)
		usbhid->ctrltail = usbhid->ctrlhead;
	else
		usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1);
L
Linus Torvalds 已提交
497

498
	if (!ctrl_pump_restart(hid)) {
499
		/* Successfully submitted next urb in queue */
500
		spin_unlock(&usbhid->lock);
501 502
		return;
	}
L
Linus Torvalds 已提交
503

504
	clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
505
	spin_unlock(&usbhid->lock);
506
	usb_autopm_put_interface_async(usbhid->intf);
J
Jiri Slaby 已提交
507
	wake_up(&usbhid->wait);
508
}
L
Linus Torvalds 已提交
509

510 511
static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *report,
				   unsigned char dir)
512 513 514
{
	int head;
	struct usbhid_device *usbhid = hid->driver_data;
515
	int len = ((report->size - 1) >> 3) + 1 + (report->id > 0);
L
Linus Torvalds 已提交
516

517 518
	if ((hid->quirks & HID_QUIRK_NOGET) && dir == USB_DIR_IN)
		return;
519

520 521
	if (usbhid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) {
		if ((head = (usbhid->outhead + 1) & (HID_OUTPUT_FIFO_SIZE - 1)) == usbhid->outtail) {
522
			hid_warn(hid, "output queue full\n");
523 524
			return;
		}
L
Linus Torvalds 已提交
525

526 527
		usbhid->out[usbhid->outhead].raw_report = kmalloc(len, GFP_ATOMIC);
		if (!usbhid->out[usbhid->outhead].raw_report) {
528
			hid_warn(hid, "output queueing failed\n");
529 530 531 532
			return;
		}
		hid_output_report(report, usbhid->out[usbhid->outhead].raw_report);
		usbhid->out[usbhid->outhead].report = report;
533
		usbhid->outhead = head;
534

535 536 537 538 539 540 541 542 543 544 545
		/* Try to awake from autosuspend... */
		if (usb_autopm_get_interface_async(usbhid->intf) < 0)
			return;

		/*
		 * But if still suspended, leave urb enqueued, don't submit.
		 * Submission will occur if/when resume() drains the queue.
		 */
		if (test_bit(HID_REPORTED_IDLE, &usbhid->iofl))
			return;

546
		if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl)) {
547
			if (hid_submit_out(hid)) {
548
				clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
549 550 551
				usb_autopm_put_interface_async(usbhid->intf);
			}
			wake_up(&usbhid->wait);
552 553 554 555 556
		} else {
			/*
			 * the queue is known to run
			 * but an earlier request may be stuck
			 * we may need to time out
557
			 * no race because the URB is blocked under
558 559
			 * spinlock
			 */
560 561 562 563
			if (time_after(jiffies, usbhid->last_out + HZ * 5)) {
				usb_block_urb(usbhid->urbout);
				/* drop lock to not deadlock if the callback is called */
				spin_unlock(&usbhid->lock);
564
				usb_unlink_urb(usbhid->urbout);
565 566 567 568 569 570 571 572 573 574 575 576 577
				spin_lock(&usbhid->lock);
				usb_unblock_urb(usbhid->urbout);
				/*
				 * if the unlinking has already completed
				 * the pump will have been stopped
				 * it must be restarted now
				 */
				if (!test_bit(HID_OUT_RUNNING, &usbhid->iofl))
					if (!irq_out_pump_restart(hid))
						set_bit(HID_OUT_RUNNING, &usbhid->iofl);


			}
578
		}
579 580
		return;
	}
L
Linus Torvalds 已提交
581

582
	if ((head = (usbhid->ctrlhead + 1) & (HID_CONTROL_FIFO_SIZE - 1)) == usbhid->ctrltail) {
583
		hid_warn(hid, "control queue full\n");
584 585
		return;
	}
586

587 588 589
	if (dir == USB_DIR_OUT) {
		usbhid->ctrl[usbhid->ctrlhead].raw_report = kmalloc(len, GFP_ATOMIC);
		if (!usbhid->ctrl[usbhid->ctrlhead].raw_report) {
590
			hid_warn(hid, "control queueing failed\n");
591 592 593 594
			return;
		}
		hid_output_report(report, usbhid->ctrl[usbhid->ctrlhead].raw_report);
	}
595 596 597
	usbhid->ctrl[usbhid->ctrlhead].report = report;
	usbhid->ctrl[usbhid->ctrlhead].dir = dir;
	usbhid->ctrlhead = head;
598

599 600 601 602 603 604 605 606 607 608 609
	/* Try to awake from autosuspend... */
	if (usb_autopm_get_interface_async(usbhid->intf) < 0)
		return;

	/*
	 * If already suspended, leave urb enqueued, but don't submit.
	 * Submission will occur if/when resume() drains the queue.
	 */
	if (test_bit(HID_REPORTED_IDLE, &usbhid->iofl))
		return;

610
	if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl)) {
611
		if (hid_submit_ctrl(hid)) {
612
			clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
613 614 615
			usb_autopm_put_interface_async(usbhid->intf);
		}
		wake_up(&usbhid->wait);
616 617 618 619 620
	} else {
		/*
		 * the queue is known to run
		 * but an earlier request may be stuck
		 * we may need to time out
621
		 * no race because the URB is blocked under
622 623
		 * spinlock
		 */
624 625 626 627
		if (time_after(jiffies, usbhid->last_ctrl + HZ * 5)) {
			usb_block_urb(usbhid->urbctrl);
			/* drop lock to not deadlock if the callback is called */
			spin_unlock(&usbhid->lock);
628
			usb_unlink_urb(usbhid->urbctrl);
629 630 631 632 633 634 635 636 637 638 639
			spin_lock(&usbhid->lock);
			usb_unblock_urb(usbhid->urbctrl);
			/*
			 * if the unlinking has already completed
			 * the pump will have been stopped
			 * it must be restarted now
			 */
			if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
				if (!ctrl_pump_restart(hid))
					set_bit(HID_CTRL_RUNNING, &usbhid->iofl);
		}
640
	}
641
}
642

643 644 645 646
void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char dir)
{
	struct usbhid_device *usbhid = hid->driver_data;
	unsigned long flags;
647

648 649 650
	spin_lock_irqsave(&usbhid->lock, flags);
	__usbhid_submit_report(hid, report, dir);
	spin_unlock_irqrestore(&usbhid->lock, flags);
651
}
J
Jiri Slaby 已提交
652
EXPORT_SYMBOL_GPL(usbhid_submit_report);
653

654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677
/* Workqueue routine to send requests to change LEDs */
static void hid_led(struct work_struct *work)
{
	struct usbhid_device *usbhid =
		container_of(work, struct usbhid_device, led_work);
	struct hid_device *hid = usbhid->hid;
	struct hid_field *field;
	unsigned long flags;

	field = hidinput_get_led_field(hid);
	if (!field) {
		hid_warn(hid, "LED event field not found\n");
		return;
	}

	spin_lock_irqsave(&usbhid->lock, flags);
	if (!test_bit(HID_DISCONNECTED, &usbhid->iofl)) {
		usbhid->ledcount = hidinput_count_leds(hid);
		hid_dbg(usbhid->hid, "New ledcount = %u\n", usbhid->ledcount);
		__usbhid_submit_report(hid, field->report, USB_DIR_OUT);
	}
	spin_unlock_irqrestore(&usbhid->lock, flags);
}

678 679
static int usb_hidinput_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
{
680
	struct hid_device *hid = input_get_drvdata(dev);
681
	struct usbhid_device *usbhid = hid->driver_data;
682
	struct hid_field *field;
683
	unsigned long flags;
684
	int offset;
685

686 687
	if (type == EV_FF)
		return input_ff_event(dev, type, code, value);
688

689 690
	if (type != EV_LED)
		return -1;
691

692
	if ((offset = hidinput_find_field(hid, type, code, &field)) == -1) {
693
		hid_warn(dev, "event field not found\n");
694 695
		return -1;
	}
G
Geoff Levand 已提交
696

697
	spin_lock_irqsave(&usbhid->lock, flags);
698
	hid_set_field(field, offset, value);
699 700 701 702 703 704 705
	spin_unlock_irqrestore(&usbhid->lock, flags);

	/*
	 * Defer performing requested LED action.
	 * This is more likely gather all LED changes into a single URB.
	 */
	schedule_work(&usbhid->led_work);
L
Linus Torvalds 已提交
706

707 708
	return 0;
}
L
Linus Torvalds 已提交
709

710 711 712
int usbhid_wait_io(struct hid_device *hid)
{
	struct usbhid_device *usbhid = hid->driver_data;
713

J
Jiri Slaby 已提交
714 715 716
	if (!wait_event_timeout(usbhid->wait,
				(!test_bit(HID_CTRL_RUNNING, &usbhid->iofl) &&
				!test_bit(HID_OUT_RUNNING, &usbhid->iofl)),
717
					10*HZ)) {
718
		dbg_hid("timeout waiting for ctrl or out queue to clear\n");
719 720
		return -1;
	}
L
Linus Torvalds 已提交
721

722 723
	return 0;
}
724
EXPORT_SYMBOL_GPL(usbhid_wait_io);
725

726 727 728 729 730 731
static int hid_set_idle(struct usb_device *dev, int ifnum, int report, int idle)
{
	return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
		HID_REQ_SET_IDLE, USB_TYPE_CLASS | USB_RECIP_INTERFACE, (idle << 8) | report,
		ifnum, NULL, 0, USB_CTRL_SET_TIMEOUT);
}
L
Linus Torvalds 已提交
732

733 734 735 736
static int hid_get_class_descriptor(struct usb_device *dev, int ifnum,
		unsigned char type, void *buf, int size)
{
	int result, retries = 4;
L
Linus Torvalds 已提交
737

738
	memset(buf, 0, size);
L
Linus Torvalds 已提交
739

740 741 742 743 744 745 746 747
	do {
		result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
				USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN,
				(type << 8), ifnum, buf, size, USB_CTRL_GET_TIMEOUT);
		retries--;
	} while (result < size && retries);
	return result;
}
748

749 750
int usbhid_open(struct hid_device *hid)
{
751 752 753
	struct usbhid_device *usbhid = hid->driver_data;
	int res;

754
	mutex_lock(&hid_open_mut);
755 756
	if (!hid->open++) {
		res = usb_autopm_get_interface(usbhid->intf);
757
		/* the device must be awake to reliably request remote wakeup */
758 759
		if (res < 0) {
			hid->open--;
760
			mutex_unlock(&hid_open_mut);
761 762
			return -EIO;
		}
763 764 765 766 767
		usbhid->intf->needs_remote_wakeup = 1;
		if (hid_start_in(hid))
			hid_io_error(hid);
 
		usb_autopm_put_interface(usbhid->intf);
768
	}
769
	mutex_unlock(&hid_open_mut);
770 771
	return 0;
}
772

773 774 775
void usbhid_close(struct hid_device *hid)
{
	struct usbhid_device *usbhid = hid->driver_data;
776

777 778 779 780 781 782 783
	mutex_lock(&hid_open_mut);

	/* protecting hid->open to make sure we don't restart
	 * data acquistion due to a resumption we no longer
	 * care about
	 */
	spin_lock_irq(&usbhid->lock);
784
	if (!--hid->open) {
785
		spin_unlock_irq(&usbhid->lock);
786
		hid_cancel_delayed_stuff(usbhid);
787
		usb_kill_urb(usbhid->urbin);
788 789 790
		usbhid->intf->needs_remote_wakeup = 0;
	} else {
		spin_unlock_irq(&usbhid->lock);
791
	}
792
	mutex_unlock(&hid_open_mut);
793
}
794

795 796 797
/*
 * Initialize all reports
 */
798

799 800 801 802 803
void usbhid_init_reports(struct hid_device *hid)
{
	struct hid_report *report;
	struct usbhid_device *usbhid = hid->driver_data;
	int err, ret;
804

805 806
	list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].report_list, list)
		usbhid_submit_report(hid, report, USB_DIR_IN);
807

808 809
	list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].report_list, list)
		usbhid_submit_report(hid, report, USB_DIR_IN);
G
Geoff Levand 已提交
810

811 812 813 814 815 816 817 818 819 820
	err = 0;
	ret = usbhid_wait_io(hid);
	while (ret) {
		err |= ret;
		if (test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
			usb_kill_urb(usbhid->urbctrl);
		if (test_bit(HID_OUT_RUNNING, &usbhid->iofl))
			usb_kill_urb(usbhid->urbout);
		ret = usbhid_wait_io(hid);
	}
821

822
	if (err)
823
		hid_warn(hid, "timeout initializing reports\n");
824
}
L
Linus Torvalds 已提交
825

826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852
/*
 * Reset LEDs which BIOS might have left on. For now, just NumLock (0x01).
 */
static int hid_find_field_early(struct hid_device *hid, unsigned int page,
    unsigned int hid_code, struct hid_field **pfield)
{
	struct hid_report *report;
	struct hid_field *field;
	struct hid_usage *usage;
	int i, j;

	list_for_each_entry(report, &hid->report_enum[HID_OUTPUT_REPORT].report_list, list) {
		for (i = 0; i < report->maxfield; i++) {
			field = report->field[i];
			for (j = 0; j < field->maxusage; j++) {
				usage = &field->usage[j];
				if ((usage->hid & HID_USAGE_PAGE) == page &&
				    (usage->hid & 0xFFFF) == hid_code) {
					*pfield = field;
					return j;
				}
			}
		}
	}
	return -1;
}

J
Jiri Slaby 已提交
853
void usbhid_set_leds(struct hid_device *hid)
854 855 856 857 858 859 860 861 862
{
	struct hid_field *field;
	int offset;

	if ((offset = hid_find_field_early(hid, HID_UP_LED, 0x01, &field)) != -1) {
		hid_set_field(field, offset, 0);
		usbhid_submit_report(hid, field->report, USB_DIR_OUT);
	}
}
J
Jiri Slaby 已提交
863
EXPORT_SYMBOL_GPL(usbhid_set_leds);
864

865 866 867
/*
 * Traverse the supplied list of reports and find the longest
 */
J
Jiri Slaby 已提交
868 869
static void hid_find_max_report(struct hid_device *hid, unsigned int type,
		unsigned int *max)
870 871
{
	struct hid_report *report;
J
Jiri Slaby 已提交
872
	unsigned int size;
873 874

	list_for_each_entry(report, &hid->report_enum[type].report_list, list) {
875
		size = ((report->size - 1) >> 3) + 1 + hid->report_enum[type].numbered;
876 877 878 879 880
		if (*max < size)
			*max = size;
	}
}

L
Linus Torvalds 已提交
881 882
static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid)
{
J
Jiri Kosina 已提交
883 884
	struct usbhid_device *usbhid = hid->driver_data;

885
	usbhid->inbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
886
			&usbhid->inbuf_dma);
887
	usbhid->outbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
888
			&usbhid->outbuf_dma);
889
	usbhid->cr = kmalloc(sizeof(*usbhid->cr), GFP_KERNEL);
890
	usbhid->ctrlbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
891 892 893
			&usbhid->ctrlbuf_dma);
	if (!usbhid->inbuf || !usbhid->outbuf || !usbhid->cr ||
			!usbhid->ctrlbuf)
L
Linus Torvalds 已提交
894 895 896 897 898
		return -1;

	return 0;
}

899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932
static int usbhid_get_raw_report(struct hid_device *hid,
		unsigned char report_number, __u8 *buf, size_t count,
		unsigned char report_type)
{
	struct usbhid_device *usbhid = hid->driver_data;
	struct usb_device *dev = hid_to_usb_dev(hid);
	struct usb_interface *intf = usbhid->intf;
	struct usb_host_interface *interface = intf->cur_altsetting;
	int skipped_report_id = 0;
	int ret;

	/* Byte 0 is the report number. Report data starts at byte 1.*/
	buf[0] = report_number;
	if (report_number == 0x0) {
		/* Offset the return buffer by 1, so that the report ID
		   will remain in byte 0. */
		buf++;
		count--;
		skipped_report_id = 1;
	}
	ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
		HID_REQ_GET_REPORT,
		USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
		((report_type + 1) << 8) | report_number,
		interface->desc.bInterfaceNumber, buf, count,
		USB_CTRL_SET_TIMEOUT);

	/* count also the report id */
	if (ret > 0 && skipped_report_id)
		ret++;

	return ret;
}

933 934
static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t count,
		unsigned char report_type)
935 936 937 938 939 940 941
{
	struct usbhid_device *usbhid = hid->driver_data;
	struct usb_device *dev = hid_to_usb_dev(hid);
	struct usb_interface *intf = usbhid->intf;
	struct usb_host_interface *interface = intf->cur_altsetting;
	int ret;

942
	if (usbhid->urbout && report_type != HID_FEATURE_REPORT) {
943 944
		int actual_length;
		int skipped_report_id = 0;
A
Alan Ott 已提交
945

946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962
		if (buf[0] == 0x0) {
			/* Don't send the Report ID */
			buf++;
			count--;
			skipped_report_id = 1;
		}
		ret = usb_interrupt_msg(dev, usbhid->urbout->pipe,
			buf, count, &actual_length,
			USB_CTRL_SET_TIMEOUT);
		/* return the number of bytes transferred */
		if (ret == 0) {
			ret = actual_length;
			/* count also the report id */
			if (skipped_report_id)
				ret++;
		}
	} else {
963
		int skipped_report_id = 0;
964
		int report_id = buf[0];
965 966 967 968 969 970
		if (buf[0] == 0x0) {
			/* Don't send the Report ID */
			buf++;
			count--;
			skipped_report_id = 1;
		}
971 972 973
		ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
			HID_REQ_SET_REPORT,
			USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
974
			((report_type + 1) << 8) | report_id,
975
			interface->desc.bInterfaceNumber, buf, count,
976
			USB_CTRL_SET_TIMEOUT);
977 978
		/* count also the report id, if this was a numbered report. */
		if (ret > 0 && skipped_report_id)
979 980
			ret++;
	}
981 982 983 984

	return ret;
}

985 986 987 988 989 990 991
static void usbhid_restart_queues(struct usbhid_device *usbhid)
{
	if (usbhid->urbout)
		usbhid_restart_out_queue(usbhid);
	usbhid_restart_ctrl_queue(usbhid);
}

L
Linus Torvalds 已提交
992 993
static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid)
{
J
Jiri Kosina 已提交
994 995
	struct usbhid_device *usbhid = hid->driver_data;

996 997
	usb_free_coherent(dev, usbhid->bufsize, usbhid->inbuf, usbhid->inbuf_dma);
	usb_free_coherent(dev, usbhid->bufsize, usbhid->outbuf, usbhid->outbuf_dma);
998
	kfree(usbhid->cr);
999
	usb_free_coherent(dev, usbhid->bufsize, usbhid->ctrlbuf, usbhid->ctrlbuf_dma);
L
Linus Torvalds 已提交
1000 1001
}

J
Jiri Slaby 已提交
1002 1003 1004
static int usbhid_parse(struct hid_device *hid)
{
	struct usb_interface *intf = to_usb_interface(hid->dev.parent);
L
Linus Torvalds 已提交
1005 1006 1007
	struct usb_host_interface *interface = intf->cur_altsetting;
	struct usb_device *dev = interface_to_usbdev (intf);
	struct hid_descriptor *hdesc;
1008
	u32 quirks = 0;
J
Jiri Slaby 已提交
1009
	unsigned int rsize = 0;
1010
	char *rdesc;
J
Jiri Slaby 已提交
1011
	int ret, n;
L
Linus Torvalds 已提交
1012

1013 1014
	quirks = usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor),
			le16_to_cpu(dev->descriptor.idProduct));
L
Linus Torvalds 已提交
1015

1016 1017 1018
	if (quirks & HID_QUIRK_IGNORE)
		return -ENODEV;

1019 1020 1021 1022 1023 1024 1025 1026
	/* Many keyboards and mice don't like to be polled for reports,
	 * so we will always set the HID_QUIRK_NOGET flag for them. */
	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT) {
		if (interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_KEYBOARD ||
			interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
				quirks |= HID_QUIRK_NOGET;
	}

1027 1028 1029
	if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) &&
	    (!interface->desc.bNumEndpoints ||
	     usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) {
1030
		dbg_hid("class descriptor not present\n");
J
Jiri Slaby 已提交
1031
		return -ENODEV;
L
Linus Torvalds 已提交
1032 1033
	}

J
Jiri Slaby 已提交
1034 1035 1036
	hid->version = le16_to_cpu(hdesc->bcdHID);
	hid->country = hdesc->bCountryCode;

L
Linus Torvalds 已提交
1037 1038 1039 1040 1041
	for (n = 0; n < hdesc->bNumDescriptors; n++)
		if (hdesc->desc[n].bDescriptorType == HID_DT_REPORT)
			rsize = le16_to_cpu(hdesc->desc[n].wDescriptorLength);

	if (!rsize || rsize > HID_MAX_DESCRIPTOR_SIZE) {
1042
		dbg_hid("weird size of report descriptor (%u)\n", rsize);
J
Jiri Slaby 已提交
1043
		return -EINVAL;
L
Linus Torvalds 已提交
1044 1045 1046
	}

	if (!(rdesc = kmalloc(rsize, GFP_KERNEL))) {
1047
		dbg_hid("couldn't allocate rdesc memory\n");
J
Jiri Slaby 已提交
1048
		return -ENOMEM;
L
Linus Torvalds 已提交
1049 1050
	}

1051 1052
	hid_set_idle(dev, interface->desc.bInterfaceNumber, 0, 0);

J
Jiri Slaby 已提交
1053 1054 1055
	ret = hid_get_class_descriptor(dev, interface->desc.bInterfaceNumber,
			HID_DT_REPORT, rdesc, rsize);
	if (ret < 0) {
1056
		dbg_hid("reading report descriptor failed\n");
L
Linus Torvalds 已提交
1057
		kfree(rdesc);
J
Jiri Slaby 已提交
1058
		goto err;
L
Linus Torvalds 已提交
1059 1060
	}

J
Jiri Slaby 已提交
1061 1062 1063
	ret = hid_parse_report(hid, rdesc, rsize);
	kfree(rdesc);
	if (ret) {
1064
		dbg_hid("parsing report descriptor failed\n");
J
Jiri Slaby 已提交
1065
		goto err;
L
Linus Torvalds 已提交
1066 1067
	}

1068
	hid->quirks |= quirks;
L
Linus Torvalds 已提交
1069

J
Jiri Slaby 已提交
1070 1071 1072 1073 1074 1075 1076 1077 1078 1079
	return 0;
err:
	return ret;
}

static int usbhid_start(struct hid_device *hid)
{
	struct usb_interface *intf = to_usb_interface(hid->dev.parent);
	struct usb_host_interface *interface = intf->cur_altsetting;
	struct usb_device *dev = interface_to_usbdev(intf);
1080
	struct usbhid_device *usbhid = hid->driver_data;
J
Jiri Slaby 已提交
1081 1082 1083
	unsigned int n, insize = 0;
	int ret;

1084 1085
	clear_bit(HID_DISCONNECTED, &usbhid->iofl);

J
Jiri Kosina 已提交
1086 1087 1088 1089
	usbhid->bufsize = HID_MIN_BUFFER_SIZE;
	hid_find_max_report(hid, HID_INPUT_REPORT, &usbhid->bufsize);
	hid_find_max_report(hid, HID_OUTPUT_REPORT, &usbhid->bufsize);
	hid_find_max_report(hid, HID_FEATURE_REPORT, &usbhid->bufsize);
1090

J
Jiri Kosina 已提交
1091 1092
	if (usbhid->bufsize > HID_MAX_BUFFER_SIZE)
		usbhid->bufsize = HID_MAX_BUFFER_SIZE;
1093 1094 1095 1096 1097 1098

	hid_find_max_report(hid, HID_INPUT_REPORT, &insize);

	if (insize > HID_MAX_BUFFER_SIZE)
		insize = HID_MAX_BUFFER_SIZE;

J
Jiri Slaby 已提交
1099 1100
	if (hid_alloc_buffers(dev, hid)) {
		ret = -ENOMEM;
L
Linus Torvalds 已提交
1101
		goto fail;
1102 1103
	}

L
Linus Torvalds 已提交
1104 1105 1106 1107 1108 1109
	for (n = 0; n < interface->desc.bNumEndpoints; n++) {
		struct usb_endpoint_descriptor *endpoint;
		int pipe;
		int interval;

		endpoint = &interface->endpoint[n].desc;
1110
		if (!usb_endpoint_xfer_int(endpoint))
L
Linus Torvalds 已提交
1111 1112 1113 1114
			continue;

		interval = endpoint->bInterval;

1115
		/* Some vendors give fullspeed interval on highspeed devides */
J
Jiri Slaby 已提交
1116
		if (hid->quirks & HID_QUIRK_FULLSPEED_INTERVAL &&
1117 1118 1119 1120 1121 1122
		    dev->speed == USB_SPEED_HIGH) {
			interval = fls(endpoint->bInterval*8);
			printk(KERN_INFO "%s: Fixing fullspeed to highspeed interval: %d -> %d\n",
			       hid->name, endpoint->bInterval, interval);
		}

L
Linus Torvalds 已提交
1123 1124 1125
		/* Change the polling interval of mice. */
		if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0)
			interval = hid_mousepoll_interval;
1126

J
Jiri Slaby 已提交
1127
		ret = -ENOMEM;
1128
		if (usb_endpoint_dir_in(endpoint)) {
J
Jiri Kosina 已提交
1129
			if (usbhid->urbin)
L
Linus Torvalds 已提交
1130
				continue;
J
Jiri Kosina 已提交
1131
			if (!(usbhid->urbin = usb_alloc_urb(0, GFP_KERNEL)))
L
Linus Torvalds 已提交
1132 1133
				goto fail;
			pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
J
Jiri Kosina 已提交
1134
			usb_fill_int_urb(usbhid->urbin, dev, pipe, usbhid->inbuf, insize,
L
Linus Torvalds 已提交
1135
					 hid_irq_in, hid, interval);
J
Jiri Kosina 已提交
1136 1137
			usbhid->urbin->transfer_dma = usbhid->inbuf_dma;
			usbhid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
L
Linus Torvalds 已提交
1138
		} else {
J
Jiri Kosina 已提交
1139
			if (usbhid->urbout)
L
Linus Torvalds 已提交
1140
				continue;
J
Jiri Kosina 已提交
1141
			if (!(usbhid->urbout = usb_alloc_urb(0, GFP_KERNEL)))
L
Linus Torvalds 已提交
1142 1143
				goto fail;
			pipe = usb_sndintpipe(dev, endpoint->bEndpointAddress);
J
Jiri Kosina 已提交
1144
			usb_fill_int_urb(usbhid->urbout, dev, pipe, usbhid->outbuf, 0,
L
Linus Torvalds 已提交
1145
					 hid_irq_out, hid, interval);
J
Jiri Kosina 已提交
1146 1147
			usbhid->urbout->transfer_dma = usbhid->outbuf_dma;
			usbhid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
L
Linus Torvalds 已提交
1148 1149 1150
		}
	}

J
Jiri Kosina 已提交
1151
	usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL);
J
Jiri Slaby 已提交
1152 1153
	if (!usbhid->urbctrl) {
		ret = -ENOMEM;
L
Linus Torvalds 已提交
1154
		goto fail;
J
Jiri Slaby 已提交
1155
	}
1156

J
Jiri Kosina 已提交
1157 1158 1159
	usb_fill_control_urb(usbhid->urbctrl, dev, 0, (void *) usbhid->cr,
			     usbhid->ctrlbuf, 1, hid_ctrl, hid);
	usbhid->urbctrl->transfer_dma = usbhid->ctrlbuf_dma;
1160
	usbhid->urbctrl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
J
Jiri Slaby 已提交
1161

J
Jiri Kosina 已提交
1162 1163
	if (!(hid->quirks & HID_QUIRK_NO_INIT_REPORTS))
		usbhid_init_reports(hid);
J
Jiri Slaby 已提交
1164

1165 1166
	set_bit(HID_STARTED, &usbhid->iofl);

1167 1168 1169
	/* Some keyboards don't work until their LEDs have been set.
	 * Since BIOSes do set the LEDs, it must be safe for any device
	 * that supports the keyboard boot protocol.
1170 1171
	 * In addition, enable remote wakeup by default for all keyboard
	 * devices supporting the boot protocol.
1172 1173 1174
	 */
	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
			interface->desc.bInterfaceProtocol ==
1175
				USB_INTERFACE_PROTOCOL_KEYBOARD) {
1176
		usbhid_set_leds(hid);
1177 1178
		device_set_wakeup_enable(&dev->dev, 1);
	}
J
Jiri Slaby 已提交
1179
	return 0;
L
Linus Torvalds 已提交
1180 1181

fail:
J
Jiri Kosina 已提交
1182 1183 1184
	usb_free_urb(usbhid->urbin);
	usb_free_urb(usbhid->urbout);
	usb_free_urb(usbhid->urbctrl);
1185 1186 1187
	usbhid->urbin = NULL;
	usbhid->urbout = NULL;
	usbhid->urbctrl = NULL;
1188
	hid_free_buffers(dev, hid);
J
Jiri Slaby 已提交
1189
	return ret;
L
Linus Torvalds 已提交
1190 1191
}

J
Jiri Slaby 已提交
1192
static void usbhid_stop(struct hid_device *hid)
L
Linus Torvalds 已提交
1193
{
J
Jiri Slaby 已提交
1194
	struct usbhid_device *usbhid = hid->driver_data;
L
Linus Torvalds 已提交
1195

J
Jiri Slaby 已提交
1196
	if (WARN_ON(!usbhid))
L
Linus Torvalds 已提交
1197 1198
		return;

1199
	clear_bit(HID_STARTED, &usbhid->iofl);
1200
	spin_lock_irq(&usbhid->lock);	/* Sync with error and led handlers */
1201
	set_bit(HID_DISCONNECTED, &usbhid->iofl);
1202
	spin_unlock_irq(&usbhid->lock);
J
Jiri Kosina 已提交
1203 1204 1205
	usb_kill_urb(usbhid->urbin);
	usb_kill_urb(usbhid->urbout);
	usb_kill_urb(usbhid->urbctrl);
L
Linus Torvalds 已提交
1206

1207
	hid_cancel_delayed_stuff(usbhid);
A
Alan Stern 已提交
1208

J
Jiri Slaby 已提交
1209 1210
	hid->claimed = 0;

J
Jiri Kosina 已提交
1211 1212 1213
	usb_free_urb(usbhid->urbin);
	usb_free_urb(usbhid->urbctrl);
	usb_free_urb(usbhid->urbout);
1214 1215 1216
	usbhid->urbin = NULL; /* don't mess up next start */
	usbhid->urbctrl = NULL;
	usbhid->urbout = NULL;
L
Linus Torvalds 已提交
1217

1218
	hid_free_buffers(hid_to_usb_dev(hid), hid);
L
Linus Torvalds 已提交
1219 1220
}

1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235
static int usbhid_power(struct hid_device *hid, int lvl)
{
	int r = 0;

	switch (lvl) {
	case PM_HINT_FULLON:
		r = usbhid_get_power(hid);
		break;
	case PM_HINT_NORMAL:
		usbhid_put_power(hid);
		break;
	}
	return r;
}

J
Jiri Slaby 已提交
1236 1237 1238 1239 1240 1241
static struct hid_ll_driver usb_hid_driver = {
	.parse = usbhid_parse,
	.start = usbhid_start,
	.stop = usbhid_stop,
	.open = usbhid_open,
	.close = usbhid_close,
1242
	.power = usbhid_power,
J
Jiri Slaby 已提交
1243 1244 1245
	.hidinput_input_event = usb_hidinput_input_event,
};

1246
static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id)
L
Linus Torvalds 已提交
1247
{
J
Jiri Slaby 已提交
1248
	struct usb_host_interface *interface = intf->cur_altsetting;
J
Jiri Slaby 已提交
1249
	struct usb_device *dev = interface_to_usbdev(intf);
1250
	struct usbhid_device *usbhid;
L
Linus Torvalds 已提交
1251
	struct hid_device *hid;
J
Jiri Slaby 已提交
1252
	unsigned int n, has_in = 0;
J
Jiri Slaby 已提交
1253 1254
	size_t len;
	int ret;
L
Linus Torvalds 已提交
1255

1256
	dbg_hid("HID probe called for ifnum %d\n",
L
Linus Torvalds 已提交
1257 1258
			intf->altsetting->desc.bInterfaceNumber);

J
Jiri Slaby 已提交
1259 1260 1261 1262
	for (n = 0; n < interface->desc.bNumEndpoints; n++)
		if (usb_endpoint_is_int_in(&interface->endpoint[n].desc))
			has_in++;
	if (!has_in) {
1263
		hid_err(intf, "couldn't find an input interrupt endpoint\n");
J
Jiri Slaby 已提交
1264 1265 1266
		return -ENODEV;
	}

J
Jiri Slaby 已提交
1267 1268 1269
	hid = hid_allocate_device();
	if (IS_ERR(hid))
		return PTR_ERR(hid);
L
Linus Torvalds 已提交
1270 1271

	usb_set_intfdata(intf, hid);
J
Jiri Slaby 已提交
1272
	hid->ll_driver = &usb_hid_driver;
1273
	hid->hid_get_raw_report = usbhid_get_raw_report;
J
Jiri Slaby 已提交
1274
	hid->hid_output_raw_report = usbhid_output_raw_report;
J
Jiri Slaby 已提交
1275
	hid->ff_init = hid_pidff_init;
J
Jiri Slaby 已提交
1276
#ifdef CONFIG_USB_HIDDEV
J
Jiri Slaby 已提交
1277
	hid->hiddev_connect = hiddev_connect;
1278
	hid->hiddev_disconnect = hiddev_disconnect;
J
Jiri Slaby 已提交
1279 1280 1281 1282 1283 1284 1285 1286
	hid->hiddev_hid_event = hiddev_hid_event;
	hid->hiddev_report_event = hiddev_report_event;
#endif
	hid->dev.parent = &intf->dev;
	hid->bus = BUS_USB;
	hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
	hid->product = le16_to_cpu(dev->descriptor.idProduct);
	hid->name[0] = 0;
1287
	hid->quirks = usbhid_lookup_quirk(hid->vendor, hid->product);
1288 1289 1290
	if (intf->cur_altsetting->desc.bInterfaceProtocol ==
			USB_INTERFACE_PROTOCOL_MOUSE)
		hid->type = HID_TYPE_USBMOUSE;
1291 1292
	else if (intf->cur_altsetting->desc.bInterfaceProtocol == 0)
		hid->type = HID_TYPE_USBNONE;
L
Linus Torvalds 已提交
1293

J
Jiri Slaby 已提交
1294 1295
	if (dev->manufacturer)
		strlcpy(hid->name, dev->manufacturer, sizeof(hid->name));
L
Linus Torvalds 已提交
1296

J
Jiri Slaby 已提交
1297 1298 1299 1300
	if (dev->product) {
		if (dev->manufacturer)
			strlcat(hid->name, " ", sizeof(hid->name));
		strlcat(hid->name, dev->product, sizeof(hid->name));
L
Linus Torvalds 已提交
1301 1302
	}

J
Jiri Slaby 已提交
1303 1304 1305 1306
	if (!strlen(hid->name))
		snprintf(hid->name, sizeof(hid->name), "HID %04x:%04x",
			 le16_to_cpu(dev->descriptor.idVendor),
			 le16_to_cpu(dev->descriptor.idProduct));
L
Linus Torvalds 已提交
1307

J
Jiri Slaby 已提交
1308 1309 1310 1311 1312 1313 1314 1315 1316
	usb_make_path(dev, hid->phys, sizeof(hid->phys));
	strlcat(hid->phys, "/input", sizeof(hid->phys));
	len = strlen(hid->phys);
	if (len < sizeof(hid->phys) - 1)
		snprintf(hid->phys + len, sizeof(hid->phys) - len,
			 "%d", intf->altsetting[0].desc.bInterfaceNumber);

	if (usb_string(dev, dev->descriptor.iSerialNumber, hid->uniq, 64) <= 0)
		hid->uniq[0] = 0;
L
Linus Torvalds 已提交
1317

1318 1319 1320 1321 1322 1323 1324 1325
	usbhid = kzalloc(sizeof(*usbhid), GFP_KERNEL);
	if (usbhid == NULL) {
		ret = -ENOMEM;
		goto err;
	}

	hid->driver_data = usbhid;
	usbhid->hid = hid;
1326 1327
	usbhid->intf = intf;
	usbhid->ifnum = interface->desc.bInterfaceNumber;
1328

1329 1330 1331 1332 1333
	init_waitqueue_head(&usbhid->wait);
	INIT_WORK(&usbhid->reset_work, hid_reset);
	setup_timer(&usbhid->io_retry, hid_retry_timeout, (unsigned long) hid);
	spin_lock_init(&usbhid->lock);

1334 1335
	INIT_WORK(&usbhid->led_work, hid_led);

J
Jiri Slaby 已提交
1336 1337
	ret = hid_add_device(hid);
	if (ret) {
J
Jiri Slaby 已提交
1338
		if (ret != -ENODEV)
1339
			hid_err(intf, "can't add hid device: %d\n", ret);
1340
		goto err_free;
J
Jiri Slaby 已提交
1341
	}
J
Jiri Slaby 已提交
1342 1343

	return 0;
1344 1345
err_free:
	kfree(usbhid);
J
Jiri Slaby 已提交
1346 1347
err:
	hid_destroy_device(hid);
J
Jiri Slaby 已提交
1348
	return ret;
L
Linus Torvalds 已提交
1349 1350
}

1351
static void usbhid_disconnect(struct usb_interface *intf)
J
Jiri Slaby 已提交
1352 1353
{
	struct hid_device *hid = usb_get_intfdata(intf);
1354
	struct usbhid_device *usbhid;
J
Jiri Slaby 已提交
1355 1356 1357 1358

	if (WARN_ON(!hid))
		return;

1359
	usbhid = hid->driver_data;
J
Jiri Slaby 已提交
1360
	hid_destroy_device(hid);
1361
	kfree(usbhid);
J
Jiri Slaby 已提交
1362 1363
}

1364 1365 1366 1367
static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid)
{
	del_timer_sync(&usbhid->io_retry);
	cancel_work_sync(&usbhid->reset_work);
1368
	cancel_work_sync(&usbhid->led_work);
1369 1370 1371 1372
}

static void hid_cease_io(struct usbhid_device *usbhid)
{
1373
	del_timer_sync(&usbhid->io_retry);
1374 1375 1376 1377 1378
	usb_kill_urb(usbhid->urbin);
	usb_kill_urb(usbhid->urbctrl);
	usb_kill_urb(usbhid->urbout);
}

1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399
/* Treat USB reset pretty much the same as suspend/resume */
static int hid_pre_reset(struct usb_interface *intf)
{
	struct hid_device *hid = usb_get_intfdata(intf);
	struct usbhid_device *usbhid = hid->driver_data;

	spin_lock_irq(&usbhid->lock);
	set_bit(HID_RESET_PENDING, &usbhid->iofl);
	spin_unlock_irq(&usbhid->lock);
	hid_cease_io(usbhid);

	return 0;
}

/* Same routine used for post_reset and reset_resume */
static int hid_post_reset(struct usb_interface *intf)
{
	struct usb_device *dev = interface_to_usbdev (intf);
	struct hid_device *hid = usb_get_intfdata(intf);
	struct usbhid_device *usbhid = hid->driver_data;
	int status;
1400

1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415
	spin_lock_irq(&usbhid->lock);
	clear_bit(HID_RESET_PENDING, &usbhid->iofl);
	spin_unlock_irq(&usbhid->lock);
	hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0);
	status = hid_start_in(hid);
	if (status < 0)
		hid_io_error(hid);
	usbhid_restart_queues(usbhid);

	return 0;
}

int usbhid_get_power(struct hid_device *hid)
{
	struct usbhid_device *usbhid = hid->driver_data;
1416

1417 1418 1419 1420 1421 1422
	return usb_autopm_get_interface(usbhid->intf);
}

void usbhid_put_power(struct hid_device *hid)
{
	struct usbhid_device *usbhid = hid->driver_data;
1423

1424 1425 1426 1427
	usb_autopm_put_interface(usbhid->intf);
}


1428
#ifdef CONFIG_PM
1429
static int hid_suspend(struct usb_interface *intf, pm_message_t message)
L
Linus Torvalds 已提交
1430
{
1431
	struct hid_device *hid = usb_get_intfdata(intf);
J
Jiri Kosina 已提交
1432
	struct usbhid_device *usbhid = hid->driver_data;
1433
	int status;
L
Linus Torvalds 已提交
1434

1435
	if (PMSG_IS_AUTO(message)) {
1436 1437 1438 1439 1440 1441 1442 1443 1444 1445
		spin_lock_irq(&usbhid->lock);	/* Sync with error handler */
		if (!test_bit(HID_RESET_PENDING, &usbhid->iofl)
		    && !test_bit(HID_CLEAR_HALT, &usbhid->iofl)
		    && !test_bit(HID_OUT_RUNNING, &usbhid->iofl)
		    && !test_bit(HID_CTRL_RUNNING, &usbhid->iofl)
		    && !test_bit(HID_KEYS_PRESSED, &usbhid->iofl)
		    && (!usbhid->ledcount || ignoreled))
		{
			set_bit(HID_REPORTED_IDLE, &usbhid->iofl);
			spin_unlock_irq(&usbhid->lock);
1446 1447 1448 1449 1450
			if (hid->driver && hid->driver->suspend) {
				status = hid->driver->suspend(hid, message);
				if (status < 0)
					return status;
			}
1451 1452 1453 1454 1455
		} else {
			usbhid_mark_busy(usbhid);
			spin_unlock_irq(&usbhid->lock);
			return -EBUSY;
		}
1456

1457
	} else {
1458 1459 1460 1461 1462
		if (hid->driver && hid->driver->suspend) {
			status = hid->driver->suspend(hid, message);
			if (status < 0)
				return status;
		}
1463 1464 1465 1466 1467 1468 1469 1470 1471 1472
		spin_lock_irq(&usbhid->lock);
		set_bit(HID_REPORTED_IDLE, &usbhid->iofl);
		spin_unlock_irq(&usbhid->lock);
		if (usbhid_wait_io(hid) < 0)
			return -EIO;
	}

	hid_cancel_delayed_stuff(usbhid);
	hid_cease_io(usbhid);

1473
	if (PMSG_IS_AUTO(message) && test_bit(HID_KEYS_PRESSED, &usbhid->iofl)) {
1474 1475 1476 1477 1478 1479 1480
		/* lost race against keypresses */
		status = hid_start_in(hid);
		if (status < 0)
			hid_io_error(hid);
		usbhid_mark_busy(usbhid);
		return -EBUSY;
	}
L
Linus Torvalds 已提交
1481 1482 1483 1484 1485 1486 1487
	dev_dbg(&intf->dev, "suspend\n");
	return 0;
}

static int hid_resume(struct usb_interface *intf)
{
	struct hid_device *hid = usb_get_intfdata (intf);
J
Jiri Kosina 已提交
1488
	struct usbhid_device *usbhid = hid->driver_data;
L
Linus Torvalds 已提交
1489 1490
	int status;

1491
	if (!test_bit(HID_STARTED, &usbhid->iofl))
1492 1493
		return 0;

1494 1495 1496 1497 1498 1499
	clear_bit(HID_REPORTED_IDLE, &usbhid->iofl);
	usbhid_mark_busy(usbhid);

	if (test_bit(HID_CLEAR_HALT, &usbhid->iofl) ||
	    test_bit(HID_RESET_PENDING, &usbhid->iofl))
		schedule_work(&usbhid->reset_work);
J
Jiri Kosina 已提交
1500
	usbhid->retry_delay = 0;
A
Alan Stern 已提交
1501
	status = hid_start_in(hid);
1502 1503 1504
	if (status < 0)
		hid_io_error(hid);
	usbhid_restart_queues(usbhid);
L
Linus Torvalds 已提交
1505

1506 1507 1508 1509 1510
	if (status >= 0 && hid->driver && hid->driver->resume) {
		int ret = hid->driver->resume(hid);
		if (ret < 0)
			status = ret;
	}
L
Linus Torvalds 已提交
1511
	dev_dbg(&intf->dev, "resume status %d\n", status);
A
Alan Stern 已提交
1512
	return 0;
1513 1514
}

1515
static int hid_reset_resume(struct usb_interface *intf)
1516
{
1517 1518
	struct hid_device *hid = usb_get_intfdata(intf);
	struct usbhid_device *usbhid = hid->driver_data;
1519
	int status;
1520

1521
	clear_bit(HID_REPORTED_IDLE, &usbhid->iofl);
1522 1523 1524 1525 1526 1527 1528
	status = hid_post_reset(intf);
	if (status >= 0 && hid->driver && hid->driver->reset_resume) {
		int ret = hid->driver->reset_resume(hid);
		if (ret < 0)
			status = ret;
	}
	return status;
1529 1530
}

1531
#endif /* CONFIG_PM */
1532

1533
static const struct usb_device_id hid_usb_ids[] = {
L
Linus Torvalds 已提交
1534 1535 1536 1537 1538 1539 1540 1541 1542
	{ .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
		.bInterfaceClass = USB_INTERFACE_CLASS_HID },
	{ }						/* Terminating entry */
};

MODULE_DEVICE_TABLE (usb, hid_usb_ids);

static struct usb_driver hid_driver = {
	.name =		"usbhid",
1543 1544
	.probe =	usbhid_probe,
	.disconnect =	usbhid_disconnect,
1545
#ifdef CONFIG_PM
L
Linus Torvalds 已提交
1546 1547
	.suspend =	hid_suspend,
	.resume =	hid_resume,
1548
	.reset_resume =	hid_reset_resume,
1549
#endif
1550 1551
	.pre_reset =	hid_pre_reset,
	.post_reset =	hid_post_reset,
L
Linus Torvalds 已提交
1552
	.id_table =	hid_usb_ids,
1553
	.supports_autosuspend = 1,
L
Linus Torvalds 已提交
1554 1555
};

J
Jiri Slaby 已提交
1556 1557 1558 1559 1560
static const struct hid_device_id hid_usb_table[] = {
	{ HID_USB_DEVICE(HID_ANY_ID, HID_ANY_ID) },
	{ }
};

1561 1562 1563 1564 1565
struct usb_interface *usbhid_find_interface(int minor)
{
	return usb_find_interface(&hid_driver, minor);
}

J
Jiri Slaby 已提交
1566 1567 1568 1569 1570
static struct hid_driver hid_usb_driver = {
	.name = "generic-usb",
	.id_table = hid_usb_table,
};

L
Linus Torvalds 已提交
1571 1572
static int __init hid_init(void)
{
1573 1574
	int retval = -ENOMEM;

J
Jiri Slaby 已提交
1575 1576 1577
	retval = hid_register_driver(&hid_usb_driver);
	if (retval)
		goto hid_register_fail;
1578 1579 1580
	retval = usbhid_quirks_init(quirks_param);
	if (retval)
		goto usbhid_quirks_init_fail;
L
Linus Torvalds 已提交
1581 1582 1583
	retval = usb_register(&hid_driver);
	if (retval)
		goto usb_register_fail;
1584
	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
L
Linus Torvalds 已提交
1585 1586 1587

	return 0;
usb_register_fail:
1588 1589
	usbhid_quirks_exit();
usbhid_quirks_init_fail:
J
Jiri Slaby 已提交
1590 1591
	hid_unregister_driver(&hid_usb_driver);
hid_register_fail:
L
Linus Torvalds 已提交
1592 1593 1594 1595 1596 1597
	return retval;
}

static void __exit hid_exit(void)
{
	usb_deregister(&hid_driver);
1598
	usbhid_quirks_exit();
J
Jiri Slaby 已提交
1599
	hid_unregister_driver(&hid_usb_driver);
L
Linus Torvalds 已提交
1600 1601 1602 1603 1604
}

module_init(hid_init);
module_exit(hid_exit);

1605 1606 1607
MODULE_AUTHOR("Andreas Gal");
MODULE_AUTHOR("Vojtech Pavlik");
MODULE_AUTHOR("Jiri Kosina");
L
Linus Torvalds 已提交
1608 1609
MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE(DRIVER_LICENSE);