aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/host')
-rw-r--r--drivers/usb/host/xhci-ring.c18
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