xhci: xhci_ring_device: Ring stream ring bells for endpoints with streams
authorHans de Goede <hdegoede@redhat.com>
Wed, 20 Aug 2014 13:41:56 +0000 (16:41 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 Sep 2014 04:46:10 +0000 (21:46 -0700)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-hub.c

index 69aece31143a12d965af1014b0c133f773ffafcf..5e9f9bd0233595fb85400715997dd6577a19e73b 100644 (file)
@@ -319,12 +319,19 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend)
  */
 void xhci_ring_device(struct xhci_hcd *xhci, int slot_id)
 {
-       int i;
+       int i, s;
+       struct xhci_virt_ep *ep;
+
+       for (i = 0; i < LAST_EP_INDEX + 1; i++) {
+               ep = &xhci->devs[slot_id]->eps[i];
 
-       for (i = 0; i < LAST_EP_INDEX + 1; i++)
-               if (xhci->devs[slot_id]->eps[i].ring &&
-                   xhci->devs[slot_id]->eps[i].ring->dequeue)
+               if (ep->ep_state & EP_HAS_STREAMS) {
+                       for (s = 1; s < ep->stream_info->num_streams; s++)
+                               xhci_ring_ep_doorbell(xhci, slot_id, i, s);
+               } else if (ep->ring && ep->ring->dequeue) {
                        xhci_ring_ep_doorbell(xhci, slot_id, i, 0);
+               }
+       }
 
        return;
 }