Commit 1ab40529 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Hans Verkuil
Browse files

media: uvcvideo: Move MSXU_CONTROL_METADATA definition to header

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: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarRicardo Ribalda <ribalda@chromium.org>
Reviewed-by: default avatarHans de Goede <hansg@kernel.org>
Signed-off-by: default avatarHans de Goede <hansg@kernel.org>
Signed-off-by: default avatarHans Verkuil <hverkuil+cisco@kernel.org>
parent 50c320a5
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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;

+17 −0
Original line number Diff line number Diff line
@@ -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}