Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade driver to support JetPack 6.1 (L4T R36.4) on RQX-59G #28

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,4 @@ modules.order
Module.symvers
Mkfile.old
build
*.dts
2 changes: 1 addition & 1 deletion drivers/debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ Homepage: <https://sensor.tier4.jp/automotive-hdr-camera-jp>
Package: tier4-camera-gmsl
Architecture: arm64
Provides: tier4-camera-gmsl
Depends: ${misc:Depends}
Depends: ${misc:Depends}, gpiod
Description: Tier4 ISX021 GMSL2 Camera Kernel Module.
27 changes: 16 additions & 11 deletions drivers/debian/etc/modprobe.d/tier4-imx490.conf
Original file line number Diff line number Diff line change
@@ -1,27 +1,32 @@
# Configurations:
# "trigger_mode=0" run cameras in master 10fps mode. (Default)
# "trigger_mode=1" run cameras in slave(External pulse sync) 10fps mode.
# "trigger_mode=2" run cameras in maste 20fps mode.
# "trigger_mode=2" run cameras in master 20fps mode.
# "trigger_mode=3" run cameras in slave(External pulse sync) 20fps mode.
# "trigger_mode=4" run cameras in master 30fps mode.
# "trigger_mode=5" run cameras in slave(External pulse sync) 30fps mode.
#
# "trigger_mode=1,3 and 5" are valid for ADLINK RQX-58G only.
#
# "trigger_mode=1,3 and 5" are valid for ADLINK RQX-58G/59G only.
#
# "enable_auto_exposure=0" disable auto-exposure feature.
# "enable_auto_exposure=1" enable auto-exposure feature. (Default)
#
# "enable_distortion_correction=0" disable distortion correction feature.
# "enable_distortion_correction=1" enable distortion correction feature.(Default)
# "enable_distortion_correction=1" enable distortion correction feature. (Default)
#

options tier4_imx490 trigger_mode=0 enable_auto_exposure=1 enable_distortion_correction=1


# Note:
# The following parameters are valid for RQX-58G and RQX-59G.
#
# "fsync_mode=0" disable FPGA Fsync mode. (Default)
# "fsync_mode=1" enable FPGA Fsync Auto Trigger mode.
# "fsync_mode=2" enable FPGA Fsync Manual Trigger mode.
#
# The following parameter is valid for ADLINK RQX-58G only.
#
# "generate_fsync=0" External pulse is not automatically genereated by FPGA(Default).
# "generate_fsync=1" External pulse is automatically genereated by FPGA( not supported yet).
# "fps_cam1_cam2=10" set 10fps for cam1&2 in Fsync Auto Trigger mode. (FPS 10/20/30)
# "fps_cam3_cam4=10" set 10fps for cam3&4 in Fsync Auto Trigger mode. (FPS 10/20/30)
# "fps_cam5_cam6=10" set 10fps for cam5&6 in Fsync Auto Trigger mode. (FPS 10/20/30)
# "fps_cam7_cam8=10" set 10fps for cam7&8 in Fsync Auto Trigger mode. (FPS 10/20/30)
#

options tier4_fpga generate_fsync=0
options tier4_fpga fsync_mode=0 fps_cam1_cam2=10 fps_cam3_cam4=10 fps_cam5_cam6=10 fps_cam7_cam8=10
25 changes: 16 additions & 9 deletions drivers/debian/etc/modprobe.d/tier4-isx021.conf
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
# Configurations:
# "trigger_mode=0" run cameras in master mode. (Default)
# "trigger_mode=1" run cameras in slave(External pulse sync) mode, and valid for ADLINK RQX-58G only.
# "trigger_mode=1" run cameras in slave(External pulse sync) mode, and valid for ADLINK RQX-58G/59G only.
#
# "enable_auto_exposure=0" disable auto-exposure feature.
# "enable_auto_exposure=1" enable auto-exposure feature. (Default)
#
# "enable_distortion_correction=0" disable distortion correction feature. (Default)
# "enable_distortion_correction=1" enable distortion correction feature.
# "enable_distortion_correction=0" disable distortion correction feature.
# "enable_distortion_correction=1" enable distortion correction feature. (Default)
#

options tier4_isx021 trigger_mode=0 enable_auto_exposure=1 enable_distortion_correction=1

# The following parameter is valid for ADLINK RQX-58G only.
# "generate_fsync=0" External pulse is not automatically genereated by FPGA. (Default)
# "generate_fsync=1" External pulse is automatically genereated by FPGA( not supported yet).
#

options tier4_fpga generate_fsync=0
# Note:
# The following parameters are valid for RQX-58G and RQX-59G.
#
# "fsync_mode=0" disable FPGA Fsync mode. (Default)
# "fsync_mode=1" enable FPGA Fsync Auto Trigger mode.
# "fsync_mode=2" enable FPGA Fsync Manual Trigger mode.
#
# "fps_cam1_cam2=10" set 10fps for cam1&2 in Fsync Auto Trigger mode. (FPS 1~30)
# "fps_cam3_cam4=10" set 10fps for cam3&4 in Fsync Auto Trigger mode. (FPS 1~30)
# "fps_cam5_cam6=10" set 10fps for cam5&6 in Fsync Auto Trigger mode. (FPS 1~30)
# "fps_cam7_cam8=10" set 10fps for cam7&8 in Fsync Auto Trigger mode. (FPS 1~30)
#
options tier4_fpga fsync_mode=0 fps_cam1_cam2=10 fps_cam3_cam4=10 fps_cam5_cam6=10 fps_cam7_cam8=10
3 changes: 2 additions & 1 deletion drivers/debian/etc/modules-load.d/tier4-imx490-gmsl.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
max20089
tier4-fpga
tier4-max9295
tier4-max9296
tier4-fpga
tier4-gw5300
tier4-isx021
tier4-imx490
3 changes: 2 additions & 1 deletion drivers/debian/etc/modules-load.d/tier4-isx021-gmsl.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
max20089
tier4-fpga
tier4-isx021
tier4-max9295
tier4-max9296
tier4-fpga
38 changes: 38 additions & 0 deletions drivers/debian/etc/udev/rules.d/99-tier4-isx021-imx490-gmsl.rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Checking with 'udevadm info --path=/sys/class/video4linux/video0 --attribute-walk'

# for JetPack 5.x (L4T R35.x)
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 30-002b", SYMLINK+= "gmsl/tier4-imx490-cam1"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 30-001b", SYMLINK+= "gmsl/tier4-isx021-cam1"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 30-002c", SYMLINK+= "gmsl/tier4-imx490-cam2"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 30-001c", SYMLINK+= "gmsl/tier4-isx021-cam2"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 31-002b", SYMLINK+= "gmsl/tier4-imx490-cam3"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 31-001b", SYMLINK+= "gmsl/tier4-isx021-cam3"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 31-002c", SYMLINK+= "gmsl/tier4-imx490-cam4"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 31-001c", SYMLINK+= "gmsl/tier4-isx021-cam4"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 32-002b", SYMLINK+= "gmsl/tier4-imx490-cam5"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 32-001b", SYMLINK+= "gmsl/tier4-isx021-cam5"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 32-002c", SYMLINK+= "gmsl/tier4-imx490-cam6"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 32-001c", SYMLINK+= "gmsl/tier4-isx021-cam6"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 33-002b", SYMLINK+= "gmsl/tier4-imx490-cam7"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 33-001b", SYMLINK+= "gmsl/tier4-isx021-cam7"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 33-002c", SYMLINK+= "gmsl/tier4-imx490-cam8"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 33-001c", SYMLINK+= "gmsl/tier4-isx021-cam8"

# for JetPack 6.x (L4T R36.x)
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 9-001b", SYMLINK+= "gmsl/tier4-isx021-cam1"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 9-001c", SYMLINK+= "gmsl/tier4-isx021-cam2"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 10-001b", SYMLINK+= "gmsl/tier4-isx021-cam3"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 10-001c", SYMLINK+= "gmsl/tier4-isx021-cam4"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 11-001b", SYMLINK+= "gmsl/tier4-isx021-cam5"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 11-001c", SYMLINK+= "gmsl/tier4-isx021-cam6"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 12-001b", SYMLINK+= "gmsl/tier4-isx021-cam7"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 12-001c", SYMLINK+= "gmsl/tier4-isx021-cam8"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 9-002b", SYMLINK+= "gmsl/tier4-imx490-cam1"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 9-002c", SYMLINK+= "gmsl/tier4-imx490-cam2"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 10-002b", SYMLINK+= "gmsl/tier4-imx490-cam3"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 10-002c", SYMLINK+= "gmsl/tier4-imx490-cam4"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 11-002b", SYMLINK+= "gmsl/tier4-imx490-cam5"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 11-002c", SYMLINK+= "gmsl/tier4-imx490-cam6"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 12-002b", SYMLINK+= "gmsl/tier4-imx490-cam7"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 12-002c", SYMLINK+= "gmsl/tier4-imx490-cam8"

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Checking with 'udevadm info --path=/sys/class/video4linux/video0 --attribute-walk'

# for JetPack 5.x (L4T R35.x)
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 30-001d", SYMLINK+= "gmsl/tier4-isx021-cam1"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 30-001e", SYMLINK+= "gmsl/tier4-isx021-cam2"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 31-001d", SYMLINK+= "gmsl/tier4-isx021-cam3"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 31-001e", SYMLINK+= "gmsl/tier4-isx021-cam4"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 32-001d", SYMLINK+= "gmsl/tier4-isx021-cam5"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 32-001e", SYMLINK+= "gmsl/tier4-isx021-cam6"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 33-001d", SYMLINK+= "gmsl/tier4-isx021-cam7"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 33-001e", SYMLINK+= "gmsl/tier4-isx021-cam8"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 30-002b", SYMLINK+= "gmsl/tier4-imx490-cam1"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 30-002c", SYMLINK+= "gmsl/tier4-imx490-cam2"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 31-002b", SYMLINK+= "gmsl/tier4-imx490-cam3"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 31-002c", SYMLINK+= "gmsl/tier4-imx490-cam4"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 32-002b", SYMLINK+= "gmsl/tier4-imx490-cam5"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 32-002c", SYMLINK+= "gmsl/tier4-imx490-cam6"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 33-002b", SYMLINK+= "gmsl/tier4-imx490-cam7"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 33-002c", SYMLINK+= "gmsl/tier4-imx490-cam8"

# for JetPack 6.x (L4T R36.x)
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 9-001d", SYMLINK+= "gmsl/tier4-isx021-cam1"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 9-001e", SYMLINK+= "gmsl/tier4-isx021-cam2"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 10-001d", SYMLINK+= "gmsl/tier4-isx021-cam3"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 10-001e", SYMLINK+= "gmsl/tier4-isx021-cam4"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 11-001d", SYMLINK+= "gmsl/tier4-isx021-cam5"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 11-001e", SYMLINK+= "gmsl/tier4-isx021-cam6"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 12-001d", SYMLINK+= "gmsl/tier4-isx021-cam7"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_isx021 12-001e", SYMLINK+= "gmsl/tier4-isx021-cam8"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 9-002b", SYMLINK+= "gmsl/tier4-imx490-cam1"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 9-002c", SYMLINK+= "gmsl/tier4-imx490-cam2"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 10-002b", SYMLINK+= "gmsl/tier4-imx490-cam3"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 10-002c", SYMLINK+= "gmsl/tier4-imx490-cam4"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 11-002b", SYMLINK+= "gmsl/tier4-imx490-cam5"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 11-002c", SYMLINK+= "gmsl/tier4-imx490-cam6"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 12-002b", SYMLINK+= "gmsl/tier4-imx490-cam7"
SUBSYSTEM=="video4linux", ATTR{name}=="vi-output, tier4_imx490 12-002c", SYMLINK+= "gmsl/tier4-imx490-cam8"
11 changes: 11 additions & 0 deletions drivers/debian/postinst
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,17 @@ case "$1" in
;;
esac

# Preserve the udev rules for the running hardware platform, and delete the others
RQX59G_DT=RQX590
RQX59G_CNT=$(head /proc/device-tree/model | tr -d "\0" | grep -c $RQX59G_DT) || true
if [ $RQX59G_CNT -eq 1 ]; then
# Preserve udev rules for RQX59G, delete the others
rm -f /etc/udev/rules.d/99-tier4-isx021-imx490-gmsl.rules
else
# Preserve udev rules for default Orin, delete the others
rm -f /etc/udev/rules.d/99-tier4-isx021-imx490-rqx59g.rules
fi

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

Expand Down
9 changes: 5 additions & 4 deletions drivers/debian/prerm
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ NAME=tier4-camera-gmsl
VERSION=1.5.0
KERNEL_REL=$(uname -r)

ISX021_GMSL_DTBO=$(ls /boot/tier4-isx021-gmsl*)
ISX021_GMSL_DTBO=$(ls /boot/tier4-isx021-*.dtbo)
ISX021_GMSL_DTBO_EXIST=$?

IMX490_GMSL_DTBO=$(ls /boot/tier4-imx490-gmsl-*)
ISX490_GMSL_DTBO_EXIST=$?
IMX490_GMSL_DTBO=$(ls /boot/tier4-imx490-*.dtbo)
IMX490_GMSL_DTBO_EXIST=$?

IMX728_GMSL_DTBO=$(ls /boot/tier4-imx728-gmsl-*)
IMX728_GMSL_DTBO=$(ls /boot/tier4-imx728-*.dtbo)
IMX728_GMSL_DTBO_EXIST=$?


Expand All @@ -28,6 +28,7 @@ case "$1" in
rm -f /lib/modules/$KERNEL_REL/updates/dkms/tier4-max9296.ko
rm -f /lib/modules/$KERNEL_REL/updates/dkms/tier4-gw5300.ko
rm -f /lib/modules/$KERNEL_REL/updates/dkms/tier4-fpga.ko
rm -f /lib/modules/$KERNEL_REL/updates/dkms/max20089.ko
rm -f /lib/firmware/tier4-isx021.bin
rm -f /etc/modules-load.d/tier4-isx021-gmsl.conf
rm -f /etc/modules-load.d/tier4-imx490-gmsl.conf
Expand Down
16 changes: 0 additions & 16 deletions drivers/debian/udev

This file was deleted.

3 changes: 3 additions & 0 deletions drivers/dkms.conf
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,8 @@ DEST_MODULE_LOCATION[5]="/updates"
BUILT_MODULE_NAME[6]="tier4-imx728"
DEST_MODULE_LOCATION[6]="/updates"

BUILT_MODULE_NAME[7]="max20089"
DEST_MODULE_LOCATION[7]="/updates"

AUTOINSTALL="yes"
# REMAKE_INITRD=no
25 changes: 24 additions & 1 deletion drivers/src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,24 @@ else ifeq ($(L4T_RELEASE_MAIN), R35)
TARGET_ISX021_IMX490_DTS := Unknown
TARGET_ISX021_IMX490_IMX728_DTS := Unknown
endif
else ifeq ($(L4T_RELEASE_MAIN), R36)
ifeq ($(MODEL),$(ROScube_Orin_Model_word))
# RQX-59G R36.x
KERNELRELEASE := $(shell uname -r)
TARGET_ISX021_DTS := tier4-isx021-gmsl-device-tree-overlay-roscube-orin-r364
TARGET_IMX490_DTS := tier4-imx490-gmsl-device-tree-overlay-roscube-orin-r364
TARGET_IMX728_DTS := tier4-imx728-gmsl-device-tree-overlay-roscube-orin-r364
TARGET_ISX021_IMX490_DTS := tier4-isx021-imx490-gmsl-device-tree-overlay-roscube-orin-r364
TARGET_ISX021_IMX490_IMX728_DTS := tier4-isx021-imx490-imx728-gmsl-device-tree-overlay-roscube-orin-r364
MAKE_OVERLAY_DTS_CMD := make_overlay_dts_roscube-orin-r364.py r36.4
else
KERNELRELEASE := $(shell uname -r)
TARGET_ISX021_DTS := Unknown
TARGET_IMX490_DTS := Unknown
TARGET_IMX729_DTS := Unknown
TARGET_ISX021_IMX490_DTS := Unknown
TARGET_ISX021_IMX490_IMX728_DTS := Unknown
endif
else
KERNELRELEASE := Unknown
TARGET_ISX021_DTS := Unknown
Expand Down Expand Up @@ -305,9 +323,14 @@ ifeq ($(ARCH), arm64)
endif
endif

# for JetPack 6.x (L4T R36.x)
KBUILD_EXTRA_SYMBOLS += /usr/src/nvidia/nvidia-oot/Module.symvers
ccflags-y += -I/usr/src/nvidia/nvidia-oot/include
#

ccflags-y += -DBUILD_STAMP="\"`date +'%Y-%m-%d %H:%M:%S'`\""

obj-m := tier4-max9295.o tier4-max9296.o tier4-isx021.o tier4-imx490.o tier4-imx728.o tier4-gw5300.o tier4-fpga.o
obj-m := tier4-max9295.o tier4-max9296.o tier4-isx021.o tier4-imx490.o tier4-imx728.o tier4-gw5300.o tier4-fpga.o max20089.o

# ------------------------------------------------

Expand Down
Loading