You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
311 lines
12 KiB
311 lines
12 KiB
Signed-off-by: Evgeni <evgeni.raikhel@intel.com>
|
|
From 90588aff339a66dde0462042729692b8fa44373e Mon Sep 17 00:00:00 2001
|
|
From: Evgeni Raikhel <evgeni.raikhel@intel.com>
|
|
Date: Sat, 20 Jun 2020 14:55:57 +0300
|
|
Subject: [PATCH] Enabling UVC Metadata attributes with Ubuntu 18.04. Kernel 5.18
|
|
---
|
|
drivers/media/usb/uvc/uvc_driver.c | 236 +++++++++++++++++++++++++++++
|
|
drivers/media/usb/uvc/uvcvideo.h | 2 +-
|
|
include/uapi/linux/videodev2.h | 1 +
|
|
3 files changed, 238 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
|
|
index d74c9a2d3b0b..ae9f847c061d 100644
|
|
--- a/drivers/media/usb/uvc/uvc_driver.c
|
|
+++ b/drivers/media/usb/uvc/uvc_driver.c
|
|
@@ -2397,6 +2397,8 @@ static const struct uvc_device_info uvc_quirk_force_y8 = {
|
|
};
|
|
|
|
#define UVC_QUIRK_INFO(q) (kernel_ulong_t)&(struct uvc_device_info){.quirks = q}
|
|
+#define UVC_QUIRK_META(m) (kernel_ulong_t)&(struct uvc_device_info) \
|
|
+ {.meta_format = m}
|
|
|
|
/*
|
|
* The Logitech cameras listed below have their interface class set to
|
|
@@ -2870,6 +2872,258 @@ static const struct usb_device_id uvc_ids[] = {
|
|
.bInterfaceSubClass = 1,
|
|
.bInterfaceProtocol = 0,
|
|
.driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 },
|
|
+ /* Intel SR306 depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0aa3,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel SR300 depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0aa5,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D400/PSR depth camera*/
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0ad1,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D410/ASR depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0ad2,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D415/ASRC depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0ad3,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D430/AWG depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0ad4,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D450/AWGT depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0ad5,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* USB2 Descriptor, Depth Sensor */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0ad6,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D400 IMU Module */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0af2,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D420/PWG depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0af6,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D420_MM/PWGT depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0afe,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D410_MM/ASRT depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0aff,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D400_MM/PSRT depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b00,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D430_MM/AWGCT depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b01,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D460/DS5U depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b03,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D435/AWGC depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b07,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D405 S depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b0c,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel L500 depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b0d,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D435i depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b3a,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel L515 Pre-PRQ */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b3d,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel SR305 Depth Camera*/
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b48,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D416 Depth Camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b49,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D430i depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b4b,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D465 */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b4d,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D405 */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b5b,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D455 */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b5c,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel L515 */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b64,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel L535 */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b68,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_META(V4L2_META_FMT_D4XX) },
|
|
/* Generic USB Video Class */
|
|
{ USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_UNDEFINED) },
|
|
{ USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_15) },
|
|
diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
|
|
index 3edb18288ab9..c86e44543b62 100644
|
|
--- a/drivers/media/usb/uvc/uvcvideo.h
|
|
+++ b/drivers/media/usb/uvc/uvcvideo.h
|
|
@@ -204,7 +204,7 @@
|
|
/* Maximum number of packets per URB. */
|
|
#define UVC_MAX_PACKETS 32
|
|
/* Maximum status buffer size in bytes of interrupt URB. */
|
|
-#define UVC_MAX_STATUS_SIZE 16
|
|
+#define UVC_MAX_STATUS_SIZE 32
|
|
|
|
#define UVC_CTRL_CONTROL_TIMEOUT 500
|
|
#define UVC_CTRL_STREAMING_TIMEOUT 5000
|
|
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
|
|
index 3a6656d8abc1..bc2b184eee8a 100644
|
|
--- a/include/uapi/linux/videodev2.h
|
|
+++ b/include/uapi/linux/videodev2.h
|
|
@@ -715,6 +715,7 @@ struct v4l2_pix_format {
|
|
#define V4L2_META_FMT_VSP1_HGO v4l2_fourcc('V', 'S', 'P', 'H') /* R-Car VSP1 1-D Histogram */
|
|
#define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */
|
|
#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
|
|
+#define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
|
|
|
|
/* priv field value to indicates that subsequent fields are valid. */
|
|
#define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
|
|
--
|
|
2.17.1
|