diff options
| author | Mark Brown <[email protected]> | 2020-10-28 21:37:38 +0000 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2020-10-28 21:37:38 +0000 | 
| commit | f59cddd8517ab880fb09bf1465b07b337e058b22 (patch) | |
| tree | b8ac2b4bd99f6b4860dd403bb39b2b7149ed06e0 /drivers/usb/cdns3/ep0.c | |
| parent | 43c3e148830aae5469c411a2bf951d4fe7fcea29 (diff) | |
| parent | 3650b228f83adda7e5ee532e2b90429c03f7b9ec (diff) | |
Merge tag 'v5.10-rc1' into regulator-5.10
Linux 5.10-rc1
Diffstat (limited to 'drivers/usb/cdns3/ep0.c')
| -rw-r--r-- | drivers/usb/cdns3/ep0.c | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/usb/cdns3/ep0.c b/drivers/usb/cdns3/ep0.c index d9779abc65b2..4761c852d9c4 100644 --- a/drivers/usb/cdns3/ep0.c +++ b/drivers/usb/cdns3/ep0.c @@ -717,9 +717,17 @@ static int cdns3_gadget_ep0_queue(struct usb_ep *ep,  	/* send STATUS stage. Should be called only for SET_CONFIGURATION */  	if (priv_dev->ep0_stage == CDNS3_STATUS_STAGE) { +		u32 val; +  		cdns3_select_ep(priv_dev, 0x00);  		cdns3_set_hw_configuration(priv_dev);  		cdns3_ep0_complete_setup(priv_dev, 0, 1); +		/* wait until configuration set */ +		ret = readl_poll_timeout_atomic(&priv_dev->regs->usb_sts, val, +					  val & USB_STS_CFGSTS_MASK, 1, 100); +		if (ret == -ETIMEDOUT) +			dev_warn(priv_dev->dev, "timeout for waiting configuration set\n"); +  		request->actual = 0;  		priv_dev->status_completion_no_call = true;  		priv_dev->pending_status_request = request; @@ -731,7 +739,7 @@ static int cdns3_gadget_ep0_queue(struct usb_ep *ep,  		 * ep0_queue is back.  		 */  		queue_work(system_freezable_wq, &priv_dev->pending_status_wq); -		return 0; +		return ret;  	}  	if (!list_empty(&priv_ep->pending_req_list)) {  |