| From 5ae6b2faf3ce054e7cc7001442444772e54fb41d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 18 Jun 2021 14:29:13 +0200 |
| Subject: media: uvcvideo: Set unique vdev name based in type |
| |
| From: Ricardo Ribalda <ribalda@chromium.org> |
| |
| [ Upstream commit e3f60e7e1a2b451f538f9926763432249bcf39c4 ] |
| |
| All the entities must have a unique name. We can have a descriptive and |
| unique name by appending the function and the entity->id. |
| |
| This is even resilent 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> |
| Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> |
| Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/media/usb/uvc/uvc_driver.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c |
| index 40ca1d4e03483..378cfc46fc195 100644 |
| --- a/drivers/media/usb/uvc/uvc_driver.c |
| +++ b/drivers/media/usb/uvc/uvc_driver.c |
| @@ -1972,6 +1972,7 @@ int uvc_register_video_device(struct uvc_device *dev, |
| const struct v4l2_file_operations *fops, |
| const struct v4l2_ioctl_ops *ioctl_ops) |
| { |
| + const char *name; |
| int ret; |
| |
| /* Initialize the video buffers queue. */ |
| @@ -2000,16 +2001,20 @@ 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; |
| + name = "Video Capture"; |
| break; |
| case V4L2_BUF_TYPE_VIDEO_OUTPUT: |
| vdev->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING; |
| + name = "Video Output"; |
| break; |
| case V4L2_BUF_TYPE_META_CAPTURE: |
| vdev->device_caps = V4L2_CAP_META_CAPTURE | V4L2_CAP_STREAMING; |
| + name = "Metadata"; |
| break; |
| } |
| |
| - strscpy(vdev->name, dev->name, sizeof(vdev->name)); |
| + snprintf(vdev->name, sizeof(vdev->name), "%s %u", name, |
| + stream->header.bTerminalLink); |
| |
| /* |
| * Set the driver data before calling video_register_device, otherwise |
| -- |
| 2.33.0 |
| |