Linux Media Controller development
 help / color / mirror / Atom feed
* [PATCH] media: uvcvideo: Override default flags
@ 2024-06-02  6:50 Daniel Schaefer
  2024-06-03 11:49 ` Ricardo Ribalda
  0 siblings, 1 reply; 4+ messages in thread
From: Daniel Schaefer @ 2024-06-02  6:50 UTC (permalink / raw)
  To: linux-media
  Cc: Daniel Schaefer, Edgar Thier, Kieran Bingham,
	Mauro Carvalho Chehab, Laurent Pinchart, Kieran Levin

When the UVC device has a control that is readonly it doesn't set the
SET_CUR flag. For example the privacy control has SET_CUR flag set in
the defaults in the `uvc_ctrls` variable. Even if the device does not
have it set, it's not cleared by uvc_ctrl_get_flags.

Originally written with assignment in commit 859086ae3636 ("media:
uvcvideo: Apply flags from device to actual properties"). But changed to
|= in commit 0dc68cabdb62 ("media: uvcvideo: Prevent setting unavailable
flags"). It would not clear the default flags.

With this patch applied the correct flags are reported to user space.
Tested with:

```
> v4l2-ctl --list-ctrls | grep privacy
privacy 0x009a0910 (bool)   : default=0 value=0 flags=read-only
```

Cc: Edgar Thier <info@edgarthier.net>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Kieran Levin <ktl@frame.work>
Signed-off-by: Daniel Schaefer <dhs@frame.work>
---
 drivers/media/usb/uvc/uvc_ctrl.c | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 4b685f883e4d..f50542e26542 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -2031,15 +2031,23 @@ static int uvc_ctrl_get_flags(struct uvc_device *dev,
 	else
 		ret = uvc_query_ctrl(dev, UVC_GET_INFO, ctrl->entity->id,
 				     dev->intfnum, info->selector, data, 1);
-	if (!ret)
-		info->flags |= (data[0] & UVC_CONTROL_CAP_GET ?
-				UVC_CTRL_FLAG_GET_CUR : 0)
-			    |  (data[0] & UVC_CONTROL_CAP_SET ?
-				UVC_CTRL_FLAG_SET_CUR : 0)
-			    |  (data[0] & UVC_CONTROL_CAP_AUTOUPDATE ?
-				UVC_CTRL_FLAG_AUTO_UPDATE : 0)
-			    |  (data[0] & UVC_CONTROL_CAP_ASYNCHRONOUS ?
-				UVC_CTRL_FLAG_ASYNCHRONOUS : 0);
+	if (!ret) {
+		info->flags = (data[0] & UVC_CONTROL_CAP_GET)
+			? (info->flags | UVC_CTRL_FLAG_GET_CUR)
+			: (info->flags & ~UVC_CTRL_FLAG_GET_CUR);
+
+		info->flags = (data[0] & UVC_CONTROL_CAP_SET)
+			? (info->flags | UVC_CTRL_FLAG_SET_CUR)
+			: (info->flags & ~UVC_CTRL_FLAG_SET_CUR);
+
+		info->flags = (data[0] & UVC_CONTROL_CAP_AUTOUPDATE)
+			? (info->flags | UVC_CTRL_FLAG_AUTO_UPDATE)
+			: (info->flags & ~UVC_CTRL_FLAG_AUTO_UPDATE);
+
+		info->flags = (data[0] & UVC_CONTROL_CAP_ASYNCHRONOUS)
+			? (info->flags | UVC_CTRL_FLAG_ASYNCHRONOUS)
+			: (info->flags & ~UVC_CTRL_FLAG_ASYNCHRONOUS);
+	}
 
 	kfree(data);
 	return ret;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-06-16 23:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-02  6:50 [PATCH] media: uvcvideo: Override default flags Daniel Schaefer
2024-06-03 11:49 ` Ricardo Ribalda
2024-06-05  7:12   ` Daniel Schaefer
2024-06-16 23:20   ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox