diff --git a/scripts/patch-realsense-ubuntu-lts-hwe.sh b/scripts/patch-realsense-ubuntu-lts-hwe.sh index 00d9aac069..d676c85437 100755 --- a/scripts/patch-realsense-ubuntu-lts-hwe.sh +++ b/scripts/patch-realsense-ubuntu-lts-hwe.sh @@ -20,6 +20,7 @@ skip_hid_patch=0 apply_hid_gyro_patch=0 skip_plf_patch=0 build_only=0 +skip_md_patch=0 #Parse input while test $# -gt 0; do @@ -92,6 +93,7 @@ k_tick=$(echo ${kernel_version[2]} | awk -F'-' '{print $2}') [ $k_maj_min -eq 504 ] && [ $k_tick -ge 156 ] && apply_hid_gyro_patch=1 && skip_hid_patch=1 # For kernel versions 6+ powerline frequency already applied [ $k_maj_min -ge 600 ] && skip_plf_patch=1 +[ $k_maj_min -ge 605 ] && skip_md_patch=1 # Construct branch name from distribution codename {xenial,bionic,..} and kernel version # ubuntu_codename=`. /etc/os-release; echo ${UBUNTU_CODENAME/*, /}` @@ -176,8 +178,10 @@ then echo -e "\e[32mApplying patches for \e[36m${ubuntu_codename}-${kernel_branch}\e[32m line\e[0m" echo -e "\e[32mApplying realsense-uvc patch\e[0m" patch -p1 < ../scripts/realsense-camera-formats-${ubuntu_codename}-${kernel_branch}.patch || patch -p1 < ../scripts/realsense-camera-formats-${ubuntu_codename}-master.patch - echo -e "\e[32mApplying realsense-metadata patch\e[0m" - patch -p1 < ../scripts/realsense-metadata-${ubuntu_codename}-${kernel_branch}.patch || patch -p1 < ../scripts/realsense-metadata-${ubuntu_codename}-master.patch + if [ ${skip_md_patch} -eq 0 ]; then + echo -e "\e[32mApplying realsense-metadata patch\e[0m" + patch -p1 < ../scripts/realsense-metadata-${ubuntu_codename}-${kernel_branch}.patch || patch -p1 < ../scripts/realsense-metadata-${ubuntu_codename}-master.patch + fi if [ ${skip_hid_patch} -eq 0 ]; then echo -e "\e[32mApplying realsense-hid patch\e[0m" patch -p1 < ../scripts/realsense-hid-${ubuntu_codename}-${kernel_branch}.patch || patch -p1 < ../scripts/realsense-hid-${ubuntu_codename}-master.patch @@ -213,8 +217,10 @@ then echo -e "\e[32mApplying 04-xhci-remove-unused-stopped_td-pointer patch\e[0m" patch -p1 < ../scripts/04-xhci-remove-unused-stopped_td-pointer.patch fi - echo -e "\e[32mIncrease UVC_URBs in uvcvideo\e[0m" - patch -p1 < ../scripts/uvcvideo_increase_UVC_URBS.patch + if [ ${skip_md_patch} -eq 0 ]; then + echo -e "\e[32mIncrease UVC_URBs in uvcvideo\e[0m" + patch -p1 < ../scripts/uvcvideo_increase_UVC_URBS.patch + fi if [ $debug_uvc -eq 1 ]; then echo -e "\e[32mApplying uvcvideo and videobuf2 debug patch\e[0m" patch -p1 < ../scripts/uvc_debug.patch @@ -268,6 +274,9 @@ cp $KBASE/Module.symvers . echo -e "\e[32mCompiling uvc module\e[0m" make -j -C $KBASE M=$KBASE/drivers/media/usb/uvc/ modules +if [ $k_maj_min -ge 605 ]; then + make -j -C $KBASE M=$KBASE/drivers/media/common/ modules +fi if [ $skip_hid_patch -eq 0 ]; then echo -e "\e[32mCompiling accelerometer and gyro modules\e[0m" make -j -C $KBASE M=$KBASE/drivers/iio/accel modules @@ -282,6 +291,10 @@ fi # Copy the patched modules to a location cp $KBASE/drivers/media/usb/uvc/uvcvideo.ko ~/$LINUX_BRANCH-uvcvideo.ko +if [[ $k_maj_min -ge 605 ]]; then + cp $KBASE/drivers/media/common/uvc.ko ~/$LINUX_BRANCH-uvc.ko +fi + if [ $skip_hid_patch -eq 0 ]; then cp $KBASE/drivers/iio/accel/hid-sensor-accel-3d.ko ~/$LINUX_BRANCH-hid-sensor-accel-3d.ko cp $KBASE/drivers/iio/gyro/hid-sensor-gyro-3d.ko ~/$LINUX_BRANCH-hid-sensor-gyro-3d.ko @@ -316,6 +329,7 @@ fi try_unload_module uvcvideo try_unload_module videobuf2_v4l2 [ ${k_maj_min} -ge 500 ] && try_unload_module videobuf2_common +[ ${k_maj_min} -ge 605 ] && try_unload_module uvc try_unload_module videodev if [ $build_usbcore_modules -eq 1 ]; then @@ -343,7 +357,9 @@ if [ $build_usbcore_modules -eq 1 ]; then try_module_insert videobuf2_core ~/$LINUX_BRANCH-videobuf2-core.ko /lib/modules/`uname -r`/kernel/drivers/media/v4l2-core/videobuf2-core.ko try_module_insert videobuf2_v4l2 ~/$LINUX_BRANCH-videobuf2-v4l2.ko /lib/modules/`uname -r`/kernel/drivers/media/v4l2-core/videobuf2-v4l2.ko fi - +if [ ${k_maj_min} -ge 605 ]; then + try_module_insert uvc ~/$LINUX_BRANCH-uvc.ko /lib/modules/`uname -r`/kernel/drivers/media/common/uvc.ko +fi try_module_insert videodev ~/$LINUX_BRANCH-videodev.ko /lib/modules/`uname -r`/kernel/drivers/media/v4l2-core/videodev.ko if [[ ( ${k_maj_min} -ge 500 ) && ( $debug_uvc -eq 1 ) ]]; then try_module_insert videobuf2-common ~/$LINUX_BRANCH-videobuf2-common.ko /lib/modules/`uname -r`/kernel/drivers/media/common/videobuf2/videobuf2-common.ko @@ -355,3 +371,4 @@ if [ $skip_hid_patch -eq 0 ]; then fi echo -e "\e[92m\n\e[1mScript has completed. Please consult the installation guide for further instruction.\n\e[0m" + diff --git a/scripts/patch-utils-hwe.sh b/scripts/patch-utils-hwe.sh index 2b4f1248ea..ed8fb22cae 100644 --- a/scripts/patch-utils-hwe.sh +++ b/scripts/patch-utils-hwe.sh @@ -132,6 +132,9 @@ function choose_kernel_branch { "6.2") echo hwe-6.2 ;; + "6.5") + echo hwe-6.5 + ;; *) #error message shall be redirected to stderr to be printed properly echo -e "\e[31mUnsupported kernel version $1 . The Jammy patches are maintained for Ubuntu LTS with kernel 5.15, 5.19 only\e[0m" >&2 diff --git a/scripts/realsense-camera-formats-jammy-hwe-6.5.patch b/scripts/realsense-camera-formats-jammy-hwe-6.5.patch new file mode 100644 index 0000000000..653be26a5d --- /dev/null +++ b/scripts/realsense-camera-formats-jammy-hwe-6.5.patch @@ -0,0 +1,154 @@ +From c22cccc6123bc487652ccaafdeb31fce5b45bdf2 Mon Sep 17 00:00:00 2001 +From: Dmitry Perchanov +Date: Mon, 22 Jan 2024 14:48:48 +0200 +Subject: [PATCH] RealSense support for kernel 6.5 + +Signed-off-by: Dmitry Perchanov +--- + 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 +