usb: gadget: move global vars from epautoconf into struct usb_gadget
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Thu, 6 Sep 2012 18:11:11 +0000 (20:11 +0200)
committerFelipe Balbi <balbi@ti.com>
Mon, 10 Sep 2012 12:37:08 +0000 (15:37 +0300)
epautoconf has two global variables which count the endpoint number of
last assigned endpoint.
This patch removes the global variable and keeps it as per (UDC) gadget.
While here, the ifdef is removed and now the in and outpoint are
enumerated unconditionally. The dwc3 for instance supports 32 endpoints
in total.

Acked-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/epautoconf.c
include/linux/usb/gadget.h

index 51f3d42f5a64808533c4412fb1d632c3accde8d1..d5a905dbed005e92a92264b3d6a7cfd679e4021d 100644 (file)
 
 #include "gadget_chips.h"
 
-
-/* we must assign addresses for configurable endpoints (like net2280) */
-static unsigned epnum;
-
-// #define MANY_ENDPOINTS
-#ifdef MANY_ENDPOINTS
-/* more than 15 configurable endpoints */
-static unsigned in_epnum;
-#endif
-
-
 /*
  * This should work with endpoints from controller drivers sharing the
  * same endpoint naming convention.  By example:
@@ -176,16 +165,14 @@ ep_matches (
        if (isdigit (ep->name [2])) {
                u8      num = simple_strtoul (&ep->name [2], NULL, 10);
                desc->bEndpointAddress |= num;
-#ifdef MANY_ENDPOINTS
        } else if (desc->bEndpointAddress & USB_DIR_IN) {
-               if (++in_epnum > 15)
+               if (++gadget->in_epnum > 15)
                        return 0;
-               desc->bEndpointAddress = USB_DIR_IN | in_epnum;
-#endif
+               desc->bEndpointAddress = USB_DIR_IN | gadget->in_epnum;
        } else {
-               if (++epnum > 15)
+               if (++gadget->out_epnum > 15)
                        return 0;
-               desc->bEndpointAddress |= epnum;
+               desc->bEndpointAddress |= gadget->out_epnum;
        }
 
        /* report (variable) full speed bulk maxpacket */
@@ -385,9 +372,7 @@ void usb_ep_autoconfig_reset (struct usb_gadget *gadget)
        list_for_each_entry (ep, &gadget->ep_list, ep_list) {
                ep->driver_data = NULL;
        }
-#ifdef MANY_ENDPOINTS
-       in_epnum = 0;
-#endif
-       epnum = 0;
+       gadget->in_epnum = 0;
+       gadget->out_epnum = 0;
 }
 
index 822c1b88f95a70084d916660fce9fc0b10a5eabe..5b6e50888248d044c4f9f277165cc5ad7b9a7ad6 100644 (file)
@@ -503,6 +503,8 @@ struct usb_gadget_ops {
  * @name: Identifies the controller hardware type.  Used in diagnostics
  *     and sometimes configuration.
  * @dev: Driver model state for this abstract device.
+ * @out_epnum: last used out ep number
+ * @in_epnum: last used in ep number
  *
  * Gadgets have a mostly-portable "gadget driver" implementing device
  * functions, handling all usb configurations and interfaces.  Gadget
@@ -537,6 +539,8 @@ struct usb_gadget {
        unsigned                        a_alt_hnp_support:1;
        const char                      *name;
        struct device                   dev;
+       unsigned                        out_epnum;
+       unsigned                        in_epnum;
 };
 
 static inline void set_gadget_data(struct usb_gadget *gadget, void *data)