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 <wch...@codeaurora.org>
> ---
>  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

Reply via email to