usb: gadget: dummy_hcd: move ep initialisation HW setup
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Thu, 23 Jun 2011 12:26:12 +0000 (14:26 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 1 Jul 2011 21:31:12 +0000 (14:31 -0700)
This is only required to be done once. There is no counter part to this
in ->stop() so there is no need to re-do it next time. While here also
init the max_stream size to 0 on SS speed.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/gadget/dummy_hcd.c

index 1916360072ad22034c52352470d68815cd7fd242..3144092d828b5fa1b4428a4c3387897cd2c39525 100644 (file)
@@ -887,25 +887,6 @@ static int dummy_udc_start(struct usb_gadget_driver *driver,
 
        dum->devstatus = 0;
 
-       INIT_LIST_HEAD (&dum->gadget.ep_list);
-       for (i = 0; i < DUMMY_ENDPOINTS; i++) {
-               struct dummy_ep *ep = &dum->ep [i];
-
-               if (!ep_name [i])
-                       break;
-               ep->ep.name = ep_name [i];
-               ep->ep.ops = &dummy_ep_ops;
-               list_add_tail (&ep->ep.ep_list, &dum->gadget.ep_list);
-               ep->halted = ep->wedged = ep->already_seen =
-                               ep->setup_stage = 0;
-               ep->ep.maxpacket = ~0;
-               ep->last_io = jiffies;
-               ep->gadget = &dum->gadget;
-               ep->desc = NULL;
-               INIT_LIST_HEAD (&ep->queue);
-       }
-
-       dum->gadget.ep0 = &dum->ep [0].ep;
        if (mod_data.is_super_speed)
                dum->gadget.speed = driver->speed;
        else if (mod_data.is_high_speed)
@@ -922,8 +903,11 @@ static int dummy_udc_start(struct usb_gadget_driver *driver,
                for (i = 0; i < DUMMY_ENDPOINTS; i++)
                        dum->ep[i].ep.max_streams = 0x10;
                dum->ep[0].ep.maxpacket = 9;
-       } else
+       } else {
+               for (i = 0; i < DUMMY_ENDPOINTS; i++)
+                       dum->ep[i].ep.max_streams = 0;
                dum->ep[0].ep.maxpacket = 64;
+       }
 
        if (dum->gadget.speed == USB_SPEED_SUPER)
                dum->gadget.is_otg =
@@ -932,9 +916,6 @@ static int dummy_udc_start(struct usb_gadget_driver *driver,
                dum->gadget.is_otg =
                        (dummy_hcd_to_hcd(dum->hs_hcd)->self.otg_port != 0);
 
-       list_del_init (&dum->ep [0].ep.ep_list);
-       INIT_LIST_HEAD(&dum->fifo_req.queue);
-
        driver->driver.bus = NULL;
        dum->driver = driver;
        dum->gadget.dev.driver = &driver->driver;
@@ -984,6 +965,33 @@ dummy_gadget_release (struct device *dev)
        return;
 }
 
+static void init_dummy_udc_hw(struct dummy *dum)
+{
+       int i;
+
+       INIT_LIST_HEAD(&dum->gadget.ep_list);
+       for (i = 0; i < DUMMY_ENDPOINTS; i++) {
+               struct dummy_ep *ep = &dum->ep[i];
+
+               if (!ep_name[i])
+                       break;
+               ep->ep.name = ep_name[i];
+               ep->ep.ops = &dummy_ep_ops;
+               list_add_tail(&ep->ep.ep_list, &dum->gadget.ep_list);
+               ep->halted = ep->wedged = ep->already_seen =
+                               ep->setup_stage = 0;
+               ep->ep.maxpacket = ~0;
+               ep->last_io = jiffies;
+               ep->gadget = &dum->gadget;
+               ep->desc = NULL;
+               INIT_LIST_HEAD(&ep->queue);
+       }
+
+       dum->gadget.ep0 = &dum->ep[0].ep;
+       list_del_init(&dum->ep[0].ep.ep_list);
+       INIT_LIST_HEAD(&dum->fifo_req.queue);
+}
+
 static int dummy_udc_probe (struct platform_device *pdev)
 {
        struct dummy    *dum = &the_controller;
@@ -1002,6 +1010,8 @@ static int dummy_udc_probe (struct platform_device *pdev)
                return rc;
        }
 
+       init_dummy_udc_hw(dum);
+
        rc = usb_add_gadget_udc(&pdev->dev, &dum->gadget);
        if (rc < 0)
                goto err_udc;