Re: [PATCH v2] usb: gadget: uvc: allow changing interface name via configfs

From: Dan Vacura
Date: Mon Apr 04 2022 - 18:35:10 EST


On Sat, Apr 02, 2022 at 12:24:23PM +0100, John Keeping wrote:
> On Fri, Apr 01, 2022 at 11:04:45AM -0500, Dan Vacura wrote:
> > Add a configfs entry, "function_name", to change the iInterface field
> > for VideoControl. This name is used on host devices for user selection,
> > useful when multiple cameras are present. The default will remain "UVC
> > Camera".
>
> > diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c
> > index 71bb5e477dba..50e6e7a58b41 100644
> > --- a/drivers/usb/gadget/function/f_uvc.c
> > +++ b/drivers/usb/gadget/function/f_uvc.c
> > @@ -44,7 +44,7 @@ MODULE_PARM_DESC(trace, "Trace level bitmask");
> > #define UVC_STRING_STREAMING_IDX 1
> >
> > static struct usb_string uvc_en_us_strings[] = {
> > - [UVC_STRING_CONTROL_IDX].s = "UVC Camera",
> > + /* [UVC_STRING_CONTROL_IDX].s = DYNAMIC, */
> > [UVC_STRING_STREAMING_IDX].s = "Video Streaming",
> > { }
> > };
> > @@ -676,6 +676,7 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f)
> > uvc_hs_streaming_ep.bEndpointAddress = uvc->video.ep->address;
> > uvc_ss_streaming_ep.bEndpointAddress = uvc->video.ep->address;
> >
> > + uvc_en_us_strings[UVC_STRING_CONTROL_IDX].s = opts->function_name;
> > us = usb_gstrings_attach(cdev, uvc_function_strings,
> > ARRAY_SIZE(uvc_en_us_strings));
> > if (IS_ERR(us)) {
> > @@ -866,6 +867,7 @@ static struct usb_function_instance *uvc_alloc_inst(void)
> >
> > opts->streaming_interval = 1;
> > opts->streaming_maxpacket = 1024;
> > + snprintf(opts->function_name, sizeof(opts->function_name), "UVC Camera");
>
> This only allows a single language to be specified. I know that's what
> the existing string uses, but for other strings which can be set by
> userspace multiple languages are supported.
>
> Should we be making USB_CONFIG_STRINGS_LANG more generic so that it can
> be used by functions as well as the core configfs code?

Agree that adding support for more than one language would be ideal.
Looking through the gadget functions, most seem to be hardcoded to en-us
locale and don't provide a way to change the exposed names. Recently
this was just accepted, which I modeled my change after:
https://lore.kernel.org/all/20220122112446.1415547-2-t123yh.xyz@xxxxxxxxx/
so at least making USB_CONFIG_STRINGS_LANG more generic would benefit
the uac and uvc gadgets.