Message ID | 1677156121-30364-2-git-send-email-quic_prashk@quicinc.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Fix vbus draw of dwc3 gadget | expand |
On Thu, Feb 23, 2023, Prashanth K wrote: > Currently we process the suspend interrupt event only if the > device is in configured state. Consider a case where device > is not configured and got suspend interrupt, in that case our > gadget will still use 100mA as composite_suspend didn't happen. > But battery charging specification (BC1.2) expects a downstream > device to draw less than 2.5mA when unconnected OR suspended. > > Fix this by removing the condition for processing suspend event, > and thus composite_resume would set vbus draw to 2. > > Fixes: 72704f876f50 ("dwc3: gadget: Implement the suspend entry event handler") > Signed-off-by: Prashanth K <quic_prashk@quicinc.com> > --- > drivers/usb/dwc3/gadget.c | 11 ++--------- > 1 file changed, 2 insertions(+), 9 deletions(-) > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > index 89dcfac..a83f34e 100644 > --- a/drivers/usb/dwc3/gadget.c > +++ b/drivers/usb/dwc3/gadget.c > @@ -4241,15 +4241,8 @@ static void dwc3_gadget_interrupt(struct dwc3 *dwc, > break; > case DWC3_DEVICE_EVENT_SUSPEND: > /* It changed to be suspend event for version 2.30a and above */ > - if (!DWC3_VER_IS_PRIOR(DWC3, 230A)) { > - /* > - * Ignore suspend event until the gadget enters into > - * USB_STATE_CONFIGURED state. > - */ > - if (dwc->gadget->state >= USB_STATE_CONFIGURED) > - dwc3_gadget_suspend_interrupt(dwc, > - event->event_info); > - } > + if (!DWC3_VER_IS_PRIOR(DWC3, 230A)) > + dwc3_gadget_suspend_interrupt(dwc, event->event_info); > break; > case DWC3_DEVICE_EVENT_SOF: > case DWC3_DEVICE_EVENT_ERRATIC_ERROR: > -- > 2.7.4 > Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> Thanks, Thinh
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 89dcfac..a83f34e 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -4241,15 +4241,8 @@ static void dwc3_gadget_interrupt(struct dwc3 *dwc, break; case DWC3_DEVICE_EVENT_SUSPEND: /* It changed to be suspend event for version 2.30a and above */ - if (!DWC3_VER_IS_PRIOR(DWC3, 230A)) { - /* - * Ignore suspend event until the gadget enters into - * USB_STATE_CONFIGURED state. - */ - if (dwc->gadget->state >= USB_STATE_CONFIGURED) - dwc3_gadget_suspend_interrupt(dwc, - event->event_info); - } + if (!DWC3_VER_IS_PRIOR(DWC3, 230A)) + dwc3_gadget_suspend_interrupt(dwc, event->event_info); break; case DWC3_DEVICE_EVENT_SOF: case DWC3_DEVICE_EVENT_ERRATIC_ERROR:
Currently we process the suspend interrupt event only if the device is in configured state. Consider a case where device is not configured and got suspend interrupt, in that case our gadget will still use 100mA as composite_suspend didn't happen. But battery charging specification (BC1.2) expects a downstream device to draw less than 2.5mA when unconnected OR suspended. Fix this by removing the condition for processing suspend event, and thus composite_resume would set vbus draw to 2. Fixes: 72704f876f50 ("dwc3: gadget: Implement the suspend entry event handler") Signed-off-by: Prashanth K <quic_prashk@quicinc.com> --- drivers/usb/dwc3/gadget.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-)