Hi Ricardo,
Thank you for the patch.
On Tue, Dec 07, 2021 at 01:06:29AM +0100, Ricardo Ribalda wrote:
All the entities must have a unique name. We can have a descriptive and unique name by appending the function to their terminal link.
This is even resilient to multi chain devices.
Fixes v4l2-compliance: Media Controller ioctls: fail: v4l2-test-media.cpp(205): v2_entity_names_set.find(key) != v2_entity_names_set.end() test MEDIA_IOC_G_TOPOLOGY: FAIL fail: v4l2-test-media.cpp(394): num_data_links != num_links test MEDIA_IOC_ENUM_ENTITIES/LINKS: FAIL
Signed-off-by: Ricardo Ribalda ribalda@chromium.org
drivers/media/usb/uvc/uvc_driver.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 058d28a0344b..3700e61a8701 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -2194,6 +2194,7 @@ int uvc_register_video_device(struct uvc_device *dev, const struct v4l2_ioctl_ops *ioctl_ops) { int ret;
- const char *name;
Please swap those two lines.
/* Initialize the video buffers queue. */ ret = uvc_queue_init(queue, type, !uvc_no_drop_param); @@ -2221,17 +2222,29 @@ int uvc_register_video_device(struct uvc_device *dev, case V4L2_BUF_TYPE_VIDEO_CAPTURE: default: vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
break; case V4L2_BUF_TYPE_VIDEO_OUTPUT: vdev->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;name = "Video Capture";
break; case V4L2_BUF_TYPE_META_CAPTURE: vdev->device_caps = V4L2_CAP_META_CAPTURE | V4L2_CAP_STREAMING;name = "Video Output";
break; }name = "Metadata";
- /*
* Many userspace apps identify the device with vdev->name, so we
s/apps/applications/
* cannot change its name for its function.
strscpy(vdev->name, dev->name, sizeof(vdev->name));*/
+#if defined(CONFIG_MEDIA_CONTROLLER)
- vdev->entity.name = devm_kasprintf(&stream->intf->dev, GFP_KERNEL,
"%s %u", name, stream->header.bTerminalLink);
Won't the compiler warn about a set but unused variable when !CONFIG_MEDIA_CONTROLLER ?
+#endif
- /*
- Set the driver data before calling video_register_device, otherwise
- the file open() handler might race us.