usb: gadget: uvc: Expose configuration name through video node
PATCH v2 1/1 usb: gadget: uvc: Expose configuration name through video node
Hi Kieran,
Thank you for the patch.
Quoted 10 lines · On Thursday, 24 May 2018 19:16:12 EEST Kieran Bingham wrote:
From: Kieran Bingham <[email protected]>
When utilising multiple instantiations of a UVC gadget on a composite device, there is no clear method to link a particular configuration to its respective video node.
Provide a means for identifying the correct video node by exposing the name of the function configuration through sysfs.
Signed-off-by Kieran Bingham <[email protected]>
Quoted 16 lines
---
v2:
- Fix commit title (f_uvc-> uvc)
- Change identifier file name (nowfunction_name)
- Document in ABI.../ABI/testing/configfs-usb-gadget-uvc | 5 ++++ drivers/usb/gadget/function/f_uvc.c | 24 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-)(quoted diff) +0
-0b/Documentation/ABI/testing/configfs-usb-gadget-uvc index
1ba0d0fda9c0..9281e2aa38df100644
Documentation/ABI/testing/configfs-usb-gadget-uvc Description: Specific streaming header descriptors · line 267
Quoted 5 lines
Documentation/ABI/testing/configfs-usb-gadget-uvc +2
-0@@ -263,3 +263,8 @@ Description: Specific streaming header descriptors is connected bmInfo - capabilities of this video streaming interface + +What: /sys/class/udc/udc.name/device/gadget/video4linux/video.name/
functio
Quoted 57 lines
n_name+Date: May 2018Documentation/ABI/testing/configfs-usb-gadget-uvc +2
-0+KernelVersion: 4.19 +Description: UVC configfs function instance name(quoted diff) +0
-0
b/drivers/usb/gadget/function/f_uvc.cindexd82cd61676d3..c8627cc698f8100644drivers/usb/gadget/function/f_uvc.c +23
-1@@ -421,10 +421,21 @@ uvc_function_disconnect(struct uvc_device *uvc)* USB probe and disconnect */ +static ssize_t function_name_show (struct device *dev, +struct device_attribute *attr,char *buf) +{ +struct uvc_device *uvc =dev_get_drvdata (dev); + +return sprintf (buf,"%s\n" , uvc->func.fi->group.cg_item.ci_name); +} + +static DEVICE_ATTR_RO (function_name); +static int uvc_register_video (struct uvc_device *uvc) {struct usb_composite_dev *cdev = uvc->func.config->cdev; +int ret;/* TODO reference counting. */ uvc->vdev.v4l2_dev = &uvc->v4l2_dev;@@ -437,7 +448,17 @@ uvc_register_video(struct uvc_device *uvc)video_set_drvdata (&uvc->vdev, uvc); -return video_register_device (&uvc->vdev,VFL_TYPE_GRABBER ,-1 ); + ret =video_register_device (&uvc->vdev,VFL_TYPE_GRABBER ,-1 ); +if (ret <0 ) +return ret; + + ret =device_create_file (&uvc->vdev.dev, &dev_attr_function_name); +if (ret <0 ) { +video_unregister_device (&uvc->vdev); +return ret; + } + +return 0 ; }#define UVC_COPY_DESCRIPTOR (mem, dst, desc) \@@ -877,6 +898,7 @@ static void uvc_unbind(struct usb_configuration *c, struct usb_function *f) INFO(cdev, "%s\n", __func__); +device_remove_file (&uvc->vdev.dev, &dev_attr_function_name);video_unregister_device (&uvc->vdev);v4l2_device_unregister (&uvc->v4l2_dev);