]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: uvcvideo: Move MSXU_CONTROL_METADATA definition to header
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 15 Jul 2025 18:52:54 +0000 (21:52 +0300)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Sat, 13 Sep 2025 16:34:59 +0000 (18:34 +0200)
Move the MSXU_CONTROL_METADATA control definitino to the
include/linux/usb/uvc.h header, alongside the corresponding XU GUID. Add
a UVC_ prefix to avoid namespace clashes.

While at it, add the definition for the other controls for that
extension unit, as defined in
https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-extensions-1-5#222-extension-unit-controls.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
Reviewed-by: Hans de Goede <hansg@kernel.org>
Signed-off-by: Hans de Goede <hansg@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/usb/uvc/uvc_metadata.c
include/linux/usb/uvc.h

index 7368400734a365feb385e933c96b5a05a8eaab9e..b35111d08759b389629691c6a2e4c9961d0d89b7 100644 (file)
@@ -171,7 +171,6 @@ static struct uvc_entity *uvc_meta_find_msxu(struct uvc_device *dev)
        return NULL;
 }
 
-#define MSXU_CONTROL_METADATA 0x9
 static int uvc_meta_detect_msxu(struct uvc_device *dev)
 {
        u32 *data __free(kfree) = NULL;
@@ -195,7 +194,7 @@ static int uvc_meta_detect_msxu(struct uvc_device *dev)
         * returns metadata.
         */
        ret = uvc_query_ctrl(dev, UVC_GET_CUR, entity->id, dev->intfnum,
-                            MSXU_CONTROL_METADATA, data, sizeof(*data));
+                            UVC_MSXU_CONTROL_METADATA, data, sizeof(*data));
        if (ret)
                return 0;
 
@@ -205,23 +204,23 @@ static int uvc_meta_detect_msxu(struct uvc_device *dev)
        }
 
        /*
-        * Set the value of MSXU_CONTROL_METADATA to the value reported by
+        * Set the value of UVC_MSXU_CONTROL_METADATA to the value reported by
         * GET_MAX to enable production of MSXU metadata. The GET_MAX request
         * reports the maximum size of the metadata, if its value is 0 then MSXU
         * metadata is not supported. For more information, see
         * https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-extensions-1-5#2229-metadata-control
         */
        ret = uvc_query_ctrl(dev, UVC_GET_MAX, entity->id, dev->intfnum,
-                            MSXU_CONTROL_METADATA, data, sizeof(*data));
+                            UVC_MSXU_CONTROL_METADATA, data, sizeof(*data));
        if (ret || !*data)
                return 0;
 
        /*
-        * If we can set MSXU_CONTROL_METADATA, the device will report
+        * If we can set UVC_MSXU_CONTROL_METADATA, the device will report
         * metadata.
         */
        ret = uvc_query_ctrl(dev, UVC_SET_CUR, entity->id, dev->intfnum,
-                            MSXU_CONTROL_METADATA, data, sizeof(*data));
+                            UVC_MSXU_CONTROL_METADATA, data, sizeof(*data));
        if (!ret)
                dev->quirks |= UVC_QUIRK_MSXU_META;
 
index ee19e9f915b8370c333c426dc1ee4202c7b75c5b..12a57e1d34674a3a264ed7f88bed43926661fcd4 100644 (file)
        {0xdc, 0x95, 0x3f, 0x0f, 0x32, 0x26, 0x4e, 0x4c, \
         0x92, 0xc9, 0xa0, 0x47, 0x82, 0xf4, 0x3b, 0xc8}
 
+/* https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-extensions-1-5#222-extension-unit-controls */
+#define UVC_MSXU_CONTROL_FOCUS                 0x01
+#define UVC_MSXU_CONTROL_EXPOSURE              0x02
+#define UVC_MSXU_CONTROL_EVCOMPENSATION                0x03
+#define UVC_MSXU_CONTROL_WHITEBALANCE          0x04
+#define UVC_MSXU_CONTROL_FACE_AUTHENTICATION   0x06
+#define UVC_MSXU_CONTROL_CAMERA_EXTRINSICS     0x07
+#define UVC_MSXU_CONTROL_CAMERA_INTRINSICS     0x08
+#define UVC_MSXU_CONTROL_METADATA              0x09
+#define UVC_MSXU_CONTROL_IR_TORCH              0x0a
+#define UVC_MSXU_CONTROL_DIGITALWINDOW         0x0b
+#define UVC_MSXU_CONTROL_DIGITALWINDOW_CONFIG  0x0c
+#define UVC_MSXU_CONTROL_VIDEO_HDR             0x0d
+#define UVC_MSXU_CONTROL_FRAMERATE_THROTTLE    0x0e
+#define UVC_MSXU_CONTROL_FIELDOFVIEW2_CONFIG   0x0f
+#define UVC_MSXU_CONTROL_FIELDOFVIEW2          0x10
+
 #define UVC_GUID_FORMAT_MJPEG \
        { 'M',  'J',  'P',  'G', 0x00, 0x00, 0x10, 0x00, \
         0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}