diff options
| author | Alan Stern <stern@rowland.harvard.edu> | 2003-04-29 01:30:31 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <greg@kroah.com> | 2003-04-29 01:30:31 -0700 |
| commit | 57b40886a76dae5e296ea66399d375652b44f76c (patch) | |
| tree | b5c9b9b8936bc8bf73a055c92f1614eb09d5a078 | |
| parent | efead44aa238985b778ae392dc44bae634632bc6 (diff) | |
[PATCH] USB: Minor patch for uhci-hcd.c
| -rw-r--r-- | drivers/usb/host/uhci-hcd.c | 13 |
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; } |
