[PATCH 03/20] usb/gadget: move global vars from epautoconf into struct usb_gadget

2012-08-24 Thread Sebastian Andrzej Siewior
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.

Signed-off-by: Sebastian Andrzej Siewior 
---
 drivers/usb/gadget/epautoconf.c |   27 ++-
 include/linux/usb/gadget.h  |4 
 2 files changed, 10 insertions(+), 21 deletions(-)

diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c
index 51f3d42..d5a905d 100644
--- a/drivers/usb/gadget/epautoconf.c
+++ b/drivers/usb/gadget/epautoconf.c
@@ -22,17 +22,6 @@
 
 #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;
 }
 
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index fdf85a7..40659bc 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -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 {
unsigneda_alt_hnp_support:1;
const char  *name;
struct device   dev;
+   unsignedout_epnum;
+   unsignedin_epnum;
 };
 
 static inline void set_gadget_data(struct usb_gadget *gadget, void *data)
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 03/20] usb/gadget: move global vars from epautoconf into struct usb_gadget

2012-08-24 Thread Michal Nazarewicz
Sebastian Andrzej Siewior  writes:
> 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.
>
> Signed-off-by: Sebastian Andrzej Siewior 

The code looks good to me, but I'm not UDC expert and thus I don't know
whether this won't break something, so I'm reluctant to give my
Acked-by.

-- 
Best regards, _ _
.o. | Liege of Serenely Enlightened Majesty of  o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz(o o)
ooo +--ooO--(_)--Ooo--

pgpDqmbnsCHw9.pgp
Description: PGP signature