usb: dwc3: gadget: only interrupt on short if short_not_ok is set
authorFelipe Balbi <felipe.balbi@linux.intel.com>
Wed, 5 Oct 2016 11:26:23 +0000 (14:26 +0300)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 3 Nov 2016 08:38:32 +0000 (10:38 +0200)
We don't need to know about short packets unless
gadget driver told us it's not ok to see them on the
bus. In the normal situation we can continue
processing the list of requests if we get a Short
packet.

Also, note that we're making sure ISP is only set
for OUT endpoints, where that setting is valid.

Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc3/gadget.c

index 270e837f16e0534f0b92eefabbc387492dc28b0c..71d01b29e7b51def29180e8ce1a0841cf89df4cf 100644 (file)
@@ -875,12 +875,16 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
        }
 
        /* always enable Continue on Short Packet */
-       if (usb_endpoint_dir_out(dep->endpoint.desc))
+       if (usb_endpoint_dir_out(dep->endpoint.desc)) {
                trb->ctrl |= DWC3_TRB_CTRL_CSP;
 
+               if (req->request.short_not_ok)
+                       trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI;
+       }
+
        if ((!req->request.no_interrupt && !chain) ||
                        (dwc3_calc_trbs_left(dep) == 0))
-               trb->ctrl |= DWC3_TRB_CTRL_IOC | DWC3_TRB_CTRL_ISP_IMI;
+               trb->ctrl |= DWC3_TRB_CTRL_IOC;
 
        if (chain)
                trb->ctrl |= DWC3_TRB_CTRL_CHN;