瀏覽代碼

usb: dwc3: ep0: fix status phase delayed status direction

commit 68d3e66 (usb: dwc3: ep0: fix for possible early
delayed_status) added handling for early delayed status,
but the current code only works because so far delayed
status will always be on the IN direction.

This patch makes the code more robust by making sure that
we can handle all directions properly.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Felipe Balbi 13 年之前
父節點
當前提交
7125d584d2
共有 1 個文件被更改,包括 4 次插入1 次删除
  1. 4 1
      drivers/usb/dwc3/ep0.c

+ 4 - 1
drivers/usb/dwc3/ep0.c

@@ -164,10 +164,13 @@ static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep,
 	 * handle it here.
 	 * handle it here.
 	 */
 	 */
 	if (dwc->delayed_status) {
 	if (dwc->delayed_status) {
+		unsigned	direction;
+
+		direction = !dwc->ep0_expect_in;
 		dwc->delayed_status = false;
 		dwc->delayed_status = false;
 
 
 		if (dwc->ep0state == EP0_STATUS_PHASE)
 		if (dwc->ep0state == EP0_STATUS_PHASE)
-			__dwc3_ep0_do_control_status(dwc, dwc->eps[1]);
+			__dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
 		else
 		else
 			dev_dbg(dwc->dev, "too early for delayed status\n");
 			dev_dbg(dwc->dev, "too early for delayed status\n");