Commit 13eac223 authored by Johannes Erdfelt's avatar Johannes Erdfelt Committed by Greg Kroah-Hartman

[PATCH] uhci.c FSBR speed problem

The dangers of not ensuring important fields are properly set.

Some, if not all, of the speed problems with uhci.c were caused because
some important fields were not set and as a result, FSBR was never
turned on.

This patch also ensures is_suspended is set to 0 properly. This could
cause some problems suspending the HC when no devices are plugged in.
parent dd5c53b9
...@@ -749,7 +749,7 @@ static void uhci_inc_fsbr(struct uhci *uhci, struct urb *urb) ...@@ -749,7 +749,7 @@ static void uhci_inc_fsbr(struct uhci *uhci, struct urb *urb)
if ((!(urb->transfer_flags & USB_NO_FSBR)) && !urbp->fsbr) { if ((!(urb->transfer_flags & USB_NO_FSBR)) && !urbp->fsbr) {
urbp->fsbr = 1; urbp->fsbr = 1;
if (!uhci->fsbr++) if (!uhci->fsbr++ && !uhci->fsbrtimeout)
uhci->skel_term_qh->link = uhci->skel_hs_control_qh->dma_handle | UHCI_PTR_QH; uhci->skel_term_qh->link = uhci->skel_hs_control_qh->dma_handle | UHCI_PTR_QH;
} }
...@@ -2743,6 +2743,11 @@ static int alloc_uhci(struct pci_dev *dev, unsigned int io_addr, unsigned int io ...@@ -2743,6 +2743,11 @@ static int alloc_uhci(struct pci_dev *dev, unsigned int io_addr, unsigned int io
/* or broken setup */ /* or broken setup */
reset_hc(uhci); reset_hc(uhci);
uhci->fsbr = 0;
uhci->fsbrtimeout = 0;
uhci->is_suspended = 0;
spin_lock_init(&uhci->qh_remove_list_lock); spin_lock_init(&uhci->qh_remove_list_lock);
INIT_LIST_HEAD(&uhci->qh_remove_list); INIT_LIST_HEAD(&uhci->qh_remove_list);
......
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