diff options
Diffstat (limited to 'drivers/usb/gadget/core.c')
-rw-r--r-- | drivers/usb/gadget/core.c | 13 |
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); } |