Hi, Daehwan Jung wrote: > 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); This is already addressed in Wesley Cheng's patches. Can you try the latest changes of DWC3 in Greg's usb-next branch? Thanks, Thinh