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-2009 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 51 static unsigned int hid_mousepoll_interval; 52 module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644); 53 MODULE_PARM_DESC(mousepoll, "Polling interval of mice"); 54 55 static unsigned int ignoreled; 56 module_param_named(ignoreled, ignoreled, uint, 0644); 57 MODULE_PARM_DESC(ignoreled, "Autosuspend with active leds"); 58 59 /* Quirks specified at module load time */ 60 static char *quirks_param[MAX_USBHID_BOOT_QUIRKS] = { [ 0 ... (MAX_USBHID_BOOT_QUIRKS - 1) ] = NULL }; 61 module_param_array_named(quirks, quirks_param, charp, NULL, 0444); 62 MODULE_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 */ 69 static DEFINE_MUTEX(hid_open_mut); 70 static struct workqueue_struct *resumption_waker; 71 72 static void hid_io_error(struct hid_device *hid); 73 static int hid_submit_out(struct hid_device *hid); 74 static int hid_submit_ctrl(struct hid_device *hid); 75 static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid); 76 77 /* Start up the input URB */ 78 static 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 */ 98 static 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 */ 109 static 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 */ 152 static 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)); 186 done: 187 spin_unlock_irqrestore(&usbhid->lock, flags); 188 } 189 190 static 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 197 static 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 215 static 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 238 static 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 298 static 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 } else { 320 /* 321 * queue work to wake up the device. 322 * as the work queue is freezeable, this is safe 323 * with respect to STD and STR 324 */ 325 queue_work(resumption_waker, &usbhid->restart_work); 326 } 327 328 return 0; 329 } 330 331 static int hid_submit_ctrl(struct hid_device *hid) 332 { 333 struct hid_report *report; 334 unsigned char dir; 335 char *raw_report; 336 int len; 337 struct usbhid_device *usbhid = hid->driver_data; 338 339 report = usbhid->ctrl[usbhid->ctrltail].report; 340 raw_report = usbhid->ctrl[usbhid->ctrltail].raw_report; 341 dir = usbhid->ctrl[usbhid->ctrltail].dir; 342 343 if (!test_bit(HID_REPORTED_IDLE, &usbhid->iofl)) { 344 len = ((report->size - 1) >> 3) + 1 + (report->id > 0); 345 if (dir == USB_DIR_OUT) { 346 usbhid->urbctrl->pipe = usb_sndctrlpipe(hid_to_usb_dev(hid), 0); 347 usbhid->urbctrl->transfer_buffer_length = len; 348 memcpy(usbhid->ctrlbuf, raw_report, len); 349 kfree(raw_report); 350 } else { 351 int maxpacket, padlen; 352 353 usbhid->urbctrl->pipe = usb_rcvctrlpipe(hid_to_usb_dev(hid), 0); 354 maxpacket = usb_maxpacket(hid_to_usb_dev(hid), usbhid->urbctrl->pipe, 0); 355 if (maxpacket > 0) { 356 padlen = DIV_ROUND_UP(len, maxpacket); 357 padlen *= maxpacket; 358 if (padlen > usbhid->bufsize) 359 padlen = usbhid->bufsize; 360 } else 361 padlen = 0; 362 usbhid->urbctrl->transfer_buffer_length = padlen; 363 } 364 usbhid->urbctrl->dev = hid_to_usb_dev(hid); 365 366 usbhid->cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | dir; 367 usbhid->cr->bRequest = (dir == USB_DIR_OUT) ? HID_REQ_SET_REPORT : HID_REQ_GET_REPORT; 368 usbhid->cr->wValue = cpu_to_le16(((report->type + 1) << 8) | report->id); 369 usbhid->cr->wIndex = cpu_to_le16(usbhid->ifnum); 370 usbhid->cr->wLength = cpu_to_le16(len); 371 372 dbg_hid("submitting ctrl urb: %s wValue=0x%04x wIndex=0x%04x wLength=%u\n", 373 usbhid->cr->bRequest == HID_REQ_SET_REPORT ? "Set_Report" : "Get_Report", 374 usbhid->cr->wValue, usbhid->cr->wIndex, usbhid->cr->wLength); 375 376 if (usb_submit_urb(usbhid->urbctrl, GFP_ATOMIC)) { 377 err_hid("usb_submit_urb(ctrl) failed"); 378 return -1; 379 } 380 } else { 381 /* 382 * queue work to wake up the device. 383 * as the work queue is freezeable, this is safe 384 * with respect to STD and STR 385 */ 386 queue_work(resumption_waker, &usbhid->restart_work); 387 } 388 389 return 0; 390 } 391 392 /* 393 * Output interrupt completion handler. 394 */ 395 396 static void hid_irq_out(struct urb *urb) 397 { 398 struct hid_device *hid = urb->context; 399 struct usbhid_device *usbhid = hid->driver_data; 400 unsigned long flags; 401 int unplug = 0; 402 403 switch (urb->status) { 404 case 0: /* success */ 405 break; 406 case -ESHUTDOWN: /* unplug */ 407 unplug = 1; 408 case -EILSEQ: /* protocol error or unplug */ 409 case -EPROTO: /* protocol error or unplug */ 410 case -ECONNRESET: /* unlink */ 411 case -ENOENT: 412 break; 413 default: /* error */ 414 dev_warn(&urb->dev->dev, "output irq status %d " 415 "received\n", urb->status); 416 } 417 418 spin_lock_irqsave(&usbhid->lock, flags); 419 420 if (unplug) 421 usbhid->outtail = usbhid->outhead; 422 else 423 usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1); 424 425 if (usbhid->outhead != usbhid->outtail) { 426 if (hid_submit_out(hid)) { 427 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); 428 wake_up(&usbhid->wait); 429 } 430 spin_unlock_irqrestore(&usbhid->lock, flags); 431 return; 432 } 433 434 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); 435 spin_unlock_irqrestore(&usbhid->lock, flags); 436 wake_up(&usbhid->wait); 437 } 438 439 /* 440 * Control pipe completion handler. 441 */ 442 443 static void hid_ctrl(struct urb *urb) 444 { 445 struct hid_device *hid = urb->context; 446 struct usbhid_device *usbhid = hid->driver_data; 447 int unplug = 0, status = urb->status; 448 449 spin_lock(&usbhid->lock); 450 451 switch (status) { 452 case 0: /* success */ 453 if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN) 454 hid_input_report(urb->context, 455 usbhid->ctrl[usbhid->ctrltail].report->type, 456 urb->transfer_buffer, urb->actual_length, 0); 457 break; 458 case -ESHUTDOWN: /* unplug */ 459 unplug = 1; 460 case -EILSEQ: /* protocol error or unplug */ 461 case -EPROTO: /* protocol error or unplug */ 462 case -ECONNRESET: /* unlink */ 463 case -ENOENT: 464 case -EPIPE: /* report not available */ 465 break; 466 default: /* error */ 467 dev_warn(&urb->dev->dev, "ctrl urb status %d " 468 "received\n", status); 469 } 470 471 if (unplug) 472 usbhid->ctrltail = usbhid->ctrlhead; 473 else 474 usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1); 475 476 if (usbhid->ctrlhead != usbhid->ctrltail) { 477 if (hid_submit_ctrl(hid)) { 478 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); 479 wake_up(&usbhid->wait); 480 } 481 spin_unlock(&usbhid->lock); 482 return; 483 } 484 485 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); 486 spin_unlock(&usbhid->lock); 487 wake_up(&usbhid->wait); 488 } 489 490 static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *report, 491 unsigned char dir) 492 { 493 int head; 494 struct usbhid_device *usbhid = hid->driver_data; 495 int len = ((report->size - 1) >> 3) + 1 + (report->id > 0); 496 497 if ((hid->quirks & HID_QUIRK_NOGET) && dir == USB_DIR_IN) 498 return; 499 500 if (usbhid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) { 501 if ((head = (usbhid->outhead + 1) & (HID_OUTPUT_FIFO_SIZE - 1)) == usbhid->outtail) { 502 dev_warn(&hid->dev, "output queue full\n"); 503 return; 504 } 505 506 usbhid->out[usbhid->outhead].raw_report = kmalloc(len, GFP_ATOMIC); 507 if (!usbhid->out[usbhid->outhead].raw_report) { 508 dev_warn(&hid->dev, "output queueing failed\n"); 509 return; 510 } 511 hid_output_report(report, usbhid->out[usbhid->outhead].raw_report); 512 usbhid->out[usbhid->outhead].report = report; 513 usbhid->outhead = head; 514 515 if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl)) 516 if (hid_submit_out(hid)) 517 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); 518 return; 519 } 520 521 if ((head = (usbhid->ctrlhead + 1) & (HID_CONTROL_FIFO_SIZE - 1)) == usbhid->ctrltail) { 522 dev_warn(&hid->dev, "control queue full\n"); 523 return; 524 } 525 526 if (dir == USB_DIR_OUT) { 527 usbhid->ctrl[usbhid->ctrlhead].raw_report = kmalloc(len, GFP_ATOMIC); 528 if (!usbhid->ctrl[usbhid->ctrlhead].raw_report) { 529 dev_warn(&hid->dev, "control queueing failed\n"); 530 return; 531 } 532 hid_output_report(report, usbhid->ctrl[usbhid->ctrlhead].raw_report); 533 } 534 usbhid->ctrl[usbhid->ctrlhead].report = report; 535 usbhid->ctrl[usbhid->ctrlhead].dir = dir; 536 usbhid->ctrlhead = head; 537 538 if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl)) 539 if (hid_submit_ctrl(hid)) 540 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); 541 } 542 543 void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char dir) 544 { 545 struct usbhid_device *usbhid = hid->driver_data; 546 unsigned long flags; 547 548 spin_lock_irqsave(&usbhid->lock, flags); 549 __usbhid_submit_report(hid, report, dir); 550 spin_unlock_irqrestore(&usbhid->lock, flags); 551 } 552 EXPORT_SYMBOL_GPL(usbhid_submit_report); 553 554 static int usb_hidinput_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) 555 { 556 struct hid_device *hid = input_get_drvdata(dev); 557 struct usbhid_device *usbhid = hid->driver_data; 558 struct hid_field *field; 559 unsigned long flags; 560 int offset; 561 562 if (type == EV_FF) 563 return input_ff_event(dev, type, code, value); 564 565 if (type != EV_LED) 566 return -1; 567 568 if ((offset = hidinput_find_field(hid, type, code, &field)) == -1) { 569 dev_warn(&dev->dev, "event field not found\n"); 570 return -1; 571 } 572 573 hid_set_field(field, offset, value); 574 if (value) { 575 spin_lock_irqsave(&usbhid->lock, flags); 576 usbhid->ledcount++; 577 spin_unlock_irqrestore(&usbhid->lock, flags); 578 } else { 579 spin_lock_irqsave(&usbhid->lock, flags); 580 usbhid->ledcount--; 581 spin_unlock_irqrestore(&usbhid->lock, flags); 582 } 583 usbhid_submit_report(hid, field->report, USB_DIR_OUT); 584 585 return 0; 586 } 587 588 int usbhid_wait_io(struct hid_device *hid) 589 { 590 struct usbhid_device *usbhid = hid->driver_data; 591 592 if (!wait_event_timeout(usbhid->wait, 593 (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl) && 594 !test_bit(HID_OUT_RUNNING, &usbhid->iofl)), 595 10*HZ)) { 596 dbg_hid("timeout waiting for ctrl or out queue to clear\n"); 597 return -1; 598 } 599 600 return 0; 601 } 602 603 static int hid_set_idle(struct usb_device *dev, int ifnum, int report, int idle) 604 { 605 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 606 HID_REQ_SET_IDLE, USB_TYPE_CLASS | USB_RECIP_INTERFACE, (idle << 8) | report, 607 ifnum, NULL, 0, USB_CTRL_SET_TIMEOUT); 608 } 609 610 static int hid_get_class_descriptor(struct usb_device *dev, int ifnum, 611 unsigned char type, void *buf, int size) 612 { 613 int result, retries = 4; 614 615 memset(buf, 0, size); 616 617 do { 618 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 619 USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN, 620 (type << 8), ifnum, buf, size, USB_CTRL_GET_TIMEOUT); 621 retries--; 622 } while (result < size && retries); 623 return result; 624 } 625 626 int usbhid_open(struct hid_device *hid) 627 { 628 struct usbhid_device *usbhid = hid->driver_data; 629 int res; 630 631 mutex_lock(&hid_open_mut); 632 if (!hid->open++) { 633 res = usb_autopm_get_interface(usbhid->intf); 634 /* the device must be awake to reliable request remote wakeup */ 635 if (res < 0) { 636 hid->open--; 637 mutex_unlock(&hid_open_mut); 638 return -EIO; 639 } 640 usbhid->intf->needs_remote_wakeup = 1; 641 if (hid_start_in(hid)) 642 hid_io_error(hid); 643 644 usb_autopm_put_interface(usbhid->intf); 645 } 646 mutex_unlock(&hid_open_mut); 647 return 0; 648 } 649 650 void usbhid_close(struct hid_device *hid) 651 { 652 struct usbhid_device *usbhid = hid->driver_data; 653 654 mutex_lock(&hid_open_mut); 655 656 /* protecting hid->open to make sure we don't restart 657 * data acquistion due to a resumption we no longer 658 * care about 659 */ 660 spin_lock_irq(&usbhid->lock); 661 if (!--hid->open) { 662 spin_unlock_irq(&usbhid->lock); 663 hid_cancel_delayed_stuff(usbhid); 664 usb_kill_urb(usbhid->urbin); 665 usbhid->intf->needs_remote_wakeup = 0; 666 } else { 667 spin_unlock_irq(&usbhid->lock); 668 } 669 mutex_unlock(&hid_open_mut); 670 } 671 672 /* 673 * Initialize all reports 674 */ 675 676 void usbhid_init_reports(struct hid_device *hid) 677 { 678 struct hid_report *report; 679 struct usbhid_device *usbhid = hid->driver_data; 680 int err, ret; 681 682 list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].report_list, list) 683 usbhid_submit_report(hid, report, USB_DIR_IN); 684 685 list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].report_list, list) 686 usbhid_submit_report(hid, report, USB_DIR_IN); 687 688 err = 0; 689 ret = usbhid_wait_io(hid); 690 while (ret) { 691 err |= ret; 692 if (test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) 693 usb_kill_urb(usbhid->urbctrl); 694 if (test_bit(HID_OUT_RUNNING, &usbhid->iofl)) 695 usb_kill_urb(usbhid->urbout); 696 ret = usbhid_wait_io(hid); 697 } 698 699 if (err) 700 dev_warn(&hid->dev, "timeout initializing reports\n"); 701 } 702 703 /* 704 * Reset LEDs which BIOS might have left on. For now, just NumLock (0x01). 705 */ 706 static int hid_find_field_early(struct hid_device *hid, unsigned int page, 707 unsigned int hid_code, struct hid_field **pfield) 708 { 709 struct hid_report *report; 710 struct hid_field *field; 711 struct hid_usage *usage; 712 int i, j; 713 714 list_for_each_entry(report, &hid->report_enum[HID_OUTPUT_REPORT].report_list, list) { 715 for (i = 0; i < report->maxfield; i++) { 716 field = report->field[i]; 717 for (j = 0; j < field->maxusage; j++) { 718 usage = &field->usage[j]; 719 if ((usage->hid & HID_USAGE_PAGE) == page && 720 (usage->hid & 0xFFFF) == hid_code) { 721 *pfield = field; 722 return j; 723 } 724 } 725 } 726 } 727 return -1; 728 } 729 730 void usbhid_set_leds(struct hid_device *hid) 731 { 732 struct hid_field *field; 733 int offset; 734 735 if ((offset = hid_find_field_early(hid, HID_UP_LED, 0x01, &field)) != -1) { 736 hid_set_field(field, offset, 0); 737 usbhid_submit_report(hid, field->report, USB_DIR_OUT); 738 } 739 } 740 EXPORT_SYMBOL_GPL(usbhid_set_leds); 741 742 /* 743 * Traverse the supplied list of reports and find the longest 744 */ 745 static void hid_find_max_report(struct hid_device *hid, unsigned int type, 746 unsigned int *max) 747 { 748 struct hid_report *report; 749 unsigned int size; 750 751 list_for_each_entry(report, &hid->report_enum[type].report_list, list) { 752 size = ((report->size - 1) >> 3) + 1 + hid->report_enum[type].numbered; 753 if (*max < size) 754 *max = size; 755 } 756 } 757 758 static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid) 759 { 760 struct usbhid_device *usbhid = hid->driver_data; 761 762 usbhid->inbuf = usb_buffer_alloc(dev, usbhid->bufsize, GFP_KERNEL, 763 &usbhid->inbuf_dma); 764 usbhid->outbuf = usb_buffer_alloc(dev, usbhid->bufsize, GFP_KERNEL, 765 &usbhid->outbuf_dma); 766 usbhid->cr = usb_buffer_alloc(dev, sizeof(*usbhid->cr), GFP_KERNEL, 767 &usbhid->cr_dma); 768 usbhid->ctrlbuf = usb_buffer_alloc(dev, usbhid->bufsize, GFP_KERNEL, 769 &usbhid->ctrlbuf_dma); 770 if (!usbhid->inbuf || !usbhid->outbuf || !usbhid->cr || 771 !usbhid->ctrlbuf) 772 return -1; 773 774 return 0; 775 } 776 777 static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t count) 778 { 779 struct usbhid_device *usbhid = hid->driver_data; 780 struct usb_device *dev = hid_to_usb_dev(hid); 781 struct usb_interface *intf = usbhid->intf; 782 struct usb_host_interface *interface = intf->cur_altsetting; 783 int ret; 784 785 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 786 HID_REQ_SET_REPORT, 787 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 788 ((HID_OUTPUT_REPORT + 1) << 8) | *buf, 789 interface->desc.bInterfaceNumber, buf + 1, count - 1, 790 USB_CTRL_SET_TIMEOUT); 791 792 /* count also the report id */ 793 if (ret > 0) 794 ret++; 795 796 return ret; 797 } 798 799 static void usbhid_restart_queues(struct usbhid_device *usbhid) 800 { 801 if (usbhid->urbout) 802 usbhid_restart_out_queue(usbhid); 803 usbhid_restart_ctrl_queue(usbhid); 804 } 805 806 static void __usbhid_restart_queues(struct work_struct *work) 807 { 808 struct usbhid_device *usbhid = 809 container_of(work, struct usbhid_device, restart_work); 810 int r; 811 812 r = usb_autopm_get_interface(usbhid->intf); 813 if (r < 0) 814 return; 815 usb_autopm_put_interface(usbhid->intf); 816 } 817 818 static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid) 819 { 820 struct usbhid_device *usbhid = hid->driver_data; 821 822 usb_buffer_free(dev, usbhid->bufsize, usbhid->inbuf, usbhid->inbuf_dma); 823 usb_buffer_free(dev, usbhid->bufsize, usbhid->outbuf, usbhid->outbuf_dma); 824 usb_buffer_free(dev, sizeof(*(usbhid->cr)), usbhid->cr, usbhid->cr_dma); 825 usb_buffer_free(dev, usbhid->bufsize, usbhid->ctrlbuf, usbhid->ctrlbuf_dma); 826 } 827 828 static int usbhid_parse(struct hid_device *hid) 829 { 830 struct usb_interface *intf = to_usb_interface(hid->dev.parent); 831 struct usb_host_interface *interface = intf->cur_altsetting; 832 struct usb_device *dev = interface_to_usbdev (intf); 833 struct hid_descriptor *hdesc; 834 u32 quirks = 0; 835 unsigned int rsize = 0; 836 char *rdesc; 837 int ret, n; 838 839 quirks = usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor), 840 le16_to_cpu(dev->descriptor.idProduct)); 841 842 if (quirks & HID_QUIRK_IGNORE) 843 return -ENODEV; 844 845 /* Many keyboards and mice don't like to be polled for reports, 846 * so we will always set the HID_QUIRK_NOGET flag for them. */ 847 if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT) { 848 if (interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_KEYBOARD || 849 interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE) 850 quirks |= HID_QUIRK_NOGET; 851 } 852 853 if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) && 854 (!interface->desc.bNumEndpoints || 855 usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) { 856 dbg_hid("class descriptor not present\n"); 857 return -ENODEV; 858 } 859 860 hid->version = le16_to_cpu(hdesc->bcdHID); 861 hid->country = hdesc->bCountryCode; 862 863 for (n = 0; n < hdesc->bNumDescriptors; n++) 864 if (hdesc->desc[n].bDescriptorType == HID_DT_REPORT) 865 rsize = le16_to_cpu(hdesc->desc[n].wDescriptorLength); 866 867 if (!rsize || rsize > HID_MAX_DESCRIPTOR_SIZE) { 868 dbg_hid("weird size of report descriptor (%u)\n", rsize); 869 return -EINVAL; 870 } 871 872 if (!(rdesc = kmalloc(rsize, GFP_KERNEL))) { 873 dbg_hid("couldn't allocate rdesc memory\n"); 874 return -ENOMEM; 875 } 876 877 hid_set_idle(dev, interface->desc.bInterfaceNumber, 0, 0); 878 879 ret = hid_get_class_descriptor(dev, interface->desc.bInterfaceNumber, 880 HID_DT_REPORT, rdesc, rsize); 881 if (ret < 0) { 882 dbg_hid("reading report descriptor failed\n"); 883 kfree(rdesc); 884 goto err; 885 } 886 887 ret = hid_parse_report(hid, rdesc, rsize); 888 kfree(rdesc); 889 if (ret) { 890 dbg_hid("parsing report descriptor failed\n"); 891 goto err; 892 } 893 894 hid->quirks |= quirks; 895 896 return 0; 897 err: 898 return ret; 899 } 900 901 static int usbhid_start(struct hid_device *hid) 902 { 903 struct usb_interface *intf = to_usb_interface(hid->dev.parent); 904 struct usb_host_interface *interface = intf->cur_altsetting; 905 struct usb_device *dev = interface_to_usbdev(intf); 906 struct usbhid_device *usbhid = hid->driver_data; 907 unsigned int n, insize = 0; 908 int ret; 909 910 clear_bit(HID_DISCONNECTED, &usbhid->iofl); 911 912 usbhid->bufsize = HID_MIN_BUFFER_SIZE; 913 hid_find_max_report(hid, HID_INPUT_REPORT, &usbhid->bufsize); 914 hid_find_max_report(hid, HID_OUTPUT_REPORT, &usbhid->bufsize); 915 hid_find_max_report(hid, HID_FEATURE_REPORT, &usbhid->bufsize); 916 917 if (usbhid->bufsize > HID_MAX_BUFFER_SIZE) 918 usbhid->bufsize = HID_MAX_BUFFER_SIZE; 919 920 hid_find_max_report(hid, HID_INPUT_REPORT, &insize); 921 922 if (insize > HID_MAX_BUFFER_SIZE) 923 insize = HID_MAX_BUFFER_SIZE; 924 925 if (hid_alloc_buffers(dev, hid)) { 926 ret = -ENOMEM; 927 goto fail; 928 } 929 930 for (n = 0; n < interface->desc.bNumEndpoints; n++) { 931 struct usb_endpoint_descriptor *endpoint; 932 int pipe; 933 int interval; 934 935 endpoint = &interface->endpoint[n].desc; 936 if (!usb_endpoint_xfer_int(endpoint)) 937 continue; 938 939 interval = endpoint->bInterval; 940 941 /* Some vendors give fullspeed interval on highspeed devides */ 942 if (hid->quirks & HID_QUIRK_FULLSPEED_INTERVAL && 943 dev->speed == USB_SPEED_HIGH) { 944 interval = fls(endpoint->bInterval*8); 945 printk(KERN_INFO "%s: Fixing fullspeed to highspeed interval: %d -> %d\n", 946 hid->name, endpoint->bInterval, interval); 947 } 948 949 /* Change the polling interval of mice. */ 950 if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0) 951 interval = hid_mousepoll_interval; 952 953 ret = -ENOMEM; 954 if (usb_endpoint_dir_in(endpoint)) { 955 if (usbhid->urbin) 956 continue; 957 if (!(usbhid->urbin = usb_alloc_urb(0, GFP_KERNEL))) 958 goto fail; 959 pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); 960 usb_fill_int_urb(usbhid->urbin, dev, pipe, usbhid->inbuf, insize, 961 hid_irq_in, hid, interval); 962 usbhid->urbin->transfer_dma = usbhid->inbuf_dma; 963 usbhid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 964 } else { 965 if (usbhid->urbout) 966 continue; 967 if (!(usbhid->urbout = usb_alloc_urb(0, GFP_KERNEL))) 968 goto fail; 969 pipe = usb_sndintpipe(dev, endpoint->bEndpointAddress); 970 usb_fill_int_urb(usbhid->urbout, dev, pipe, usbhid->outbuf, 0, 971 hid_irq_out, hid, interval); 972 usbhid->urbout->transfer_dma = usbhid->outbuf_dma; 973 usbhid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 974 } 975 } 976 977 init_waitqueue_head(&usbhid->wait); 978 INIT_WORK(&usbhid->reset_work, hid_reset); 979 INIT_WORK(&usbhid->restart_work, __usbhid_restart_queues); 980 setup_timer(&usbhid->io_retry, hid_retry_timeout, (unsigned long) hid); 981 982 spin_lock_init(&usbhid->lock); 983 984 usbhid->intf = intf; 985 usbhid->ifnum = interface->desc.bInterfaceNumber; 986 987 usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL); 988 if (!usbhid->urbctrl) { 989 ret = -ENOMEM; 990 goto fail; 991 } 992 993 usb_fill_control_urb(usbhid->urbctrl, dev, 0, (void *) usbhid->cr, 994 usbhid->ctrlbuf, 1, hid_ctrl, hid); 995 usbhid->urbctrl->setup_dma = usbhid->cr_dma; 996 usbhid->urbctrl->transfer_dma = usbhid->ctrlbuf_dma; 997 usbhid->urbctrl->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP); 998 999 if (!(hid->quirks & HID_QUIRK_NO_INIT_REPORTS)) 1000 usbhid_init_reports(hid); 1001 1002 set_bit(HID_STARTED, &usbhid->iofl); 1003 1004 /* Some keyboards don't work until their LEDs have been set. 1005 * Since BIOSes do set the LEDs, it must be safe for any device 1006 * that supports the keyboard boot protocol. 1007 */ 1008 if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT && 1009 interface->desc.bInterfaceProtocol == 1010 USB_INTERFACE_PROTOCOL_KEYBOARD) 1011 usbhid_set_leds(hid); 1012 1013 return 0; 1014 1015 fail: 1016 usb_free_urb(usbhid->urbin); 1017 usb_free_urb(usbhid->urbout); 1018 usb_free_urb(usbhid->urbctrl); 1019 usbhid->urbin = NULL; 1020 usbhid->urbout = NULL; 1021 usbhid->urbctrl = NULL; 1022 hid_free_buffers(dev, hid); 1023 return ret; 1024 } 1025 1026 static void usbhid_stop(struct hid_device *hid) 1027 { 1028 struct usbhid_device *usbhid = hid->driver_data; 1029 1030 if (WARN_ON(!usbhid)) 1031 return; 1032 1033 clear_bit(HID_STARTED, &usbhid->iofl); 1034 spin_lock_irq(&usbhid->lock); /* Sync with error handler */ 1035 set_bit(HID_DISCONNECTED, &usbhid->iofl); 1036 spin_unlock_irq(&usbhid->lock); 1037 usb_kill_urb(usbhid->urbin); 1038 usb_kill_urb(usbhid->urbout); 1039 usb_kill_urb(usbhid->urbctrl); 1040 1041 hid_cancel_delayed_stuff(usbhid); 1042 1043 hid->claimed = 0; 1044 1045 usb_free_urb(usbhid->urbin); 1046 usb_free_urb(usbhid->urbctrl); 1047 usb_free_urb(usbhid->urbout); 1048 usbhid->urbin = NULL; /* don't mess up next start */ 1049 usbhid->urbctrl = NULL; 1050 usbhid->urbout = NULL; 1051 1052 hid_free_buffers(hid_to_usb_dev(hid), hid); 1053 } 1054 1055 static int usbhid_power(struct hid_device *hid, int lvl) 1056 { 1057 int r = 0; 1058 1059 switch (lvl) { 1060 case PM_HINT_FULLON: 1061 r = usbhid_get_power(hid); 1062 break; 1063 case PM_HINT_NORMAL: 1064 usbhid_put_power(hid); 1065 break; 1066 } 1067 return r; 1068 } 1069 1070 static struct hid_ll_driver usb_hid_driver = { 1071 .parse = usbhid_parse, 1072 .start = usbhid_start, 1073 .stop = usbhid_stop, 1074 .open = usbhid_open, 1075 .close = usbhid_close, 1076 .power = usbhid_power, 1077 .hidinput_input_event = usb_hidinput_input_event, 1078 }; 1079 1080 static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id) 1081 { 1082 struct usb_host_interface *interface = intf->cur_altsetting; 1083 struct usb_device *dev = interface_to_usbdev(intf); 1084 struct usbhid_device *usbhid; 1085 struct hid_device *hid; 1086 unsigned int n, has_in = 0; 1087 size_t len; 1088 int ret; 1089 1090 dbg_hid("HID probe called for ifnum %d\n", 1091 intf->altsetting->desc.bInterfaceNumber); 1092 1093 for (n = 0; n < interface->desc.bNumEndpoints; n++) 1094 if (usb_endpoint_is_int_in(&interface->endpoint[n].desc)) 1095 has_in++; 1096 if (!has_in) { 1097 dev_err(&intf->dev, "couldn't find an input interrupt " 1098 "endpoint\n"); 1099 return -ENODEV; 1100 } 1101 1102 hid = hid_allocate_device(); 1103 if (IS_ERR(hid)) 1104 return PTR_ERR(hid); 1105 1106 usb_set_intfdata(intf, hid); 1107 hid->ll_driver = &usb_hid_driver; 1108 hid->hid_output_raw_report = usbhid_output_raw_report; 1109 hid->ff_init = hid_pidff_init; 1110 #ifdef CONFIG_USB_HIDDEV 1111 hid->hiddev_connect = hiddev_connect; 1112 hid->hiddev_disconnect = hiddev_disconnect; 1113 hid->hiddev_hid_event = hiddev_hid_event; 1114 hid->hiddev_report_event = hiddev_report_event; 1115 #endif 1116 hid->dev.parent = &intf->dev; 1117 hid->bus = BUS_USB; 1118 hid->vendor = le16_to_cpu(dev->descriptor.idVendor); 1119 hid->product = le16_to_cpu(dev->descriptor.idProduct); 1120 hid->name[0] = 0; 1121 if (intf->cur_altsetting->desc.bInterfaceProtocol == 1122 USB_INTERFACE_PROTOCOL_MOUSE) 1123 hid->type = HID_TYPE_USBMOUSE; 1124 1125 if (dev->manufacturer) 1126 strlcpy(hid->name, dev->manufacturer, sizeof(hid->name)); 1127 1128 if (dev->product) { 1129 if (dev->manufacturer) 1130 strlcat(hid->name, " ", sizeof(hid->name)); 1131 strlcat(hid->name, dev->product, sizeof(hid->name)); 1132 } 1133 1134 if (!strlen(hid->name)) 1135 snprintf(hid->name, sizeof(hid->name), "HID %04x:%04x", 1136 le16_to_cpu(dev->descriptor.idVendor), 1137 le16_to_cpu(dev->descriptor.idProduct)); 1138 1139 usb_make_path(dev, hid->phys, sizeof(hid->phys)); 1140 strlcat(hid->phys, "/input", sizeof(hid->phys)); 1141 len = strlen(hid->phys); 1142 if (len < sizeof(hid->phys) - 1) 1143 snprintf(hid->phys + len, sizeof(hid->phys) - len, 1144 "%d", intf->altsetting[0].desc.bInterfaceNumber); 1145 1146 if (usb_string(dev, dev->descriptor.iSerialNumber, hid->uniq, 64) <= 0) 1147 hid->uniq[0] = 0; 1148 1149 usbhid = kzalloc(sizeof(*usbhid), GFP_KERNEL); 1150 if (usbhid == NULL) { 1151 ret = -ENOMEM; 1152 goto err; 1153 } 1154 1155 hid->driver_data = usbhid; 1156 usbhid->hid = hid; 1157 1158 ret = hid_add_device(hid); 1159 if (ret) { 1160 if (ret != -ENODEV) 1161 dev_err(&intf->dev, "can't add hid device: %d\n", ret); 1162 goto err_free; 1163 } 1164 1165 return 0; 1166 err_free: 1167 kfree(usbhid); 1168 err: 1169 hid_destroy_device(hid); 1170 return ret; 1171 } 1172 1173 static void usbhid_disconnect(struct usb_interface *intf) 1174 { 1175 struct hid_device *hid = usb_get_intfdata(intf); 1176 struct usbhid_device *usbhid; 1177 1178 if (WARN_ON(!hid)) 1179 return; 1180 1181 usbhid = hid->driver_data; 1182 hid_destroy_device(hid); 1183 kfree(usbhid); 1184 } 1185 1186 static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid) 1187 { 1188 del_timer_sync(&usbhid->io_retry); 1189 cancel_work_sync(&usbhid->restart_work); 1190 cancel_work_sync(&usbhid->reset_work); 1191 } 1192 1193 static void hid_cease_io(struct usbhid_device *usbhid) 1194 { 1195 del_timer(&usbhid->io_retry); 1196 usb_kill_urb(usbhid->urbin); 1197 usb_kill_urb(usbhid->urbctrl); 1198 usb_kill_urb(usbhid->urbout); 1199 } 1200 1201 /* Treat USB reset pretty much the same as suspend/resume */ 1202 static int hid_pre_reset(struct usb_interface *intf) 1203 { 1204 struct hid_device *hid = usb_get_intfdata(intf); 1205 struct usbhid_device *usbhid = hid->driver_data; 1206 1207 spin_lock_irq(&usbhid->lock); 1208 set_bit(HID_RESET_PENDING, &usbhid->iofl); 1209 spin_unlock_irq(&usbhid->lock); 1210 cancel_work_sync(&usbhid->restart_work); 1211 hid_cease_io(usbhid); 1212 1213 return 0; 1214 } 1215 1216 /* Same routine used for post_reset and reset_resume */ 1217 static int hid_post_reset(struct usb_interface *intf) 1218 { 1219 struct usb_device *dev = interface_to_usbdev (intf); 1220 struct hid_device *hid = usb_get_intfdata(intf); 1221 struct usbhid_device *usbhid = hid->driver_data; 1222 int status; 1223 1224 spin_lock_irq(&usbhid->lock); 1225 clear_bit(HID_RESET_PENDING, &usbhid->iofl); 1226 spin_unlock_irq(&usbhid->lock); 1227 hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0); 1228 status = hid_start_in(hid); 1229 if (status < 0) 1230 hid_io_error(hid); 1231 usbhid_restart_queues(usbhid); 1232 1233 return 0; 1234 } 1235 1236 int usbhid_get_power(struct hid_device *hid) 1237 { 1238 struct usbhid_device *usbhid = hid->driver_data; 1239 1240 return usb_autopm_get_interface(usbhid->intf); 1241 } 1242 1243 void usbhid_put_power(struct hid_device *hid) 1244 { 1245 struct usbhid_device *usbhid = hid->driver_data; 1246 1247 usb_autopm_put_interface(usbhid->intf); 1248 } 1249 1250 1251 #ifdef CONFIG_PM 1252 static int hid_suspend(struct usb_interface *intf, pm_message_t message) 1253 { 1254 struct hid_device *hid = usb_get_intfdata(intf); 1255 struct usbhid_device *usbhid = hid->driver_data; 1256 int status; 1257 1258 if (message.event & PM_EVENT_AUTO) { 1259 spin_lock_irq(&usbhid->lock); /* Sync with error handler */ 1260 if (!test_bit(HID_RESET_PENDING, &usbhid->iofl) 1261 && !test_bit(HID_CLEAR_HALT, &usbhid->iofl) 1262 && !test_bit(HID_OUT_RUNNING, &usbhid->iofl) 1263 && !test_bit(HID_CTRL_RUNNING, &usbhid->iofl) 1264 && !test_bit(HID_KEYS_PRESSED, &usbhid->iofl) 1265 && (!usbhid->ledcount || ignoreled)) 1266 { 1267 set_bit(HID_REPORTED_IDLE, &usbhid->iofl); 1268 spin_unlock_irq(&usbhid->lock); 1269 } else { 1270 usbhid_mark_busy(usbhid); 1271 spin_unlock_irq(&usbhid->lock); 1272 return -EBUSY; 1273 } 1274 1275 } else { 1276 spin_lock_irq(&usbhid->lock); 1277 set_bit(HID_REPORTED_IDLE, &usbhid->iofl); 1278 spin_unlock_irq(&usbhid->lock); 1279 if (usbhid_wait_io(hid) < 0) 1280 return -EIO; 1281 } 1282 1283 if (!ignoreled && (message.event & PM_EVENT_AUTO)) { 1284 spin_lock_irq(&usbhid->lock); 1285 if (test_bit(HID_LED_ON, &usbhid->iofl)) { 1286 spin_unlock_irq(&usbhid->lock); 1287 usbhid_mark_busy(usbhid); 1288 return -EBUSY; 1289 } 1290 spin_unlock_irq(&usbhid->lock); 1291 } 1292 1293 hid_cancel_delayed_stuff(usbhid); 1294 hid_cease_io(usbhid); 1295 1296 if ((message.event & PM_EVENT_AUTO) && 1297 test_bit(HID_KEYS_PRESSED, &usbhid->iofl)) { 1298 /* lost race against keypresses */ 1299 status = hid_start_in(hid); 1300 if (status < 0) 1301 hid_io_error(hid); 1302 usbhid_mark_busy(usbhid); 1303 return -EBUSY; 1304 } 1305 dev_dbg(&intf->dev, "suspend\n"); 1306 return 0; 1307 } 1308 1309 static int hid_resume(struct usb_interface *intf) 1310 { 1311 struct hid_device *hid = usb_get_intfdata (intf); 1312 struct usbhid_device *usbhid = hid->driver_data; 1313 int status; 1314 1315 if (!test_bit(HID_STARTED, &usbhid->iofl)) 1316 return 0; 1317 1318 clear_bit(HID_REPORTED_IDLE, &usbhid->iofl); 1319 usbhid_mark_busy(usbhid); 1320 1321 if (test_bit(HID_CLEAR_HALT, &usbhid->iofl) || 1322 test_bit(HID_RESET_PENDING, &usbhid->iofl)) 1323 schedule_work(&usbhid->reset_work); 1324 usbhid->retry_delay = 0; 1325 status = hid_start_in(hid); 1326 if (status < 0) 1327 hid_io_error(hid); 1328 usbhid_restart_queues(usbhid); 1329 1330 dev_dbg(&intf->dev, "resume status %d\n", status); 1331 return 0; 1332 } 1333 1334 static int hid_reset_resume(struct usb_interface *intf) 1335 { 1336 struct hid_device *hid = usb_get_intfdata(intf); 1337 struct usbhid_device *usbhid = hid->driver_data; 1338 1339 clear_bit(HID_REPORTED_IDLE, &usbhid->iofl); 1340 return hid_post_reset(intf); 1341 } 1342 1343 #endif /* CONFIG_PM */ 1344 1345 static struct usb_device_id hid_usb_ids [] = { 1346 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS, 1347 .bInterfaceClass = USB_INTERFACE_CLASS_HID }, 1348 { } /* Terminating entry */ 1349 }; 1350 1351 MODULE_DEVICE_TABLE (usb, hid_usb_ids); 1352 1353 static struct usb_driver hid_driver = { 1354 .name = "usbhid", 1355 .probe = usbhid_probe, 1356 .disconnect = usbhid_disconnect, 1357 #ifdef CONFIG_PM 1358 .suspend = hid_suspend, 1359 .resume = hid_resume, 1360 .reset_resume = hid_reset_resume, 1361 #endif 1362 .pre_reset = hid_pre_reset, 1363 .post_reset = hid_post_reset, 1364 .id_table = hid_usb_ids, 1365 .supports_autosuspend = 1, 1366 }; 1367 1368 static const struct hid_device_id hid_usb_table[] = { 1369 { HID_USB_DEVICE(HID_ANY_ID, HID_ANY_ID) }, 1370 { } 1371 }; 1372 1373 static struct hid_driver hid_usb_driver = { 1374 .name = "generic-usb", 1375 .id_table = hid_usb_table, 1376 }; 1377 1378 static int __init hid_init(void) 1379 { 1380 int retval = -ENOMEM; 1381 1382 resumption_waker = create_freezeable_workqueue("usbhid_resumer"); 1383 if (!resumption_waker) 1384 goto no_queue; 1385 retval = hid_register_driver(&hid_usb_driver); 1386 if (retval) 1387 goto hid_register_fail; 1388 retval = usbhid_quirks_init(quirks_param); 1389 if (retval) 1390 goto usbhid_quirks_init_fail; 1391 retval = hiddev_init(); 1392 if (retval) 1393 goto hiddev_init_fail; 1394 retval = usb_register(&hid_driver); 1395 if (retval) 1396 goto usb_register_fail; 1397 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n"); 1398 1399 return 0; 1400 usb_register_fail: 1401 hiddev_exit(); 1402 hiddev_init_fail: 1403 usbhid_quirks_exit(); 1404 usbhid_quirks_init_fail: 1405 hid_unregister_driver(&hid_usb_driver); 1406 hid_register_fail: 1407 destroy_workqueue(resumption_waker); 1408 no_queue: 1409 return retval; 1410 } 1411 1412 static void __exit hid_exit(void) 1413 { 1414 usb_deregister(&hid_driver); 1415 hiddev_exit(); 1416 usbhid_quirks_exit(); 1417 hid_unregister_driver(&hid_usb_driver); 1418 destroy_workqueue(resumption_waker); 1419 } 1420 1421 module_init(hid_init); 1422 module_exit(hid_exit); 1423 1424 MODULE_AUTHOR("Andreas Gal"); 1425 MODULE_AUTHOR("Vojtech Pavlik"); 1426 MODULE_AUTHOR("Jiri Kosina"); 1427 MODULE_DESCRIPTION(DRIVER_DESC); 1428 MODULE_LICENSE(DRIVER_LICENSE); 1429