aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ehci-q.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2007-12-11 16:05:30 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2008-02-01 17:34:55 -0500
commit07d29b63ef6b39963ab37818653284d861cf55af (patch)
tree10460d9d13ad7284b644181af66ecdbf416cc5ba /drivers/usb/host/ehci-q.c
parent2e2eb83ffd1aeb92bf8793eea892b5bc05a993ea (diff)
USB: EHCI: add separate IAA watchdog timer
This patch (as1028) was mostly written by David Brownell; I made only a few changes (extra log info and a small bug fix -- which might account for why David's version had to be reverted). It adds a new watchdog timer to the ehci-hcd driver to be used exclusively for detecting lost or missing IAA notifications. Previously a shared timer had been used, which may have led to some problems as reported by Christian Hoffmann. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Cc: David Brownell <david-b@pacbell.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/ehci-q.c')
-rw-r--r--drivers/usb/host/ehci-q.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
index b10f39c047e9..853e5e6396a5 100644
--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -973,7 +973,7 @@ static void end_unlink_async (struct ehci_hcd *ehci)
973 struct ehci_qh *qh = ehci->reclaim; 973 struct ehci_qh *qh = ehci->reclaim;
974 struct ehci_qh *next; 974 struct ehci_qh *next;
975 975
976 timer_action_done (ehci, TIMER_IAA_WATCHDOG); 976 iaa_watchdog_done(ehci);
977 977
978 // qh->hw_next = cpu_to_hc32(qh->qh_dma); 978 // qh->hw_next = cpu_to_hc32(qh->qh_dma);
979 qh->qh_state = QH_STATE_IDLE; 979 qh->qh_state = QH_STATE_IDLE;
@@ -983,7 +983,6 @@ static void end_unlink_async (struct ehci_hcd *ehci)
983 /* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */ 983 /* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */
984 next = qh->reclaim; 984 next = qh->reclaim;
985 ehci->reclaim = next; 985 ehci->reclaim = next;
986 ehci->reclaim_ready = 0;
987 qh->reclaim = NULL; 986 qh->reclaim = NULL;
988 987
989 qh_completions (ehci, qh); 988 qh_completions (ehci, qh);
@@ -1059,11 +1058,10 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
1059 return; 1058 return;
1060 } 1059 }
1061 1060
1062 ehci->reclaim_ready = 0;
1063 cmd |= CMD_IAAD; 1061 cmd |= CMD_IAAD;
1064 ehci_writel(ehci, cmd, &ehci->regs->command); 1062 ehci_writel(ehci, cmd, &ehci->regs->command);
1065 (void)ehci_readl(ehci, &ehci->regs->command); 1063 (void)ehci_readl(ehci, &ehci->regs->command);
1066 timer_action (ehci, TIMER_IAA_WATCHDOG); 1064 iaa_watchdog_start(ehci);
1067} 1065}
1068 1066
1069/*-------------------------------------------------------------------------*/ 1067/*-------------------------------------------------------------------------*/