mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-02 07:43:11 +07:00
usb: dwc3: ep0: don't change to configured state too early
before changing to configured state, we need to wait until gadget driver has had a chance to process the request. In case of USB_GADGET_DELAYED_STATUS, that means we need to defer usb_gadget_set_state() until the upcoming usb_ep_queue(). Reported-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
7a42d83536
commit
7c81290e87
@ -148,6 +148,7 @@ static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep,
|
|||||||
|
|
||||||
direction = !dwc->ep0_expect_in;
|
direction = !dwc->ep0_expect_in;
|
||||||
dwc->delayed_status = false;
|
dwc->delayed_status = false;
|
||||||
|
usb_gadget_set_state(&dwc->gadget, USB_STATE_CONFIGURED);
|
||||||
|
|
||||||
if (dwc->ep0state == EP0_STATUS_PHASE)
|
if (dwc->ep0state == EP0_STATUS_PHASE)
|
||||||
__dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
|
__dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
|
||||||
@ -533,8 +534,16 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
|
|||||||
ret = dwc3_ep0_delegate_req(dwc, ctrl);
|
ret = dwc3_ep0_delegate_req(dwc, ctrl);
|
||||||
/* if the cfg matches and the cfg is non zero */
|
/* if the cfg matches and the cfg is non zero */
|
||||||
if (cfg && (!ret || (ret == USB_GADGET_DELAYED_STATUS))) {
|
if (cfg && (!ret || (ret == USB_GADGET_DELAYED_STATUS))) {
|
||||||
usb_gadget_set_state(&dwc->gadget,
|
|
||||||
USB_STATE_CONFIGURED);
|
/*
|
||||||
|
* only change state if set_config has already
|
||||||
|
* been processed. If gadget driver returns
|
||||||
|
* USB_GADGET_DELAYED_STATUS, we will wait
|
||||||
|
* to change the state on the next usb_ep_queue()
|
||||||
|
*/
|
||||||
|
if (ret == 0)
|
||||||
|
usb_gadget_set_state(&dwc->gadget,
|
||||||
|
USB_STATE_CONFIGURED);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enable transition to U1/U2 state when
|
* Enable transition to U1/U2 state when
|
||||||
|
Loading…
Reference in New Issue
Block a user