summaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3
diff options
context:
space:
mode:
authorFelipe Balbi2011-10-14 13:51:38 +0200
committerFelipe Balbi2011-12-12 10:48:35 +0100
commit05870c5ba2002c7d49adf8875cca49ee062af894 (patch)
treec70903c762bfddb1ca6b5b387be2a709c47b1e44 /drivers/usb/dwc3
parentusb: dwc3: workaround: U1/U2 -> U0 transiton (diff)
downloadkernel-qcow2-linux-05870c5ba2002c7d49adf8875cca49ee062af894.tar.gz
kernel-qcow2-linux-05870c5ba2002c7d49adf8875cca49ee062af894.tar.xz
kernel-qcow2-linux-05870c5ba2002c7d49adf8875cca49ee062af894.zip
usb: dwc3: workaround: missing USB3 Reset event
DWC3 revisions <1.90a have an issue which would cause a missing USB3 Reset event. In such cases, it's suggested that we follow the steps of a normal USB3 Reset on Connection Done Event. Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r--drivers/usb/dwc3/gadget.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 0a6deeaf3377..6704a52c9f12 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1756,6 +1756,22 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
switch (speed) {
case DWC3_DCFG_SUPERSPEED:
+ /*
+ * WORKAROUND: DWC3 revisions <1.90a have an issue which
+ * would cause a missing USB3 Reset event.
+ *
+ * In such situations, we should force a USB3 Reset
+ * event by calling our dwc3_gadget_reset_interrupt()
+ * routine.
+ *
+ * Refers to:
+ *
+ * STAR#9000483510: RTL: SS : USB3 reset event may
+ * not be generated always when the link enters poll
+ */
+ if (dwc->revision < DWC3_REVISION_190A)
+ dwc3_gadget_reset_interrupt(dwc);
+
dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
dwc->gadget.ep0->maxpacket = 512;
dwc->gadget.speed = USB_SPEED_SUPER;