]> git.sur5r.net Git - u-boot/commitdiff
usb: ci_udc: use a single descriptor for ep0
authorStephen Warren <swarren@nvidia.com>
Thu, 29 May 2014 20:53:01 +0000 (14:53 -0600)
committerMarek Vasut <marex@denx.de>
Sun, 1 Jun 2014 17:22:40 +0000 (19:22 +0200)
ci_udc currently points ep->desc at separate descriptors for IN and OUT.
These descriptors only differ in the ep address IN/OUT field. Modify the
code to use a single descriptor, and change that descriptor's ep address
to indicate IN/OUT as required. This removes some data duplication.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
drivers/usb/gadget/ci_udc.c

index a68a85f84e703f18b4b097ea27033b3680fcfe86..77f8c9ef7f0f6fe3dfa5f82cce67367cf1ee5c98 100644 (file)
@@ -56,14 +56,7 @@ static const char *reqname(unsigned r)
 }
 #endif
 
-static struct usb_endpoint_descriptor ep0_out_desc = {
-       .bLength = sizeof(struct usb_endpoint_descriptor),
-       .bDescriptorType = USB_DT_ENDPOINT,
-       .bEndpointAddress = 0,
-       .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
-};
-
-static struct usb_endpoint_descriptor ep0_in_desc = {
+static struct usb_endpoint_descriptor ep0_desc = {
        .bLength = sizeof(struct usb_endpoint_descriptor),
        .bDescriptorType = USB_DT_ENDPOINT,
        .bEndpointAddress = USB_DIR_IN,
@@ -435,7 +428,7 @@ static void handle_ep_complete(struct ci_ep *ep)
        num = ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
        in = (ep->desc->bEndpointAddress & USB_DIR_IN) != 0;
        if (num == 0)
-               ep->desc = &ep0_out_desc;
+               ep0_desc.bEndpointAddress = 0;
        item = ci_get_qtd(num, in);
        ci_invalidate_qtd(num);
 
@@ -460,7 +453,7 @@ static void handle_ep_complete(struct ci_ep *ep)
        if (num == 0) {
                ci_req->req.length = 0;
                usb_ep_queue(&ep->ep, &ci_req->req, 0);
-               ep->desc = &ep0_in_desc;
+               ep0_desc.bEndpointAddress = USB_DIR_IN;
        }
 }
 
@@ -771,7 +764,7 @@ static int ci_udc_probe(void)
 
        /* Init EP 0 */
        memcpy(&controller.ep[0].ep, &ci_ep_init[0], sizeof(*ci_ep_init));
-       controller.ep[0].desc = &ep0_in_desc;
+       controller.ep[0].desc = &ep0_desc;
        INIT_LIST_HEAD(&controller.ep[0].queue);
        controller.ep[0].req_primed = false;
        controller.gadget.ep0 = &controller.ep[0].ep;