Lines Matching full:usbhid
37 #include "usbhid.h"
79 static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid);
86 struct usbhid_device *usbhid = hid->driver_data; in hid_start_in() local
88 spin_lock_irqsave(&usbhid->lock, flags); in hid_start_in()
89 if (test_bit(HID_IN_POLLING, &usbhid->iofl) && in hid_start_in()
90 !test_bit(HID_DISCONNECTED, &usbhid->iofl) && in hid_start_in()
91 !test_bit(HID_SUSPENDED, &usbhid->iofl) && in hid_start_in()
92 !test_and_set_bit(HID_IN_RUNNING, &usbhid->iofl)) { in hid_start_in()
93 rc = usb_submit_urb(usbhid->urbin, GFP_ATOMIC); in hid_start_in()
95 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_start_in()
97 set_bit(HID_NO_BANDWIDTH, &usbhid->iofl); in hid_start_in()
99 clear_bit(HID_NO_BANDWIDTH, &usbhid->iofl); in hid_start_in()
102 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_start_in()
109 struct usbhid_device *usbhid = from_timer(usbhid, t, io_retry); in hid_retry_timeout() local
110 struct hid_device *hid = usbhid->hid; in hid_retry_timeout()
112 dev_dbg(&usbhid->intf->dev, "retrying intr urb\n"); in hid_retry_timeout()
120 struct usbhid_device *usbhid = in hid_reset() local
122 struct hid_device *hid = usbhid->hid; in hid_reset()
125 if (test_bit(HID_CLEAR_HALT, &usbhid->iofl)) { in hid_reset()
126 dev_dbg(&usbhid->intf->dev, "clear halt\n"); in hid_reset()
127 rc = usb_clear_halt(hid_to_usb_dev(hid), usbhid->urbin->pipe); in hid_reset()
128 clear_bit(HID_CLEAR_HALT, &usbhid->iofl); in hid_reset()
132 dev_dbg(&usbhid->intf->dev, in hid_reset()
134 set_bit(HID_RESET_PENDING, &usbhid->iofl); in hid_reset()
138 if (test_bit(HID_RESET_PENDING, &usbhid->iofl)) { in hid_reset()
139 dev_dbg(&usbhid->intf->dev, "resetting device\n"); in hid_reset()
140 usb_queue_reset_device(usbhid->intf); in hid_reset()
148 struct usbhid_device *usbhid = hid->driver_data; in hid_io_error() local
150 spin_lock_irqsave(&usbhid->lock, flags); in hid_io_error()
153 if (test_bit(HID_DISCONNECTED, &usbhid->iofl)) in hid_io_error()
158 if (time_after(jiffies, usbhid->stop_retry + HZ/2)) in hid_io_error()
159 usbhid->retry_delay = 0; in hid_io_error()
162 if (usbhid->retry_delay == 0) { in hid_io_error()
163 usbhid->retry_delay = 13; /* Then 26, 52, 104, 104, ... */ in hid_io_error()
164 usbhid->stop_retry = jiffies + msecs_to_jiffies(1000); in hid_io_error()
165 } else if (usbhid->retry_delay < 100) in hid_io_error()
166 usbhid->retry_delay *= 2; in hid_io_error()
168 if (time_after(jiffies, usbhid->stop_retry)) { in hid_io_error()
171 if (!test_bit(HID_NO_BANDWIDTH, &usbhid->iofl) in hid_io_error()
172 && !test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) { in hid_io_error()
174 schedule_work(&usbhid->reset_work); in hid_io_error()
179 mod_timer(&usbhid->io_retry, in hid_io_error()
180 jiffies + msecs_to_jiffies(usbhid->retry_delay)); in hid_io_error()
182 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_io_error()
185 static void usbhid_mark_busy(struct usbhid_device *usbhid) in usbhid_mark_busy() argument
187 struct usb_interface *intf = usbhid->intf; in usbhid_mark_busy()
192 static int usbhid_restart_out_queue(struct usbhid_device *usbhid) in usbhid_restart_out_queue() argument
194 struct hid_device *hid = usb_get_intfdata(usbhid->intf); in usbhid_restart_out_queue()
198 if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) || in usbhid_restart_out_queue()
199 test_bit(HID_SUSPENDED, &usbhid->iofl)) in usbhid_restart_out_queue()
202 if ((kicked = (usbhid->outhead != usbhid->outtail))) { in usbhid_restart_out_queue()
203 hid_dbg(hid, "Kicking head %d tail %d", usbhid->outhead, usbhid->outtail); in usbhid_restart_out_queue()
206 r = usb_autopm_get_interface_async(usbhid->intf); in usbhid_restart_out_queue()
214 if (test_bit(HID_SUSPENDED, &usbhid->iofl)) { in usbhid_restart_out_queue()
215 usb_autopm_put_interface_no_suspend(usbhid->intf); in usbhid_restart_out_queue()
220 set_bit(HID_OUT_RUNNING, &usbhid->iofl); in usbhid_restart_out_queue()
222 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); in usbhid_restart_out_queue()
223 usb_autopm_put_interface_async(usbhid->intf); in usbhid_restart_out_queue()
225 wake_up(&usbhid->wait); in usbhid_restart_out_queue()
230 static int usbhid_restart_ctrl_queue(struct usbhid_device *usbhid) in usbhid_restart_ctrl_queue() argument
232 struct hid_device *hid = usb_get_intfdata(usbhid->intf); in usbhid_restart_ctrl_queue()
237 if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) || in usbhid_restart_ctrl_queue()
238 test_bit(HID_SUSPENDED, &usbhid->iofl)) in usbhid_restart_ctrl_queue()
241 if ((kicked = (usbhid->ctrlhead != usbhid->ctrltail))) { in usbhid_restart_ctrl_queue()
242 hid_dbg(hid, "Kicking head %d tail %d", usbhid->ctrlhead, usbhid->ctrltail); in usbhid_restart_ctrl_queue()
245 r = usb_autopm_get_interface_async(usbhid->intf); in usbhid_restart_ctrl_queue()
253 if (test_bit(HID_SUSPENDED, &usbhid->iofl)) { in usbhid_restart_ctrl_queue()
254 usb_autopm_put_interface_no_suspend(usbhid->intf); in usbhid_restart_ctrl_queue()
259 set_bit(HID_CTRL_RUNNING, &usbhid->iofl); in usbhid_restart_ctrl_queue()
261 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); in usbhid_restart_ctrl_queue()
262 usb_autopm_put_interface_async(usbhid->intf); in usbhid_restart_ctrl_queue()
264 wake_up(&usbhid->wait); in usbhid_restart_ctrl_queue()
276 struct usbhid_device *usbhid = hid->driver_data; in hid_irq_in() local
281 usbhid->retry_delay = 0; in hid_irq_in()
282 if (!test_bit(HID_OPENED, &usbhid->iofl)) in hid_irq_in()
284 usbhid_mark_busy(usbhid); in hid_irq_in()
285 if (!test_bit(HID_RESUME_RUNNING, &usbhid->iofl)) { in hid_irq_in()
295 set_bit(HID_KEYS_PRESSED, &usbhid->iofl); in hid_irq_in()
297 clear_bit(HID_KEYS_PRESSED, &usbhid->iofl); in hid_irq_in()
301 usbhid_mark_busy(usbhid); in hid_irq_in()
302 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_irq_in()
303 set_bit(HID_CLEAR_HALT, &usbhid->iofl); in hid_irq_in()
304 schedule_work(&usbhid->reset_work); in hid_irq_in()
309 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_irq_in()
315 usbhid_mark_busy(usbhid); in hid_irq_in()
316 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_irq_in()
326 clear_bit(HID_IN_RUNNING, &usbhid->iofl); in hid_irq_in()
331 usbhid->ifnum, status); in hid_irq_in()
341 struct usbhid_device *usbhid = hid->driver_data; in hid_submit_out() local
344 report = usbhid->out[usbhid->outtail].report; in hid_submit_out()
345 raw_report = usbhid->out[usbhid->outtail].raw_report; in hid_submit_out()
347 usbhid->urbout->transfer_buffer_length = hid_report_len(report); in hid_submit_out()
348 usbhid->urbout->dev = hid_to_usb_dev(hid); in hid_submit_out()
350 memcpy(usbhid->outbuf, raw_report, in hid_submit_out()
351 usbhid->urbout->transfer_buffer_length); in hid_submit_out()
353 usbhid->out[usbhid->outtail].raw_report = NULL; in hid_submit_out()
358 r = usb_submit_urb(usbhid->urbout, GFP_ATOMIC); in hid_submit_out()
363 usbhid->last_out = jiffies; in hid_submit_out()
373 struct usbhid_device *usbhid = hid->driver_data; in hid_submit_ctrl() local
375 report = usbhid->ctrl[usbhid->ctrltail].report; in hid_submit_ctrl()
376 raw_report = usbhid->ctrl[usbhid->ctrltail].raw_report; in hid_submit_ctrl()
377 dir = usbhid->ctrl[usbhid->ctrltail].dir; in hid_submit_ctrl()
381 usbhid->urbctrl->pipe = usb_sndctrlpipe(hid_to_usb_dev(hid), 0); in hid_submit_ctrl()
383 memcpy(usbhid->ctrlbuf, raw_report, len); in hid_submit_ctrl()
385 usbhid->ctrl[usbhid->ctrltail].raw_report = NULL; in hid_submit_ctrl()
390 usbhid->urbctrl->pipe = usb_rcvctrlpipe(hid_to_usb_dev(hid), 0); in hid_submit_ctrl()
392 usbhid->urbctrl->pipe); in hid_submit_ctrl()
395 if (len > usbhid->bufsize) in hid_submit_ctrl()
396 len = usbhid->bufsize; in hid_submit_ctrl()
398 usbhid->urbctrl->transfer_buffer_length = len; 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
450 spin_lock_irqsave(&usbhid->lock, flags); in hid_irq_out()
453 usbhid->outtail = usbhid->outhead; in hid_irq_out()
455 usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1); in hid_irq_out()
457 if (usbhid->outhead != usbhid->outtail && in hid_irq_out()
460 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_irq_out()
465 clear_bit(HID_OUT_RUNNING, &usbhid->iofl); in hid_irq_out()
466 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_irq_out()
467 usb_autopm_put_interface_async(usbhid->intf); in hid_irq_out()
468 wake_up(&usbhid->wait); in hid_irq_out()
478 struct usbhid_device *usbhid = hid->driver_data; in hid_ctrl() local
484 if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN) in hid_ctrl()
486 usbhid->ctrl[usbhid->ctrltail].report->type, in hid_ctrl()
502 spin_lock_irqsave(&usbhid->lock, flags); in hid_ctrl()
505 usbhid->ctrltail = usbhid->ctrlhead; in hid_ctrl()
506 } else if (usbhid->ctrlhead != usbhid->ctrltail) { in hid_ctrl()
507 usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1); in hid_ctrl()
509 if (usbhid->ctrlhead != usbhid->ctrltail && in hid_ctrl()
512 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_ctrl()
517 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); in hid_ctrl()
518 spin_unlock_irqrestore(&usbhid->lock, flags); in hid_ctrl()
519 usb_autopm_put_interface_async(usbhid->intf); in hid_ctrl()
520 wake_up(&usbhid->wait); in hid_ctrl()
527 struct usbhid_device *usbhid = hid->driver_data; in __usbhid_submit_report() local
530 test_bit(HID_DISCONNECTED, &usbhid->iofl)) in __usbhid_submit_report()
533 if (usbhid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) { in __usbhid_submit_report()
534 if ((head = (usbhid->outhead + 1) & (HID_OUTPUT_FIFO_SIZE - 1)) == usbhid->outtail) { in __usbhid_submit_report()
539 usbhid->out[usbhid->outhead].raw_report = hid_alloc_report_buf(report, GFP_ATOMIC); in __usbhid_submit_report()
540 if (!usbhid->out[usbhid->outhead].raw_report) { in __usbhid_submit_report()
544 hid_output_report(report, usbhid->out[usbhid->outhead].raw_report); in __usbhid_submit_report()
545 usbhid->out[usbhid->outhead].report = report; in __usbhid_submit_report()
546 usbhid->outhead = head; in __usbhid_submit_report()
549 if (!test_bit(HID_OUT_RUNNING, &usbhid->iofl)) { in __usbhid_submit_report()
550 usbhid_restart_out_queue(usbhid); in __usbhid_submit_report()
553 } else if (time_after(jiffies, usbhid->last_out + HZ * 5)) { in __usbhid_submit_report()
556 usb_autopm_get_interface_no_resume(usbhid->intf); in __usbhid_submit_report()
563 usb_block_urb(usbhid->urbout); in __usbhid_submit_report()
566 spin_unlock(&usbhid->lock); in __usbhid_submit_report()
568 usb_unlink_urb(usbhid->urbout); in __usbhid_submit_report()
569 spin_lock(&usbhid->lock); in __usbhid_submit_report()
570 usb_unblock_urb(usbhid->urbout); in __usbhid_submit_report()
573 if (!test_bit(HID_OUT_RUNNING, &usbhid->iofl)) in __usbhid_submit_report()
574 usbhid_restart_out_queue(usbhid); in __usbhid_submit_report()
577 usb_autopm_put_interface_async(usbhid->intf); in __usbhid_submit_report()
582 if ((head = (usbhid->ctrlhead + 1) & (HID_CONTROL_FIFO_SIZE - 1)) == usbhid->ctrltail) { in __usbhid_submit_report()
588 usbhid->ctrl[usbhid->ctrlhead].raw_report = hid_alloc_report_buf(report, GFP_ATOMIC); in __usbhid_submit_report()
589 if (!usbhid->ctrl[usbhid->ctrlhead].raw_report) { in __usbhid_submit_report()
593 hid_output_report(report, usbhid->ctrl[usbhid->ctrlhead].raw_report); in __usbhid_submit_report()
595 usbhid->ctrl[usbhid->ctrlhead].report = report; in __usbhid_submit_report()
596 usbhid->ctrl[usbhid->ctrlhead].dir = dir; in __usbhid_submit_report()
597 usbhid->ctrlhead = head; in __usbhid_submit_report()
600 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) { in __usbhid_submit_report()
601 usbhid_restart_ctrl_queue(usbhid); in __usbhid_submit_report()
604 } else if (time_after(jiffies, usbhid->last_ctrl + HZ * 5)) { in __usbhid_submit_report()
607 usb_autopm_get_interface_no_resume(usbhid->intf); in __usbhid_submit_report()
614 usb_block_urb(usbhid->urbctrl); in __usbhid_submit_report()
617 spin_unlock(&usbhid->lock); in __usbhid_submit_report()
619 usb_unlink_urb(usbhid->urbctrl); in __usbhid_submit_report()
620 spin_lock(&usbhid->lock); in __usbhid_submit_report()
621 usb_unblock_urb(usbhid->urbctrl); in __usbhid_submit_report()
624 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) in __usbhid_submit_report()
625 usbhid_restart_ctrl_queue(usbhid); in __usbhid_submit_report()
628 usb_autopm_put_interface_async(usbhid->intf); in __usbhid_submit_report()
634 struct usbhid_device *usbhid = hid->driver_data; in usbhid_submit_report() local
637 spin_lock_irqsave(&usbhid->lock, flags); in usbhid_submit_report()
639 spin_unlock_irqrestore(&usbhid->lock, flags); in usbhid_submit_report()
644 struct usbhid_device *usbhid = hid->driver_data; in usbhid_wait_io() local
646 if (!wait_event_timeout(usbhid->wait, in usbhid_wait_io()
647 (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl) && in usbhid_wait_io()
648 !test_bit(HID_OUT_RUNNING, &usbhid->iofl)), in usbhid_wait_io()
682 struct usbhid_device *usbhid = hid->driver_data; in usbhid_open() local
685 mutex_lock(&usbhid->mutex); in usbhid_open()
687 set_bit(HID_OPENED, &usbhid->iofl); in usbhid_open()
694 res = usb_autopm_get_interface(usbhid->intf); in usbhid_open()
697 clear_bit(HID_OPENED, &usbhid->iofl); in usbhid_open()
702 usbhid->intf->needs_remote_wakeup = 1; in usbhid_open()
704 set_bit(HID_RESUME_RUNNING, &usbhid->iofl); in usbhid_open()
705 set_bit(HID_IN_POLLING, &usbhid->iofl); in usbhid_open()
715 clear_bit(HID_OPENED, &usbhid->iofl); in usbhid_open()
716 clear_bit(HID_IN_POLLING, &usbhid->iofl); in usbhid_open()
717 usbhid->intf->needs_remote_wakeup = 0; in usbhid_open()
721 usb_autopm_put_interface(usbhid->intf); in usbhid_open()
732 clear_bit(HID_RESUME_RUNNING, &usbhid->iofl); in usbhid_open()
735 mutex_unlock(&usbhid->mutex); in usbhid_open()
741 struct usbhid_device *usbhid = hid->driver_data; in usbhid_close() local
743 mutex_lock(&usbhid->mutex); in usbhid_close()
750 spin_lock_irq(&usbhid->lock); in usbhid_close()
751 clear_bit(HID_OPENED, &usbhid->iofl); in usbhid_close()
753 clear_bit(HID_IN_POLLING, &usbhid->iofl); in usbhid_close()
754 spin_unlock_irq(&usbhid->lock); in usbhid_close()
757 hid_cancel_delayed_stuff(usbhid); in usbhid_close()
758 usb_kill_urb(usbhid->urbin); in usbhid_close()
759 usbhid->intf->needs_remote_wakeup = 0; in usbhid_close()
762 mutex_unlock(&usbhid->mutex); in usbhid_close()
772 struct usbhid_device *usbhid = hid->driver_data; in usbhid_init_reports() local
788 if (test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) in usbhid_init_reports()
789 usb_kill_urb(usbhid->urbctrl); in usbhid_init_reports()
790 if (test_bit(HID_OUT_RUNNING, &usbhid->iofl)) in usbhid_init_reports()
791 usb_kill_urb(usbhid->urbout); in usbhid_init_reports()
855 struct usbhid_device *usbhid = hid->driver_data; in hid_alloc_buffers() local
857 usbhid->inbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL, in hid_alloc_buffers()
858 &usbhid->inbuf_dma); in hid_alloc_buffers()
859 usbhid->outbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL, in hid_alloc_buffers()
860 &usbhid->outbuf_dma); in hid_alloc_buffers()
861 usbhid->cr = kmalloc(sizeof(*usbhid->cr), GFP_KERNEL); in hid_alloc_buffers()
862 usbhid->ctrlbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL, in hid_alloc_buffers()
863 &usbhid->ctrlbuf_dma); in hid_alloc_buffers()
864 if (!usbhid->inbuf || !usbhid->outbuf || !usbhid->cr || in hid_alloc_buffers()
865 !usbhid->ctrlbuf) in hid_alloc_buffers()
875 struct usbhid_device *usbhid = hid->driver_data; in usbhid_get_raw_report() local
877 struct usb_interface *intf = usbhid->intf; in usbhid_get_raw_report()
908 struct usbhid_device *usbhid = hid->driver_data; in usbhid_set_raw_report() local
910 struct usb_interface *intf = usbhid->intf; in usbhid_set_raw_report()
943 struct usbhid_device *usbhid = hid->driver_data; in usbhid_output_report() local
947 if (!usbhid->urbout) in usbhid_output_report()
957 ret = usb_interrupt_msg(dev, usbhid->urbout->pipe, in usbhid_output_report()
973 struct usbhid_device *usbhid = hid->driver_data; in hid_free_buffers() local
975 usb_free_coherent(dev, usbhid->bufsize, usbhid->inbuf, usbhid->inbuf_dma); in hid_free_buffers()
976 usb_free_coherent(dev, usbhid->bufsize, usbhid->outbuf, usbhid->outbuf_dma); in hid_free_buffers()
977 kfree(usbhid->cr); in hid_free_buffers()
978 usb_free_coherent(dev, usbhid->bufsize, usbhid->ctrlbuf, usbhid->ctrlbuf_dma); in hid_free_buffers()
1067 struct usbhid_device *usbhid = hid->driver_data; in usbhid_start() local
1071 mutex_lock(&usbhid->mutex); in usbhid_start()
1073 clear_bit(HID_DISCONNECTED, &usbhid->iofl); in usbhid_start()
1075 usbhid->bufsize = HID_MIN_BUFFER_SIZE; in usbhid_start()
1076 hid_find_max_report(hid, HID_INPUT_REPORT, &usbhid->bufsize); in usbhid_start()
1077 hid_find_max_report(hid, HID_OUTPUT_REPORT, &usbhid->bufsize); in usbhid_start()
1078 hid_find_max_report(hid, HID_FEATURE_REPORT, &usbhid->bufsize); in usbhid_start()
1080 if (usbhid->bufsize > HID_MAX_BUFFER_SIZE) in usbhid_start()
1081 usbhid->bufsize = HID_MAX_BUFFER_SIZE; in usbhid_start()
1132 if (usbhid->urbin) in usbhid_start()
1134 if (!(usbhid->urbin = usb_alloc_urb(0, GFP_KERNEL))) in usbhid_start()
1137 usb_fill_int_urb(usbhid->urbin, dev, pipe, usbhid->inbuf, insize, in usbhid_start()
1139 usbhid->urbin->transfer_dma = usbhid->inbuf_dma; in usbhid_start()
1140 usbhid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usbhid_start()
1142 if (usbhid->urbout) in usbhid_start()
1144 if (!(usbhid->urbout = usb_alloc_urb(0, GFP_KERNEL))) in usbhid_start()
1147 usb_fill_int_urb(usbhid->urbout, dev, pipe, usbhid->outbuf, 0, in usbhid_start()
1149 usbhid->urbout->transfer_dma = usbhid->outbuf_dma; in usbhid_start()
1150 usbhid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usbhid_start()
1154 usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL); in usbhid_start()
1155 if (!usbhid->urbctrl) { in usbhid_start()
1160 usb_fill_control_urb(usbhid->urbctrl, dev, 0, (void *) usbhid->cr, in usbhid_start()
1161 usbhid->ctrlbuf, 1, hid_ctrl, hid); in usbhid_start()
1162 usbhid->urbctrl->transfer_dma = usbhid->ctrlbuf_dma; in usbhid_start()
1163 usbhid->urbctrl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usbhid_start()
1165 set_bit(HID_STARTED, &usbhid->iofl); in usbhid_start()
1168 ret = usb_autopm_get_interface(usbhid->intf); in usbhid_start()
1171 set_bit(HID_IN_POLLING, &usbhid->iofl); in usbhid_start()
1172 usbhid->intf->needs_remote_wakeup = 1; in usbhid_start()
1178 usb_autopm_put_interface(usbhid->intf); in usbhid_start()
1194 mutex_unlock(&usbhid->mutex); in usbhid_start()
1198 usb_free_urb(usbhid->urbin); in usbhid_start()
1199 usb_free_urb(usbhid->urbout); in usbhid_start()
1200 usb_free_urb(usbhid->urbctrl); in usbhid_start()
1201 usbhid->urbin = NULL; in usbhid_start()
1202 usbhid->urbout = NULL; in usbhid_start()
1203 usbhid->urbctrl = NULL; in usbhid_start()
1205 mutex_unlock(&usbhid->mutex); in usbhid_start()
1211 struct usbhid_device *usbhid = hid->driver_data; in usbhid_stop() local
1213 if (WARN_ON(!usbhid)) in usbhid_stop()
1217 clear_bit(HID_IN_POLLING, &usbhid->iofl); in usbhid_stop()
1218 usbhid->intf->needs_remote_wakeup = 0; in usbhid_stop()
1221 mutex_lock(&usbhid->mutex); in usbhid_stop()
1223 clear_bit(HID_STARTED, &usbhid->iofl); in usbhid_stop()
1225 spin_lock_irq(&usbhid->lock); /* Sync with error and led handlers */ in usbhid_stop()
1226 set_bit(HID_DISCONNECTED, &usbhid->iofl); in usbhid_stop()
1227 while (usbhid->ctrltail != usbhid->ctrlhead) { in usbhid_stop()
1228 if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_OUT) { in usbhid_stop()
1229 kfree(usbhid->ctrl[usbhid->ctrltail].raw_report); in usbhid_stop()
1230 usbhid->ctrl[usbhid->ctrltail].raw_report = NULL; in usbhid_stop()
1233 usbhid->ctrltail = (usbhid->ctrltail + 1) & in usbhid_stop()
1236 spin_unlock_irq(&usbhid->lock); in usbhid_stop()
1238 usb_kill_urb(usbhid->urbin); in usbhid_stop()
1239 usb_kill_urb(usbhid->urbout); in usbhid_stop()
1240 usb_kill_urb(usbhid->urbctrl); in usbhid_stop()
1242 hid_cancel_delayed_stuff(usbhid); in usbhid_stop()
1246 usb_free_urb(usbhid->urbin); in usbhid_stop()
1247 usb_free_urb(usbhid->urbctrl); in usbhid_stop()
1248 usb_free_urb(usbhid->urbout); in usbhid_stop()
1249 usbhid->urbin = NULL; /* don't mess up next start */ in usbhid_stop()
1250 usbhid->urbctrl = NULL; in usbhid_stop()
1251 usbhid->urbout = NULL; in usbhid_stop()
1255 mutex_unlock(&usbhid->mutex); in usbhid_stop()
1260 struct usbhid_device *usbhid = hid->driver_data; in usbhid_power() local
1265 r = usb_autopm_get_interface(usbhid->intf); in usbhid_power()
1269 usb_autopm_put_interface(usbhid->intf); in usbhid_power()
1348 struct usbhid_device *usbhid; in usbhid_probe() local
1415 usbhid = kzalloc(sizeof(*usbhid), GFP_KERNEL); in usbhid_probe()
1416 if (usbhid == NULL) { in usbhid_probe()
1421 hid->driver_data = usbhid; in usbhid_probe()
1422 usbhid->hid = hid; in usbhid_probe()
1423 usbhid->intf = intf; in usbhid_probe()
1424 usbhid->ifnum = interface->desc.bInterfaceNumber; in usbhid_probe()
1426 init_waitqueue_head(&usbhid->wait); in usbhid_probe()
1427 INIT_WORK(&usbhid->reset_work, hid_reset); in usbhid_probe()
1428 timer_setup(&usbhid->io_retry, hid_retry_timeout, 0); in usbhid_probe()
1429 spin_lock_init(&usbhid->lock); in usbhid_probe()
1430 mutex_init(&usbhid->mutex); in usbhid_probe()
1441 kfree(usbhid); in usbhid_probe()
1450 struct usbhid_device *usbhid; in usbhid_disconnect() local
1455 usbhid = hid->driver_data; in usbhid_disconnect()
1456 spin_lock_irq(&usbhid->lock); /* Sync with error and led handlers */ in usbhid_disconnect()
1457 set_bit(HID_DISCONNECTED, &usbhid->iofl); in usbhid_disconnect()
1458 spin_unlock_irq(&usbhid->lock); in usbhid_disconnect()
1460 kfree(usbhid); in usbhid_disconnect()
1463 static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid) in hid_cancel_delayed_stuff() argument
1465 timer_delete_sync(&usbhid->io_retry); in hid_cancel_delayed_stuff()
1466 cancel_work_sync(&usbhid->reset_work); in hid_cancel_delayed_stuff()
1469 static void hid_cease_io(struct usbhid_device *usbhid) in hid_cease_io() argument
1471 timer_delete_sync(&usbhid->io_retry); in hid_cease_io()
1472 usb_kill_urb(usbhid->urbin); in hid_cease_io()
1473 usb_kill_urb(usbhid->urbctrl); in hid_cease_io()
1474 usb_kill_urb(usbhid->urbout); in hid_cease_io()
1479 struct usbhid_device *usbhid = hid->driver_data; in hid_restart_io() local
1480 int clear_halt = test_bit(HID_CLEAR_HALT, &usbhid->iofl); in hid_restart_io()
1481 int reset_pending = test_bit(HID_RESET_PENDING, &usbhid->iofl); in hid_restart_io()
1483 spin_lock_irq(&usbhid->lock); in hid_restart_io()
1484 clear_bit(HID_SUSPENDED, &usbhid->iofl); in hid_restart_io()
1485 usbhid_mark_busy(usbhid); in hid_restart_io()
1488 schedule_work(&usbhid->reset_work); in hid_restart_io()
1489 usbhid->retry_delay = 0; in hid_restart_io()
1490 spin_unlock_irq(&usbhid->lock); in hid_restart_io()
1492 if (reset_pending || !test_bit(HID_STARTED, &usbhid->iofl)) in hid_restart_io()
1500 spin_lock_irq(&usbhid->lock); in hid_restart_io()
1501 if (usbhid->urbout && !test_bit(HID_OUT_RUNNING, &usbhid->iofl)) in hid_restart_io()
1502 usbhid_restart_out_queue(usbhid); in hid_restart_io()
1503 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) in hid_restart_io()
1504 usbhid_restart_ctrl_queue(usbhid); in hid_restart_io()
1505 spin_unlock_irq(&usbhid->lock); in hid_restart_io()
1512 struct usbhid_device *usbhid = hid->driver_data; in hid_pre_reset() local
1514 spin_lock_irq(&usbhid->lock); in hid_pre_reset()
1515 set_bit(HID_RESET_PENDING, &usbhid->iofl); in hid_pre_reset()
1516 spin_unlock_irq(&usbhid->lock); in hid_pre_reset()
1517 hid_cease_io(usbhid); in hid_pre_reset()
1527 struct usbhid_device *usbhid = hid->driver_data; in hid_post_reset() local
1557 spin_lock_irq(&usbhid->lock); in hid_post_reset()
1558 clear_bit(HID_RESET_PENDING, &usbhid->iofl); in hid_post_reset()
1559 clear_bit(HID_CLEAR_HALT, &usbhid->iofl); in hid_post_reset()
1560 spin_unlock_irq(&usbhid->lock); in hid_post_reset()
1581 struct usbhid_device *usbhid = hid->driver_data; in hid_suspend() local
1588 spin_lock_irq(&usbhid->lock); /* Sync with error handler */ in hid_suspend()
1589 if (!test_bit(HID_RESET_PENDING, &usbhid->iofl) in hid_suspend()
1590 && !test_bit(HID_CLEAR_HALT, &usbhid->iofl) in hid_suspend()
1591 && !test_bit(HID_OUT_RUNNING, &usbhid->iofl) in hid_suspend()
1592 && !test_bit(HID_CTRL_RUNNING, &usbhid->iofl) in hid_suspend()
1593 && !test_bit(HID_KEYS_PRESSED, &usbhid->iofl) in hid_suspend()
1596 set_bit(HID_SUSPENDED, &usbhid->iofl); in hid_suspend()
1597 spin_unlock_irq(&usbhid->lock); in hid_suspend()
1603 usbhid_mark_busy(usbhid); in hid_suspend()
1604 spin_unlock_irq(&usbhid->lock); in hid_suspend()
1612 spin_lock_irq(&usbhid->lock); in hid_suspend()
1613 set_bit(HID_SUSPENDED, &usbhid->iofl); in hid_suspend()
1614 spin_unlock_irq(&usbhid->lock); in hid_suspend()
1619 hid_cancel_delayed_stuff(usbhid); in hid_suspend()
1620 hid_cease_io(usbhid); in hid_suspend()
1622 if (PMSG_IS_AUTO(message) && test_bit(HID_KEYS_PRESSED, &usbhid->iofl)) { in hid_suspend()
1668 .name = "usbhid",