diff options
Diffstat (limited to 'drivers/usb/cdns3/cdns3-gadget.c')
| -rw-r--r-- | drivers/usb/cdns3/cdns3-gadget.c | 7 | 
1 files changed, 5 insertions, 2 deletions
| diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c index f9af7ebe003d..d6d515d598dc 100644 --- a/drivers/usb/cdns3/cdns3-gadget.c +++ b/drivers/usb/cdns3/cdns3-gadget.c @@ -2684,6 +2684,7 @@ int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep)  	struct usb_request *request;  	struct cdns3_request *priv_req;  	struct cdns3_trb *trb = NULL; +	struct cdns3_trb trb_tmp;  	int ret;  	int val; @@ -2693,8 +2694,10 @@ int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep)  	if (request) {  		priv_req = to_cdns3_request(request);  		trb = priv_req->trb; -		if (trb) +		if (trb) { +			trb_tmp = *trb;  			trb->control = trb->control ^ cpu_to_le32(TRB_CYCLE); +		}  	}  	writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd); @@ -2709,7 +2712,7 @@ int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep)  	if (request) {  		if (trb) -			trb->control = trb->control ^ cpu_to_le32(TRB_CYCLE); +			*trb = trb_tmp;  		cdns3_rearm_transfer(priv_ep, 1);  	} |