From 7ce0db0177297572d4e7a1bf4503b6eedabd7835 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 0ef3bb695619..da9163f2435d 100644 --- a/drivers/usb/gadget/function/f_uvc.c +++ b/drivers/usb/gadget/function/f_uvc.c @@ -896,6 +896,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 35e03eb75abd..241422bd112b 100644 --- a/drivers/usb/gadget/function/u_uvc.h +++ b/drivers/usb/gadget/function/u_uvc.h @@ -29,6 +29,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 997650739655..ee52886f797c 100644 --- a/drivers/usb/gadget/function/uvc_configfs.c +++ b/drivers/usb/gadget/function/uvc_configfs.c @@ -2266,9 +2266,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,