On 20-08-28 22:58:44, Wesley Cheng wrote: > Ensure that the USB gadget is able to support the configuration being > added based on the number of endpoints required from all interfaces. This > is for accounting for any bandwidth or space limitations. > > Signed-off-by: Wesley Cheng <wcheng@xxxxxxxxxxxxxx> > --- > drivers/usb/gadget/configfs.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c > index 56051bb97349..7c74c04b1d8c 100644 > --- a/drivers/usb/gadget/configfs.c > +++ b/drivers/usb/gadget/configfs.c > @@ -1361,6 +1361,7 @@ static int configfs_composite_bind(struct usb_gadget *gadget, > struct usb_function *f; > struct usb_function *tmp; > struct gadget_config_name *cn; > + unsigned long ep_map = 0; > > if (gadget_is_otg(gadget)) > c->descriptors = otg_desc; > @@ -1390,7 +1391,28 @@ static int configfs_composite_bind(struct usb_gadget *gadget, > list_add(&f->list, &cfg->func_list); > goto err_purge_funcs; > } > + if (f->ss_descriptors) { > + struct usb_descriptor_header **d; > + > + d = f->ss_descriptors; > + for (; *d; ++d) { > + struct usb_endpoint_descriptor *ep; > + int addr; > + > + if ((*d)->bDescriptorType != USB_DT_ENDPOINT) > + continue; > + > + ep = (struct usb_endpoint_descriptor *)*d; > + addr = ((ep->bEndpointAddress & 0x80) >> 3) | > + (ep->bEndpointAddress & 0x0f); ">> 3" or "<< 3? > + set_bit(addr, &ep_map); You want to record all endpoints on ep_map? Considering there are four EP_IN (1-4), and four EP_OUT (1-4), what the value of ep_map would like? > + } > + } > } > + ret = usb_gadget_check_config(cdev->gadget, ep_map); > + if (ret) > + goto err_purge_funcs; > + You may move this patch after your 4nd patch to avoid "git bisect" issue. > usb_ep_autoconfig_reset(cdev->gadget); > } > if (cdev->use_os_string) { > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project > -- Thanks, Peter Chen