at v2.6.21 1477 lines 49 kB view raw
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) 2006-2007 Jiri Kosina 8 */ 9 10/* 11 * This program is free software; you can redistribute it and/or modify it 12 * under the terms of the GNU General Public License as published by the Free 13 * Software Foundation; either version 2 of the License, or (at your option) 14 * any later version. 15 */ 16 17#include <linux/module.h> 18#include <linux/slab.h> 19#include <linux/init.h> 20#include <linux/kernel.h> 21#include <linux/list.h> 22#include <linux/mm.h> 23#include <linux/smp_lock.h> 24#include <linux/spinlock.h> 25#include <asm/unaligned.h> 26#include <asm/byteorder.h> 27#include <linux/input.h> 28#include <linux/wait.h> 29 30#include <linux/usb.h> 31 32#include <linux/hid.h> 33#include <linux/hiddev.h> 34#include <linux/hid-debug.h> 35#include "usbhid.h" 36 37/* 38 * Version Information 39 */ 40 41#define DRIVER_VERSION "v2.6" 42#define DRIVER_AUTHOR "Andreas Gal, Vojtech Pavlik" 43#define DRIVER_DESC "USB HID core driver" 44#define DRIVER_LICENSE "GPL" 45 46static char *hid_types[] = {"Device", "Pointer", "Mouse", "Device", "Joystick", 47 "Gamepad", "Keyboard", "Keypad", "Multi-Axis Controller"}; 48/* 49 * Module parameters. 50 */ 51 52static unsigned int hid_mousepoll_interval; 53module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644); 54MODULE_PARM_DESC(mousepoll, "Polling interval of mice"); 55 56/* 57 * Input submission and I/O error handler. 58 */ 59 60static void hid_io_error(struct hid_device *hid); 61 62/* Start up the input URB */ 63static int hid_start_in(struct hid_device *hid) 64{ 65 unsigned long flags; 66 int rc = 0; 67 struct usbhid_device *usbhid = hid->driver_data; 68 69 spin_lock_irqsave(&usbhid->inlock, flags); 70 if (hid->open > 0 && !test_bit(HID_SUSPENDED, &usbhid->iofl) && 71 !test_and_set_bit(HID_IN_RUNNING, &usbhid->iofl)) { 72 rc = usb_submit_urb(usbhid->urbin, GFP_ATOMIC); 73 if (rc != 0) 74 clear_bit(HID_IN_RUNNING, &usbhid->iofl); 75 } 76 spin_unlock_irqrestore(&usbhid->inlock, flags); 77 return rc; 78} 79 80/* I/O retry timer routine */ 81static void hid_retry_timeout(unsigned long _hid) 82{ 83 struct hid_device *hid = (struct hid_device *) _hid; 84 struct usbhid_device *usbhid = hid->driver_data; 85 86 dev_dbg(&usbhid->intf->dev, "retrying intr urb\n"); 87 if (hid_start_in(hid)) 88 hid_io_error(hid); 89} 90 91/* Workqueue routine to reset the device or clear a halt */ 92static void hid_reset(struct work_struct *work) 93{ 94 struct usbhid_device *usbhid = 95 container_of(work, struct usbhid_device, reset_work); 96 struct hid_device *hid = usbhid->hid; 97 int rc_lock, rc = 0; 98 99 if (test_bit(HID_CLEAR_HALT, &usbhid->iofl)) { 100 dev_dbg(&usbhid->intf->dev, "clear halt\n"); 101 rc = usb_clear_halt(hid_to_usb_dev(hid), usbhid->urbin->pipe); 102 clear_bit(HID_CLEAR_HALT, &usbhid->iofl); 103 hid_start_in(hid); 104 } 105 106 else if (test_bit(HID_RESET_PENDING, &usbhid->iofl)) { 107 dev_dbg(&usbhid->intf->dev, "resetting device\n"); 108 rc = rc_lock = usb_lock_device_for_reset(hid_to_usb_dev(hid), usbhid->intf); 109 if (rc_lock >= 0) { 110 rc = usb_reset_composite_device(hid_to_usb_dev(hid), usbhid->intf); 111 if (rc_lock) 112 usb_unlock_device(hid_to_usb_dev(hid)); 113 } 114 clear_bit(HID_RESET_PENDING, &usbhid->iofl); 115 } 116 117 switch (rc) { 118 case 0: 119 if (!test_bit(HID_IN_RUNNING, &usbhid->iofl)) 120 hid_io_error(hid); 121 break; 122 default: 123 err("can't reset device, %s-%s/input%d, status %d", 124 hid_to_usb_dev(hid)->bus->bus_name, 125 hid_to_usb_dev(hid)->devpath, 126 usbhid->ifnum, rc); 127 /* FALLTHROUGH */ 128 case -EHOSTUNREACH: 129 case -ENODEV: 130 case -EINTR: 131 break; 132 } 133} 134 135/* Main I/O error handler */ 136static void hid_io_error(struct hid_device *hid) 137{ 138 unsigned long flags; 139 struct usbhid_device *usbhid = hid->driver_data; 140 141 spin_lock_irqsave(&usbhid->inlock, flags); 142 143 /* Stop when disconnected */ 144 if (usb_get_intfdata(usbhid->intf) == NULL) 145 goto done; 146 147 /* When an error occurs, retry at increasing intervals */ 148 if (usbhid->retry_delay == 0) { 149 usbhid->retry_delay = 13; /* Then 26, 52, 104, 104, ... */ 150 usbhid->stop_retry = jiffies + msecs_to_jiffies(1000); 151 } else if (usbhid->retry_delay < 100) 152 usbhid->retry_delay *= 2; 153 154 if (time_after(jiffies, usbhid->stop_retry)) { 155 156 /* Retries failed, so do a port reset */ 157 if (!test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) { 158 schedule_work(&usbhid->reset_work); 159 goto done; 160 } 161 } 162 163 mod_timer(&usbhid->io_retry, 164 jiffies + msecs_to_jiffies(usbhid->retry_delay)); 165done: 166 spin_unlock_irqrestore(&usbhid->inlock, flags); 167} 168 169/* 170 * Input interrupt completion handler. 171 */ 172 173static void hid_irq_in(struct urb *urb) 174{ 175 struct hid_device *hid = urb->context; 176 struct usbhid_device *usbhid = hid->driver_data; 177 int status; 178 179 switch (urb->status) { 180 case 0: /* success */ 181 usbhid->retry_delay = 0; 182 hid_input_report(urb->context, HID_INPUT_REPORT, 183 urb->transfer_buffer, 184 urb->actual_length, 1); 185 break; 186 case -EPIPE: /* stall */ 187 clear_bit(HID_IN_RUNNING, &usbhid->iofl); 188 set_bit(HID_CLEAR_HALT, &usbhid->iofl); 189 schedule_work(&usbhid->reset_work); 190 return; 191 case -ECONNRESET: /* unlink */ 192 case -ENOENT: 193 case -ESHUTDOWN: /* unplug */ 194 clear_bit(HID_IN_RUNNING, &usbhid->iofl); 195 return; 196 case -EILSEQ: /* protocol error or unplug */ 197 case -EPROTO: /* protocol error or unplug */ 198 case -ETIME: /* protocol error or unplug */ 199 case -ETIMEDOUT: /* Should never happen, but... */ 200 clear_bit(HID_IN_RUNNING, &usbhid->iofl); 201 hid_io_error(hid); 202 return; 203 default: /* error */ 204 warn("input irq status %d received", urb->status); 205 } 206 207 status = usb_submit_urb(urb, GFP_ATOMIC); 208 if (status) { 209 clear_bit(HID_IN_RUNNING, &usbhid->iofl); 210 if (status != -EPERM) { 211 err("can't resubmit intr, %s-%s/input%d, status %d", 212 hid_to_usb_dev(hid)->bus->bus_name, 213 hid_to_usb_dev(hid)->devpath, 214 usbhid->ifnum, status); 215 hid_io_error(hid); 216 } 217 } 218} 219 220static int hid_submit_out(struct hid_device *hid) 221{ 222 struct hid_report *report; 223 struct usbhid_device *usbhid = hid->driver_data; 224 225 report = usbhid->out[usbhid->outtail]; 226 227 hid_output_report(report, usbhid->outbuf); 228 usbhid->urbout->transfer_buffer_length = ((report->size - 1) >> 3) + 1 + (report->id > 0); 229 usbhid->urbout->dev = hid_to_usb_dev(hid); 230 231 dbg("submitting out urb"); 232 233 if (usb_submit_urb(usbhid->urbout, GFP_ATOMIC)) { 234 err("usb_submit_urb(out) failed"); 235 return -1; 236 } 237 238 return 0; 239} 240 241static int hid_submit_ctrl(struct hid_device *hid) 242{ 243 struct hid_report *report; 244 unsigned char dir; 245 int len; 246 struct usbhid_device *usbhid = hid->driver_data; 247 248 report = usbhid->ctrl[usbhid->ctrltail].report; 249 dir = usbhid->ctrl[usbhid->ctrltail].dir; 250 251 len = ((report->size - 1) >> 3) + 1 + (report->id > 0); 252 if (dir == USB_DIR_OUT) { 253 hid_output_report(report, usbhid->ctrlbuf); 254 usbhid->urbctrl->pipe = usb_sndctrlpipe(hid_to_usb_dev(hid), 0); 255 usbhid->urbctrl->transfer_buffer_length = len; 256 } else { 257 int maxpacket, padlen; 258 259 usbhid->urbctrl->pipe = usb_rcvctrlpipe(hid_to_usb_dev(hid), 0); 260 maxpacket = usb_maxpacket(hid_to_usb_dev(hid), usbhid->urbctrl->pipe, 0); 261 if (maxpacket > 0) { 262 padlen = (len + maxpacket - 1) / maxpacket; 263 padlen *= maxpacket; 264 if (padlen > usbhid->bufsize) 265 padlen = usbhid->bufsize; 266 } else 267 padlen = 0; 268 usbhid->urbctrl->transfer_buffer_length = padlen; 269 } 270 usbhid->urbctrl->dev = hid_to_usb_dev(hid); 271 272 usbhid->cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | dir; 273 usbhid->cr->bRequest = (dir == USB_DIR_OUT) ? HID_REQ_SET_REPORT : HID_REQ_GET_REPORT; 274 usbhid->cr->wValue = cpu_to_le16(((report->type + 1) << 8) | report->id); 275 usbhid->cr->wIndex = cpu_to_le16(usbhid->ifnum); 276 usbhid->cr->wLength = cpu_to_le16(len); 277 278 dbg("submitting ctrl urb: %s wValue=0x%04x wIndex=0x%04x wLength=%u", 279 usbhid->cr->bRequest == HID_REQ_SET_REPORT ? "Set_Report" : "Get_Report", 280 usbhid->cr->wValue, usbhid->cr->wIndex, usbhid->cr->wLength); 281 282 if (usb_submit_urb(usbhid->urbctrl, GFP_ATOMIC)) { 283 err("usb_submit_urb(ctrl) failed"); 284 return -1; 285 } 286 287 return 0; 288} 289 290/* 291 * Output interrupt completion handler. 292 */ 293 294static void hid_irq_out(struct urb *urb) 295{ 296 struct hid_device *hid = urb->context; 297 struct usbhid_device *usbhid = hid->driver_data; 298 unsigned long flags; 299 int unplug = 0; 300 301 switch (urb->status) { 302 case 0: /* success */ 303 break; 304 case -ESHUTDOWN: /* unplug */ 305 unplug = 1; 306 case -EILSEQ: /* protocol error or unplug */ 307 case -EPROTO: /* protocol error or unplug */ 308 case -ECONNRESET: /* unlink */ 309 case -ENOENT: 310 break; 311 default: /* error */ 312 warn("output irq status %d received", urb->status); 313 } 314 315 spin_lock_irqsave(&usbhid->outlock, flags); 316 317 if (unplug) 318 usbhid->outtail = usbhid->outhead; 319 else 320 usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1); 321 322 if (usbhid->outhead != usbhid->outtail) { 323 if (hid_submit_out(hid)) { 324 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); 325 wake_up(&hid->wait); 326 } 327 spin_unlock_irqrestore(&usbhid->outlock, flags); 328 return; 329 } 330 331 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); 332 spin_unlock_irqrestore(&usbhid->outlock, flags); 333 wake_up(&hid->wait); 334} 335 336/* 337 * Control pipe completion handler. 338 */ 339 340static void hid_ctrl(struct urb *urb) 341{ 342 struct hid_device *hid = urb->context; 343 struct usbhid_device *usbhid = hid->driver_data; 344 unsigned long flags; 345 int unplug = 0; 346 347 spin_lock_irqsave(&usbhid->ctrllock, flags); 348 349 switch (urb->status) { 350 case 0: /* success */ 351 if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN) 352 hid_input_report(urb->context, usbhid->ctrl[usbhid->ctrltail].report->type, 353 urb->transfer_buffer, urb->actual_length, 0); 354 break; 355 case -ESHUTDOWN: /* unplug */ 356 unplug = 1; 357 case -EILSEQ: /* protocol error or unplug */ 358 case -EPROTO: /* protocol error or unplug */ 359 case -ECONNRESET: /* unlink */ 360 case -ENOENT: 361 case -EPIPE: /* report not available */ 362 break; 363 default: /* error */ 364 warn("ctrl urb status %d received", urb->status); 365 } 366 367 if (unplug) 368 usbhid->ctrltail = usbhid->ctrlhead; 369 else 370 usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1); 371 372 if (usbhid->ctrlhead != usbhid->ctrltail) { 373 if (hid_submit_ctrl(hid)) { 374 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); 375 wake_up(&hid->wait); 376 } 377 spin_unlock_irqrestore(&usbhid->ctrllock, flags); 378 return; 379 } 380 381 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); 382 spin_unlock_irqrestore(&usbhid->ctrllock, flags); 383 wake_up(&hid->wait); 384} 385 386void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char dir) 387{ 388 int head; 389 unsigned long flags; 390 struct usbhid_device *usbhid = hid->driver_data; 391 392 if ((hid->quirks & HID_QUIRK_NOGET) && dir == USB_DIR_IN) 393 return; 394 395 if (usbhid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) { 396 397 spin_lock_irqsave(&usbhid->outlock, flags); 398 399 if ((head = (usbhid->outhead + 1) & (HID_OUTPUT_FIFO_SIZE - 1)) == usbhid->outtail) { 400 spin_unlock_irqrestore(&usbhid->outlock, flags); 401 warn("output queue full"); 402 return; 403 } 404 405 usbhid->out[usbhid->outhead] = report; 406 usbhid->outhead = head; 407 408 if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl)) 409 if (hid_submit_out(hid)) 410 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); 411 412 spin_unlock_irqrestore(&usbhid->outlock, flags); 413 return; 414 } 415 416 spin_lock_irqsave(&usbhid->ctrllock, flags); 417 418 if ((head = (usbhid->ctrlhead + 1) & (HID_CONTROL_FIFO_SIZE - 1)) == usbhid->ctrltail) { 419 spin_unlock_irqrestore(&usbhid->ctrllock, flags); 420 warn("control queue full"); 421 return; 422 } 423 424 usbhid->ctrl[usbhid->ctrlhead].report = report; 425 usbhid->ctrl[usbhid->ctrlhead].dir = dir; 426 usbhid->ctrlhead = head; 427 428 if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl)) 429 if (hid_submit_ctrl(hid)) 430 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); 431 432 spin_unlock_irqrestore(&usbhid->ctrllock, flags); 433} 434 435static int usb_hidinput_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) 436{ 437 struct hid_device *hid = dev->private; 438 struct hid_field *field; 439 int offset; 440 441 if (type == EV_FF) 442 return input_ff_event(dev, type, code, value); 443 444 if (type != EV_LED) 445 return -1; 446 447 if ((offset = hidinput_find_field(hid, type, code, &field)) == -1) { 448 warn("event field not found"); 449 return -1; 450 } 451 452 hid_set_field(field, offset, value); 453 usbhid_submit_report(hid, field->report, USB_DIR_OUT); 454 455 return 0; 456} 457 458int usbhid_wait_io(struct hid_device *hid) 459{ 460 struct usbhid_device *usbhid = hid->driver_data; 461 462 if (!wait_event_timeout(hid->wait, (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl) && 463 !test_bit(HID_OUT_RUNNING, &usbhid->iofl)), 464 10*HZ)) { 465 dbg("timeout waiting for ctrl or out queue to clear"); 466 return -1; 467 } 468 469 return 0; 470} 471 472static int hid_set_idle(struct usb_device *dev, int ifnum, int report, int idle) 473{ 474 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 475 HID_REQ_SET_IDLE, USB_TYPE_CLASS | USB_RECIP_INTERFACE, (idle << 8) | report, 476 ifnum, NULL, 0, USB_CTRL_SET_TIMEOUT); 477} 478 479static int hid_get_class_descriptor(struct usb_device *dev, int ifnum, 480 unsigned char type, void *buf, int size) 481{ 482 int result, retries = 4; 483 484 memset(buf, 0, size); 485 486 do { 487 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 488 USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN, 489 (type << 8), ifnum, buf, size, USB_CTRL_GET_TIMEOUT); 490 retries--; 491 } while (result < size && retries); 492 return result; 493} 494 495int usbhid_open(struct hid_device *hid) 496{ 497 ++hid->open; 498 if (hid_start_in(hid)) 499 hid_io_error(hid); 500 return 0; 501} 502 503void usbhid_close(struct hid_device *hid) 504{ 505 struct usbhid_device *usbhid = hid->driver_data; 506 507 if (!--hid->open) 508 usb_kill_urb(usbhid->urbin); 509} 510 511#define USB_VENDOR_ID_PANJIT 0x134c 512 513#define USB_VENDOR_ID_TURBOX 0x062a 514#define USB_DEVICE_ID_TURBOX_KEYBOARD 0x0201 515#define USB_VENDOR_ID_CIDC 0x1677 516 517/* 518 * Initialize all reports 519 */ 520 521void usbhid_init_reports(struct hid_device *hid) 522{ 523 struct hid_report *report; 524 struct usbhid_device *usbhid = hid->driver_data; 525 int err, ret; 526 527 list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].report_list, list) 528 usbhid_submit_report(hid, report, USB_DIR_IN); 529 530 list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].report_list, list) 531 usbhid_submit_report(hid, report, USB_DIR_IN); 532 533 err = 0; 534 ret = usbhid_wait_io(hid); 535 while (ret) { 536 err |= ret; 537 if (test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) 538 usb_kill_urb(usbhid->urbctrl); 539 if (test_bit(HID_OUT_RUNNING, &usbhid->iofl)) 540 usb_kill_urb(usbhid->urbout); 541 ret = usbhid_wait_io(hid); 542 } 543 544 if (err) 545 warn("timeout initializing reports"); 546} 547 548#define USB_VENDOR_ID_GTCO 0x078c 549#define USB_DEVICE_ID_GTCO_90 0x0090 550#define USB_DEVICE_ID_GTCO_100 0x0100 551#define USB_DEVICE_ID_GTCO_101 0x0101 552#define USB_DEVICE_ID_GTCO_103 0x0103 553#define USB_DEVICE_ID_GTCO_104 0x0104 554#define USB_DEVICE_ID_GTCO_105 0x0105 555#define USB_DEVICE_ID_GTCO_106 0x0106 556#define USB_DEVICE_ID_GTCO_107 0x0107 557#define USB_DEVICE_ID_GTCO_108 0x0108 558#define USB_DEVICE_ID_GTCO_200 0x0200 559#define USB_DEVICE_ID_GTCO_201 0x0201 560#define USB_DEVICE_ID_GTCO_202 0x0202 561#define USB_DEVICE_ID_GTCO_203 0x0203 562#define USB_DEVICE_ID_GTCO_204 0x0204 563#define USB_DEVICE_ID_GTCO_205 0x0205 564#define USB_DEVICE_ID_GTCO_206 0x0206 565#define USB_DEVICE_ID_GTCO_207 0x0207 566#define USB_DEVICE_ID_GTCO_300 0x0300 567#define USB_DEVICE_ID_GTCO_301 0x0301 568#define USB_DEVICE_ID_GTCO_302 0x0302 569#define USB_DEVICE_ID_GTCO_303 0x0303 570#define USB_DEVICE_ID_GTCO_304 0x0304 571#define USB_DEVICE_ID_GTCO_305 0x0305 572#define USB_DEVICE_ID_GTCO_306 0x0306 573#define USB_DEVICE_ID_GTCO_307 0x0307 574#define USB_DEVICE_ID_GTCO_308 0x0308 575#define USB_DEVICE_ID_GTCO_309 0x0309 576#define USB_DEVICE_ID_GTCO_400 0x0400 577#define USB_DEVICE_ID_GTCO_401 0x0401 578#define USB_DEVICE_ID_GTCO_402 0x0402 579#define USB_DEVICE_ID_GTCO_403 0x0403 580#define USB_DEVICE_ID_GTCO_404 0x0404 581#define USB_DEVICE_ID_GTCO_405 0x0405 582#define USB_DEVICE_ID_GTCO_500 0x0500 583#define USB_DEVICE_ID_GTCO_501 0x0501 584#define USB_DEVICE_ID_GTCO_502 0x0502 585#define USB_DEVICE_ID_GTCO_503 0x0503 586#define USB_DEVICE_ID_GTCO_504 0x0504 587#define USB_DEVICE_ID_GTCO_1000 0x1000 588#define USB_DEVICE_ID_GTCO_1001 0x1001 589#define USB_DEVICE_ID_GTCO_1002 0x1002 590#define USB_DEVICE_ID_GTCO_1003 0x1003 591#define USB_DEVICE_ID_GTCO_1004 0x1004 592#define USB_DEVICE_ID_GTCO_1005 0x1005 593#define USB_DEVICE_ID_GTCO_1006 0x1006 594 595#define USB_VENDOR_ID_WACOM 0x056a 596 597#define USB_VENDOR_ID_ACECAD 0x0460 598#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004 599#define USB_DEVICE_ID_ACECAD_302 0x0008 600 601#define USB_VENDOR_ID_KBGEAR 0x084e 602#define USB_DEVICE_ID_KBGEAR_JAMSTUDIO 0x1001 603 604#define USB_VENDOR_ID_AIPTEK 0x08ca 605#define USB_DEVICE_ID_AIPTEK_01 0x0001 606#define USB_DEVICE_ID_AIPTEK_10 0x0010 607#define USB_DEVICE_ID_AIPTEK_20 0x0020 608#define USB_DEVICE_ID_AIPTEK_21 0x0021 609#define USB_DEVICE_ID_AIPTEK_22 0x0022 610#define USB_DEVICE_ID_AIPTEK_23 0x0023 611#define USB_DEVICE_ID_AIPTEK_24 0x0024 612 613#define USB_VENDOR_ID_GRIFFIN 0x077d 614#define USB_DEVICE_ID_POWERMATE 0x0410 615#define USB_DEVICE_ID_SOUNDKNOB 0x04AA 616 617#define USB_VENDOR_ID_ATEN 0x0557 618#define USB_DEVICE_ID_ATEN_UC100KM 0x2004 619#define USB_DEVICE_ID_ATEN_CS124U 0x2202 620#define USB_DEVICE_ID_ATEN_2PORTKVM 0x2204 621#define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205 622#define USB_DEVICE_ID_ATEN_4PORTKVMC 0x2208 623 624#define USB_VENDOR_ID_TOPMAX 0x0663 625#define USB_DEVICE_ID_TOPMAX_COBRAPAD 0x0103 626 627#define USB_VENDOR_ID_HAPP 0x078b 628#define USB_DEVICE_ID_UGCI_DRIVING 0x0010 629#define USB_DEVICE_ID_UGCI_FLYING 0x0020 630#define USB_DEVICE_ID_UGCI_FIGHTING 0x0030 631 632#define USB_VENDOR_ID_MGE 0x0463 633#define USB_DEVICE_ID_MGE_UPS 0xffff 634#define USB_DEVICE_ID_MGE_UPS1 0x0001 635 636#define USB_VENDOR_ID_ONTRAK 0x0a07 637#define USB_DEVICE_ID_ONTRAK_ADU100 0x0064 638 639#define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f 640#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100 641 642#define USB_VENDOR_ID_A4TECH 0x09da 643#define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006 644 645#define USB_VENDOR_ID_AASHIMA 0x06d6 646#define USB_DEVICE_ID_AASHIMA_GAMEPAD 0x0025 647#define USB_DEVICE_ID_AASHIMA_PREDATOR 0x0026 648 649#define USB_VENDOR_ID_CYPRESS 0x04b4 650#define USB_DEVICE_ID_CYPRESS_MOUSE 0x0001 651#define USB_DEVICE_ID_CYPRESS_HIDCOM 0x5500 652#define USB_DEVICE_ID_CYPRESS_ULTRAMOUSE 0x7417 653 654#define USB_VENDOR_ID_BERKSHIRE 0x0c98 655#define USB_DEVICE_ID_BERKSHIRE_PCWD 0x1140 656 657#define USB_VENDOR_ID_ALPS 0x0433 658#define USB_DEVICE_ID_IBM_GAMEPAD 0x1101 659 660#define USB_VENDOR_ID_SAITEK 0x06a3 661#define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17 662 663#define USB_VENDOR_ID_NEC 0x073e 664#define USB_DEVICE_ID_NEC_USB_GAME_PAD 0x0301 665 666#define USB_VENDOR_ID_CHIC 0x05fe 667#define USB_DEVICE_ID_CHIC_GAMEPAD 0x0014 668 669#define USB_VENDOR_ID_GLAB 0x06c2 670#define USB_DEVICE_ID_4_PHIDGETSERVO_30 0x0038 671#define USB_DEVICE_ID_1_PHIDGETSERVO_30 0x0039 672#define USB_DEVICE_ID_0_0_4_IF_KIT 0x0040 673#define USB_DEVICE_ID_0_16_16_IF_KIT 0x0044 674#define USB_DEVICE_ID_8_8_8_IF_KIT 0x0045 675#define USB_DEVICE_ID_0_8_7_IF_KIT 0x0051 676#define USB_DEVICE_ID_0_8_8_IF_KIT 0x0053 677#define USB_DEVICE_ID_PHIDGET_MOTORCONTROL 0x0058 678 679#define USB_VENDOR_ID_WISEGROUP 0x0925 680#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101 681#define USB_DEVICE_ID_4_PHIDGETSERVO_20 0x8104 682#define USB_DEVICE_ID_8_8_4_IF_KIT 0x8201 683#define USB_DEVICE_ID_DUAL_USB_JOYPAD 0x8866 684 685#define USB_VENDOR_ID_WISEGROUP_LTD 0x6677 686#define USB_DEVICE_ID_SMARTJOY_DUAL_PLUS 0x8802 687 688#define USB_VENDOR_ID_CODEMERCS 0x07c0 689#define USB_DEVICE_ID_CODEMERCS_IOW_FIRST 0x1500 690#define USB_DEVICE_ID_CODEMERCS_IOW_LAST 0x15ff 691 692#define USB_VENDOR_ID_DELORME 0x1163 693#define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100 694#define USB_DEVICE_ID_DELORME_EM_LT20 0x0200 695 696#define USB_VENDOR_ID_MCC 0x09db 697#define USB_DEVICE_ID_MCC_PMD1024LS 0x0076 698#define USB_DEVICE_ID_MCC_PMD1208LS 0x007a 699 700#define USB_VENDOR_ID_VERNIER 0x08f7 701#define USB_DEVICE_ID_VERNIER_LABPRO 0x0001 702#define USB_DEVICE_ID_VERNIER_GOTEMP 0x0002 703#define USB_DEVICE_ID_VERNIER_SKIP 0x0003 704#define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004 705 706#define USB_VENDOR_ID_LD 0x0f11 707#define USB_DEVICE_ID_LD_CASSY 0x1000 708#define USB_DEVICE_ID_LD_POCKETCASSY 0x1010 709#define USB_DEVICE_ID_LD_MOBILECASSY 0x1020 710#define USB_DEVICE_ID_LD_JWM 0x1080 711#define USB_DEVICE_ID_LD_DMMP 0x1081 712#define USB_DEVICE_ID_LD_UMIP 0x1090 713#define USB_DEVICE_ID_LD_XRAY1 0x1100 714#define USB_DEVICE_ID_LD_XRAY2 0x1101 715#define USB_DEVICE_ID_LD_VIDEOCOM 0x1200 716#define USB_DEVICE_ID_LD_COM3LAB 0x2000 717#define USB_DEVICE_ID_LD_TELEPORT 0x2010 718#define USB_DEVICE_ID_LD_NETWORKANALYSER 0x2020 719#define USB_DEVICE_ID_LD_POWERCONTROL 0x2030 720#define USB_DEVICE_ID_LD_MACHINETEST 0x2040 721 722#define USB_VENDOR_ID_APPLE 0x05ac 723#define USB_DEVICE_ID_APPLE_MIGHTYMOUSE 0x0304 724#define USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI 0x020e 725#define USB_DEVICE_ID_APPLE_FOUNTAIN_ISO 0x020f 726#define USB_DEVICE_ID_APPLE_GEYSER_ANSI 0x0214 727#define USB_DEVICE_ID_APPLE_GEYSER_ISO 0x0215 728#define USB_DEVICE_ID_APPLE_GEYSER_JIS 0x0216 729#define USB_DEVICE_ID_APPLE_GEYSER3_ANSI 0x0217 730#define USB_DEVICE_ID_APPLE_GEYSER3_ISO 0x0218 731#define USB_DEVICE_ID_APPLE_GEYSER3_JIS 0x0219 732#define USB_DEVICE_ID_APPLE_GEYSER4_ANSI 0x021a 733#define USB_DEVICE_ID_APPLE_GEYSER4_ISO 0x021b 734#define USB_DEVICE_ID_APPLE_GEYSER4_JIS 0x021c 735#define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a 736#define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b 737#define USB_DEVICE_ID_APPLE_IR 0x8240 738 739#define USB_VENDOR_ID_CHERRY 0x046a 740#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023 741 742#define USB_VENDOR_ID_YEALINK 0x6993 743#define USB_DEVICE_ID_YEALINK_P1K_P4K_B2K 0xb001 744 745#define USB_VENDOR_ID_ALCOR 0x058f 746#define USB_DEVICE_ID_ALCOR_USBRS232 0x9720 747 748#define USB_VENDOR_ID_SUN 0x0430 749#define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab 750 751#define USB_VENDOR_ID_AIRCABLE 0x16CA 752#define USB_DEVICE_ID_AIRCABLE1 0x1502 753 754#define USB_VENDOR_ID_LOGITECH 0x046d 755#define USB_DEVICE_ID_LOGITECH_USB_RECEIVER 0xc101 756#define USB_DEVICE_ID_LOGITECH_USB_RECEIVER_2 0xc517 757#define USB_DEVICE_ID_DINOVO_EDGE 0xc714 758 759#define USB_VENDOR_ID_IMATION 0x0718 760#define USB_DEVICE_ID_DISC_STAKKA 0xd000 761 762#define USB_VENDOR_ID_PANTHERLORD 0x0810 763#define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK 0x0001 764 765#define USB_VENDOR_ID_SONY 0x054c 766#define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268 767 768/* 769 * Alphabetically sorted blacklist by quirk type. 770 */ 771 772static const struct hid_blacklist { 773 __u16 idVendor; 774 __u16 idProduct; 775 unsigned quirks; 776} hid_blacklist[] = { 777 778 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE, HID_QUIRK_DUPLICATE_USAGES }, 779 780 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE }, 781 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE }, 782 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20, HID_QUIRK_IGNORE }, 783 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21, HID_QUIRK_IGNORE }, 784 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE }, 785 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE }, 786 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE }, 787 { USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1, HID_QUIRK_IGNORE }, 788 { USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232, HID_QUIRK_IGNORE }, 789 { USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, HID_QUIRK_IGNORE }, 790 { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_HIDCOM, HID_QUIRK_IGNORE }, 791 { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_ULTRAMOUSE, HID_QUIRK_IGNORE }, 792 { USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE, HID_QUIRK_IGNORE }, 793 { USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20, HID_QUIRK_IGNORE }, 794 { USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5, HID_QUIRK_IGNORE }, 795 { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30, HID_QUIRK_IGNORE }, 796 { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30, HID_QUIRK_IGNORE }, 797 { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_0_4_IF_KIT, HID_QUIRK_IGNORE }, 798 { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_16_16_IF_KIT, HID_QUIRK_IGNORE }, 799 { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_8_8_8_IF_KIT, HID_QUIRK_IGNORE }, 800 { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_7_IF_KIT, HID_QUIRK_IGNORE }, 801 { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT, HID_QUIRK_IGNORE }, 802 { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_PHIDGET_MOTORCONTROL, HID_QUIRK_IGNORE }, 803 { USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE }, 804 { USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB, HID_QUIRK_IGNORE }, 805 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_90, HID_QUIRK_IGNORE }, 806 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_100, HID_QUIRK_IGNORE }, 807 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_101, HID_QUIRK_IGNORE }, 808 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_103, HID_QUIRK_IGNORE }, 809 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_104, HID_QUIRK_IGNORE }, 810 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_105, HID_QUIRK_IGNORE }, 811 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_106, HID_QUIRK_IGNORE }, 812 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_107, HID_QUIRK_IGNORE }, 813 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_108, HID_QUIRK_IGNORE }, 814 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_200, HID_QUIRK_IGNORE }, 815 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_201, HID_QUIRK_IGNORE }, 816 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_202, HID_QUIRK_IGNORE }, 817 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_203, HID_QUIRK_IGNORE }, 818 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_204, HID_QUIRK_IGNORE }, 819 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_205, HID_QUIRK_IGNORE }, 820 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_206, HID_QUIRK_IGNORE }, 821 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_207, HID_QUIRK_IGNORE }, 822 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_300, HID_QUIRK_IGNORE }, 823 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_301, HID_QUIRK_IGNORE }, 824 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_302, HID_QUIRK_IGNORE }, 825 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_303, HID_QUIRK_IGNORE }, 826 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_304, HID_QUIRK_IGNORE }, 827 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_305, HID_QUIRK_IGNORE }, 828 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_306, HID_QUIRK_IGNORE }, 829 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_307, HID_QUIRK_IGNORE }, 830 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_308, HID_QUIRK_IGNORE }, 831 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_309, HID_QUIRK_IGNORE }, 832 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_400, HID_QUIRK_IGNORE }, 833 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_401, HID_QUIRK_IGNORE }, 834 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_402, HID_QUIRK_IGNORE }, 835 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_403, HID_QUIRK_IGNORE }, 836 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404, HID_QUIRK_IGNORE }, 837 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_405, HID_QUIRK_IGNORE }, 838 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_500, HID_QUIRK_IGNORE }, 839 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_501, HID_QUIRK_IGNORE }, 840 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_502, HID_QUIRK_IGNORE }, 841 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_503, HID_QUIRK_IGNORE }, 842 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_504, HID_QUIRK_IGNORE }, 843 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1000, HID_QUIRK_IGNORE }, 844 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1001, HID_QUIRK_IGNORE }, 845 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1002, HID_QUIRK_IGNORE }, 846 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1003, HID_QUIRK_IGNORE }, 847 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1004, HID_QUIRK_IGNORE }, 848 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1005, HID_QUIRK_IGNORE }, 849 { USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006, HID_QUIRK_IGNORE }, 850 { USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA, HID_QUIRK_IGNORE }, 851 { USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE }, 852 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY, HID_QUIRK_IGNORE }, 853 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY, HID_QUIRK_IGNORE }, 854 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOBILECASSY, HID_QUIRK_IGNORE }, 855 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM, HID_QUIRK_IGNORE }, 856 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP, HID_QUIRK_IGNORE }, 857 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP, HID_QUIRK_IGNORE }, 858 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY1, HID_QUIRK_IGNORE }, 859 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY2, HID_QUIRK_IGNORE }, 860 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_VIDEOCOM, HID_QUIRK_IGNORE }, 861 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_COM3LAB, HID_QUIRK_IGNORE }, 862 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_TELEPORT, HID_QUIRK_IGNORE }, 863 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_NETWORKANALYSER, HID_QUIRK_IGNORE }, 864 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERCONTROL, HID_QUIRK_IGNORE }, 865 { USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETEST, HID_QUIRK_IGNORE }, 866 { USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS, HID_QUIRK_IGNORE }, 867 { USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS, HID_QUIRK_IGNORE }, 868 { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_IGNORE }, 869 { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1, HID_QUIRK_IGNORE }, 870 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100, HID_QUIRK_IGNORE }, 871 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 20, HID_QUIRK_IGNORE }, 872 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 30, HID_QUIRK_IGNORE }, 873 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 100, HID_QUIRK_IGNORE }, 874 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 108, HID_QUIRK_IGNORE }, 875 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 118, HID_QUIRK_IGNORE }, 876 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 200, HID_QUIRK_IGNORE }, 877 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 300, HID_QUIRK_IGNORE }, 878 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 400, HID_QUIRK_IGNORE }, 879 { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500, HID_QUIRK_IGNORE }, 880 { USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO, HID_QUIRK_IGNORE }, 881 { USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP, HID_QUIRK_IGNORE }, 882 { USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP, HID_QUIRK_IGNORE }, 883 { USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS, HID_QUIRK_IGNORE }, 884 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, 885 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, 886 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT, HID_QUIRK_IGNORE }, 887 { USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K, HID_QUIRK_IGNORE }, 888 889 { USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_FLAIR, HID_QUIRK_IGNORE }, 890 { USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_302, HID_QUIRK_IGNORE }, 891 892 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, 893 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, 894 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET }, 895 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET }, 896 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET }, 897 { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET }, 898 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, 899 { USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, 900 901 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL }, 902 { USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU, HID_QUIRK_2WHEEL_MOUSE_HACK_7 }, 903 { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE, HID_QUIRK_2WHEEL_MOUSE_HACK_5 }, 904 905 { USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD, HID_QUIRK_BADPAD }, 906 { USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR, HID_QUIRK_BADPAD }, 907 { USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD, HID_QUIRK_BADPAD }, 908 { USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD, HID_QUIRK_BADPAD }, 909 { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, 910 { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, 911 { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, 912 { USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD, HID_QUIRK_BADPAD }, 913 { USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD, HID_QUIRK_BADPAD }, 914 { USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD }, 915 916 { USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION, HID_QUIRK_CYMOTION }, 917 918 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 919 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 920 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 921 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD}, 922 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 923 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 924 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD}, 925 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 926 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 927 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD}, 928 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 929 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 930 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, 931 932 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IR, HID_QUIRK_IGNORE }, 933 934 { USB_VENDOR_ID_PANJIT, 0x0001, HID_QUIRK_IGNORE }, 935 { USB_VENDOR_ID_PANJIT, 0x0002, HID_QUIRK_IGNORE }, 936 { USB_VENDOR_ID_PANJIT, 0x0003, HID_QUIRK_IGNORE }, 937 { USB_VENDOR_ID_PANJIT, 0x0004, HID_QUIRK_IGNORE }, 938 939 { USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD, HID_QUIRK_NOGET }, 940 941 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_USB_RECEIVER, HID_QUIRK_BAD_RELATIVE_KEYS }, 942 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_USB_RECEIVER_2, HID_QUIRK_LOGITECH_S510_DESCRIPTOR }, 943 944 { USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS }, 945 946 { USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER, HID_QUIRK_SONY_PS3_CONTROLLER }, 947 948 { USB_VENDOR_ID_CIDC, 0x0103, HID_QUIRK_IGNORE }, 949 950 { 0, 0 } 951}; 952 953/* 954 * Traverse the supplied list of reports and find the longest 955 */ 956static void hid_find_max_report(struct hid_device *hid, unsigned int type, int *max) 957{ 958 struct hid_report *report; 959 int size; 960 961 list_for_each_entry(report, &hid->report_enum[type].report_list, list) { 962 size = ((report->size - 1) >> 3) + 1; 963 if (type == HID_INPUT_REPORT && hid->report_enum[type].numbered) 964 size++; 965 if (*max < size) 966 *max = size; 967 } 968} 969 970static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid) 971{ 972 struct usbhid_device *usbhid = hid->driver_data; 973 974 if (!(usbhid->inbuf = usb_buffer_alloc(dev, usbhid->bufsize, GFP_ATOMIC, &usbhid->inbuf_dma))) 975 return -1; 976 if (!(usbhid->outbuf = usb_buffer_alloc(dev, usbhid->bufsize, GFP_ATOMIC, &usbhid->outbuf_dma))) 977 return -1; 978 if (!(usbhid->cr = usb_buffer_alloc(dev, sizeof(*(usbhid->cr)), GFP_ATOMIC, &usbhid->cr_dma))) 979 return -1; 980 if (!(usbhid->ctrlbuf = usb_buffer_alloc(dev, usbhid->bufsize, GFP_ATOMIC, &usbhid->ctrlbuf_dma))) 981 return -1; 982 983 return 0; 984} 985 986static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid) 987{ 988 struct usbhid_device *usbhid = hid->driver_data; 989 990 if (usbhid->inbuf) 991 usb_buffer_free(dev, usbhid->bufsize, usbhid->inbuf, usbhid->inbuf_dma); 992 if (usbhid->outbuf) 993 usb_buffer_free(dev, usbhid->bufsize, usbhid->outbuf, usbhid->outbuf_dma); 994 if (usbhid->cr) 995 usb_buffer_free(dev, sizeof(*(usbhid->cr)), usbhid->cr, usbhid->cr_dma); 996 if (usbhid->ctrlbuf) 997 usb_buffer_free(dev, usbhid->bufsize, usbhid->ctrlbuf, usbhid->ctrlbuf_dma); 998} 999 1000/* 1001 * Cherry Cymotion keyboard have an invalid HID report descriptor, 1002 * that needs fixing before we can parse it. 1003 */ 1004 1005static void hid_fixup_cymotion_descriptor(char *rdesc, int rsize) 1006{ 1007 if (rsize >= 17 && rdesc[11] == 0x3c && rdesc[12] == 0x02) { 1008 info("Fixing up Cherry Cymotion report descriptor"); 1009 rdesc[11] = rdesc[16] = 0xff; 1010 rdesc[12] = rdesc[17] = 0x03; 1011 } 1012} 1013 1014/* 1015 * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller 1016 * to "operational". Without this, the ps3 controller will not report any 1017 * events. 1018 */ 1019static void hid_fixup_sony_ps3_controller(struct usb_device *dev, int ifnum) 1020{ 1021 int result; 1022 char *buf = kmalloc(18, GFP_KERNEL); 1023 1024 if (!buf) 1025 return; 1026 1027 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 1028 HID_REQ_GET_REPORT, 1029 USB_DIR_IN | USB_TYPE_CLASS | 1030 USB_RECIP_INTERFACE, 1031 (3 << 8) | 0xf2, ifnum, buf, 17, 1032 USB_CTRL_GET_TIMEOUT); 1033 1034 if (result < 0) 1035 err("%s failed: %d\n", __func__, result); 1036 1037 kfree(buf); 1038} 1039 1040/* 1041 * Logitech S510 keyboard sends in report #3 keys which are far 1042 * above the logical maximum described in descriptor. This extends 1043 * the original value of 0x28c of logical maximum to 0x104d 1044 */ 1045static void hid_fixup_s510_descriptor(unsigned char *rdesc, int rsize) 1046{ 1047 if (rsize >= 90 && rdesc[83] == 0x26 1048 && rdesc[84] == 0x8c 1049 && rdesc[85] == 0x02) { 1050 info("Fixing up Logitech S510 report descriptor"); 1051 rdesc[84] = rdesc[89] = 0x4d; 1052 rdesc[85] = rdesc[90] = 0x10; 1053 } 1054} 1055 1056static struct hid_device *usb_hid_configure(struct usb_interface *intf) 1057{ 1058 struct usb_host_interface *interface = intf->cur_altsetting; 1059 struct usb_device *dev = interface_to_usbdev (intf); 1060 struct hid_descriptor *hdesc; 1061 struct hid_device *hid; 1062 unsigned quirks = 0, rsize = 0; 1063 char *rdesc; 1064 int n, len, insize = 0; 1065 struct usbhid_device *usbhid; 1066 1067 /* Ignore all Wacom devices */ 1068 if (le16_to_cpu(dev->descriptor.idVendor) == USB_VENDOR_ID_WACOM) 1069 return NULL; 1070 /* ignore all Code Mercenaries IOWarrior devices */ 1071 if (le16_to_cpu(dev->descriptor.idVendor) == USB_VENDOR_ID_CODEMERCS) 1072 if (le16_to_cpu(dev->descriptor.idProduct) >= USB_DEVICE_ID_CODEMERCS_IOW_FIRST && 1073 le16_to_cpu(dev->descriptor.idProduct) <= USB_DEVICE_ID_CODEMERCS_IOW_LAST) 1074 return NULL; 1075 1076 for (n = 0; hid_blacklist[n].idVendor; n++) 1077 if ((hid_blacklist[n].idVendor == le16_to_cpu(dev->descriptor.idVendor)) && 1078 (hid_blacklist[n].idProduct == le16_to_cpu(dev->descriptor.idProduct))) 1079 quirks = hid_blacklist[n].quirks; 1080 1081 /* Many keyboards and mice don't like to be polled for reports, 1082 * so we will always set the HID_QUIRK_NOGET flag for them. */ 1083 if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT) { 1084 if (interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_KEYBOARD || 1085 interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE) 1086 quirks |= HID_QUIRK_NOGET; 1087 } 1088 1089 if (quirks & HID_QUIRK_IGNORE) 1090 return NULL; 1091 1092 if ((quirks & HID_QUIRK_IGNORE_MOUSE) && 1093 (interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)) 1094 return NULL; 1095 1096 1097 if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) && 1098 (!interface->desc.bNumEndpoints || 1099 usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) { 1100 dbg("class descriptor not present\n"); 1101 return NULL; 1102 } 1103 1104 for (n = 0; n < hdesc->bNumDescriptors; n++) 1105 if (hdesc->desc[n].bDescriptorType == HID_DT_REPORT) 1106 rsize = le16_to_cpu(hdesc->desc[n].wDescriptorLength); 1107 1108 if (!rsize || rsize > HID_MAX_DESCRIPTOR_SIZE) { 1109 dbg("weird size of report descriptor (%u)", rsize); 1110 return NULL; 1111 } 1112 1113 if (!(rdesc = kmalloc(rsize, GFP_KERNEL))) { 1114 dbg("couldn't allocate rdesc memory"); 1115 return NULL; 1116 } 1117 1118 hid_set_idle(dev, interface->desc.bInterfaceNumber, 0, 0); 1119 1120 if ((n = hid_get_class_descriptor(dev, interface->desc.bInterfaceNumber, HID_DT_REPORT, rdesc, rsize)) < 0) { 1121 dbg("reading report descriptor failed"); 1122 kfree(rdesc); 1123 return NULL; 1124 } 1125 1126 if ((quirks & HID_QUIRK_CYMOTION)) 1127 hid_fixup_cymotion_descriptor(rdesc, rsize); 1128 1129 if (quirks & HID_QUIRK_LOGITECH_S510_DESCRIPTOR) 1130 hid_fixup_s510_descriptor(rdesc, rsize); 1131 1132#ifdef CONFIG_HID_DEBUG 1133 printk(KERN_DEBUG __FILE__ ": report descriptor (size %u, read %d) = ", rsize, n); 1134 for (n = 0; n < rsize; n++) 1135 printk(" %02x", (unsigned char) rdesc[n]); 1136 printk("\n"); 1137#endif 1138 1139 if (!(hid = hid_parse_report(rdesc, n))) { 1140 dbg("parsing report descriptor failed"); 1141 kfree(rdesc); 1142 return NULL; 1143 } 1144 1145 kfree(rdesc); 1146 hid->quirks = quirks; 1147 1148 if (!(usbhid = kzalloc(sizeof(struct usbhid_device), GFP_KERNEL))) 1149 goto fail; 1150 1151 hid->driver_data = usbhid; 1152 usbhid->hid = hid; 1153 1154 usbhid->bufsize = HID_MIN_BUFFER_SIZE; 1155 hid_find_max_report(hid, HID_INPUT_REPORT, &usbhid->bufsize); 1156 hid_find_max_report(hid, HID_OUTPUT_REPORT, &usbhid->bufsize); 1157 hid_find_max_report(hid, HID_FEATURE_REPORT, &usbhid->bufsize); 1158 1159 if (usbhid->bufsize > HID_MAX_BUFFER_SIZE) 1160 usbhid->bufsize = HID_MAX_BUFFER_SIZE; 1161 1162 hid_find_max_report(hid, HID_INPUT_REPORT, &insize); 1163 1164 if (insize > HID_MAX_BUFFER_SIZE) 1165 insize = HID_MAX_BUFFER_SIZE; 1166 1167 if (hid_alloc_buffers(dev, hid)) { 1168 hid_free_buffers(dev, hid); 1169 goto fail; 1170 } 1171 1172 for (n = 0; n < interface->desc.bNumEndpoints; n++) { 1173 1174 struct usb_endpoint_descriptor *endpoint; 1175 int pipe; 1176 int interval; 1177 1178 endpoint = &interface->endpoint[n].desc; 1179 if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */ 1180 continue; 1181 1182 interval = endpoint->bInterval; 1183 1184 /* Change the polling interval of mice. */ 1185 if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0) 1186 interval = hid_mousepoll_interval; 1187 1188 if (usb_endpoint_dir_in(endpoint)) { 1189 if (usbhid->urbin) 1190 continue; 1191 if (!(usbhid->urbin = usb_alloc_urb(0, GFP_KERNEL))) 1192 goto fail; 1193 pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); 1194 usb_fill_int_urb(usbhid->urbin, dev, pipe, usbhid->inbuf, insize, 1195 hid_irq_in, hid, interval); 1196 usbhid->urbin->transfer_dma = usbhid->inbuf_dma; 1197 usbhid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 1198 } else { 1199 if (usbhid->urbout) 1200 continue; 1201 if (!(usbhid->urbout = usb_alloc_urb(0, GFP_KERNEL))) 1202 goto fail; 1203 pipe = usb_sndintpipe(dev, endpoint->bEndpointAddress); 1204 usb_fill_int_urb(usbhid->urbout, dev, pipe, usbhid->outbuf, 0, 1205 hid_irq_out, hid, interval); 1206 usbhid->urbout->transfer_dma = usbhid->outbuf_dma; 1207 usbhid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 1208 } 1209 } 1210 1211 if (!usbhid->urbin) { 1212 err("couldn't find an input interrupt endpoint"); 1213 goto fail; 1214 } 1215 1216 init_waitqueue_head(&hid->wait); 1217 1218 INIT_WORK(&usbhid->reset_work, hid_reset); 1219 setup_timer(&usbhid->io_retry, hid_retry_timeout, (unsigned long) hid); 1220 1221 spin_lock_init(&usbhid->inlock); 1222 spin_lock_init(&usbhid->outlock); 1223 spin_lock_init(&usbhid->ctrllock); 1224 1225 hid->version = le16_to_cpu(hdesc->bcdHID); 1226 hid->country = hdesc->bCountryCode; 1227 hid->dev = &intf->dev; 1228 usbhid->intf = intf; 1229 usbhid->ifnum = interface->desc.bInterfaceNumber; 1230 1231 hid->name[0] = 0; 1232 1233 if (dev->manufacturer) 1234 strlcpy(hid->name, dev->manufacturer, sizeof(hid->name)); 1235 1236 if (dev->product) { 1237 if (dev->manufacturer) 1238 strlcat(hid->name, " ", sizeof(hid->name)); 1239 strlcat(hid->name, dev->product, sizeof(hid->name)); 1240 } 1241 1242 if (!strlen(hid->name)) 1243 snprintf(hid->name, sizeof(hid->name), "HID %04x:%04x", 1244 le16_to_cpu(dev->descriptor.idVendor), 1245 le16_to_cpu(dev->descriptor.idProduct)); 1246 1247 hid->bus = BUS_USB; 1248 hid->vendor = le16_to_cpu(dev->descriptor.idVendor); 1249 hid->product = le16_to_cpu(dev->descriptor.idProduct); 1250 1251 usb_make_path(dev, hid->phys, sizeof(hid->phys)); 1252 strlcat(hid->phys, "/input", sizeof(hid->phys)); 1253 len = strlen(hid->phys); 1254 if (len < sizeof(hid->phys) - 1) 1255 snprintf(hid->phys + len, sizeof(hid->phys) - len, 1256 "%d", intf->altsetting[0].desc.bInterfaceNumber); 1257 1258 if (usb_string(dev, dev->descriptor.iSerialNumber, hid->uniq, 64) <= 0) 1259 hid->uniq[0] = 0; 1260 1261 usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL); 1262 if (!usbhid->urbctrl) 1263 goto fail; 1264 1265 usb_fill_control_urb(usbhid->urbctrl, dev, 0, (void *) usbhid->cr, 1266 usbhid->ctrlbuf, 1, hid_ctrl, hid); 1267 usbhid->urbctrl->setup_dma = usbhid->cr_dma; 1268 usbhid->urbctrl->transfer_dma = usbhid->ctrlbuf_dma; 1269 usbhid->urbctrl->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP); 1270 hid->hidinput_input_event = usb_hidinput_input_event; 1271 hid->hid_open = usbhid_open; 1272 hid->hid_close = usbhid_close; 1273#ifdef CONFIG_USB_HIDDEV 1274 hid->hiddev_hid_event = hiddev_hid_event; 1275 hid->hiddev_report_event = hiddev_report_event; 1276#endif 1277 return hid; 1278 1279fail: 1280 usb_free_urb(usbhid->urbin); 1281 usb_free_urb(usbhid->urbout); 1282 usb_free_urb(usbhid->urbctrl); 1283 hid_free_buffers(dev, hid); 1284 hid_free_device(hid); 1285 1286 return NULL; 1287} 1288 1289static void hid_disconnect(struct usb_interface *intf) 1290{ 1291 struct hid_device *hid = usb_get_intfdata (intf); 1292 struct usbhid_device *usbhid; 1293 1294 if (!hid) 1295 return; 1296 1297 usbhid = hid->driver_data; 1298 1299 spin_lock_irq(&usbhid->inlock); /* Sync with error handler */ 1300 usb_set_intfdata(intf, NULL); 1301 spin_unlock_irq(&usbhid->inlock); 1302 usb_kill_urb(usbhid->urbin); 1303 usb_kill_urb(usbhid->urbout); 1304 usb_kill_urb(usbhid->urbctrl); 1305 1306 del_timer_sync(&usbhid->io_retry); 1307 flush_scheduled_work(); 1308 1309 if (hid->claimed & HID_CLAIMED_INPUT) 1310 hidinput_disconnect(hid); 1311 if (hid->claimed & HID_CLAIMED_HIDDEV) 1312 hiddev_disconnect(hid); 1313 1314 usb_free_urb(usbhid->urbin); 1315 usb_free_urb(usbhid->urbctrl); 1316 usb_free_urb(usbhid->urbout); 1317 1318 hid_free_buffers(hid_to_usb_dev(hid), hid); 1319 hid_free_device(hid); 1320} 1321 1322static int hid_probe(struct usb_interface *intf, const struct usb_device_id *id) 1323{ 1324 struct hid_device *hid; 1325 char path[64]; 1326 int i; 1327 char *c; 1328 1329 dbg("HID probe called for ifnum %d", 1330 intf->altsetting->desc.bInterfaceNumber); 1331 1332 if (!(hid = usb_hid_configure(intf))) 1333 return -ENODEV; 1334 1335 usbhid_init_reports(hid); 1336 hid_dump_device(hid); 1337 1338 if (!hidinput_connect(hid)) 1339 hid->claimed |= HID_CLAIMED_INPUT; 1340 if (!hiddev_connect(hid)) 1341 hid->claimed |= HID_CLAIMED_HIDDEV; 1342 1343 usb_set_intfdata(intf, hid); 1344 1345 if (!hid->claimed) { 1346 printk ("HID device not claimed by input or hiddev\n"); 1347 hid_disconnect(intf); 1348 return -ENODEV; 1349 } 1350 1351 if ((hid->claimed & HID_CLAIMED_INPUT)) 1352 hid_ff_init(hid); 1353 1354 if (hid->quirks & HID_QUIRK_SONY_PS3_CONTROLLER) 1355 hid_fixup_sony_ps3_controller(interface_to_usbdev(intf), 1356 intf->cur_altsetting->desc.bInterfaceNumber); 1357 1358 printk(KERN_INFO); 1359 1360 if (hid->claimed & HID_CLAIMED_INPUT) 1361 printk("input"); 1362 if (hid->claimed == (HID_CLAIMED_INPUT | HID_CLAIMED_HIDDEV)) 1363 printk(","); 1364 if (hid->claimed & HID_CLAIMED_HIDDEV) 1365 printk("hiddev%d", hid->minor); 1366 1367 c = "Device"; 1368 for (i = 0; i < hid->maxcollection; i++) { 1369 if (hid->collection[i].type == HID_COLLECTION_APPLICATION && 1370 (hid->collection[i].usage & HID_USAGE_PAGE) == HID_UP_GENDESK && 1371 (hid->collection[i].usage & 0xffff) < ARRAY_SIZE(hid_types)) { 1372 c = hid_types[hid->collection[i].usage & 0xffff]; 1373 break; 1374 } 1375 } 1376 1377 usb_make_path(interface_to_usbdev(intf), path, 63); 1378 1379 printk(": USB HID v%x.%02x %s [%s] on %s\n", 1380 hid->version >> 8, hid->version & 0xff, c, hid->name, path); 1381 1382 return 0; 1383} 1384 1385static int hid_suspend(struct usb_interface *intf, pm_message_t message) 1386{ 1387 struct hid_device *hid = usb_get_intfdata (intf); 1388 struct usbhid_device *usbhid = hid->driver_data; 1389 1390 spin_lock_irq(&usbhid->inlock); /* Sync with error handler */ 1391 set_bit(HID_SUSPENDED, &usbhid->iofl); 1392 spin_unlock_irq(&usbhid->inlock); 1393 del_timer(&usbhid->io_retry); 1394 usb_kill_urb(usbhid->urbin); 1395 dev_dbg(&intf->dev, "suspend\n"); 1396 return 0; 1397} 1398 1399static int hid_resume(struct usb_interface *intf) 1400{ 1401 struct hid_device *hid = usb_get_intfdata (intf); 1402 struct usbhid_device *usbhid = hid->driver_data; 1403 int status; 1404 1405 clear_bit(HID_SUSPENDED, &usbhid->iofl); 1406 usbhid->retry_delay = 0; 1407 status = hid_start_in(hid); 1408 dev_dbg(&intf->dev, "resume status %d\n", status); 1409 return status; 1410} 1411 1412/* Treat USB reset pretty much the same as suspend/resume */ 1413static void hid_pre_reset(struct usb_interface *intf) 1414{ 1415 /* FIXME: What if the interface is already suspended? */ 1416 hid_suspend(intf, PMSG_ON); 1417} 1418 1419static void hid_post_reset(struct usb_interface *intf) 1420{ 1421 struct usb_device *dev = interface_to_usbdev (intf); 1422 1423 hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0); 1424 /* FIXME: Any more reinitialization needed? */ 1425 1426 hid_resume(intf); 1427} 1428 1429static struct usb_device_id hid_usb_ids [] = { 1430 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS, 1431 .bInterfaceClass = USB_INTERFACE_CLASS_HID }, 1432 { } /* Terminating entry */ 1433}; 1434 1435MODULE_DEVICE_TABLE (usb, hid_usb_ids); 1436 1437static struct usb_driver hid_driver = { 1438 .name = "usbhid", 1439 .probe = hid_probe, 1440 .disconnect = hid_disconnect, 1441 .suspend = hid_suspend, 1442 .resume = hid_resume, 1443 .pre_reset = hid_pre_reset, 1444 .post_reset = hid_post_reset, 1445 .id_table = hid_usb_ids, 1446}; 1447 1448static int __init hid_init(void) 1449{ 1450 int retval; 1451 retval = hiddev_init(); 1452 if (retval) 1453 goto hiddev_init_fail; 1454 retval = usb_register(&hid_driver); 1455 if (retval) 1456 goto usb_register_fail; 1457 info(DRIVER_VERSION ":" DRIVER_DESC); 1458 1459 return 0; 1460usb_register_fail: 1461 hiddev_exit(); 1462hiddev_init_fail: 1463 return retval; 1464} 1465 1466static void __exit hid_exit(void) 1467{ 1468 usb_deregister(&hid_driver); 1469 hiddev_exit(); 1470} 1471 1472module_init(hid_init); 1473module_exit(hid_exit); 1474 1475MODULE_AUTHOR(DRIVER_AUTHOR); 1476MODULE_DESCRIPTION(DRIVER_DESC); 1477MODULE_LICENSE(DRIVER_LICENSE);