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.
319 lines
12 KiB
319 lines
12 KiB
From af04383d9816d971c7f11d99ab6e96fd946c4f22 Mon Sep 17 00:00:00 2001
|
|
From: Evgeni Raikhel <evgeni.raikhel@intel.com>
|
|
From: Elad Zucker <eladx.zucker@intel.com>
|
|
From: icarpis <itay.carpis@intel.com>
|
|
From: Guennadi Liakhovetski <guennadi.liakhovetski@intel.com>
|
|
Date: Tue, 14 Aug 2018 15:51:51 +0300
|
|
Subject: [PATCH] D4M metadata enablement w/metanode kernel 4.16
|
|
Enabling UVC Metadata D4M format according to a
|
|
pending patch https://patchwork.kernel.org/patch/10131589/
|
|
Also extending it to additoinal SKUs.
|
|
This patchs drops the documentation chapter as unnecessary
|
|
|
|
---
|
|
drivers/media/usb/uvc/uvc_driver.c | 146 +++++++++++++++++++++++++++++++++++++
|
|
drivers/media/usb/uvc/uvcvideo.h | 2 +-
|
|
include/uapi/linux/videodev2.h | 1 +
|
|
3 files changed, 139 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
|
|
index fd387bf..3219519 100644
|
|
--- a/drivers/media/usb/uvc/uvc_driver.c
|
|
+++ b/drivers/media/usb/uvc/uvc_driver.c
|
|
@@ -2346,6 +2346,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
|
|
@@ -2819,6 +2821,258 @@ static const struct usb_device_id uvc_ids[] = {
|
|
.bInterfaceSubClass = 1,
|
|
.bInterfaceProtocol = 0,
|
|
.driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* Intel D410/USB2 Depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b15,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
|
+ /* Intel D415/USB2 Depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b16,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
|
+ /* Intel D435/USB2 Depth camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b17,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = 0,
|
|
+ .driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
+ /* 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_APPEND_UVC_HEADER },
|
|
/* 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 d9e7c70..8470b7f 100644
|
|
--- a/drivers/media/usb/uvc/uvcvideo.h
|
|
+++ b/drivers/media/usb/uvc/uvcvideo.h
|
|
@@ -170,7 +170,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 9827189..d947f9a 100644
|
|
--- a/include/uapi/linux/videodev2.h
|
|
+++ b/include/uapi/linux/videodev2.h
|
|
@@ -695,6 +695,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.7.4
|
|
|