summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2003-04-29 01:30:31 -0700
committerGreg Kroah-Hartman <greg@kroah.com>2003-04-29 01:30:31 -0700
commit57b40886a76dae5e296ea66399d375652b44f76c (patch)
treeb5c9b9b8936bc8bf73a055c92f1614eb09d5a078
parentefead44aa238985b778ae392dc44bae634632bc6 (diff)
[PATCH] USB: Minor patch for uhci-hcd.c
-rw-r--r--drivers/usb/host/uhci-hcd.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
index 1440fc94cae3..5497a4dc32a3 100644
--- a/drivers/usb/host/uhci-hcd.c
+++ b/drivers/usb/host/uhci-hcd.c
@@ -1283,7 +1283,8 @@ static int isochronous_find_limits(struct uhci_hcd *uhci, struct urb *urb, unsig
}
if (last_urb) {
- *end = (last_urb->start_frame + last_urb->number_of_packets) & 1023;
+ *end = (last_urb->start_frame + last_urb->number_of_packets *
+ last_urb->interval) & (UHCI_NUMFRAMES-1);
ret = 0;
} else
ret = -1; /* no previous urb found */
@@ -1933,9 +1934,10 @@ static void suspend_hc(struct uhci_hcd *uhci)
dbg("%x: suspend_hc", io_addr);
- outw(USBCMD_EGSM, io_addr + USBCMD);
-
uhci->is_suspended = 1;
+ smp_wmb();
+
+ outw(USBCMD_EGSM, io_addr + USBCMD);
}
static void wakeup_hc(struct uhci_hcd *uhci)
@@ -1945,6 +1947,9 @@ static void wakeup_hc(struct uhci_hcd *uhci)
dbg("%x: wakeup_hc", io_addr);
+ /* Global resume for 20ms */
+ outw(USBCMD_FGR | USBCMD_EGSM, io_addr + USBCMD);
+ wait_ms(20);
outw(0, io_addr + USBCMD);
/* wait for EOP to be sent */
@@ -1965,7 +1970,7 @@ static int ports_active(struct uhci_hcd *uhci)
int i;
for (i = 0; i < uhci->rh_numports; i++)
- connection |= (inw(io_addr + USBPORTSC1 + i * 2) & 0x1);
+ connection |= (inw(io_addr + USBPORTSC1 + i * 2) & USBPORTSC_CCS);
return connection;
}