]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
usb: mv_udc: Clean up the EP initialization
authorMarek Vasut <marex@denx.de>
Wed, 10 Jul 2013 01:16:30 +0000 (03:16 +0200)
committerMarek Vasut <marex@denx.de>
Mon, 29 Jul 2013 21:01:31 +0000 (23:01 +0200)
Move the constant values that are programmed into mv_ep.ep into
separate static const structure so they can be memcpy()'d when
the initialization happens.

Moveover, we only every init NUM_ENDPOINTS, not 2 * NUM_ENDPOINTS,
so fix this bug as well.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Lei Wen <leiwen@marvell.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
drivers/usb/gadget/mv_udc.c
include/usb/mv_udc.h

index a667cf9ed55b25949b09b73cea6a351c55da76c1..8dd776b2619aab7f6319b615c85f3cc5b538ff0f 100644 (file)
@@ -83,6 +83,20 @@ static struct usb_ep_ops mv_ep_ops = {
        .free_request   = mv_ep_free_request,
 };
 
+/* Init values for USB endpoints. */
+static const struct usb_ep mv_ep_init[2] = {
+       [0] = { /* EP 0 */
+               .maxpacket      = 64,
+               .name           = "ep0",
+               .ops            = &mv_ep_ops,
+       },
+       [1] = { /* EP 1..n */
+               .maxpacket      = 512,
+               .name           = "ep-",
+               .ops            = &mv_ep_ops,
+       },
+};
+
 static struct mv_drv controller = {
        .gadget = {
                .name = "mv_udc",
@@ -435,21 +449,21 @@ static int mvudc_probe(void)
        }
 
        INIT_LIST_HEAD(&controller.gadget.ep_list);
-       controller.gadget.ep0 = &controller.ep[0].ep;
-       controller.ep[0].ep.maxpacket = 64;
-       controller.ep[0].ep.name = "ep0";
+
+       /* Init EP 0 */
+       memcpy(&controller.ep[0].ep, &mv_ep_init[0], sizeof(*mv_ep_init));
        controller.ep[0].desc = &ep0_in_desc;
+       controller.gadget.ep0 = &controller.ep[0].ep;
        INIT_LIST_HEAD(&controller.gadget.ep0->ep_list);
-       for (i = 0; i < 2 * NUM_ENDPOINTS; i++) {
-               if (i != 0) {
-                       controller.ep[i].ep.maxpacket = 512;
-                       controller.ep[i].ep.name = "ep-";
-                       list_add_tail(&controller.ep[i].ep.ep_list,
-                                     &controller.gadget.ep_list);
-                       controller.ep[i].desc = NULL;
-               }
-               controller.ep[i].ep.ops = &mv_ep_ops;
+
+       /* Init EP 1..n */
+       for (i = 1; i < NUM_ENDPOINTS; i++) {
+               memcpy(&controller.ep[i].ep, &mv_ep_init[1],
+                      sizeof(*mv_ep_init));
+               list_add_tail(&controller.ep[i].ep.ep_list,
+                             &controller.gadget.ep_list);
        }
+
        return 0;
 }
 
index f92ca49858fd9f4694fe16e8fc0e2af1ec6bf905..ffddb7599d165f650e0f074dd6f3a1e6c642b50f 100644 (file)
@@ -74,7 +74,7 @@ struct mv_drv {
        struct usb_gadget               gadget;
        struct usb_gadget_driver        *driver;
        struct mv_udc                   *udc;
-       struct mv_ep                    ep[2 * NUM_ENDPOINTS];
+       struct mv_ep                    ep[NUM_ENDPOINTS];
 };
 
 struct ept_queue_head {