diff options
author | Felipe Balbi <balbi@ti.com> | 2011-12-29 06:32:29 +0200 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2012-01-24 15:41:22 +0200 |
commit | 68d8a781575d7be490f97eb2c403fb13b083da6a (patch) | |
tree | 3f738a665891e751edeea80ed0af364b7a17fb16 /drivers | |
parent | dcd6c92267155e70a94b3927bce681ce74b80d1f (diff) | |
download | op-kernel-dev-68d8a781575d7be490f97eb2c403fb13b083da6a.zip op-kernel-dev-68d8a781575d7be490f97eb2c403fb13b083da6a.tar.gz |
usb: dwc3: ep0: tidy up Pending Request handling
The way our code was written, we should never have
a DWC3_EP_PENDING_REQUEST flag set out of a Data Phase
and the code in __dwc3_gadget_ep0_queue() did not
reflect that situation properly.
Tidy up that case to avoid any possible mistakes
when starting requests for IRQs which are long
gone.
Cc: stable@vger.kernel.org
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/dwc3/ep0.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 2f51de5..74a3828 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -149,20 +149,14 @@ static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep, direction = !!(dep->flags & DWC3_EP0_DIR_IN); - if (dwc->ep0state == EP0_STATUS_PHASE) { - type = dwc->three_stage_setup - ? DWC3_TRBCTL_CONTROL_STATUS3 - : DWC3_TRBCTL_CONTROL_STATUS2; - } else if (dwc->ep0state == EP0_DATA_PHASE) { - type = DWC3_TRBCTL_CONTROL_DATA; - } else { - /* should never happen */ - WARN_ON(1); + if (dwc->ep0state != EP0_DATA_PHASE) { + dev_WARN(dwc->dev, "Unexpected pending request\n"); return 0; } ret = dwc3_ep0_start_trans(dwc, direction, - req->request.dma, req->request.length, type); + req->request.dma, req->request.length, + DWC3_TRBCTL_CONTROL_DATA); dep->flags &= ~(DWC3_EP_PENDING_REQUEST | DWC3_EP0_DIR_IN); } else if (dwc->delayed_status) { |