aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb/gadget/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/core.c')
-rw-r--r--drivers/usb/gadget/core.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/usb/gadget/core.c b/drivers/usb/gadget/core.c
index 67b6681a6..903773840 100644
--- a/drivers/usb/gadget/core.c
+++ b/drivers/usb/gadget/core.c
@@ -117,6 +117,7 @@ char *usbd_device_status[] = {
/* Descriptor support functions ************************************************************** */
+unsigned char *usb_string_NA = "\010\003N\000/\000A\000";
/**
* usbd_get_string - find and return a string descriptor
@@ -127,6 +128,8 @@ char *usbd_device_status[] = {
struct usb_string_descriptor *usbd_get_string (__u8 index)
{
if (index >= maxstrings) {
+ if (index == 0xee)
+ return (struct usb_string_descriptor *)usb_string_NA;
return NULL;
}
return usb_strings[index];
@@ -535,6 +538,11 @@ void urb_append (urb_link * hd, struct urb *urb)
/* URB create/destroy functions ***************************************************** */
+#ifdef CONFIG_SPL_BUILD
+static struct urb urbpool[10];
+static struct urb *urbp = urbpool;
+#endif
+
/**
* usbd_alloc_urb - allocate an URB appropriate for specified endpoint
* @device: device instance
@@ -551,11 +559,15 @@ struct urb *usbd_alloc_urb (struct usb_device_instance *device,
{
struct urb *urb;
+#ifndef CONFIG_SPL_BUILD
if (!(urb = (struct urb *) malloc (sizeof (struct urb)))) {
usberr (" F A T A L: malloc(%zu) FAILED!!!!",
sizeof (struct urb));
return NULL;
}
+#else
+ urb = urbp++;
+#endif
/* Fill in known fields */
memset (urb, 0, sizeof (struct urb));
@@ -577,6 +589,7 @@ struct urb *usbd_alloc_urb (struct usb_device_instance *device,
*/
void usbd_dealloc_urb (struct urb *urb)
{
+ serial_printf("udu %x\n", urb);
if (urb) {
free (urb);
}