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.
155 lines
6.5 KiB
155 lines
6.5 KiB
From c22cccc6123bc487652ccaafdeb31fce5b45bdf2 Mon Sep 17 00:00:00 2001
|
|
From: Dmitry Perchanov <dmitry.perchanov@intel.com>
|
|
Date: Mon, 22 Jan 2024 14:48:48 +0200
|
|
Subject: [PATCH] RealSense support for kernel 6.5
|
|
|
|
Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com>
|
|
---
|
|
drivers/media/common/uvc.c | 20 ++++++++++++++++++++
|
|
drivers/media/usb/uvc/uvc_driver.c | 27 +++++++++++++++++++++++++++
|
|
drivers/media/v4l2-core/v4l2-ioctl.c | 3 +++
|
|
include/linux/usb/uvc.h | 15 +++++++++++++++
|
|
include/uapi/linux/videodev2.h | 3 +++
|
|
5 files changed, 68 insertions(+)
|
|
|
|
diff --git a/drivers/media/common/uvc.c b/drivers/media/common/uvc.c
|
|
index 9c0ba7a6c..a00b743cc 100644
|
|
--- a/drivers/media/common/uvc.c
|
|
+++ b/drivers/media/common/uvc.c
|
|
@@ -120,6 +120,10 @@ static const struct uvc_format_desc uvc_fmts[] = {
|
|
.guid = UVC_GUID_FORMAT_Y12I,
|
|
.fcc = V4L2_PIX_FMT_Y12I,
|
|
},
|
|
+ {
|
|
+ .guid = UVC_GUID_FORMAT_Y16I,
|
|
+ .fcc = V4L2_PIX_FMT_Y16I,
|
|
+ },
|
|
{
|
|
.guid = UVC_GUID_FORMAT_Z16,
|
|
.fcc = V4L2_PIX_FMT_Z16,
|
|
@@ -164,6 +168,22 @@ static const struct uvc_format_desc uvc_fmts[] = {
|
|
.guid = UVC_GUID_FORMAT_HEVC,
|
|
.fcc = V4L2_PIX_FMT_HEVC,
|
|
},
|
|
+ {
|
|
+ .guid = UVC_GUID_FORMAT_RAW8,
|
|
+ .fcc = V4L2_PIX_FMT_GREY,
|
|
+ },
|
|
+ {
|
|
+ .guid = UVC_GUID_FORMAT_RW16,
|
|
+ .fcc = V4L2_PIX_FMT_RW16,
|
|
+ },
|
|
+ {
|
|
+ .guid = UVC_GUID_FORMAT_D16,
|
|
+ .fcc = V4L2_PIX_FMT_Z16,
|
|
+ },
|
|
+ {
|
|
+ .guid = UVC_GUID_FORMAT_W10,
|
|
+ .fcc = V4L2_PIX_FMT_W10,
|
|
+ },
|
|
};
|
|
|
|
const struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16])
|
|
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
|
|
index 08fcd2ffa..0409f5bca 100644
|
|
--- a/drivers/media/usb/uvc/uvc_driver.c
|
|
+++ b/drivers/media/usb/uvc/uvc_driver.c
|
|
@@ -3084,6 +3084,15 @@ static const struct usb_device_id uvc_ids[] = {
|
|
.bInterfaceSubClass = 1,
|
|
.bInterfaceProtocol = 0,
|
|
.driver_info = UVC_INFO_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D555e Depth Camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b56,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = UVC_PC_PROTOCOL_15,
|
|
+ .driver_info = UVC_INFO_META(V4L2_META_FMT_D4XX) },
|
|
/* Intel D405 Depth Camera */
|
|
{ .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
| USB_DEVICE_ID_MATCH_INT_INFO,
|
|
@@ -3102,6 +3111,24 @@ static const struct usb_device_id uvc_ids[] = {
|
|
.bInterfaceSubClass = 1,
|
|
.bInterfaceProtocol = 0,
|
|
.driver_info = UVC_INFO_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel D585 Depth Camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b6a,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = UVC_PC_PROTOCOL_15,
|
|
+ .driver_info = UVC_INFO_META(V4L2_META_FMT_D4XX) },
|
|
+ /* Intel 585 Camera */
|
|
+ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
|
|
+ | USB_DEVICE_ID_MATCH_INT_INFO,
|
|
+ .idVendor = 0x8086,
|
|
+ .idProduct = 0x0b6b,
|
|
+ .bInterfaceClass = USB_CLASS_VIDEO,
|
|
+ .bInterfaceSubClass = 1,
|
|
+ .bInterfaceProtocol = UVC_PC_PROTOCOL_15,
|
|
+ .driver_info = UVC_INFO_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/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
|
|
index 01ba27f2e..fdb9b21b4 100644
|
|
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
|
|
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
|
|
@@ -1314,6 +1314,9 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
|
|
case V4L2_PIX_FMT_IPU3_Y10: descr = "10-bit greyscale (IPU3 Packed)"; break;
|
|
case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break;
|
|
case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break;
|
|
+ case V4L2_PIX_FMT_Y16I: descr = "Interleaved 16-bit Greyscale"; break;
|
|
+ case V4L2_PIX_FMT_RW16: descr = "16-bit Raw data"; break;
|
|
+ case V4L2_PIX_FMT_W10: descr = "10-bit packed 8888[2222]"; break;
|
|
case V4L2_PIX_FMT_Z16: descr = "16-bit Depth"; break;
|
|
case V4L2_PIX_FMT_INZI: descr = "Planar 10:16 Greyscale Depth"; break;
|
|
case V4L2_PIX_FMT_CNF4: descr = "4-bit Depth Confidence (Packed)"; break;
|
|
diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
|
|
index 88d96095b..11456a014 100644
|
|
--- a/include/linux/usb/uvc.h
|
|
+++ b/include/linux/usb/uvc.h
|
|
@@ -118,6 +118,21 @@
|
|
#define UVC_GUID_FORMAT_Y12I \
|
|
{ 'Y', '1', '2', 'I', 0x00, 0x00, 0x10, 0x00, \
|
|
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
|
|
+#define UVC_GUID_FORMAT_Y16I \
|
|
+ { 'Y', '1', '6', 'I', 0x00, 0x00, 0x10, 0x00, \
|
|
+ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
|
|
+#define UVC_GUID_FORMAT_RAW8 \
|
|
+ { 'R', 'A', 'W', '8', 0x66, 0x1a, 0x42, 0xa2, \
|
|
+ 0x90, 0x65, 0xd0, 0x18, 0x14, 0xa8, 0xef, 0x8a}
|
|
+#define UVC_GUID_FORMAT_RW16 \
|
|
+ { 'R', 'W', '1', '6', 0x66, 0x1a, 0x42, 0xa2, \
|
|
+ 0x90, 0x65, 0xd0, 0x18, 0x14, 0xa8, 0xef, 0x8a}
|
|
+#define UVC_GUID_FORMAT_D16 \
|
|
+ { 'P', 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, \
|
|
+ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
|
|
+#define UVC_GUID_FORMAT_W10 \
|
|
+ { 'W', '1', '0', ' ', 0x00, 0x00, 0x10, 0x00, \
|
|
+ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
|
|
#define UVC_GUID_FORMAT_Z16 \
|
|
{ 'Z', '1', '6', ' ', 0x00, 0x00, 0x10, 0x00, \
|
|
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
|
|
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
|
|
index 3af6a82d0..039c14961 100644
|
|
--- a/include/uapi/linux/videodev2.h
|
|
+++ b/include/uapi/linux/videodev2.h
|
|
@@ -793,6 +793,9 @@ struct v4l2_pix_format {
|
|
#define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
|
|
#define V4L2_PIX_FMT_Y8I v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
|
|
#define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
|
|
+#define V4L2_PIX_FMT_Y16I v4l2_fourcc('Y', '1', '6', 'I') /* Greyscale 16-bit L/R interleaved */
|
|
+#define V4L2_PIX_FMT_RW16 v4l2_fourcc('R', 'W', '1', '6') /* Raw data 16-bit */
|
|
+#define V4L2_PIX_FMT_W10 v4l2_fourcc('W', '1', '0', ' ') /* Packed raw data 10-bit */
|
|
#define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
|
|
#define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode */
|
|
#define V4L2_PIX_FMT_MM21 v4l2_fourcc('M', 'M', '2', '1') /* Mediatek 8-bit block mode, two non-contiguous planes */
|
|
--
|
|
2.34.1
|
|
|