Lines Matching refs:usbhid

75 static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid);
82 struct usbhid_device *usbhid = hid->driver_data; in hid_start_in() local
84 spin_lock_irqsave(&usbhid->lock, flags); in hid_start_in()
86 !test_bit(HID_DISCONNECTED, &usbhid->iofl) && in hid_start_in()
87 !test_bit(HID_SUSPENDED, &usbhid->iofl) && in hid_start_in()
88 !test_and_set_bit(HID_IN_RUNNING, &usbhid->iofl)) { in hid_start_in()
89 rc = usb_submit_urb(usbhid->urbin, GFP_ATOMIC); in hid_start_in()
91 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_start_in()
93 set_bit(HID_NO_BANDWIDTH, &usbhid->iofl); in hid_start_in()
95 clear_bit(HID_NO_BANDWIDTH, &usbhid->iofl); in hid_start_in()
98 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_start_in()
106 struct usbhid_device *usbhid = hid->driver_data; in hid_retry_timeout() local
108 dev_dbg(&usbhid->intf->dev, "retrying intr urb\n"); in hid_retry_timeout()
116 struct usbhid_device *usbhid = in hid_reset() local
118 struct hid_device *hid = usbhid->hid; in hid_reset()
121 if (test_bit(HID_CLEAR_HALT, &usbhid->iofl)) { in hid_reset()
122 dev_dbg(&usbhid->intf->dev, "clear halt\n"); in hid_reset()
123 rc = usb_clear_halt(hid_to_usb_dev(hid), usbhid->urbin->pipe); in hid_reset()
124 clear_bit(HID_CLEAR_HALT, &usbhid->iofl); in hid_reset()
128 dev_dbg(&usbhid->intf->dev, in hid_reset()
130 set_bit(HID_RESET_PENDING, &usbhid->iofl); in hid_reset()
134 if (test_bit(HID_RESET_PENDING, &usbhid->iofl)) { in hid_reset()
135 dev_dbg(&usbhid->intf->dev, "resetting device\n"); in hid_reset()
136 usb_queue_reset_device(usbhid->intf); in hid_reset()
144 struct usbhid_device *usbhid = hid->driver_data; in hid_io_error() local
146 spin_lock_irqsave(&usbhid->lock, flags); in hid_io_error()
149 if (test_bit(HID_DISCONNECTED, &usbhid->iofl)) in hid_io_error()
154 if (time_after(jiffies, usbhid->stop_retry + HZ/2)) in hid_io_error()
155 usbhid->retry_delay = 0; in hid_io_error()
158 if (usbhid->retry_delay == 0) { in hid_io_error()
159 usbhid->retry_delay = 13; /* Then 26, 52, 104, 104, ... */ in hid_io_error()
160 usbhid->stop_retry = jiffies + msecs_to_jiffies(1000); in hid_io_error()
161 } else if (usbhid->retry_delay < 100) in hid_io_error()
162 usbhid->retry_delay *= 2; in hid_io_error()
164 if (time_after(jiffies, usbhid->stop_retry)) { in hid_io_error()
167 if (!test_bit(HID_NO_BANDWIDTH, &usbhid->iofl) in hid_io_error()
168 && !test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) { in hid_io_error()
170 schedule_work(&usbhid->reset_work); in hid_io_error()
175 mod_timer(&usbhid->io_retry, in hid_io_error()
176 jiffies + msecs_to_jiffies(usbhid->retry_delay)); in hid_io_error()
178 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_io_error()
181 static void usbhid_mark_busy(struct usbhid_device *usbhid) in usbhid_mark_busy() argument
183 struct usb_interface *intf = usbhid->intf; in usbhid_mark_busy()
188 static int usbhid_restart_out_queue(struct usbhid_device *usbhid) in usbhid_restart_out_queue() argument
190 struct hid_device *hid = usb_get_intfdata(usbhid->intf); in usbhid_restart_out_queue()
194 if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) || in usbhid_restart_out_queue()
195 test_bit(HID_SUSPENDED, &usbhid->iofl)) in usbhid_restart_out_queue()
198 if ((kicked = (usbhid->outhead != usbhid->outtail))) { in usbhid_restart_out_queue()
199 hid_dbg(hid, "Kicking head %d tail %d", usbhid->outhead, usbhid->outtail); in usbhid_restart_out_queue()
202 r = usb_autopm_get_interface_async(usbhid->intf); in usbhid_restart_out_queue()
210 if (test_bit(HID_SUSPENDED, &usbhid->iofl)) { in usbhid_restart_out_queue()
211 usb_autopm_put_interface_no_suspend(usbhid->intf); in usbhid_restart_out_queue()
216 set_bit(HID_OUT_RUNNING, &usbhid->iofl); in usbhid_restart_out_queue()
218 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); in usbhid_restart_out_queue()
219 usb_autopm_put_interface_async(usbhid->intf); in usbhid_restart_out_queue()
221 wake_up(&usbhid->wait); in usbhid_restart_out_queue()
226 static int usbhid_restart_ctrl_queue(struct usbhid_device *usbhid) in usbhid_restart_ctrl_queue() argument
228 struct hid_device *hid = usb_get_intfdata(usbhid->intf); in usbhid_restart_ctrl_queue()
233 if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) || in usbhid_restart_ctrl_queue()
234 test_bit(HID_SUSPENDED, &usbhid->iofl)) in usbhid_restart_ctrl_queue()
237 if ((kicked = (usbhid->ctrlhead != usbhid->ctrltail))) { in usbhid_restart_ctrl_queue()
238 hid_dbg(hid, "Kicking head %d tail %d", usbhid->ctrlhead, usbhid->ctrltail); in usbhid_restart_ctrl_queue()
241 r = usb_autopm_get_interface_async(usbhid->intf); in usbhid_restart_ctrl_queue()
249 if (test_bit(HID_SUSPENDED, &usbhid->iofl)) { in usbhid_restart_ctrl_queue()
250 usb_autopm_put_interface_no_suspend(usbhid->intf); in usbhid_restart_ctrl_queue()
255 set_bit(HID_CTRL_RUNNING, &usbhid->iofl); in usbhid_restart_ctrl_queue()
257 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); in usbhid_restart_ctrl_queue()
258 usb_autopm_put_interface_async(usbhid->intf); in usbhid_restart_ctrl_queue()
260 wake_up(&usbhid->wait); in usbhid_restart_ctrl_queue()
272 struct usbhid_device *usbhid = hid->driver_data; in hid_irq_in() local
277 usbhid_mark_busy(usbhid); in hid_irq_in()
278 usbhid->retry_delay = 0; in hid_irq_in()
281 if (!test_bit(HID_RESUME_RUNNING, &usbhid->iofl)) { in hid_irq_in()
291 set_bit(HID_KEYS_PRESSED, &usbhid->iofl); in hid_irq_in()
293 clear_bit(HID_KEYS_PRESSED, &usbhid->iofl); in hid_irq_in()
297 usbhid_mark_busy(usbhid); in hid_irq_in()
298 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_irq_in()
299 set_bit(HID_CLEAR_HALT, &usbhid->iofl); in hid_irq_in()
300 schedule_work(&usbhid->reset_work); in hid_irq_in()
305 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_irq_in()
311 usbhid_mark_busy(usbhid); in hid_irq_in()
312 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_irq_in()
322 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_irq_in()
327 usbhid->ifnum, status); in hid_irq_in()
337 struct usbhid_device *usbhid = hid->driver_data; in hid_submit_out() local
340 report = usbhid->out[usbhid->outtail].report; in hid_submit_out()
341 raw_report = usbhid->out[usbhid->outtail].raw_report; in hid_submit_out()
343 usbhid->urbout->transfer_buffer_length = hid_report_len(report); in hid_submit_out()
344 usbhid->urbout->dev = hid_to_usb_dev(hid); in hid_submit_out()
346 memcpy(usbhid->outbuf, raw_report, in hid_submit_out()
347 usbhid->urbout->transfer_buffer_length); in hid_submit_out()
349 usbhid->out[usbhid->outtail].raw_report = NULL; in hid_submit_out()
354 r = usb_submit_urb(usbhid->urbout, GFP_ATOMIC); in hid_submit_out()
359 usbhid->last_out = jiffies; in hid_submit_out()
369 struct usbhid_device *usbhid = hid->driver_data; in hid_submit_ctrl() local
371 report = usbhid->ctrl[usbhid->ctrltail].report; in hid_submit_ctrl()
372 raw_report = usbhid->ctrl[usbhid->ctrltail].raw_report; in hid_submit_ctrl()
373 dir = usbhid->ctrl[usbhid->ctrltail].dir; in hid_submit_ctrl()
377 usbhid->urbctrl->pipe = usb_sndctrlpipe(hid_to_usb_dev(hid), 0); in hid_submit_ctrl()
378 usbhid->urbctrl->transfer_buffer_length = len; in hid_submit_ctrl()
380 memcpy(usbhid->ctrlbuf, raw_report, len); in hid_submit_ctrl()
382 usbhid->ctrl[usbhid->ctrltail].raw_report = NULL; in hid_submit_ctrl()
387 usbhid->urbctrl->pipe = usb_rcvctrlpipe(hid_to_usb_dev(hid), 0); in hid_submit_ctrl()
389 usbhid->urbctrl->pipe, 0); in hid_submit_ctrl()
393 if (padlen > usbhid->bufsize) in hid_submit_ctrl()
394 padlen = usbhid->bufsize; in hid_submit_ctrl()
397 usbhid->urbctrl->transfer_buffer_length = padlen; in hid_submit_ctrl()
399 usbhid->urbctrl->dev = hid_to_usb_dev(hid); in hid_submit_ctrl()
401 usbhid->cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | dir; in hid_submit_ctrl()
402 usbhid->cr->bRequest = (dir == USB_DIR_OUT) ? HID_REQ_SET_REPORT : in hid_submit_ctrl()
404 usbhid->cr->wValue = cpu_to_le16(((report->type + 1) << 8) | in hid_submit_ctrl()
406 usbhid->cr->wIndex = cpu_to_le16(usbhid->ifnum); in hid_submit_ctrl()
407 usbhid->cr->wLength = cpu_to_le16(len); in hid_submit_ctrl()
410 usbhid->cr->bRequest == HID_REQ_SET_REPORT ? "Set_Report" : in hid_submit_ctrl()
412 usbhid->cr->wValue, usbhid->cr->wIndex, usbhid->cr->wLength); in hid_submit_ctrl()
414 r = usb_submit_urb(usbhid->urbctrl, GFP_ATOMIC); in hid_submit_ctrl()
419 usbhid->last_ctrl = jiffies; in hid_submit_ctrl()
430 struct usbhid_device *usbhid = hid->driver_data; in hid_irq_out() local
449 spin_lock_irqsave(&usbhid->lock, flags); in hid_irq_out()
452 usbhid->outtail = usbhid->outhead; in hid_irq_out()
454 usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1); in hid_irq_out()
456 if (usbhid->outhead != usbhid->outtail && in hid_irq_out()
459 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_irq_out()
464 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); in hid_irq_out()
465 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_irq_out()
466 usb_autopm_put_interface_async(usbhid->intf); in hid_irq_out()
467 wake_up(&usbhid->wait); in hid_irq_out()
477 struct usbhid_device *usbhid = hid->driver_data; in hid_ctrl() local
482 if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN) in hid_ctrl()
484 usbhid->ctrl[usbhid->ctrltail].report->type, in hid_ctrl()
499 spin_lock(&usbhid->lock); in hid_ctrl()
502 usbhid->ctrltail = usbhid->ctrlhead; in hid_ctrl()
504 usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1); in hid_ctrl()
506 if (usbhid->ctrlhead != usbhid->ctrltail && in hid_ctrl()
509 spin_unlock(&usbhid->lock); in hid_ctrl()
514 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); in hid_ctrl()
515 spin_unlock(&usbhid->lock); in hid_ctrl()
516 usb_autopm_put_interface_async(usbhid->intf); in hid_ctrl()
517 wake_up(&usbhid->wait); in hid_ctrl()
524 struct usbhid_device *usbhid = hid->driver_data; in __usbhid_submit_report() local
527 test_bit(HID_DISCONNECTED, &usbhid->iofl)) in __usbhid_submit_report()
530 if (usbhid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) { in __usbhid_submit_report()
531 if ((head = (usbhid->outhead + 1) & (HID_OUTPUT_FIFO_SIZE - 1)) == usbhid->outtail) { in __usbhid_submit_report()
536 usbhid->out[usbhid->outhead].raw_report = hid_alloc_report_buf(report, GFP_ATOMIC); in __usbhid_submit_report()
537 if (!usbhid->out[usbhid->outhead].raw_report) { in __usbhid_submit_report()
541 hid_output_report(report, usbhid->out[usbhid->outhead].raw_report); in __usbhid_submit_report()
542 usbhid->out[usbhid->outhead].report = report; in __usbhid_submit_report()
543 usbhid->outhead = head; in __usbhid_submit_report()
546 if (!test_bit(HID_OUT_RUNNING, &usbhid->iofl)) { in __usbhid_submit_report()
547 usbhid_restart_out_queue(usbhid); in __usbhid_submit_report()
550 } else if (time_after(jiffies, usbhid->last_out + HZ * 5)) { in __usbhid_submit_report()
553 usb_autopm_get_interface_no_resume(usbhid->intf); in __usbhid_submit_report()
560 usb_block_urb(usbhid->urbout); in __usbhid_submit_report()
563 spin_unlock(&usbhid->lock); in __usbhid_submit_report()
565 usb_unlink_urb(usbhid->urbout); in __usbhid_submit_report()
566 spin_lock(&usbhid->lock); in __usbhid_submit_report()
567 usb_unblock_urb(usbhid->urbout); in __usbhid_submit_report()
570 if (!test_bit(HID_OUT_RUNNING, &usbhid->iofl)) in __usbhid_submit_report()
571 usbhid_restart_out_queue(usbhid); in __usbhid_submit_report()
574 usb_autopm_put_interface_async(usbhid->intf); in __usbhid_submit_report()
579 if ((head = (usbhid->ctrlhead + 1) & (HID_CONTROL_FIFO_SIZE - 1)) == usbhid->ctrltail) { in __usbhid_submit_report()
585 usbhid->ctrl[usbhid->ctrlhead].raw_report = hid_alloc_report_buf(report, GFP_ATOMIC); in __usbhid_submit_report()
586 if (!usbhid->ctrl[usbhid->ctrlhead].raw_report) { in __usbhid_submit_report()
590 hid_output_report(report, usbhid->ctrl[usbhid->ctrlhead].raw_report); in __usbhid_submit_report()
592 usbhid->ctrl[usbhid->ctrlhead].report = report; in __usbhid_submit_report()
593 usbhid->ctrl[usbhid->ctrlhead].dir = dir; in __usbhid_submit_report()
594 usbhid->ctrlhead = head; in __usbhid_submit_report()
597 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) { in __usbhid_submit_report()
598 usbhid_restart_ctrl_queue(usbhid); in __usbhid_submit_report()
601 } else if (time_after(jiffies, usbhid->last_ctrl + HZ * 5)) { in __usbhid_submit_report()
604 usb_autopm_get_interface_no_resume(usbhid->intf); in __usbhid_submit_report()
611 usb_block_urb(usbhid->urbctrl); in __usbhid_submit_report()
614 spin_unlock(&usbhid->lock); in __usbhid_submit_report()
616 usb_unlink_urb(usbhid->urbctrl); in __usbhid_submit_report()
617 spin_lock(&usbhid->lock); in __usbhid_submit_report()
618 usb_unblock_urb(usbhid->urbctrl); in __usbhid_submit_report()
621 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) in __usbhid_submit_report()
622 usbhid_restart_ctrl_queue(usbhid); in __usbhid_submit_report()
625 usb_autopm_put_interface_async(usbhid->intf); in __usbhid_submit_report()
631 struct usbhid_device *usbhid = hid->driver_data; in usbhid_submit_report() local
634 spin_lock_irqsave(&usbhid->lock, flags); in usbhid_submit_report()
636 spin_unlock_irqrestore(&usbhid->lock, flags); in usbhid_submit_report()
641 struct usbhid_device *usbhid = hid->driver_data; in usbhid_wait_io() local
643 if (!wait_event_timeout(usbhid->wait, in usbhid_wait_io()
644 (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl) && in usbhid_wait_io()
645 !test_bit(HID_OUT_RUNNING, &usbhid->iofl)), in usbhid_wait_io()
679 struct usbhid_device *usbhid = hid->driver_data; in usbhid_open() local
684 res = usb_autopm_get_interface(usbhid->intf); in usbhid_open()
691 usbhid->intf->needs_remote_wakeup = 1; in usbhid_open()
692 set_bit(HID_RESUME_RUNNING, &usbhid->iofl); in usbhid_open()
702 usbhid->intf->needs_remote_wakeup = 0; in usbhid_open()
705 usb_autopm_put_interface(usbhid->intf); in usbhid_open()
715 clear_bit(HID_RESUME_RUNNING, &usbhid->iofl); in usbhid_open()
724 struct usbhid_device *usbhid = hid->driver_data; in usbhid_close() local
732 spin_lock_irq(&usbhid->lock); in usbhid_close()
734 spin_unlock_irq(&usbhid->lock); in usbhid_close()
735 hid_cancel_delayed_stuff(usbhid); in usbhid_close()
737 usb_kill_urb(usbhid->urbin); in usbhid_close()
738 usbhid->intf->needs_remote_wakeup = 0; in usbhid_close()
741 spin_unlock_irq(&usbhid->lock); in usbhid_close()
753 struct usbhid_device *usbhid = hid->driver_data; in usbhid_init_reports() local
771 if (test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) in usbhid_init_reports()
772 usb_kill_urb(usbhid->urbctrl); in usbhid_init_reports()
773 if (test_bit(HID_OUT_RUNNING, &usbhid->iofl)) in usbhid_init_reports()
774 usb_kill_urb(usbhid->urbout); in usbhid_init_reports()
838 struct usbhid_device *usbhid = hid->driver_data; in hid_alloc_buffers() local
840 usbhid->inbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL, in hid_alloc_buffers()
841 &usbhid->inbuf_dma); in hid_alloc_buffers()
842 usbhid->outbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL, in hid_alloc_buffers()
843 &usbhid->outbuf_dma); in hid_alloc_buffers()
844 usbhid->cr = kmalloc(sizeof(*usbhid->cr), GFP_KERNEL); in hid_alloc_buffers()
845 usbhid->ctrlbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL, in hid_alloc_buffers()
846 &usbhid->ctrlbuf_dma); in hid_alloc_buffers()
847 if (!usbhid->inbuf || !usbhid->outbuf || !usbhid->cr || in hid_alloc_buffers()
848 !usbhid->ctrlbuf) in hid_alloc_buffers()
858 struct usbhid_device *usbhid = hid->driver_data; in usbhid_get_raw_report() local
860 struct usb_interface *intf = usbhid->intf; in usbhid_get_raw_report()
891 struct usbhid_device *usbhid = hid->driver_data; in usbhid_set_raw_report() local
893 struct usb_interface *intf = usbhid->intf; in usbhid_set_raw_report()
926 struct usbhid_device *usbhid = hid->driver_data; in usbhid_output_report() local
930 if (!usbhid->urbout) in usbhid_output_report()
940 ret = usb_interrupt_msg(dev, usbhid->urbout->pipe, in usbhid_output_report()
956 struct usbhid_device *usbhid = hid->driver_data; in hid_free_buffers() local
958 usb_free_coherent(dev, usbhid->bufsize, usbhid->inbuf, usbhid->inbuf_dma); in hid_free_buffers()
959 usb_free_coherent(dev, usbhid->bufsize, usbhid->outbuf, usbhid->outbuf_dma); in hid_free_buffers()
960 kfree(usbhid->cr); in hid_free_buffers()
961 usb_free_coherent(dev, usbhid->bufsize, usbhid->ctrlbuf, usbhid->ctrlbuf_dma); in hid_free_buffers()
1042 struct usbhid_device *usbhid = hid->driver_data; in usbhid_start() local
1046 clear_bit(HID_DISCONNECTED, &usbhid->iofl); in usbhid_start()
1048 usbhid->bufsize = HID_MIN_BUFFER_SIZE; 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()
1053 if (usbhid->bufsize > HID_MAX_BUFFER_SIZE) in usbhid_start()
1054 usbhid->bufsize = HID_MAX_BUFFER_SIZE; in usbhid_start()
1091 if (usbhid->urbin) in usbhid_start()
1093 if (!(usbhid->urbin = usb_alloc_urb(0, GFP_KERNEL))) in usbhid_start()
1096 usb_fill_int_urb(usbhid->urbin, dev, pipe, usbhid->inbuf, insize, in usbhid_start()
1098 usbhid->urbin->transfer_dma = usbhid->inbuf_dma; in usbhid_start()
1099 usbhid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usbhid_start()
1101 if (usbhid->urbout) in usbhid_start()
1103 if (!(usbhid->urbout = usb_alloc_urb(0, GFP_KERNEL))) in usbhid_start()
1106 usb_fill_int_urb(usbhid->urbout, dev, pipe, usbhid->outbuf, 0, in usbhid_start()
1108 usbhid->urbout->transfer_dma = usbhid->outbuf_dma; in usbhid_start()
1109 usbhid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usbhid_start()
1113 usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL); in usbhid_start()
1114 if (!usbhid->urbctrl) { in usbhid_start()
1119 usb_fill_control_urb(usbhid->urbctrl, dev, 0, (void *) usbhid->cr, in usbhid_start()
1120 usbhid->ctrlbuf, 1, hid_ctrl, hid); in usbhid_start()
1121 usbhid->urbctrl->transfer_dma = usbhid->ctrlbuf_dma; in usbhid_start()
1122 usbhid->urbctrl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usbhid_start()
1127 set_bit(HID_STARTED, &usbhid->iofl); in usbhid_start()
1130 ret = usb_autopm_get_interface(usbhid->intf); in usbhid_start()
1133 usbhid->intf->needs_remote_wakeup = 1; in usbhid_start()
1139 usb_autopm_put_interface(usbhid->intf); in usbhid_start()
1157 usb_free_urb(usbhid->urbin); in usbhid_start()
1158 usb_free_urb(usbhid->urbout); in usbhid_start()
1159 usb_free_urb(usbhid->urbctrl); in usbhid_start()
1160 usbhid->urbin = NULL; in usbhid_start()
1161 usbhid->urbout = NULL; in usbhid_start()
1162 usbhid->urbctrl = NULL; in usbhid_start()
1169 struct usbhid_device *usbhid = hid->driver_data; in usbhid_stop() local
1171 if (WARN_ON(!usbhid)) in usbhid_stop()
1175 usbhid->intf->needs_remote_wakeup = 0; in usbhid_stop()
1177 clear_bit(HID_STARTED, &usbhid->iofl); in usbhid_stop()
1178 spin_lock_irq(&usbhid->lock); /* Sync with error and led handlers */ in usbhid_stop()
1179 set_bit(HID_DISCONNECTED, &usbhid->iofl); in usbhid_stop()
1180 spin_unlock_irq(&usbhid->lock); in usbhid_stop()
1181 usb_kill_urb(usbhid->urbin); in usbhid_stop()
1182 usb_kill_urb(usbhid->urbout); in usbhid_stop()
1183 usb_kill_urb(usbhid->urbctrl); in usbhid_stop()
1185 hid_cancel_delayed_stuff(usbhid); in usbhid_stop()
1189 usb_free_urb(usbhid->urbin); in usbhid_stop()
1190 usb_free_urb(usbhid->urbctrl); in usbhid_stop()
1191 usb_free_urb(usbhid->urbout); in usbhid_stop()
1192 usbhid->urbin = NULL; /* don't mess up next start */ in usbhid_stop()
1193 usbhid->urbctrl = NULL; in usbhid_stop()
1194 usbhid->urbout = NULL; in usbhid_stop()
1272 struct usbhid_device *usbhid; in usbhid_probe() local
1338 usbhid = kzalloc(sizeof(*usbhid), GFP_KERNEL); in usbhid_probe()
1339 if (usbhid == NULL) { in usbhid_probe()
1344 hid->driver_data = usbhid; in usbhid_probe()
1345 usbhid->hid = hid; in usbhid_probe()
1346 usbhid->intf = intf; in usbhid_probe()
1347 usbhid->ifnum = interface->desc.bInterfaceNumber; in usbhid_probe()
1349 init_waitqueue_head(&usbhid->wait); in usbhid_probe()
1350 INIT_WORK(&usbhid->reset_work, hid_reset); in usbhid_probe()
1351 setup_timer(&usbhid->io_retry, hid_retry_timeout, (unsigned long) hid); in usbhid_probe()
1352 spin_lock_init(&usbhid->lock); in usbhid_probe()
1363 kfree(usbhid); in usbhid_probe()
1372 struct usbhid_device *usbhid; in usbhid_disconnect() local
1377 usbhid = hid->driver_data; in usbhid_disconnect()
1378 spin_lock_irq(&usbhid->lock); /* Sync with error and led handlers */ in usbhid_disconnect()
1379 set_bit(HID_DISCONNECTED, &usbhid->iofl); in usbhid_disconnect()
1380 spin_unlock_irq(&usbhid->lock); in usbhid_disconnect()
1382 kfree(usbhid); in usbhid_disconnect()
1385 static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid) in hid_cancel_delayed_stuff() argument
1387 del_timer_sync(&usbhid->io_retry); in hid_cancel_delayed_stuff()
1388 cancel_work_sync(&usbhid->reset_work); in hid_cancel_delayed_stuff()
1391 static void hid_cease_io(struct usbhid_device *usbhid) in hid_cease_io() argument
1393 del_timer_sync(&usbhid->io_retry); in hid_cease_io()
1394 usb_kill_urb(usbhid->urbin); in hid_cease_io()
1395 usb_kill_urb(usbhid->urbctrl); in hid_cease_io()
1396 usb_kill_urb(usbhid->urbout); in hid_cease_io()
1401 struct usbhid_device *usbhid = hid->driver_data; in hid_restart_io() local
1402 int clear_halt = test_bit(HID_CLEAR_HALT, &usbhid->iofl); in hid_restart_io()
1403 int reset_pending = test_bit(HID_RESET_PENDING, &usbhid->iofl); in hid_restart_io()
1405 spin_lock_irq(&usbhid->lock); in hid_restart_io()
1406 clear_bit(HID_SUSPENDED, &usbhid->iofl); in hid_restart_io()
1407 usbhid_mark_busy(usbhid); in hid_restart_io()
1410 schedule_work(&usbhid->reset_work); in hid_restart_io()
1411 usbhid->retry_delay = 0; in hid_restart_io()
1412 spin_unlock_irq(&usbhid->lock); in hid_restart_io()
1414 if (reset_pending || !test_bit(HID_STARTED, &usbhid->iofl)) in hid_restart_io()
1422 spin_lock_irq(&usbhid->lock); in hid_restart_io()
1423 if (usbhid->urbout && !test_bit(HID_OUT_RUNNING, &usbhid->iofl)) in hid_restart_io()
1424 usbhid_restart_out_queue(usbhid); in hid_restart_io()
1425 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) in hid_restart_io()
1426 usbhid_restart_ctrl_queue(usbhid); in hid_restart_io()
1427 spin_unlock_irq(&usbhid->lock); in hid_restart_io()
1434 struct usbhid_device *usbhid = hid->driver_data; in hid_pre_reset() local
1436 spin_lock_irq(&usbhid->lock); in hid_pre_reset()
1437 set_bit(HID_RESET_PENDING, &usbhid->iofl); in hid_pre_reset()
1438 spin_unlock_irq(&usbhid->lock); in hid_pre_reset()
1439 hid_cease_io(usbhid); in hid_pre_reset()
1449 struct usbhid_device *usbhid = hid->driver_data; in hid_post_reset() local
1480 spin_lock_irq(&usbhid->lock); in hid_post_reset()
1481 clear_bit(HID_RESET_PENDING, &usbhid->iofl); in hid_post_reset()
1482 clear_bit(HID_CLEAR_HALT, &usbhid->iofl); in hid_post_reset()
1483 spin_unlock_irq(&usbhid->lock); in hid_post_reset()
1493 struct usbhid_device *usbhid = hid->driver_data; in usbhid_get_power() local
1495 return usb_autopm_get_interface(usbhid->intf); in usbhid_get_power()
1500 struct usbhid_device *usbhid = hid->driver_data; in usbhid_put_power() local
1502 usb_autopm_put_interface(usbhid->intf); in usbhid_put_power()
1520 struct usbhid_device *usbhid = hid->driver_data; in hid_suspend() local
1527 spin_lock_irq(&usbhid->lock); /* Sync with error handler */ in hid_suspend()
1528 if (!test_bit(HID_RESET_PENDING, &usbhid->iofl) in hid_suspend()
1529 && !test_bit(HID_CLEAR_HALT, &usbhid->iofl) in hid_suspend()
1530 && !test_bit(HID_OUT_RUNNING, &usbhid->iofl) in hid_suspend()
1531 && !test_bit(HID_CTRL_RUNNING, &usbhid->iofl) in hid_suspend()
1532 && !test_bit(HID_KEYS_PRESSED, &usbhid->iofl) in hid_suspend()
1535 set_bit(HID_SUSPENDED, &usbhid->iofl); in hid_suspend()
1536 spin_unlock_irq(&usbhid->lock); in hid_suspend()
1544 usbhid_mark_busy(usbhid); in hid_suspend()
1545 spin_unlock_irq(&usbhid->lock); in hid_suspend()
1554 spin_lock_irq(&usbhid->lock); in hid_suspend()
1555 set_bit(HID_SUSPENDED, &usbhid->iofl); in hid_suspend()
1556 spin_unlock_irq(&usbhid->lock); in hid_suspend()
1561 hid_cancel_delayed_stuff(usbhid); in hid_suspend()
1562 hid_cease_io(usbhid); in hid_suspend()
1564 if (PMSG_IS_AUTO(message) && test_bit(HID_KEYS_PRESSED, &usbhid->iofl)) { in hid_suspend()