Commit dcf70460 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

[PATCH] UHCI: No bandwidth reclamation during enumeration

A few devices prefer not to have full-speed bandwidth reclamation turned
on while they are being enumerated.  In particular this seems to be true
for the USB Bluetooth adapters built in to some laptop models (used for
remote keyboards).  This patch alters the UHCI driver so that control URBs
for devices still in the USB_STATE_DEFAULT state will be placed on the
low-speed queue rather than the full-speed queue.  Since the low-speed
queue isn't subject to bandwidth reclamation the devices will work
properly.  The negative impact on other devices is minimal; the process of
device initialization will be slowed down by a few milliseconds.
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent 73212c9a
...@@ -765,8 +765,12 @@ static int uhci_submit_control(struct uhci_hcd *uhci, struct urb *urb, struct ur ...@@ -765,8 +765,12 @@ static int uhci_submit_control(struct uhci_hcd *uhci, struct urb *urb, struct ur
uhci_insert_tds_in_qh(qh, urb, UHCI_PTR_BREADTH); uhci_insert_tds_in_qh(qh, urb, UHCI_PTR_BREADTH);
/* Low-speed transfers get a different queue, and won't hog the bus */ /* Low-speed transfers get a different queue, and won't hog the bus.
if (urb->dev->speed == USB_SPEED_LOW) * Also, some devices enumerate better without FSBR; the easiest way
* to do that is to put URBs on the low-speed queue while the device
* is in the DEFAULT state. */
if (urb->dev->speed == USB_SPEED_LOW ||
urb->dev->state == USB_STATE_DEFAULT)
skelqh = uhci->skel_ls_control_qh; skelqh = uhci->skel_ls_control_qh;
else { else {
skelqh = uhci->skel_fs_control_qh; skelqh = uhci->skel_fs_control_qh;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment