From 017ed0820652106daa2a4c8d1846758c5d3073aa Mon Sep 17 00:00:00 2001 From: William Wu Date: Sat, 27 Jul 2019 16:56:55 +0800 Subject: [PATCH] usb: gadget: uvc: add a new attribute streaming_intf This patch adds a new uvc attribute "streaming_intf" to show the number of streaming interface. The uvc application program may needs to query the information. Change-Id: I4554e204ab4457f67f35d2e7bfec2902196f79d3 Signed-off-by: William Wu --- drivers/usb/gadget/function/f_uvc.c | 1 + drivers/usb/gadget/function/u_uvc.h | 1 + drivers/usb/gadget/function/uvc_configfs.c | 11 +++++++++++ 3 files changed, 13 insertions(+) diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c index 843e78c9e374..0acf8efb10e6 100644 --- a/drivers/usb/gadget/function/f_uvc.c +++ b/drivers/usb/gadget/function/f_uvc.c @@ -913,6 +913,7 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f) } uvc->streaming_intf = ret; + opts->streaming_intf = ret; /* Copy descriptors */ f->fs_descriptors = uvc_copy_descriptors(uvc, USB_SPEED_FULL); diff --git a/drivers/usb/gadget/function/u_uvc.h b/drivers/usb/gadget/function/u_uvc.h index fea15c9cbf73..d50630ce4bc7 100644 --- a/drivers/usb/gadget/function/u_uvc.h +++ b/drivers/usb/gadget/function/u_uvc.h @@ -26,6 +26,7 @@ struct f_uvc_opts { unsigned int streaming_interval; unsigned int streaming_maxpacket; unsigned int streaming_maxburst; + unsigned int streaming_intf; /* * Control descriptors array pointers for full-/high-speed and diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c index 9920133c2b2c..705840ac83d7 100644 --- a/drivers/usb/gadget/function/uvc_configfs.c +++ b/drivers/usb/gadget/function/uvc_configfs.c @@ -2204,9 +2204,20 @@ UVCG_OPTS_ATTR(streaming_maxburst, streaming_maxburst, identity_conv, #undef UVCG_OPTS_ATTR +static ssize_t f_uvc_opts_streaming_intf_show(struct config_item *item, + char *page) +{ + struct f_uvc_opts *opts = to_f_uvc_opts(item); + + return sprintf(page, "%d\n", opts->streaming_intf); +} + +UVC_ATTR_RO(f_uvc_opts_, streaming_intf, streaming_intf); + static struct configfs_attribute *uvc_attrs[] = { &f_uvc_opts_attr_streaming_bulk, &f_uvc_opts_attr_streaming_interval, + &f_uvc_opts_attr_streaming_intf, &f_uvc_opts_attr_streaming_maxpacket, &f_uvc_opts_attr_streaming_maxburst, NULL,