Thread (65 messages) 65 messages, 8 authors, 2025-09-08

Re: [PATCH v2 12/12] media: uvcvideo: Do not create MC entities for virtual entities

From: Ricardo Ribalda <hidden>
Date: 2025-07-01 11:20:31
Also in: linux-acpi, linux-gpio, linux-media, linux-usb, lkml

Hi Laurent and Hans


On Sun, 29 Jun 2025 at 20:06, Laurent Pinchart
[off-list ref] wrote:
Hi Ricardo,

Thank you for the patch.

I would use "software entities" and not "virtual entities" in the
subject line and everywhere else, as those entities are not virtual.

On Thu, Jun 05, 2025 at 05:53:05PM +0000, Ricardo Ribalda wrote:
quoted
Neither the GPIO nor the SWENTITY entities form part of the device
pipeline. We just create them to hold emulated uvc controls.

When the device initializes, a warning is thrown by the v4l2 core:
uvcvideo 1-1:1.0: Entity type for entity SWENTITY was not initialized!

There are no entity function that matches what we are doing here, and
it does not make to much sense to create a function for entities that
do not really exist.
I don't agree with this. The purpose of reporting entities to userspace
through the MC API is to let application enumerate what entities a
device contains. Being able to enumerate software entities seems as
useful as being able to enumerate hardware entities.
What function shall we use in this case? Nothing here seems to match a
software entity
https://www.kernel.org/doc/html/latest/userspace-api/media/mediactl/media-types.html

Any suggestion for name?
Shall we just live with the warning in dmesg?
quoted
Do not create MC entities for them and pretend nothing happened here.

Signed-off-by: Ricardo Ribalda <redacted>
---
 drivers/media/usb/uvc/uvc_entity.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
index d1a652ef35ec34801bd39a5124b834edf838a79e..2dbeb4ab0c4c8cc763ff2dcd2d836a50f3c6a040 100644
--- a/drivers/media/usb/uvc/uvc_entity.c
+++ b/drivers/media/usb/uvc/uvc_entity.c
@@ -72,6 +72,16 @@ static int uvc_mc_init_entity(struct uvc_video_chain *chain,
 {
      int ret;

+     /*
+      * Do not initialize virtual entities, they do not really exist
+      * and are not connected to any other entities.
+      */
+     switch (UVC_ENTITY_TYPE(entity)) {
+     case UVC_EXT_GPIO_UNIT:
+     case UVC_SWENTITY_UNIT:
+             return 0;
+     }
+
      if (UVC_ENTITY_TYPE(entity) != UVC_TT_STREAMING) {
              u32 function;
--
Regards,

Laurent Pinchart


-- 
Ricardo Ribalda
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help