diff mbox

[v6,07/10] usb: dwc3: gadget: Fix suspend/resume during dual-role mode

Message ID 1460374506-9779-8-git-send-email-rogerq@ti.com
State New
Headers show

Commit Message

Roger Quadros April 11, 2016, 11:35 a.m. UTC
Gadget controller might not be always active during suspend/
resume when we are operating in dual-role/otg mode.
Check if we're active and only if we are then perform
necessary actions during suspend/resume.

Signed-off-by: Roger Quadros <rogerq@ti.com>

---
 drivers/usb/dwc3/gadget.c | 6 ++++++
 1 file changed, 6 insertions(+)

-- 
2.5.0

Comments

Roger Quadros April 11, 2016, 1:12 p.m. UTC | #1
On 11/04/16 15:23, Felipe Balbi wrote:
> 

> Hi,

> 

> Roger Quadros <rogerq@ti.com> writes:

>> Gadget controller might not be always active during suspend/

>> resume when we are operating in dual-role/otg mode.

>> Check if we're active and only if we are then perform

>> necessary actions during suspend/resume.

> 

> I don't get this. If we're operating in OTG, we should have a gadget

> driver loaded, no ?

> 

At boot gadget driver is not automatically loaded. We're still in OTG mode
but OTG state machine hasn't started.
System suspend/resume can still happen.

User might also load/unload the gadget driver prior to system suspend.

cheers,
-roger
Roger Quadros April 12, 2016, 8:25 a.m. UTC | #2
On 12/04/16 11:00, Felipe Balbi wrote:
> 

> Hi,

> 

> Roger Quadros <rogerq@ti.com> writes:

>> On 11/04/16 16:26, Felipe Balbi wrote:

>>>

>>> Hi,

>>>

>>> Roger Quadros <rogerq@ti.com> writes:

>>>> On 11/04/16 15:23, Felipe Balbi wrote:

>>>>>

>>>>> Hi,

>>>>>

>>>>> Roger Quadros <rogerq@ti.com> writes:

>>>>>> Gadget controller might not be always active during suspend/

>>>>>> resume when we are operating in dual-role/otg mode.

>>>>>> Check if we're active and only if we are then perform

>>>>>> necessary actions during suspend/resume.

>>>>>

>>>>> I don't get this. If we're operating in OTG, we should have a gadget

>>>>> driver loaded, no ?

>>>>>

>>>> At boot gadget driver is not automatically loaded. We're still in OTG mode

>>>> but OTG state machine hasn't started.

>>>> System suspend/resume can still happen.

>>>>

>>>> User might also load/unload the gadget driver prior to system suspend.

>>>

>>> good point, this should go in the -rc too.

>>>

>> But there is no dual-role mode currently so it won't fix any bug yet :).

> 

> this should be a problem even for device-only, right ?

> 

> i) boot-up

> ii) modprobe dwc3

> iii) echo mem > /sys/power/state

> 

Indeed. It is applicable for device-only mode as well. I'll send this patch for rc then.

cheers,
-roger
diff mbox

Patch

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 83d5c57..1ca5ac0 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2952,6 +2952,9 @@  void dwc3_gadget_exit(struct dwc3 *dwc)
 
 int dwc3_gadget_suspend(struct dwc3 *dwc)
 {
+	if (!dwc->gadget_driver)
+		return 0;
+
 	if (dwc->pullups_connected) {
 		dwc3_gadget_disable_irq(dwc);
 		dwc3_gadget_run_stop(dwc, true, true);
@@ -2970,6 +2973,9 @@  int dwc3_gadget_resume(struct dwc3 *dwc)
 	struct dwc3_ep		*dep;
 	int			ret;
 
+	if (!dwc->gadget_driver)
+		return 0;
+
 	/* Start with SuperSpeed Default */
 	dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);