aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ohci-q.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/host/ohci-q.c')
-rw-r--r--drivers/usb/host/ohci-q.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
index 9c9f3b59186f..6a9b4c557953 100644
--- a/drivers/usb/host/ohci-q.c
+++ b/drivers/usb/host/ohci-q.c
@@ -159,9 +159,6 @@ static int ed_schedule (struct ohci_hcd *ohci, struct ed *ed)
159{ 159{
160 int branch; 160 int branch;
161 161
162 if (ohci_to_hcd(ohci)->state == HC_STATE_QUIESCING)
163 return -EAGAIN;
164
165 ed->state = ED_OPER; 162 ed->state = ED_OPER;
166 ed->ed_prev = NULL; 163 ed->ed_prev = NULL;
167 ed->ed_next = NULL; 164 ed->ed_next = NULL;
@@ -952,6 +949,7 @@ rescan_this:
952 struct urb *urb; 949 struct urb *urb;
953 urb_priv_t *urb_priv; 950 urb_priv_t *urb_priv;
954 __hc32 savebits; 951 __hc32 savebits;
952 u32 tdINFO;
955 953
956 td = list_entry (entry, struct td, td_list); 954 td = list_entry (entry, struct td, td_list);
957 urb = td->urb; 955 urb = td->urb;
@@ -966,6 +964,17 @@ rescan_this:
966 savebits = *prev & ~cpu_to_hc32 (ohci, TD_MASK); 964 savebits = *prev & ~cpu_to_hc32 (ohci, TD_MASK);
967 *prev = td->hwNextTD | savebits; 965 *prev = td->hwNextTD | savebits;
968 966
967 /* If this was unlinked, the TD may not have been
968 * retired ... so manually save the data toggle.
969 * The controller ignores the value we save for
970 * control and ISO endpoints.
971 */
972 tdINFO = hc32_to_cpup(ohci, &td->hwINFO);
973 if ((tdINFO & TD_T) == TD_T_DATA0)
974 ed->hwHeadP &= ~cpu_to_hc32(ohci, ED_C);
975 else if ((tdINFO & TD_T) == TD_T_DATA1)
976 ed->hwHeadP |= cpu_to_hc32(ohci, ED_C);
977
969 /* HC may have partly processed this TD */ 978 /* HC may have partly processed this TD */
970 td_done (ohci, urb, td); 979 td_done (ohci, urb, td);
971 urb_priv->td_cnt++; 980 urb_priv->td_cnt++;