On Tue Jul 15 21:52:54 2025 +0300, Laurent Pinchart wrote:
> 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 <[email protected]>
> Reviewed-by: Ricardo Ribalda <[email protected]>
> Reviewed-by: Hans de Goede <[email protected]>
> Signed-off-by: Hans de Goede <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/usb/uvc/uvc_metadata.c | 11 +++++------
 include/linux/usb/uvc.h              | 17 +++++++++++++++++
 2 files changed, 22 insertions(+), 6 deletions(-)

---

diff --git a/drivers/media/usb/uvc/uvc_metadata.c 
b/drivers/media/usb/uvc/uvc_metadata.c
index 7368400734a3..b35111d08759 100644
--- a/drivers/media/usb/uvc/uvc_metadata.c
+++ b/drivers/media/usb/uvc/uvc_metadata.c
@@ -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;
 
diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
index ee19e9f915b8..12a57e1d3467 100644
--- a/include/linux/usb/uvc.h
+++ b/include/linux/usb/uvc.h
@@ -33,6 +33,23 @@
        {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}

Reply via email to