diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-03-23 23:44:19 -0500 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-03-23 23:44:19 -0500 |
| commit | 1ebbe2b20091d306453a5cf480a87e6cd28ae76f (patch) | |
| tree | f5cd7a0fa69b8b1938cb5a0faed2e7b0628072a5 /drivers/usb/host/ehci-q.c | |
| parent | ac58c9059da8886b5e8cde012a80266b18ca146e (diff) | |
| parent | 674a396c6d2ba0341ebdd7c1c9950f32f018e2dd (diff) | |
Merge branch 'linus'
Diffstat (limited to 'drivers/usb/host/ehci-q.c')
| -rw-r--r-- | drivers/usb/host/ehci-q.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c index 9b13bf2fa98d..e469221e7ec3 100644 --- a/drivers/usb/host/ehci-q.c +++ b/drivers/usb/host/ehci-q.c | |||
| @@ -702,7 +702,7 @@ qh_make ( | |||
| 702 | } | 702 | } |
| 703 | 703 | ||
| 704 | /* support for tt scheduling, and access to toggles */ | 704 | /* support for tt scheduling, and access to toggles */ |
| 705 | qh->dev = usb_get_dev (urb->dev); | 705 | qh->dev = urb->dev; |
| 706 | 706 | ||
| 707 | /* using TT? */ | 707 | /* using TT? */ |
| 708 | switch (urb->dev->speed) { | 708 | switch (urb->dev->speed) { |
| @@ -721,7 +721,14 @@ qh_make ( | |||
| 721 | info1 |= maxp << 16; | 721 | info1 |= maxp << 16; |
| 722 | 722 | ||
| 723 | info2 |= (EHCI_TUNE_MULT_TT << 30); | 723 | info2 |= (EHCI_TUNE_MULT_TT << 30); |
| 724 | info2 |= urb->dev->ttport << 23; | 724 | |
| 725 | /* Some Freescale processors have an erratum in which the | ||
| 726 | * port number in the queue head was 0..N-1 instead of 1..N. | ||
| 727 | */ | ||
| 728 | if (ehci_has_fsl_portno_bug(ehci)) | ||
| 729 | info2 |= (urb->dev->ttport-1) << 23; | ||
| 730 | else | ||
| 731 | info2 |= urb->dev->ttport << 23; | ||
| 725 | 732 | ||
| 726 | /* set the address of the TT; for TDI's integrated | 733 | /* set the address of the TT; for TDI's integrated |
| 727 | * root hub tt, leave it zeroed. | 734 | * root hub tt, leave it zeroed. |
| @@ -1015,12 +1022,14 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh) | |||
| 1015 | /* stop async schedule right now? */ | 1022 | /* stop async schedule right now? */ |
| 1016 | if (unlikely (qh == ehci->async)) { | 1023 | if (unlikely (qh == ehci->async)) { |
| 1017 | /* can't get here without STS_ASS set */ | 1024 | /* can't get here without STS_ASS set */ |
| 1018 | if (ehci_to_hcd(ehci)->state != HC_STATE_HALT) { | 1025 | if (ehci_to_hcd(ehci)->state != HC_STATE_HALT |
| 1026 | && !ehci->reclaim) { | ||
| 1027 | /* ... and CMD_IAAD clear */ | ||
| 1019 | writel (cmd & ~CMD_ASE, &ehci->regs->command); | 1028 | writel (cmd & ~CMD_ASE, &ehci->regs->command); |
| 1020 | wmb (); | 1029 | wmb (); |
| 1021 | // handshake later, if we need to | 1030 | // handshake later, if we need to |
| 1031 | timer_action_done (ehci, TIMER_ASYNC_OFF); | ||
| 1022 | } | 1032 | } |
| 1023 | timer_action_done (ehci, TIMER_ASYNC_OFF); | ||
| 1024 | return; | 1033 | return; |
| 1025 | } | 1034 | } |
| 1026 | 1035 | ||
