xhci_warn(xhci, "WARN: short transfer on control ep\n");
                        status = -EREMOTEIO;
                        break;
+               case COMP_BABBLE:
+                       /* The 0.96 spec says a babbling control endpoint
+                        * is not halted. The 0.96 spec says it is.  Some HW
+                        * claims to be 0.95 compliant, but it halts the control
+                        * endpoint anyway.  Check if a babble halted the
+                        * endpoint.
+                        */
+                       if (ep_ctx->ep_info != EP_STATE_HALTED)
+                               break;
+                       /* else fall through */
                case COMP_STALL:
                        /* Did we transfer part of the data (middle) phase? */
                        if (event_trb != ep_ring->dequeue &&
                ep_ring->stopped_td = td;
                ep_ring->stopped_trb = event_trb;
        } else {
-               if (GET_COMP_CODE(event->transfer_len) == COMP_STALL) {
+               if (trb_comp_code == COMP_STALL ||
+                               trb_comp_code == COMP_BABBLE) {
                        /* The transfer is completed from the driver's
                         * perspective, but we need to issue a set dequeue
                         * command for this stalled endpoint to move the dequeue
                 * control endpoints).
                 */
                if (usb_endpoint_xfer_control(&urb->ep->desc) ||
-                       GET_COMP_CODE(event->transfer_len) != COMP_STALL) {
+                       (trb_comp_code != COMP_STALL &&
+                               trb_comp_code != COMP_BABBLE)) {
                        kfree(td);
                }
                urb->hcpriv = NULL;