usb: gadget: net2280: reset sequence number on ep enable
authorMian Yousaf Kaukab <yousaf.kaukab@intel.com>
Sat, 16 May 2015 20:33:31 +0000 (22:33 +0200)
committerFelipe Balbi <balbi@ti.com>
Tue, 26 May 2015 15:39:52 +0000 (10:39 -0500)
Sequence number can be out of sync if endpoint is disabled after some
data transfers and enabled again. Reset it to stay in sync with host.

Tested-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@intel.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/udc/net2280.c

index 62bc15742e10cec199527be769eea1cb473cefee..a91da3640ded8783d3681841b6669d352ac83ea4 100644 (file)
@@ -123,6 +123,8 @@ static char *type_string(u8 bmAttributes)
 #define valid_bit      cpu_to_le32(BIT(VALID_BIT))
 #define dma_done_ie    cpu_to_le32(BIT(DMA_DONE_INTERRUPT_ENABLE))
 
+static void ep_clear_seqnum(struct net2280_ep *ep);
+
 /*-------------------------------------------------------------------------*/
 static inline void enable_pciirqenb(struct net2280_ep *ep)
 {
@@ -256,6 +258,8 @@ net2280_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
                        BIT(CLEAR_NAK_OUT_PACKETS_MODE), &ep->regs->ep_rsp);
        }
 
+       if (dev->quirks & PLX_SUPERSPEED)
+               ep_clear_seqnum(ep);
        writel(tmp, &ep->cfg->ep_cfg);
 
        /* enable irqs */