diff mbox series

usb: gadget: f_fs: expose ready state in configfs

Message ID 20240118121816.3992645-1-peter@korsgaard.com (mailing list archive)
State Superseded
Headers show
Series usb: gadget: f_fs: expose ready state in configfs | expand

Commit Message

Peter Korsgaard Jan. 18, 2024, 12:18 p.m. UTC
When a USB gadget is configured through configfs with 1 or more f_fs
functions, then the logic setting up the gadget configuration has to wait
until the user space code (typically separate applications) responsible for
those functions have written their descriptors before the gadget can be
activated.

The f_fs instance already knows if this has been done, so expose it through
a "ready" attribute in configfs for easier synchronization.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
---
 drivers/usb/gadget/function/f_fs.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

Comments

Greg KH Jan. 18, 2024, 12:28 p.m. UTC | #1
On Thu, Jan 18, 2024 at 01:18:16PM +0100, Peter Korsgaard wrote:
> When a USB gadget is configured through configfs with 1 or more f_fs
> functions, then the logic setting up the gadget configuration has to wait
> until the user space code (typically separate applications) responsible for
> those functions have written their descriptors before the gadget can be
> activated.
> 
> The f_fs instance already knows if this has been done, so expose it through
> a "ready" attribute in configfs for easier synchronization.
> 
> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
> ---
>  drivers/usb/gadget/function/f_fs.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
> index fdd0fc7b8f25..ae44dd5f3a94 100644
> --- a/drivers/usb/gadget/function/f_fs.c
> +++ b/drivers/usb/gadget/function/f_fs.c
> @@ -3446,6 +3446,20 @@ static inline struct f_fs_opts *to_ffs_opts(struct config_item *item)
>  			    func_inst.group);
>  }
>  
> +static ssize_t f_fs_opts_ready_show(struct config_item *item, char *page)
> +{
> +	struct f_fs_opts *opts = to_ffs_opts(item);
> +
> +	return sprintf(page, "%d\n", opts->dev->desc_ready);
> +}
> +
> +CONFIGFS_ATTR_RO(f_fs_opts_, ready);
> +
> +static struct configfs_attribute *ffs_attrs[] = {
> +	&f_fs_opts_attr_ready,
> +	NULL,
> +};

No documentation entry for this new attribute?

thanks,

greg k-h
Peter Korsgaard Jan. 18, 2024, 12:43 p.m. UTC | #2
>>>>> "Greg" == Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:

 > On Thu, Jan 18, 2024 at 01:18:16PM +0100, Peter Korsgaard wrote:
 >> When a USB gadget is configured through configfs with 1 or more f_fs
 >> functions, then the logic setting up the gadget configuration has to wait
 >> until the user space code (typically separate applications) responsible for
 >> those functions have written their descriptors before the gadget can be
 >> activated.
 >> 
 >> The f_fs instance already knows if this has been done, so expose it through
 >> a "ready" attribute in configfs for easier synchronization.
 >> 
 >> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
 >> ---
 >> drivers/usb/gadget/function/f_fs.c | 15 +++++++++++++++
 >> 1 file changed, 15 insertions(+)
 >> 
 >> diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
 >> index fdd0fc7b8f25..ae44dd5f3a94 100644
 >> --- a/drivers/usb/gadget/function/f_fs.c
 >> +++ b/drivers/usb/gadget/function/f_fs.c
 >> @@ -3446,6 +3446,20 @@ static inline struct f_fs_opts *to_ffs_opts(struct config_item *item)
 >> func_inst.group);
 >> }
 >> 
 >> +static ssize_t f_fs_opts_ready_show(struct config_item *item, char *page)
 >> +{
 >> +	struct f_fs_opts *opts = to_ffs_opts(item);
 >> +
 >> +	return sprintf(page, "%d\n", opts->dev->desc_ready);
 >> +}
 >> +
 >> +CONFIGFS_ATTR_RO(f_fs_opts_, ready);
 >> +
 >> +static struct configfs_attribute *ffs_attrs[] = {
 >> +	&f_fs_opts_attr_ready,
 >> +	NULL,
 >> +};

 > No documentation entry for this new attribute?

Ups, I'll add a snippet to Documentation/usb/gadget-testing.rst and send
a v2.
diff mbox series

Patch

diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index fdd0fc7b8f25..ae44dd5f3a94 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -3446,6 +3446,20 @@  static inline struct f_fs_opts *to_ffs_opts(struct config_item *item)
 			    func_inst.group);
 }
 
+static ssize_t f_fs_opts_ready_show(struct config_item *item, char *page)
+{
+	struct f_fs_opts *opts = to_ffs_opts(item);
+
+	return sprintf(page, "%d\n", opts->dev->desc_ready);
+}
+
+CONFIGFS_ATTR_RO(f_fs_opts_, ready);
+
+static struct configfs_attribute *ffs_attrs[] = {
+	&f_fs_opts_attr_ready,
+	NULL,
+};
+
 static void ffs_attr_release(struct config_item *item)
 {
 	struct f_fs_opts *opts = to_ffs_opts(item);
@@ -3459,6 +3473,7 @@  static struct configfs_item_operations ffs_item_ops = {
 
 static const struct config_item_type ffs_func_type = {
 	.ct_item_ops	= &ffs_item_ops,
+	.ct_attrs	= ffs_attrs,
 	.ct_owner	= THIS_MODULE,
 };