node->ptr->token = cpu_to_le32(length << __ffs(TD_TOTAL_BYTES));
        node->ptr->token &= cpu_to_le32(TD_TOTAL_BYTES);
        node->ptr->token |= cpu_to_le32(TD_STATUS_ACTIVE);
+       if (hwep->type == USB_ENDPOINT_XFER_ISOC && hwep->dir == TX) {
+               u32 mul = hwreq->req.length / hwep->ep.maxpacket;
+
+               if (hwreq->req.length == 0
+                               || hwreq->req.length % hwep->ep.maxpacket)
+                       mul++;
+               node->ptr->token |= mul << __ffs(TD_MULTO);
+       }
 
        temp = (u32) (hwreq->req.dma + hwreq->req.actual);
        if (length) {
        hwep->qh.ptr->td.token &=
                cpu_to_le32(~(TD_STATUS_HALTED|TD_STATUS_ACTIVE));
 
-       if (hwep->type == USB_ENDPOINT_XFER_ISOC) {
+       if (hwep->type == USB_ENDPOINT_XFER_ISOC && hwep->dir == RX) {
                u32 mul = hwreq->req.length / hwep->ep.maxpacket;
 
-               if (hwreq->req.length % hwep->ep.maxpacket)
+               if (hwreq->req.length == 0
+                               || hwreq->req.length % hwep->ep.maxpacket)
                        mul++;
                hwep->qh.ptr->cap |= mul << __ffs(QH_MULT);
        }
        if (hwep->num)
                cap |= QH_ZLT;
        cap |= (hwep->ep.maxpacket << __ffs(QH_MAX_PKT)) & QH_MAX_PKT;
+       /*
+        * For ISO-TX, we set mult at QH as the largest value, and use
+        * MultO at TD as real mult value.
+        */
+       if (hwep->type == USB_ENDPOINT_XFER_ISOC && hwep->dir == TX)
+               cap |= 3 << __ffs(QH_MULT);
 
        hwep->qh.ptr->cap = cpu_to_le32(cap);