X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=drivers%2Fusb%2Fdwc3%2Fep0.c;h=69a4e43ddf59dae79fbb6df5dace7f809505cf97;hb=cdeaf62255d171dd159f0bdc453efd7ff31c6916;hp=e058961a547cfec14515a5951bd1135d5906dc45;hpb=2646021e1d5235c6c2143d27405fb057e5560d2b;p=~andy%2Flinux diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index e058961a547..69a4e43ddf5 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -2,7 +2,6 @@ * ep0.c - DesignWare USB3 DRD Controller Endpoint 0 Handling * * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com - * All rights reserved. * * Authors: Felipe Balbi , * Sebastian Andrzej Siewior @@ -104,10 +103,8 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma, dwc3_trb_to_hw(&trb, trb_hw); memset(¶ms, 0, sizeof(params)); - params.param0.depstrtxfer.transfer_desc_addr_high = - upper_32_bits(dwc->ep0_trb_addr); - params.param1.depstrtxfer.transfer_desc_addr_low = - lower_32_bits(dwc->ep0_trb_addr); + params.param0 = upper_32_bits(dwc->ep0_trb_addr); + params.param1 = lower_32_bits(dwc->ep0_trb_addr); ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, DWC3_DEPCMD_STARTTRANSFER, ¶ms); @@ -456,6 +453,7 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) u32 cfg; int ret; + dwc->start_config_issued = false; cfg = le16_to_cpu(ctrl->wValue); switch (dwc->dev_state) { @@ -525,15 +523,15 @@ static void dwc3_ep0_inspect_setup(struct dwc3 *dwc, len = le16_to_cpu(ctrl->wLength); if (!len) { - dwc->three_stage_setup = 0; + dwc->three_stage_setup = false; + dwc->ep0_expect_in = false; dwc->ep0_next_event = DWC3_EP0_NRDY_STATUS; } else { - dwc->three_stage_setup = 1; + dwc->three_stage_setup = true; + dwc->ep0_expect_in = !!(ctrl->bRequestType & USB_DIR_IN); dwc->ep0_next_event = DWC3_EP0_NRDY_DATA; } - dwc->ep0_expect_in = !!(ctrl->bRequestType & USB_DIR_IN); - if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) ret = dwc3_ep0_std_request(dwc, ctrl); else @@ -587,7 +585,6 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, /* for some reason we did not get everything out */ dwc3_ep0_stall_and_restart(dwc); - dwc3_gadget_giveback(dep, r, -ECONNRESET); } else { /* * handle the case where we have to send a zero packet. This @@ -740,8 +737,8 @@ static void dwc3_ep0_xfernotready(struct dwc3 *dwc, if (dwc->ep0_next_event != DWC3_EP0_NRDY_DATA) { dev_vdbg(dwc->dev, "Expected %d got %d\n", - DEPEVT_STATUS_CONTROL_DATA, - event->status); + dwc->ep0_next_event, + DWC3_EP0_NRDY_DATA); dwc3_ep0_stall_and_restart(dwc); return; @@ -769,8 +766,8 @@ static void dwc3_ep0_xfernotready(struct dwc3 *dwc, if (dwc->ep0_next_event != DWC3_EP0_NRDY_STATUS) { dev_vdbg(dwc->dev, "Expected %d got %d\n", - DEPEVT_STATUS_CONTROL_STATUS, - event->status); + dwc->ep0_next_event, + DWC3_EP0_NRDY_STATUS); dwc3_ep0_stall_and_restart(dwc); return; @@ -786,7 +783,7 @@ void dwc3_ep0_interrupt(struct dwc3 *dwc, dev_dbg(dwc->dev, "%s while ep%d%s in state '%s'\n", dwc3_ep_event_string(event->endpoint_event), - epnum, (epnum & 1) ? "in" : "out", + epnum >> 1, (epnum & 1) ? "in" : "out", dwc3_ep0_state_string(dwc->ep0state)); switch (event->endpoint_event) {