[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YN6dY8RBXRN4BW3n@kroah.com>
Date: Fri, 2 Jul 2021 07:00:19 +0200
From: Greg KH <gregkh@...uxfoundation.org>
To: Wesley Cheng <wcheng@...eaurora.org>
Cc: robh+dt@...nel.org, agross@...nel.org, bjorn.andersson@...aro.org,
balbi@...nel.org, linux-usb@...r.kernel.org,
devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-arm-msm@...r.kernel.org, jackp@...eaurora.org,
fntoth@...il.com
Subject: Re: [PATCH v11 1/5] usb: gadget: udc: core: Introduce check_config
to verify USB configuration
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@...eaurora.org>
> ---
> 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
Powered by blists - more mailing lists