Lines Matching refs:hid

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);
78 static int hid_start_in(struct hid_device *hid) in hid_start_in() argument
82 struct usbhid_device *usbhid = hid->driver_data; in hid_start_in()
85 if ((hid->open > 0 || hid->quirks & HID_QUIRK_ALWAYS_POLL) && in hid_start_in()
105 struct hid_device *hid = (struct hid_device *) _hid; in hid_retry_timeout() local
106 struct usbhid_device *usbhid = hid->driver_data; in hid_retry_timeout()
109 if (hid_start_in(hid)) in hid_retry_timeout()
110 hid_io_error(hid); in hid_retry_timeout()
118 struct hid_device *hid = usbhid->hid; in hid_reset() local
123 rc = usb_clear_halt(hid_to_usb_dev(hid), usbhid->urbin->pipe); in hid_reset()
126 hid_start_in(hid); in hid_reset()
141 static void hid_io_error(struct hid_device *hid) in hid_io_error() argument
144 struct usbhid_device *usbhid = hid->driver_data; in hid_io_error()
190 struct hid_device *hid = usb_get_intfdata(usbhid->intf); in usbhid_restart_out_queue() local
194 if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) || in usbhid_restart_out_queue()
199 hid_dbg(hid, "Kicking head %d tail %d", usbhid->outhead, usbhid->outtail); in usbhid_restart_out_queue()
217 if (hid_submit_out(hid)) { in usbhid_restart_out_queue()
228 struct hid_device *hid = usb_get_intfdata(usbhid->intf); in usbhid_restart_ctrl_queue() local
232 WARN_ON(hid == NULL); in usbhid_restart_ctrl_queue()
233 if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) || in usbhid_restart_ctrl_queue()
238 hid_dbg(hid, "Kicking head %d tail %d", usbhid->ctrlhead, usbhid->ctrltail); in usbhid_restart_ctrl_queue()
256 if (hid_submit_ctrl(hid)) { in usbhid_restart_ctrl_queue()
271 struct hid_device *hid = urb->context; in hid_irq_in() local
272 struct usbhid_device *usbhid = hid->driver_data; in hid_irq_in()
279 if ((hid->quirks & HID_QUIRK_ALWAYS_POLL) && !hid->open) in hid_irq_in()
290 if (hid_check_keys_pressed(hid)) in hid_irq_in()
313 hid_io_error(hid); in hid_irq_in()
324 hid_err(hid, "can't resubmit intr, %s-%s/input%d, status %d\n", in hid_irq_in()
325 hid_to_usb_dev(hid)->bus->bus_name, in hid_irq_in()
326 hid_to_usb_dev(hid)->devpath, in hid_irq_in()
328 hid_io_error(hid); in hid_irq_in()
333 static int hid_submit_out(struct hid_device *hid) in hid_submit_out() argument
337 struct usbhid_device *usbhid = hid->driver_data; in hid_submit_out()
344 usbhid->urbout->dev = hid_to_usb_dev(hid); in hid_submit_out()
356 hid_err(hid, "usb_submit_urb(out) failed: %d\n", r); in hid_submit_out()
363 static int hid_submit_ctrl(struct hid_device *hid) in hid_submit_ctrl() argument
369 struct usbhid_device *usbhid = hid->driver_data; in hid_submit_ctrl()
377 usbhid->urbctrl->pipe = usb_sndctrlpipe(hid_to_usb_dev(hid), 0); in hid_submit_ctrl()
387 usbhid->urbctrl->pipe = usb_rcvctrlpipe(hid_to_usb_dev(hid), 0); in hid_submit_ctrl()
388 maxpacket = usb_maxpacket(hid_to_usb_dev(hid), in hid_submit_ctrl()
399 usbhid->urbctrl->dev = hid_to_usb_dev(hid); in hid_submit_ctrl()
416 hid_err(hid, "usb_submit_urb(ctrl) failed: %d\n", r); in hid_submit_ctrl()
429 struct hid_device *hid = urb->context; in hid_irq_out() local
430 struct usbhid_device *usbhid = hid->driver_data; in hid_irq_out()
457 hid_submit_out(hid) == 0) { in hid_irq_out()
476 struct hid_device *hid = urb->context; in hid_ctrl() local
477 struct usbhid_device *usbhid = hid->driver_data; in hid_ctrl()
507 hid_submit_ctrl(hid) == 0) { in hid_ctrl()
520 static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *report, in __usbhid_submit_report() argument
524 struct usbhid_device *usbhid = hid->driver_data; in __usbhid_submit_report()
526 if (((hid->quirks & HID_QUIRK_NOGET) && dir == USB_DIR_IN) || in __usbhid_submit_report()
532 hid_warn(hid, "output queue full\n"); in __usbhid_submit_report()
538 hid_warn(hid, "output queueing failed\n"); in __usbhid_submit_report()
580 hid_warn(hid, "control queue full\n"); in __usbhid_submit_report()
587 hid_warn(hid, "control queueing failed\n"); in __usbhid_submit_report()
629 static void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char d… in usbhid_submit_report() argument
631 struct usbhid_device *usbhid = hid->driver_data; in usbhid_submit_report()
635 __usbhid_submit_report(hid, report, dir); in usbhid_submit_report()
639 static int usbhid_wait_io(struct hid_device *hid) in usbhid_wait_io() argument
641 struct usbhid_device *usbhid = hid->driver_data; in usbhid_wait_io()
677 int usbhid_open(struct hid_device *hid) in usbhid_open() argument
679 struct usbhid_device *usbhid = hid->driver_data; in usbhid_open()
683 if (!hid->open++) { in usbhid_open()
687 hid->open--; in usbhid_open()
693 res = hid_start_in(hid); in usbhid_open()
696 hid_io_error(hid); in usbhid_open()
700 hid->open--; in usbhid_open()
713 if (res == 0 && !(hid->quirks & HID_QUIRK_ALWAYS_POLL)) in usbhid_open()
722 void usbhid_close(struct hid_device *hid) in usbhid_close() argument
724 struct usbhid_device *usbhid = hid->driver_data; in usbhid_close()
733 if (!--hid->open) { in usbhid_close()
736 if (!(hid->quirks & HID_QUIRK_ALWAYS_POLL)) { in usbhid_close()
750 void usbhid_init_reports(struct hid_device *hid) in usbhid_init_reports() argument
753 struct usbhid_device *usbhid = hid->driver_data; in usbhid_init_reports()
757 if (!(hid->quirks & HID_QUIRK_NO_INIT_INPUT_REPORTS)) { in usbhid_init_reports()
758 report_enum = &hid->report_enum[HID_INPUT_REPORT]; in usbhid_init_reports()
760 usbhid_submit_report(hid, report, USB_DIR_IN); in usbhid_init_reports()
763 report_enum = &hid->report_enum[HID_FEATURE_REPORT]; in usbhid_init_reports()
765 usbhid_submit_report(hid, report, USB_DIR_IN); in usbhid_init_reports()
768 ret = usbhid_wait_io(hid); in usbhid_init_reports()
775 ret = usbhid_wait_io(hid); in usbhid_init_reports()
779 hid_warn(hid, "timeout initializing reports\n"); in usbhid_init_reports()
785 static int hid_find_field_early(struct hid_device *hid, unsigned int page, in hid_find_field_early() argument
793 list_for_each_entry(report, &hid->report_enum[HID_OUTPUT_REPORT].report_list, list) { in hid_find_field_early()
798 if ((usage->hid & HID_USAGE_PAGE) == page && in hid_find_field_early()
799 (usage->hid & 0xFFFF) == hid_code) { in hid_find_field_early()
809 static void usbhid_set_leds(struct hid_device *hid) in usbhid_set_leds() argument
814 if ((offset = hid_find_field_early(hid, HID_UP_LED, 0x01, &field)) != -1) { in usbhid_set_leds()
816 usbhid_submit_report(hid, field->report, USB_DIR_OUT); in usbhid_set_leds()
823 static void hid_find_max_report(struct hid_device *hid, unsigned int type, in hid_find_max_report() argument
829 list_for_each_entry(report, &hid->report_enum[type].report_list, list) { in hid_find_max_report()
830 size = ((report->size - 1) >> 3) + 1 + hid->report_enum[type].numbered; in hid_find_max_report()
836 static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid) in hid_alloc_buffers() argument
838 struct usbhid_device *usbhid = hid->driver_data; in hid_alloc_buffers()
854 static int usbhid_get_raw_report(struct hid_device *hid, in usbhid_get_raw_report() argument
858 struct usbhid_device *usbhid = hid->driver_data; in usbhid_get_raw_report()
859 struct usb_device *dev = hid_to_usb_dev(hid); in usbhid_get_raw_report()
888 static int usbhid_set_raw_report(struct hid_device *hid, unsigned int reportnum, in usbhid_set_raw_report() argument
891 struct usbhid_device *usbhid = hid->driver_data; in usbhid_set_raw_report()
892 struct usb_device *dev = hid_to_usb_dev(hid); in usbhid_set_raw_report()
899 (hid->quirks & HID_QUIRK_SKIP_OUTPUT_REPORT_ID)) in usbhid_set_raw_report()
924 static int usbhid_output_report(struct hid_device *hid, __u8 *buf, size_t count) in usbhid_output_report() argument
926 struct usbhid_device *usbhid = hid->driver_data; in usbhid_output_report()
927 struct usb_device *dev = hid_to_usb_dev(hid); in usbhid_output_report()
954 static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid) in hid_free_buffers() argument
956 struct usbhid_device *usbhid = hid->driver_data; in hid_free_buffers()
964 static int usbhid_parse(struct hid_device *hid) in usbhid_parse() argument
966 struct usb_interface *intf = to_usb_interface(hid->dev.parent); in usbhid_parse()
996 hid->version = le16_to_cpu(hdesc->bcdHID); in usbhid_parse()
997 hid->country = hdesc->bCountryCode; in usbhid_parse()
1023 ret = hid_parse_report(hid, rdesc, rsize); in usbhid_parse()
1030 hid->quirks |= quirks; in usbhid_parse()
1037 static int usbhid_start(struct hid_device *hid) in usbhid_start() argument
1039 struct usb_interface *intf = to_usb_interface(hid->dev.parent); in usbhid_start()
1042 struct usbhid_device *usbhid = hid->driver_data; in usbhid_start()
1049 hid_find_max_report(hid, HID_INPUT_REPORT, &usbhid->bufsize); in usbhid_start()
1050 hid_find_max_report(hid, HID_OUTPUT_REPORT, &usbhid->bufsize); in usbhid_start()
1051 hid_find_max_report(hid, HID_FEATURE_REPORT, &usbhid->bufsize); in usbhid_start()
1056 hid_find_max_report(hid, HID_INPUT_REPORT, &insize); in usbhid_start()
1061 if (hid_alloc_buffers(dev, hid)) { in usbhid_start()
1078 if (hid->quirks & HID_QUIRK_FULLSPEED_INTERVAL && in usbhid_start()
1082 hid->name, endpoint->bInterval, interval); in usbhid_start()
1086 if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0) in usbhid_start()
1097 hid_irq_in, hid, interval); in usbhid_start()
1107 hid_irq_out, hid, interval); in usbhid_start()
1120 usbhid->ctrlbuf, 1, hid_ctrl, hid); in usbhid_start()
1124 if (!(hid->quirks & HID_QUIRK_NO_INIT_REPORTS)) in usbhid_start()
1125 usbhid_init_reports(hid); in usbhid_start()
1129 if (hid->quirks & HID_QUIRK_ALWAYS_POLL) { in usbhid_start()
1134 ret = hid_start_in(hid); in usbhid_start()
1136 dev_err(&hid->dev, in usbhid_start()
1151 usbhid_set_leds(hid); in usbhid_start()
1163 hid_free_buffers(dev, hid); in usbhid_start()
1167 static void usbhid_stop(struct hid_device *hid) in usbhid_stop() argument
1169 struct usbhid_device *usbhid = hid->driver_data; in usbhid_stop()
1174 if (hid->quirks & HID_QUIRK_ALWAYS_POLL) in usbhid_stop()
1187 hid->claimed = 0; in usbhid_stop()
1196 hid_free_buffers(hid_to_usb_dev(hid), hid); in usbhid_stop()
1199 static int usbhid_power(struct hid_device *hid, int lvl) in usbhid_power() argument
1205 r = usbhid_get_power(hid); in usbhid_power()
1208 usbhid_put_power(hid); in usbhid_power()
1214 static void usbhid_request(struct hid_device *hid, struct hid_report *rep, int reqtype) in usbhid_request() argument
1218 usbhid_submit_report(hid, rep, USB_DIR_IN); in usbhid_request()
1221 usbhid_submit_report(hid, rep, USB_DIR_OUT); in usbhid_request()
1226 static int usbhid_raw_request(struct hid_device *hid, unsigned char reportnum, in usbhid_raw_request() argument
1232 return usbhid_get_raw_report(hid, reportnum, buf, len, rtype); in usbhid_raw_request()
1234 return usbhid_set_raw_report(hid, reportnum, buf, len, rtype); in usbhid_raw_request()
1240 static int usbhid_idle(struct hid_device *hid, int report, int idle, in usbhid_idle() argument
1243 struct usb_device *dev = hid_to_usb_dev(hid); in usbhid_idle()
1244 struct usb_interface *intf = to_usb_interface(hid->dev.parent); in usbhid_idle()
1273 struct hid_device *hid; in usbhid_probe() local
1289 hid = hid_allocate_device(); in usbhid_probe()
1290 if (IS_ERR(hid)) in usbhid_probe()
1291 return PTR_ERR(hid); in usbhid_probe()
1293 usb_set_intfdata(intf, hid); in usbhid_probe()
1294 hid->ll_driver = &usb_hid_driver; in usbhid_probe()
1295 hid->ff_init = hid_pidff_init; in usbhid_probe()
1297 hid->hiddev_connect = hiddev_connect; in usbhid_probe()
1298 hid->hiddev_disconnect = hiddev_disconnect; in usbhid_probe()
1299 hid->hiddev_hid_event = hiddev_hid_event; in usbhid_probe()
1300 hid->hiddev_report_event = hiddev_report_event; in usbhid_probe()
1302 hid->dev.parent = &intf->dev; in usbhid_probe()
1303 hid->bus = BUS_USB; in usbhid_probe()
1304 hid->vendor = le16_to_cpu(dev->descriptor.idVendor); in usbhid_probe()
1305 hid->product = le16_to_cpu(dev->descriptor.idProduct); in usbhid_probe()
1306 hid->name[0] = 0; in usbhid_probe()
1307 hid->quirks = usbhid_lookup_quirk(hid->vendor, hid->product); in usbhid_probe()
1310 hid->type = HID_TYPE_USBMOUSE; in usbhid_probe()
1312 hid->type = HID_TYPE_USBNONE; in usbhid_probe()
1315 strlcpy(hid->name, dev->manufacturer, sizeof(hid->name)); in usbhid_probe()
1319 strlcat(hid->name, " ", sizeof(hid->name)); in usbhid_probe()
1320 strlcat(hid->name, dev->product, sizeof(hid->name)); in usbhid_probe()
1323 if (!strlen(hid->name)) in usbhid_probe()
1324 snprintf(hid->name, sizeof(hid->name), "HID %04x:%04x", in usbhid_probe()
1328 usb_make_path(dev, hid->phys, sizeof(hid->phys)); in usbhid_probe()
1329 strlcat(hid->phys, "/input", sizeof(hid->phys)); in usbhid_probe()
1330 len = strlen(hid->phys); in usbhid_probe()
1331 if (len < sizeof(hid->phys) - 1) in usbhid_probe()
1332 snprintf(hid->phys + len, sizeof(hid->phys) - len, in usbhid_probe()
1335 if (usb_string(dev, dev->descriptor.iSerialNumber, hid->uniq, 64) <= 0) in usbhid_probe()
1336 hid->uniq[0] = 0; in usbhid_probe()
1344 hid->driver_data = usbhid; in usbhid_probe()
1345 usbhid->hid = hid; in usbhid_probe()
1351 setup_timer(&usbhid->io_retry, hid_retry_timeout, (unsigned long) hid); in usbhid_probe()
1354 ret = hid_add_device(hid); in usbhid_probe()
1365 hid_destroy_device(hid); in usbhid_probe()
1371 struct hid_device *hid = usb_get_intfdata(intf); in usbhid_disconnect() local
1374 if (WARN_ON(!hid)) in usbhid_disconnect()
1377 usbhid = hid->driver_data; in usbhid_disconnect()
1381 hid_destroy_device(hid); in usbhid_disconnect()
1399 static void hid_restart_io(struct hid_device *hid) in hid_restart_io() argument
1401 struct usbhid_device *usbhid = hid->driver_data; in hid_restart_io()
1418 if (hid_start_in(hid) < 0) in hid_restart_io()
1419 hid_io_error(hid); in hid_restart_io()
1433 struct hid_device *hid = usb_get_intfdata(intf); in hid_pre_reset() local
1434 struct usbhid_device *usbhid = hid->driver_data; in hid_pre_reset()
1448 struct hid_device *hid = usb_get_intfdata(intf); in hid_post_reset() local
1449 struct usbhid_device *usbhid = hid->driver_data; in hid_post_reset()
1459 rdesc = kmalloc(hid->dev_rsize, GFP_KERNEL); in hid_post_reset()
1466 HID_DT_REPORT, rdesc, hid->dev_rsize); in hid_post_reset()
1472 status = memcmp(rdesc, hid->dev_rdesc, hid->dev_rsize); in hid_post_reset()
1486 hid_restart_io(hid); in hid_post_reset()
1491 int usbhid_get_power(struct hid_device *hid) in usbhid_get_power() argument
1493 struct usbhid_device *usbhid = hid->driver_data; in usbhid_get_power()
1498 void usbhid_put_power(struct hid_device *hid) in usbhid_put_power() argument
1500 struct usbhid_device *usbhid = hid->driver_data; in usbhid_put_power()
1507 static int hid_resume_common(struct hid_device *hid, bool driver_suspended) in hid_resume_common() argument
1511 hid_restart_io(hid); in hid_resume_common()
1512 if (driver_suspended && hid->driver && hid->driver->resume) in hid_resume_common()
1513 status = hid->driver->resume(hid); in hid_resume_common()
1519 struct hid_device *hid = usb_get_intfdata(intf); in hid_suspend() local
1520 struct usbhid_device *usbhid = hid->driver_data; in hid_suspend()
1526 ledcount = hidinput_count_leds(hid); in hid_suspend()
1537 if (hid->driver && hid->driver->suspend) { in hid_suspend()
1538 status = hid->driver->suspend(hid, message); in hid_suspend()
1551 if (hid->driver && hid->driver->suspend) in hid_suspend()
1552 status = hid->driver->suspend(hid, message); in hid_suspend()
1557 if (usbhid_wait_io(hid) < 0) in hid_suspend()
1573 hid_resume_common(hid, driver_suspended); in hid_suspend()
1579 struct hid_device *hid = usb_get_intfdata (intf); in hid_resume() local
1582 status = hid_resume_common(hid, true); in hid_resume()
1589 struct hid_device *hid = usb_get_intfdata(intf); in hid_reset_resume() local
1593 if (status >= 0 && hid->driver && hid->driver->reset_resume) { in hid_reset_resume()
1594 int ret = hid->driver->reset_resume(hid); in hid_reset_resume()