]> Pileus Git - ~andy/linux/blobdiff - drivers/usb/dwc3/ep0.c
lis3: add support for HP EliteBook 8540w
[~andy/linux] / drivers / usb / dwc3 / ep0.c
index e058961a547cfec14515a5951bd1135d5906dc45..69a4e43ddf59dae79fbb6df5dace7f809505cf97 100644 (file)
@@ -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 <balbi@ti.com>,
  *         Sebastian Andrzej Siewior <bigeasy@linutronix.de>
@@ -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(&params, 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, &params);
@@ -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) {