diff options
Diffstat (limited to 'drivers/usb/host/xhci-ring.c')
-rw-r--r-- | drivers/usb/host/xhci-ring.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index c35058b94de6..237a765f8d18 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c | |||
@@ -1641,6 +1641,9 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td, | |||
1641 | else | 1641 | else |
1642 | *status = 0; | 1642 | *status = 0; |
1643 | break; | 1643 | break; |
1644 | case COMP_STOP_INVAL: | ||
1645 | case COMP_STOP: | ||
1646 | return finish_td(xhci, td, event_trb, event, ep, status, false); | ||
1644 | default: | 1647 | default: |
1645 | if (!xhci_requires_manual_halt_cleanup(xhci, | 1648 | if (!xhci_requires_manual_halt_cleanup(xhci, |
1646 | ep_ctx, trb_comp_code)) | 1649 | ep_ctx, trb_comp_code)) |
@@ -1685,15 +1688,12 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td, | |||
1685 | } | 1688 | } |
1686 | } else { | 1689 | } else { |
1687 | /* Maybe the event was for the data stage? */ | 1690 | /* Maybe the event was for the data stage? */ |
1688 | if (trb_comp_code != COMP_STOP_INVAL) { | 1691 | td->urb->actual_length = |
1689 | /* We didn't stop on a link TRB in the middle */ | 1692 | td->urb->transfer_buffer_length - |
1690 | td->urb->actual_length = | 1693 | TRB_LEN(le32_to_cpu(event->transfer_len)); |
1691 | td->urb->transfer_buffer_length - | 1694 | xhci_dbg(xhci, "Waiting for status " |
1692 | TRB_LEN(le32_to_cpu(event->transfer_len)); | 1695 | "stage event\n"); |
1693 | xhci_dbg(xhci, "Waiting for status " | 1696 | return 0; |
1694 | "stage event\n"); | ||
1695 | return 0; | ||
1696 | } | ||
1697 | } | 1697 | } |
1698 | } | 1698 | } |
1699 | 1699 | ||