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.
297 lines
11 KiB
297 lines
11 KiB
2 months ago
|
From 6a837242353bf4f8d3ee19e6ff06983f345a7412 Mon Sep 17 00:00:00 2001
|
||
|
From: Elad Zucker <eladx.zucker@intel.com>
|
||
|
From: icarpis <itay.carpis@intel.com>
|
||
|
From: aangerma <Avishag.Angerman@intel.com>
|
||
|
Date: Thu, 30 Aug 2018 16:07:01 +0300
|
||
|
Subject: [PATCH] added support for uvc metadata
|
||
|
|
||
|
Signed-off-by: Evgeni Raikhel <evgeni.raikhel@intel.com>
|
||
|
From d6bfb1314cd53b9af8933add25b0ce60c4a974d4 Mon Sep 17 00:00:00 2001
|
||
|
From: Evgeni Raikhel <ev_mp@yahoo.com>
|
||
|
Date: Fri, 12 Feb 2021 19:25:25 +0200
|
||
|
Subject: [PATCH] LRS Patch2
|
||
|
|
||
|
---
|
||
|
drivers/media/usb/uvc/uvc_driver.c | 116 +++++++++++++++++++++++------
|
||
|
drivers/media/usb/uvc/uvc_video.c | 4 +
|
||
|
2 files changed, 98 insertions(+), 22 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
|
||
|
index ef5c2679d1d1..4516591066c4 100644
|
||
|
--- a/drivers/media/usb/uvc/uvc_driver.c
|
||
|
+++ b/drivers/media/usb/uvc/uvc_driver.c
|
||
|
@@ -2868,6 +2868,24 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = 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_APPEND_UVC_HEADER },
|
||
|
+ /* 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,
|
||
|
@@ -2877,7 +2886,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D410/ASR depth camera */
|
||
|
+ /* Intel D410/ASR depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2886,7 +2895,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D415/ASRC depth camera */
|
||
|
+ /* Intel D415/ASRC depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2895,7 +2904,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D430/AWG depth camera */
|
||
|
+ /* Intel D430/AWG depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2913,7 +2922,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D400 IMU Module */
|
||
|
+ /* Intel D400 IMU Module */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2940,7 +2949,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D410_MM/ASRT depth camera */
|
||
|
+ /* Intel D410_MM/ASRT depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2949,7 +2958,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D400_MM/PSRT depth camera */
|
||
|
+ /* Intel D400_MM/PSRT depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2958,7 +2967,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D430_MM/AWGCT depth camera */
|
||
|
+ /* Intel D430_MM/AWGCT depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2967,7 +2976,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D460/DS5U depth camera */
|
||
|
+ /* Intel D460/DS5U depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2976,7 +2985,7 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D435/AWGC depth camera */
|
||
|
+ /* Intel D435/AWGC depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
@@ -2985,34 +2994,52 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel SR300 depth camera */
|
||
|
+ /* Intel D405 S depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
- .idProduct = 0x0aa5,
|
||
|
+ .idProduct = 0x0b0c,
|
||
|
.bInterfaceClass = USB_CLASS_VIDEO,
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D405 S depth camera */
|
||
|
+ /* Intel L500 depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
- .idProduct = 0x0b0c,
|
||
|
+ .idProduct = 0x0b0d,
|
||
|
.bInterfaceClass = USB_CLASS_VIDEO,
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel L500 depth camera */
|
||
|
+ /* Intel D410/USB2 Depth camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
- .idProduct = 0x0b0d,
|
||
|
+ .idProduct = 0x0b15,
|
||
|
.bInterfaceClass = USB_CLASS_VIDEO,
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D435i depth camera */
|
||
|
+ /* 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,
|
||
|
@@ -3021,29 +3048,83 @@ static struct usb_device_id uvc_ids[] = {
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D410/USB2 Depth camera */
|
||
|
+ /* Intel L515 Pre-PRQ*/
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
- .idProduct = 0x0b15,
|
||
|
+ .idProduct = 0x0b3d,
|
||
|
.bInterfaceClass = USB_CLASS_VIDEO,
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D415/USB2 Depth camera */
|
||
|
+ /* Intel SR305 Depth Camera*/
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
- .idProduct = 0x0b16,
|
||
|
+ .idProduct = 0x0b48,
|
||
|
.bInterfaceClass = USB_CLASS_VIDEO,
|
||
|
.bInterfaceSubClass = 1,
|
||
|
.bInterfaceProtocol = 0,
|
||
|
.driver_info = UVC_QUIRK_APPEND_UVC_HEADER },
|
||
|
- /* Intel D435/USB2 Depth camera */
|
||
|
+ /* Intel D416 Depth Camera */
|
||
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
||
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||
|
.idVendor = 0x8086,
|
||
|
- .idProduct = 0x0b17,
|
||
|
+ .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 },
|
||
|
+ /* 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,
|
||
|
diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
|
||
|
index 3e47bbff3088..8a16632c4f7c 100644
|
||
|
--- a/drivers/media/usb/uvc/uvc_video.c
|
||
|
+++ b/drivers/media/usb/uvc/uvc_video.c
|
||
|
@@ -1194,6 +1194,10 @@ static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream,
|
||
|
urb->iso_frame_desc[i].actual_length);
|
||
|
if (ret == -EAGAIN) {
|
||
|
uvc_video_validate_buffer(stream, buf);
|
||
|
+ if (stream->dev->quirks & UVC_QUIRK_APPEND_UVC_HEADER)
|
||
|
+ {
|
||
|
+ uvc_video_decode_data(stream, buf, stream->bulk.header,256);
|
||
|
+ }
|
||
|
buf = uvc_queue_next_buffer(&stream->queue,
|
||
|
buf);
|
||
|
}
|
||
|
--
|
||
|
2.17.1
|
||
|
|