diff options
Diffstat (limited to 'drivers/usb/dwc2')
| -rw-r--r-- | drivers/usb/dwc2/gadget.c | 17 | ||||
| -rw-r--r-- | drivers/usb/dwc2/hcd_queue.c | 2 | ||||
| -rw-r--r-- | drivers/usb/dwc2/platform.c | 3 | 
3 files changed, 18 insertions, 4 deletions
| diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index 4ab4a1d5062b..ab8d7dad9f56 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -1198,6 +1198,8 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,  			}  			ctrl |= DXEPCTL_CNAK;  		} else { +			hs_req->req.frame_number = hs_ep->target_frame; +			hs_req->req.actual = 0;  			dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, -ENODATA);  			return;  		} @@ -2857,9 +2859,12 @@ static void dwc2_gadget_handle_ep_disabled(struct dwc2_hsotg_ep *hs_ep)  	do {  		hs_req = get_ep_head(hs_ep); -		if (hs_req) +		if (hs_req) { +			hs_req->req.frame_number = hs_ep->target_frame; +			hs_req->req.actual = 0;  			dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req,  						    -ENODATA); +		}  		dwc2_gadget_incr_frame_num(hs_ep);  		/* Update current frame number value. */  		hsotg->frame_number = dwc2_hsotg_read_frameno(hsotg); @@ -2912,8 +2917,11 @@ static void dwc2_gadget_handle_out_token_ep_disabled(struct dwc2_hsotg_ep *ep)  	while (dwc2_gadget_target_frame_elapsed(ep)) {  		hs_req = get_ep_head(ep); -		if (hs_req) +		if (hs_req) { +			hs_req->req.frame_number = ep->target_frame; +			hs_req->req.actual = 0;  			dwc2_hsotg_complete_request(hsotg, ep, hs_req, -ENODATA); +		}  		dwc2_gadget_incr_frame_num(ep);  		/* Update current frame number value. */ @@ -3002,8 +3010,11 @@ static void dwc2_gadget_handle_nak(struct dwc2_hsotg_ep *hs_ep)  	while (dwc2_gadget_target_frame_elapsed(hs_ep)) {  		hs_req = get_ep_head(hs_ep); -		if (hs_req) +		if (hs_req) { +			hs_req->req.frame_number = hs_ep->target_frame; +			hs_req->req.actual = 0;  			dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, -ENODATA); +		}  		dwc2_gadget_incr_frame_num(hs_ep);  		/* Update current frame number value. */ diff --git a/drivers/usb/dwc2/hcd_queue.c b/drivers/usb/dwc2/hcd_queue.c index 89a788326c56..24beff610cf2 100644 --- a/drivers/usb/dwc2/hcd_queue.c +++ b/drivers/usb/dwc2/hcd_queue.c @@ -59,7 +59,7 @@  #define DWC2_UNRESERVE_DELAY (msecs_to_jiffies(5))  /* If we get a NAK, wait this long before retrying */ -#define DWC2_RETRY_WAIT_DELAY (1 * 1E6L) +#define DWC2_RETRY_WAIT_DELAY (1 * NSEC_PER_MSEC)  /**   * dwc2_periodic_channel_available() - Checks that a channel is available for a diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c index c8f18f3ba9e3..c331a5128c2c 100644 --- a/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c @@ -575,6 +575,9 @@ static int dwc2_driver_probe(struct platform_device *dev)  		ggpio |= GGPIO_STM32_OTG_GCCFG_IDEN;  		ggpio |= GGPIO_STM32_OTG_GCCFG_VBDEN;  		dwc2_writel(hsotg, ggpio, GGPIO); + +		/* ID/VBUS detection startup time */ +		usleep_range(5000, 7000);  	}  	retval = dwc2_drd_init(hsotg); |