Loading drivers/usb/dwc3/gadget.c +22 −12 Original line number Diff line number Diff line Loading @@ -1447,28 +1447,33 @@ static inline enum dwc3_link_state dwc3_get_link_state(struct dwc3 *dwc) return DWC3_DSTS_USBLNKST(reg); } static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request, gfp_t gfp_flags) static bool dwc3_gadget_is_suspended(struct dwc3 *dwc) { struct dwc3_request *req = to_dwc3_request(request); struct dwc3_ep *dep = to_dwc3_ep(ep); struct dwc3 *dwc = dep->dwc; unsigned long flags; enum dwc3_link_state link_state; int ret; bool wakeup = false; if (atomic_read(&dwc->in_lpm)) { wakeup = true; return true; } else { link_state = dwc3_get_link_state(dwc); if (link_state == DWC3_LINK_STATE_RX_DET || link_state == DWC3_LINK_STATE_U3) wakeup = true; return true; } return false; } if (wakeup) { static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request, gfp_t gfp_flags) { struct dwc3_request *req = to_dwc3_request(request); struct dwc3_ep *dep = to_dwc3_ep(ep); struct dwc3 *dwc = dep->dwc; unsigned long flags; int ret; if (dwc3_gadget_is_suspended(dwc)) { dwc3_gadget_wakeup(&dwc->gadget); return -EAGAIN; } Loading Loading @@ -1768,6 +1773,11 @@ static int dwc_gadget_func_wakeup(struct usb_gadget *g, int interface_id) if (!g || (g->speed != USB_SPEED_SUPER)) return -ENOTSUPP; if (dwc3_gadget_is_suspended(dwc)) { dwc3_gadget_wakeup(&dwc->gadget); return -EAGAIN; } ret = dwc3_send_gadget_generic_command(dwc, DWC3_DGCMD_XMIT_FUNCTION, interface_id); Loading Loading
drivers/usb/dwc3/gadget.c +22 −12 Original line number Diff line number Diff line Loading @@ -1447,28 +1447,33 @@ static inline enum dwc3_link_state dwc3_get_link_state(struct dwc3 *dwc) return DWC3_DSTS_USBLNKST(reg); } static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request, gfp_t gfp_flags) static bool dwc3_gadget_is_suspended(struct dwc3 *dwc) { struct dwc3_request *req = to_dwc3_request(request); struct dwc3_ep *dep = to_dwc3_ep(ep); struct dwc3 *dwc = dep->dwc; unsigned long flags; enum dwc3_link_state link_state; int ret; bool wakeup = false; if (atomic_read(&dwc->in_lpm)) { wakeup = true; return true; } else { link_state = dwc3_get_link_state(dwc); if (link_state == DWC3_LINK_STATE_RX_DET || link_state == DWC3_LINK_STATE_U3) wakeup = true; return true; } return false; } if (wakeup) { static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request, gfp_t gfp_flags) { struct dwc3_request *req = to_dwc3_request(request); struct dwc3_ep *dep = to_dwc3_ep(ep); struct dwc3 *dwc = dep->dwc; unsigned long flags; int ret; if (dwc3_gadget_is_suspended(dwc)) { dwc3_gadget_wakeup(&dwc->gadget); return -EAGAIN; } Loading Loading @@ -1768,6 +1773,11 @@ static int dwc_gadget_func_wakeup(struct usb_gadget *g, int interface_id) if (!g || (g->speed != USB_SPEED_SUPER)) return -ENOTSUPP; if (dwc3_gadget_is_suspended(dwc)) { dwc3_gadget_wakeup(&dwc->gadget); return -EAGAIN; } ret = dwc3_send_gadget_generic_command(dwc, DWC3_DGCMD_XMIT_FUNCTION, interface_id); Loading