On Wed, Jun 30, 2021 at 02:00:38AM -0700, Wesley Cheng wrote: > Some UDCs may have constraints on how many high bandwidth endpoints it can > support in a certain configuration. This API allows for the composite > driver to pass down the total number of endpoints to the UDC so it can verify > it has the required resources to support the configuration. > > Signed-off-by: Wesley Cheng <wcheng@xxxxxxxxxxxxxx> > --- > drivers/usb/gadget/udc/core.c | 25 +++++++++++++++++++++++++ > include/linux/usb/gadget.h | 4 ++++ > 2 files changed, 29 insertions(+) > > diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c > index b7f0b1e..f1f44a6 100644 > --- a/drivers/usb/gadget/udc/core.c > +++ b/drivers/usb/gadget/udc/core.c > @@ -1003,6 +1003,31 @@ int usb_gadget_ep_match_desc(struct usb_gadget *gadget, > } > EXPORT_SYMBOL_GPL(usb_gadget_ep_match_desc); > > +/** > + * usb_gadget_check_config - checks if the UDC can support the number of eps "eps"? What is that? > + * @gadget: controller to check the USB configuration > + * @ep_map: bitmap of endpoints being requested by a USB configuration There is no such option in this function, did you run 'make htmldocs' and see that this adds a warning? > + * > + * Ensure that a UDC is able to support the number of endpoints within a USB > + * configuration, and that there are no resource limitations to support all > + * requested eps. > + * > + * Returns zero on success, else a negative errno. > + */ > +int usb_gadget_check_config(struct usb_gadget *gadget) > +{ > + int ret = 0; > + > + if (!gadget->ops->check_config) > + goto out; > + > + ret = gadget->ops->check_config(gadget); > + > +out: > + return ret; > +} > +EXPORT_SYMBOL_GPL(usb_gadget_check_config); This can be written in the much simpler form: { if (gadget->ops->check_config) return gadget->ops->check_config(gadget); return 0; } But where are the endpoints that need to be checked??? How is this working? thanks, greg k-h