diff options
Diffstat (limited to 'drivers/usb/dwc3/gadget.c')
| -rw-r--r-- | drivers/usb/dwc3/gadget.c | 11 | 
1 files changed, 5 insertions, 6 deletions
| diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index aebcf8ec0716..4a337f348651 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -783,8 +783,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)  	trace_dwc3_gadget_ep_disable(dep); -	dwc3_remove_requests(dwc, dep); -  	/* make sure HW endpoint isn't stalled */  	if (dep->flags & DWC3_EP_STALL)  		__dwc3_gadget_ep_set_halt(dep, 0, false); @@ -803,6 +801,8 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)  		dep->endpoint.desc = NULL;  	} +	dwc3_remove_requests(dwc, dep); +  	return 0;  } @@ -1617,7 +1617,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)  {  	struct dwc3		*dwc = dep->dwc; -	if (!dep->endpoint.desc || !dwc->pullups_connected) { +	if (!dep->endpoint.desc || !dwc->pullups_connected || !dwc->connected) {  		dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n",  				dep->name);  		return -ESHUTDOWN; @@ -2247,6 +2247,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)  	if (!is_on) {  		u32 count; +		dwc->connected = false;  		/*  		 * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a  		 * Section 4.1.8 Table 4-7, it states that for a device-initiated @@ -2271,7 +2272,6 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)  			dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) %  						dwc->ev_buf->length;  		} -		dwc->connected = false;  	} else {  		__dwc3_gadget_start(dwc);  	} @@ -3321,8 +3321,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)  {  	u32			reg; -	dwc->connected = true; -  	/*  	 * WORKAROUND: DWC3 revisions <1.88a have an issue which  	 * would cause a missing Disconnect Event if there's a @@ -3362,6 +3360,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)  	 * transfers."  	 */  	dwc3_stop_active_transfers(dwc); +	dwc->connected = true;  	reg = dwc3_readl(dwc->regs, DWC3_DCTL);  	reg &= ~DWC3_DCTL_TSTCTRL_MASK; |