From ce73ca32ca2b78eba2a6084d1dec780c2f0fdec4 Mon Sep 17 00:00:00 2001 From: Dov Levenglick Date: Thu, 27 Mar 2014 23:41:09 +0200 Subject: usb: dwc3: gadget: start resume sequence on remote-wakeup As per Synopsys databook, the USB controller does not trigger a wakeup event when remote-wakeup is used. Hence, after remote-wakeup sequence is complete, and the device is back at U0 state, it is required that the resume sequence is initiated manually by SW. Change-Id: I2f147d4a0644088b948b1798627c7717c35c0104 Signed-off-by: Bar Weiner Signed-off-by: Dov Levenglick --- drivers/usb/dwc3/gadget.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index c645345881b7..e6926e5cdc55 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -37,6 +37,8 @@ #include "debug.h" #include "io.h" +static void dwc3_gadget_wakeup_interrupt(struct dwc3 *dwc); + /** * dwc3_gadget_set_test_mode - Enables USB2 Test Modes * @dwc: pointer to our context structure @@ -1447,6 +1449,14 @@ static int dwc3_gadget_wakeup(struct usb_gadget *g) ret = -EINVAL; } + /* + * According to DWC3 databook, the controller does not + * trigger a wakeup event when remote-wakeup is used. + * Hence, after remote-wakeup sequence is complete, and + * the device is back at U0 state, it is required that + * the resume sequence is initiated by SW. + */ + dwc3_gadget_wakeup_interrupt(dwc); out: spin_unlock_irqrestore(&dwc->lock, flags); -- cgit v1.2.3