Sometimes dwc3_gadget_pullup and dwc3_gadget_set_speed are called after entering suspend. That's why it needs to check whether suspend 1. dwc3 sends disconnect uevent and turn off. (suspend) 2. Platform side causes pullup or set_speed(e.g., adbd closes ffs node) 3. It causes unexpected behavior like ITMON error. Signed-off-by: Daehwan Jung <dh10.jung@xxxxxxxxxxx> --- drivers/usb/dwc3/gadget.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index ee44321..d7d4202 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2093,6 +2093,9 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) unsigned long flags; int ret; + if (pm_runtime_suspended(dwc->dev)) + return 0; + is_on = !!is_on; /* @@ -2403,6 +2406,9 @@ static void dwc3_gadget_set_speed(struct usb_gadget *g, unsigned long flags; u32 reg; + if (pm_runtime_suspended(dwc->dev)) + return; + spin_lock_irqsave(&dwc->lock, flags); reg = dwc3_readl(dwc->regs, DWC3_DCFG); reg &= ~(DWC3_DCFG_SPEED_MASK); -- 2.7.4