diff --git a/hardware/nvidia/t23x/nv-public/6.x/0001-overlay-enable-d4xx-camera-for-Orin-jp6.patch b/hardware/nvidia/t23x/nv-public/6.x/0001-overlay-enable-d4xx-camera-for-Orin-jp6.patch index 6ced79e6..a829396f 100644 --- a/hardware/nvidia/t23x/nv-public/6.x/0001-overlay-enable-d4xx-camera-for-Orin-jp6.patch +++ b/hardware/nvidia/t23x/nv-public/6.x/0001-overlay-enable-d4xx-camera-for-Orin-jp6.patch @@ -1,18 +1,18 @@ -From d28ebc27d32166b754b7483f76252f8ca14b2fb0 Mon Sep 17 00:00:00 2001 +From 05696de9d8476a767f5d5981fc768bb2d2386ff7 Mon Sep 17 00:00:00 2001 From: ejgoldik -Date: Wed, 21 Jan 2026 15:55:54 +0200 +Date: Thu, 19 Feb 2026 11:38:36 +0200 Subject: [PATCH] overlay: enable d4xx camera for Orin jp6 Signed-off-by: ejgoldik --- - overlay/Makefile | 7 +++++++ - 1 file changed, 7 insertions(+) + overlay/Makefile | 12 ++++++++++++ + 1 file changed, 12 insertions(+) diff --git a/overlay/Makefile b/overlay/Makefile -index c88bbe2..28e505a 100644 +index c88bbe2..83c1c4f 100644 --- a/overlay/Makefile +++ b/overlay/Makefile -@@ -60,6 +60,13 @@ dtbo-y += tegra234-p3767-camera-p3768-imx219-A.dtbo +@@ -60,6 +60,18 @@ dtbo-y += tegra234-p3767-camera-p3768-imx219-A.dtbo dtbo-y += tegra234-p3767-camera-p3768-imx219-imx477.dtbo dtbo-y += tegra234-p3767-camera-p3768-imx477-C.dtbo dtbo-y += tegra234-p3767-camera-p3768-imx477-A.dtbo @@ -22,7 +22,12 @@ index c88bbe2..28e505a 100644 +dtbo-y += tegra234-camera-d4xx-overlay-fg12-16ch.dtbo +dtbo-y += tegra234-camera-d4xx-overlay-fg12-16ch-dual.dtbo +dtbo-y += tegra234-camera-d4xx-overlay-fg12-16ch-quad.dtbo -+ ++dtbo-y += tegra234-camera-d4xx-overlay.calib.dtbo ++dtbo-y += tegra234-camera-d4xx-overlay-dual.calib.dtbo ++dtbo-y += tegra234-camera-d4xx-overlay-max96712-EVB.calib.dtbo ++dtbo-y += tegra234-camera-d4xx-overlay-fg12-16ch.calib.dtbo ++dtbo-y += tegra234-camera-d4xx-overlay-fg12-16ch-dual.calib.dtbo ++dtbo-y += tegra234-camera-d4xx-overlay-fg12-16ch-quad.calib.dtbo ifneq ($(dtb-y),) dtb-y := $(addprefix $(makefile-path)/,$(dtb-y)) diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-dual.calib.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-dual.calib.dts index 1b7cc682..15d12890 100644 --- a/hardware/realsense/tegra234-camera-d4xx-overlay-dual.calib.dts +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-dual.calib.dts @@ -13,7 +13,7 @@ /* camera control gpio definitions */ / { - overlay-name = "Jetson RealSense Camera D457 Dual Calibration"; + overlay-name = "DUAL Jetson RealSense Camera D4xx with max9296 and tca9548 for Calibration"; jetson-header-name = "Jetson AGX CSI Connector"; compatible = JETSON_COMPATIBLE; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-dual.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-dual.dts index 0e39d0d7..7e149078 100644 --- a/hardware/realsense/tegra234-camera-d4xx-overlay-dual.dts +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-dual.dts @@ -13,7 +13,7 @@ /* camera control gpio definitions */ / { - overlay-name = "Jetson RealSense Camera D457 dual"; + overlay-name = "DUAL Jetson RealSense Camera D4xx with max9296 and tca9548"; jetson-header-name = "Jetson AGX CSI Connector"; compatible = JETSON_COMPATIBLE; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-dual.calib.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-dual.calib.dts new file mode 100644 index 00000000..60a103c9 --- /dev/null +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-dual.calib.dts @@ -0,0 +1,794 @@ +// SPDX-License-Identifier: GPL-2.0-only +// SPDX-FileCopyrightText: Copyright (c) 2018-2023, INTEL CORPORATION. All rights reserved. + +/dts-v1/; +/plugin/; + +#include +#include +#include + +#define CAM0_PWDN TEGRA234_MAIN_GPIO(H, 6) //MAX96712_1 PWDN +#define CAM1_PWDN TEGRA234_MAIN_GPIO(H, 3) //MAX96712_2 PWDN +//#define CAM2_PWDN TEGRA234_MAIN_GPIO(AC, 0) //MAX96712_3 PWDN +//#define CAM3_PWDN TEGRA234_MAIN_GPIO(AC, 1) //MAX96712_4 PWDN +#define CAM12V_POC TEGRA234_MAIN_GPIO(AC, 7) + +#define CAMERA_I2C_MUX_BUS(x) (0x1E + x) + + + +/* camera control gpio definitions */ +/ { + overlay-name = "DUAL Jetson RealSense Camera D4xx with max96712 and tca9546 (fg12-16ch) for Calibration"; + jetson-header-name = "Jetson AGX CSI Connector"; + compatible = JETSON_COMPATIBLE; + + fragment@1 { + target-path = "/"; + __overlay__ { + vdd_cam12v_poc: regulator-vdd-cam12v-poc { + compatible = "regulator-fixed"; + regulator-name = "vdd-cam12v-poc"; + regulator-min-microvolt = <12000000>; + regulator-max-microvolt = <12000000>; + gpio = <&gpio CAM12V_POC GPIO_ACTIVE_HIGH>; + enable-active-high; + }; + }; + }; + fragment@0 { + target-path = "/"; + __overlay__ { + tegra-capture-vi { + num-channels = <8>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_vi_in0: endpoint { + status = "okay"; + vc-id = <0>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out0>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_vi_in1: endpoint { + status = "okay"; + vc-id = <1>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out1>; + }; + }; + port@2 { + status = "okay"; + reg = <2>; + d4xx_vi_in2: endpoint { + status = "okay"; + vc-id = <2>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out2>; + }; + }; + port@3 { + status = "okay"; + reg = <3>; + d4xx_vi_in3: endpoint { + status = "okay"; + vc-id = <3>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out3>; + }; + }; + port@4 { + status = "okay"; + reg = <4>; + d4xx_vi_in4: endpoint { + status = "okay"; + vc-id = <0>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out4>; + }; + }; + port@5 { + status = "okay"; + reg = <5>; + d4xx_vi_in5: endpoint { + status = "okay"; + vc-id = <1>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out5>; + }; + }; + port@6 { + status = "okay"; + reg = <6>; + d4xx_vi_in6: endpoint { + status = "okay"; + vc-id = <2>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out6>; + }; + }; + port@7 { + status = "okay"; + reg = <7>; + d4xx_vi_in7: endpoint { + status = "okay"; + vc-id = <3>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out7>; + }; + }; + }; + }; + + bus@0 { + host1x@13e00000 { + nvcsi@15a00000 { + num-channels = <8>; + channel@0 { + status = "okay"; + reg = <0>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in0: endpoint@0 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_0_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out0: endpoint@1 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in0>; + }; + }; + }; + }; + channel@1 { + status = "okay"; + reg = <1>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in1: endpoint@2 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_1_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out1: endpoint@3 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in1>; + }; + }; + }; + }; + channel@2 { + status = "okay"; + reg = <2>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in2: endpoint@4 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_2_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out2: endpoint@5 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in2>; + }; + }; + }; + }; + channel@3 { + status = "okay"; + reg = <3>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in3: endpoint@6 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_3_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out3: endpoint@7 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in3>; + }; + }; + }; + }; + channel@4 { + status = "okay"; + reg = <4>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in4: endpoint@8 { + status = "okay"; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&ds5_4_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out4: endpoint@9 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in4>; + }; + }; + }; + }; + channel@5 { + status = "okay"; + reg = <5>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in5: endpoint@10 { + status = "okay"; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&ds5_5_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out5: endpoint@11 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in5>; + }; + }; + }; + }; + channel@6 { + status = "okay"; + reg = <6>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in6: endpoint@12 { + status = "okay"; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&ds5_6_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out6: endpoint@13 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in6>; + }; + }; + }; + }; + channel@7 { + status = "okay"; + reg = <7>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in7: endpoint@14 { + status = "okay"; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&ds5_7_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out7: endpoint@15 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in7>; + }; + }; + }; + }; + }; + }; + + i2c@3180000 { + clock-frequency = <100000>; + tca9546@70 { + status = "okay"; + reg = <0x70>; + compatible = "nxp,pca9546"; + #address-cells = <1>; + #size-cells = <0>; + skip_mux_detect = "yes"; + /*vcc-pullup-supply = <&battery_reg>;*/ + force_bus_start = ; + vcc_lp = "vcc"; + i2c@0 { + status = "okay"; + reg = <0>; + i2c-mux,deselect-on-exit; + #address-cells = <1>; + #size-cells = <0>; + + dser_a: max96712@29 { + status = "okay"; + reg = <0x29>; + compatible = "maxim,max96712"; + csi-mode = "2x4"; + max-src = <1>; + channel = "a"; + pwdn-gpios = <&gpio CAM0_PWDN GPIO_ACTIVE_HIGH>; + }; + + ser_a: max9295_a@40 { + status = "okay"; + compatible = "maxim,max9295"; + reg = <0x40>; + maxim,gmsl-dser-device = <&dser_a>; + }; + + ds5_3: ds5@1d { + status = "okay"; + def-addr = <0x10>; + reg = <0x1d>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "IMU"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser_a>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_3_out: endpoint { + vc-id = <3>; + port-index = <3>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in3>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_b"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <3>; + num-lanes = <2>; + }; + }; + + ds5_2: ds5@1c { + status = "okay"; + def-addr = <0x10>; + reg = <0x1c>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Y8"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser_a>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_2_out: endpoint { + vc-id = <2>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in2>; + }; + }; + }; + /* mode0: Y8, mode1: depth D16 */ + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_b"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <2>; + num-lanes = <2>; + }; + }; + + ds5_1: ds5@1b { + status = "okay"; + def-addr = <0x10>; + reg = <0x1b>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "RGB"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser_a>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_1_out: endpoint { + vc-id = <1>; + port-index = <1>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in1>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_e"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <1>; + num-lanes = <2>; + }; + }; + + ds5_0: ds5@1a { + status = "okay"; + def-addr = <0x10>; + reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Depth"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser_a>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_0_out: endpoint { + vc-id = <0>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in0>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_a"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <0>; + num-lanes = <2>; + }; + }; + }; + i2c@1 { + status = "okay"; + reg = <1>; + i2c-mux,deselect-on-exit; + #address-cells = <1>; + #size-cells = <0>; + + dser_b: max96712@29 { + status = "okay"; + reg = <0x29>; + compatible = "maxim,max96712"; + csi-mode = "2x4"; + max-src = <1>; + channel = "b"; + pwdn-gpios = <&gpio CAM1_PWDN GPIO_ACTIVE_HIGH>; + }; + + ser_b: max9295_a@40 { + status = "okay"; + compatible = "maxim,max9295"; + reg = <0x40>; + maxim,gmsl-dser-device = <&dser_b>; + }; + + ds5_7: ds5@1d { + status = "okay"; + def-addr = <0x10>; + reg = <0x1d>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "IMU"; + nvidia,gmsl-ser-device = <&ser_b>; + nvidia,gmsl-dser-device = <&dser_b>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_7_out: endpoint { + vc-id = <3>; + port-index = <7>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in7>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_c"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "c"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <3>; + num-lanes = <2>; + }; + }; + + ds5_6: ds5@1c { + status = "okay"; + def-addr = <0x10>; + reg = <0x1c>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Y8"; + nvidia,gmsl-ser-device = <&ser_b>; + nvidia,gmsl-dser-device = <&dser_b>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_6_out: endpoint { + vc-id = <2>; + port-index = <6>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in6>; + }; + }; + }; + /* mode0: Y8, mode1: depth D16 */ + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_c"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "c"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <2>; + num-lanes = <2>; + }; + }; + + ds5_5: ds5@1b { + status = "okay"; + def-addr = <0x10>; + reg = <0x1b>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "RGB"; + nvidia,gmsl-ser-device = <&ser_b>; + nvidia,gmsl-dser-device = <&dser_b>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_5_out: endpoint { + vc-id = <1>; + port-index = <5>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in5>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_c"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "c"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <1>; + num-lanes = <2>; + }; + }; + + ds5_4: ds5@1a { + status = "okay"; + def-addr = <0x10>; + reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Depth"; + nvidia,gmsl-ser-device = <&ser_b>; + nvidia,gmsl-dser-device = <&dser_b>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_4_out: endpoint { + vc-id = <0>; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in4>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_c"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "c"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <0>; + num-lanes = <2>; + }; + }; + }; + }; + }; + }; + }; + }; +}; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-dual.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-dual.dts index ee7f94d1..2e4d3fc3 100644 --- a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-dual.dts +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-dual.dts @@ -20,7 +20,7 @@ /* camera control gpio definitions */ / { - overlay-name = "Jetson RealSense Camera D457"; + overlay-name = "DUAL Jetson RealSense Camera D4xx with max96712 and tca9546 (fg12-16ch)"; jetson-header-name = "Jetson AGX CSI Connector"; compatible = JETSON_COMPATIBLE; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-quad.calib.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-quad.calib.dts new file mode 100644 index 00000000..36e531a2 --- /dev/null +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-quad.calib.dts @@ -0,0 +1,1514 @@ +// SPDX-License-Identifier: GPL-2.0-only +// SPDX-FileCopyrightText: Copyright (c) 2018-2023, INTEL CORPORATION. All rights reserved. + +/dts-v1/; +/plugin/; + +#include +#include +#include + +#define CAM0_PWDN TEGRA234_MAIN_GPIO(H, 6) //MAX96712_1 PWDN +#define CAM1_PWDN TEGRA234_MAIN_GPIO(H, 3) //MAX96712_2 PWDN +#define CAM2_PWDN TEGRA234_MAIN_GPIO(AC, 0) //MAX96712_3 PWDN +#define CAM3_PWDN TEGRA234_MAIN_GPIO(AC, 1) //MAX96712_4 PWDN +#define CAM12V_POC TEGRA234_MAIN_GPIO(AC, 7) + +#define CAMERA_I2C_MUX_BUS(x) (0x1E + x) + + + +/* camera control gpio definitions */ +/ { + overlay-name = "QUAD Jetson RealSense Camera D4xx with max96712 and tca9546 (fg12-16ch) for Calibration"; + jetson-header-name = "Jetson AGX CSI Connector"; + compatible = JETSON_COMPATIBLE; + + fragment@1 { + target-path = "/"; + __overlay__ { + vdd_cam12v_poc: regulator-vdd-cam12v-poc { + compatible = "regulator-fixed"; + regulator-name = "vdd-cam12v-poc"; + regulator-min-microvolt = <12000000>; + regulator-max-microvolt = <12000000>; + gpio = <&gpio CAM12V_POC GPIO_ACTIVE_HIGH>; + enable-active-high; + }; + }; + }; + fragment@0 { + target-path = "/"; + __overlay__ { + tegra-capture-vi { + num-channels = <16>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_vi_in0: endpoint { + status = "okay"; + vc-id = <0>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out0>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_vi_in1: endpoint { + status = "okay"; + vc-id = <1>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out1>; + }; + }; + port@2 { + status = "okay"; + reg = <2>; + d4xx_vi_in2: endpoint { + status = "okay"; + vc-id = <2>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out2>; + }; + }; + port@3 { + status = "okay"; + reg = <3>; + d4xx_vi_in3: endpoint { + status = "okay"; + vc-id = <3>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out3>; + }; + }; + port@4 { + status = "okay"; + reg = <4>; + d4xx_vi_in4: endpoint { + status = "okay"; + vc-id = <0>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out4>; + }; + }; + port@5 { + status = "okay"; + reg = <5>; + d4xx_vi_in5: endpoint { + status = "okay"; + vc-id = <1>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out5>; + }; + }; + port@6 { + status = "okay"; + reg = <6>; + d4xx_vi_in6: endpoint { + status = "okay"; + vc-id = <2>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out6>; + }; + }; + port@7 { + status = "okay"; + reg = <7>; + d4xx_vi_in7: endpoint { + status = "okay"; + vc-id = <3>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out7>; + }; + }; + port@8 { + status = "okay"; + reg = <8>; + d4xx_vi_in8: endpoint { + status = "okay"; + vc-id = <0>; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out8>; + }; + }; + port@9 { + status = "okay"; + reg = <9>; + d4xx_vi_in9: endpoint { + status = "okay"; + vc-id = <1>; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out9>; + }; + }; + port@10 { + status = "okay"; + reg = <10>; + d4xx_vi_in10: endpoint { + status = "okay"; + vc-id = <2>; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out10>; + }; + }; + port@11 { + status = "okay"; + reg = <11>; + d4xx_vi_in11: endpoint { + status = "okay"; + vc-id = <3>; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out11>; + }; + }; + port@12 { + status = "okay"; + reg = <12>; + d4xx_vi_in12: endpoint { + status = "okay"; + vc-id = <0>; + port-index = <5>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out12>; + }; + }; + port@13 { + status = "okay"; + reg = <13>; + d4xx_vi_in13: endpoint { + status = "okay"; + vc-id = <1>; + port-index = <5>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out13>; + }; + }; + port@14 { + status = "okay"; + reg = <14>; + d4xx_vi_in14: endpoint { + status = "okay"; + vc-id = <2>; + port-index = <5>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out14>; + }; + }; + port@15 { + status = "okay"; + reg = <15>; + d4xx_vi_in15: endpoint { + status = "okay"; + vc-id = <3>; + port-index = <5>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out15>; + }; + }; + }; + }; + + bus@0 { + host1x@13e00000 { + nvcsi@15a00000 { + num-channels = <16>; + channel@0 { + status = "okay"; + reg = <0>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in0: endpoint@0 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_0_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out0: endpoint@1 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in0>; + }; + }; + }; + }; + channel@1 { + status = "okay"; + reg = <1>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in1: endpoint@2 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_1_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out1: endpoint@3 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in1>; + }; + }; + }; + }; + channel@2 { + status = "okay"; + reg = <2>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in2: endpoint@4 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_2_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out2: endpoint@5 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in2>; + }; + }; + }; + }; + channel@3 { + status = "okay"; + reg = <3>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in3: endpoint@6 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_3_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out3: endpoint@7 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in3>; + }; + }; + }; + }; + channel@4 { + status = "okay"; + reg = <4>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in4: endpoint@8 { + status = "okay"; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&ds5_4_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out4: endpoint@9 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in4>; + }; + }; + }; + }; + channel@5 { + status = "okay"; + reg = <5>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in5: endpoint@10 { + status = "okay"; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&ds5_5_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out5: endpoint@11 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in5>; + }; + }; + }; + }; + channel@6 { + status = "okay"; + reg = <6>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in6: endpoint@12 { + status = "okay"; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&ds5_6_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out6: endpoint@13 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in6>; + }; + }; + }; + }; + channel@7 { + status = "okay"; + reg = <7>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in7: endpoint@14 { + status = "okay"; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&ds5_7_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out7: endpoint@15 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in7>; + }; + }; + }; + }; + channel@8 { + status = "okay"; + reg = <8>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in8: endpoint@16 { + status = "okay"; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&ds5_8_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out8: endpoint@17 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in8>; + }; + }; + }; + }; + channel@9 { + status = "okay"; + reg = <9>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in9: endpoint@18 { + status = "okay"; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&ds5_9_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out9: endpoint@19 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in9>; + }; + }; + }; + }; + channel@10 { + status = "okay"; + reg = <10>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in10: endpoint@20 { + status = "okay"; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&ds5_10_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out10: endpoint@21 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in10>; + }; + }; + }; + }; + channel@11 { + status = "okay"; + reg = <11>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in11: endpoint@22 { + status = "okay"; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&ds5_11_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out11: endpoint@23 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in11>; + }; + }; + }; + }; + channel@12 { + status = "okay"; + reg = <12>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in12: endpoint@24 { + status = "okay"; + port-index = <6>; + bus-width = <2>; + remote-endpoint = <&ds5_12_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out12: endpoint@25 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in12>; + }; + }; + }; + }; + channel@13 { + status = "okay"; + reg = <13>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in13: endpoint@26 { + status = "okay"; + port-index = <6>; + bus-width = <2>; + remote-endpoint = <&ds5_13_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out13: endpoint@27 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in13>; + }; + }; + }; + }; + channel@14 { + status = "okay"; + reg = <14>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in14: endpoint@28 { + status = "okay"; + port-index = <6>; + bus-width = <2>; + remote-endpoint = <&ds5_14_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out14: endpoint@29 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in14>; + }; + }; + }; + }; + channel@15 { + status = "okay"; + reg = <15>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in15: endpoint@30 { + status = "okay"; + port-index = <6>; + bus-width = <2>; + remote-endpoint = <&ds5_15_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out15: endpoint@31 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in15>; + }; + }; + }; + }; + }; + }; + + i2c@3180000 { + clock-frequency = <100000>; + tca9546@70 { + status = "okay"; + reg = <0x70>; + compatible = "nxp,pca9546"; + #address-cells = <1>; + #size-cells = <0>; + skip_mux_detect = "yes"; + /*vcc-pullup-supply = <&battery_reg>;*/ + force_bus_start = ; + vcc_lp = "vcc"; + i2c@0 { + status = "okay"; + reg = <0>; + i2c-mux,deselect-on-exit; + #address-cells = <1>; + #size-cells = <0>; + + dser_a: max96712@29 { + status = "okay"; + reg = <0x29>; + compatible = "maxim,max96712"; + csi-mode = "2x4"; + max-src = <1>; + channel = "a"; + pwdn-gpios = <&gpio CAM0_PWDN GPIO_ACTIVE_HIGH>; + }; + + ser_a: max9295_a@40 { + status = "okay"; + compatible = "maxim,max9295"; + reg = <0x40>; + maxim,gmsl-dser-device = <&dser_a>; + }; + + ds5_3: ds5@1d { + status = "okay"; + def-addr = <0x10>; + reg = <0x1d>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "IMU"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser_a>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_3_out: endpoint { + vc-id = <3>; + port-index = <3>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in3>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_a"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <3>; + num-lanes = <2>; + }; + }; + + ds5_2: ds5@1c { + status = "okay"; + def-addr = <0x10>; + reg = <0x1c>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Y8"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser_a>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_2_out: endpoint { + vc-id = <2>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in2>; + }; + }; + }; + /* mode0: Y8, mode1: depth D16 */ + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_a"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <2>; + num-lanes = <2>; + }; + }; + + ds5_1: ds5@1b { + status = "okay"; + def-addr = <0x10>; + reg = <0x1b>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "RGB"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser_a>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_1_out: endpoint { + vc-id = <1>; + port-index = <1>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in1>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_a"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <1>; + num-lanes = <2>; + }; + }; + + ds5_0: ds5@1a { + status = "okay"; + def-addr = <0x10>; + reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Depth"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser_a>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_0_out: endpoint { + vc-id = <0>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in0>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_a"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <0>; + num-lanes = <2>; + }; + }; + }; + i2c@1 { + status = "okay"; + reg = <1>; + i2c-mux,deselect-on-exit; + #address-cells = <1>; + #size-cells = <0>; + + dser_b: max96712@29 { + status = "okay"; + reg = <0x29>; + compatible = "maxim,max96712"; + csi-mode = "2x4"; + max-src = <1>; + channel = "b"; + pwdn-gpios = <&gpio CAM1_PWDN GPIO_ACTIVE_HIGH>; + }; + + ser_b: max9295_b@40 { + status = "okay"; + compatible = "maxim,max9295"; + reg = <0x40>; + maxim,gmsl-dser-device = <&dser_b>; + }; + + ds5_7: ds5@1d { + status = "okay"; + def-addr = <0x10>; + reg = <0x1d>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "IMU"; + nvidia,gmsl-ser-device = <&ser_b>; + nvidia,gmsl-dser-device = <&dser_b>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_7_out: endpoint { + vc-id = <3>; + port-index = <7>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in7>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_c"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <3>; + num-lanes = <2>; + }; + }; + + ds5_6: ds5@1c { + status = "okay"; + def-addr = <0x10>; + reg = <0x1c>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Y8"; + nvidia,gmsl-ser-device = <&ser_b>; + nvidia,gmsl-dser-device = <&dser_b>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_6_out: endpoint { + vc-id = <2>; + port-index = <6>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in6>; + }; + }; + }; + /* mode0: Y8, mode1: depth D16 */ + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_c"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <2>; + num-lanes = <2>; + }; + }; + + ds5_5: ds5@1b { + status = "okay"; + def-addr = <0x10>; + reg = <0x1b>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "RGB"; + nvidia,gmsl-ser-device = <&ser_b>; + nvidia,gmsl-dser-device = <&dser_b>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_5_out: endpoint { + vc-id = <1>; + port-index = <5>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in5>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_c"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <1>; + num-lanes = <2>; + }; + }; + + ds5_4: ds5@1a { + status = "okay"; + def-addr = <0x10>; + reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Depth"; + nvidia,gmsl-ser-device = <&ser_b>; + nvidia,gmsl-dser-device = <&dser_b>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_4_out: endpoint { + vc-id = <0>; + port-index = <4>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in4>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_c"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <0>; + num-lanes = <2>; + }; + }; + }; + i2c@2 { + status = "okay"; + reg = <2>; + i2c-mux,deselect-on-exit; + #address-cells = <1>; + #size-cells = <0>; + + dser_c: max96712@29 { + status = "okay"; + reg = <0x29>; + compatible = "maxim,max96712"; + csi-mode = "2x4"; + max-src = <1>; + channel = "c"; + pwdn-gpios = <&gpio CAM2_PWDN GPIO_ACTIVE_HIGH>; + }; + + ser_c: max9295_c@40 { + status = "okay"; + compatible = "maxim,max9295"; + reg = <0x40>; + maxim,gmsl-dser-device = <&dser_c>; + }; + + ds5_11: ds5@1d { + status = "okay"; + def-addr = <0x10>; + reg = <0x1d>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "IMU"; + nvidia,gmsl-ser-device = <&ser_c>; + nvidia,gmsl-dser-device = <&dser_c>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_11_out: endpoint { + vc-id = <3>; + port-index = <11>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in11>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_e"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <3>; + num-lanes = <2>; + }; + }; + + ds5_10: ds5@1c { + status = "okay"; + def-addr = <0x10>; + reg = <0x1c>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Y8"; + nvidia,gmsl-ser-device = <&ser_c>; + nvidia,gmsl-dser-device = <&dser_c>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_10_out: endpoint { + vc-id = <2>; + port-index = <10>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in10>; + }; + }; + }; + /* mode0: Y8, mode1: depth D16 */ + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_e"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <2>; + num-lanes = <2>; + }; + }; + + ds5_9: ds5@1b { + status = "okay"; + def-addr = <0x10>; + reg = <0x1b>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "RGB"; + nvidia,gmsl-ser-device = <&ser_c>; + nvidia,gmsl-dser-device = <&dser_c>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_9_out: endpoint { + vc-id = <1>; + port-index = <9>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in9>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_e"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <1>; + num-lanes = <2>; + }; + }; + + ds5_8: ds5@1a { + status = "okay"; + def-addr = <0x10>; + reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Depth"; + nvidia,gmsl-ser-device = <&ser_c>; + nvidia,gmsl-dser-device = <&dser_c>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_8_out: endpoint { + vc-id = <0>; + port-index = <8>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in8>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_e"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <0>; + num-lanes = <2>; + }; + }; + }; + i2c@3 { + status = "okay"; + reg = <3>; + i2c-mux,deselect-on-exit; + #address-cells = <1>; + #size-cells = <0>; + + dser_d: max96712@29 { + status = "okay"; + reg = <0x29>; + compatible = "maxim,max96712"; + csi-mode = "2x4"; + max-src = <1>; + channel = "d"; + pwdn-gpios = <&gpio CAM3_PWDN GPIO_ACTIVE_HIGH>; + }; + + ser_d: max9295_d@40 { + status = "okay"; + compatible = "maxim,max9295"; + reg = <0x40>; + maxim,gmsl-dser-device = <&dser_d>; + }; + + ds5_15: ds5@1d { + status = "okay"; + def-addr = <0x10>; + reg = <0x1d>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "IMU"; + nvidia,gmsl-ser-device = <&ser_d>; + nvidia,gmsl-dser-device = <&dser_d>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_15_out: endpoint { + vc-id = <3>; + port-index = <15>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in15>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_g"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <3>; + num-lanes = <2>; + }; + }; + + ds5_14: ds5@1c { + status = "okay"; + def-addr = <0x10>; + reg = <0x1c>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Y8"; + nvidia,gmsl-ser-device = <&ser_d>; + nvidia,gmsl-dser-device = <&dser_d>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_14_out: endpoint { + vc-id = <2>; + port-index = <14>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in14>; + }; + }; + }; + /* mode0: Y8, mode1: depth D16 */ + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_g"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <2>; + num-lanes = <2>; + }; + }; + + ds5_13: ds5@1b { + status = "okay"; + def-addr = <0x10>; + reg = <0x1b>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "RGB"; + nvidia,gmsl-ser-device = <&ser_d>; + nvidia,gmsl-dser-device = <&dser_d>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_13_out: endpoint { + vc-id = <1>; + port-index = <13>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in13>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_g"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <1>; + num-lanes = <2>; + }; + }; + + ds5_12: ds5@1a { + status = "okay"; + def-addr = <0x10>; + reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Depth"; + nvidia,gmsl-ser-device = <&ser_d>; + nvidia,gmsl-dser-device = <&dser_d>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_12_out: endpoint { + vc-id = <0>; + port-index = <12>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in12>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_g"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <0>; + num-lanes = <2>; + }; + }; + }; + }; + }; + }; + }; + }; +}; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-quad.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-quad.dts index a1e131a6..5b497c1e 100644 --- a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-quad.dts +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch-quad.dts @@ -20,7 +20,7 @@ /* camera control gpio definitions */ / { - overlay-name = "Jetson RealSense Camera D457"; + overlay-name = "QUAD Jetson RealSense Camera D4xx with max96712 and tca9546 (fg12-16ch)"; jetson-header-name = "Jetson AGX CSI Connector"; compatible = JETSON_COMPATIBLE; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch.calib.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch.calib.dts new file mode 100644 index 00000000..c893a208 --- /dev/null +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch.calib.dts @@ -0,0 +1,434 @@ +// SPDX-License-Identifier: GPL-2.0-only +// SPDX-FileCopyrightText: Copyright (c) 2018-2023, INTEL CORPORATION. All rights reserved. + +/dts-v1/; +/plugin/; + +#include +#include +#include + +#define CAM0_PWDN TEGRA234_MAIN_GPIO(H, 6) //MAX96712_1 PWDN +//#define CAM1_PWDN TEGRA234_MAIN_GPIO(H, 3) //MAX96712_2 PWDN +//#define CAM2_PWDN TEGRA234_MAIN_GPIO(AC, 0) //MAX96712_3 PWDN +//#define CAM3_PWDN TEGRA234_MAIN_GPIO(AC, 1) //MAX96712_4 PWDN +#define CAM12V_POC TEGRA234_MAIN_GPIO(AC, 7) + +#define CAMERA_I2C_MUX_BUS(x) (0x1E + x) + + + +/* camera control gpio definitions */ +/ { + overlay-name = "Jetson RealSense Camera D4xx with max96712 and tca9546 (fg12-16ch) for Calibration"; + jetson-header-name = "Jetson AGX CSI Connector"; + compatible = JETSON_COMPATIBLE; + + fragment@1 { + target-path = "/"; + __overlay__ { + vdd_cam12v_poc: regulator-vdd-cam12v-poc { + compatible = "regulator-fixed"; + regulator-name = "vdd-cam12v-poc"; + regulator-min-microvolt = <12000000>; + regulator-max-microvolt = <12000000>; + gpio = <&gpio CAM12V_POC GPIO_ACTIVE_HIGH>; + enable-active-high; + }; + }; + }; + fragment@0 { + target-path = "/"; + __overlay__ { + tegra-capture-vi { + num-channels = <4>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_vi_in0: endpoint { + status = "okay"; + vc-id = <0>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out0>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_vi_in1: endpoint { + status = "okay"; + vc-id = <1>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out1>; + }; + }; + port@2 { + status = "okay"; + reg = <2>; + d4xx_vi_in2: endpoint { + status = "okay"; + vc-id = <2>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out2>; + }; + }; + port@3 { + status = "okay"; + reg = <3>; + d4xx_vi_in3: endpoint { + status = "okay"; + vc-id = <3>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out3>; + }; + }; + }; + }; + + bus@0 { + host1x@13e00000 { + nvcsi@15a00000 { + num-channels = <4>; + channel@0 { + status = "okay"; + reg = <0>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in0: endpoint@0 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_0_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out0: endpoint@1 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in0>; + }; + }; + }; + }; + channel@1 { + status = "okay"; + reg = <1>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in1: endpoint@2 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_1_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out1: endpoint@3 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in1>; + }; + }; + }; + }; + channel@2 { + status = "okay"; + reg = <2>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in2: endpoint@4 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_2_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out2: endpoint@5 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in2>; + }; + }; + }; + }; + channel@3 { + status = "okay"; + reg = <3>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in3: endpoint@6 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_3_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out3: endpoint@7 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in3>; + }; + }; + }; + }; + }; + }; + + i2c@3180000 { + clock-frequency = <100000>; + tca9546@70 { + status = "okay"; + reg = <0x70>; + compatible = "nxp,pca9546"; + #address-cells = <1>; + #size-cells = <0>; + skip_mux_detect = "yes"; + /*vcc-pullup-supply = <&battery_reg>;*/ + force_bus_start = ; + vcc_lp = "vcc"; + i2c@0 { + status = "okay"; + reg = <0>; + i2c-mux,deselect-on-exit; + #address-cells = <1>; + #size-cells = <0>; + + dser: max96712@29 { + status = "okay"; + reg = <0x29>; + compatible = "maxim,max96712"; + csi-mode = "2x4"; + max-src = <1>; + channel = "a"; + pwdn-gpios = <&gpio CAM0_PWDN GPIO_ACTIVE_HIGH>; + }; + + ser_a: max9295_a@40 { + status = "okay"; + compatible = "maxim,max9295"; + reg = <0x40>; + maxim,gmsl-dser-device = <&dser>; + }; + + ds5_3: ds5@1d { + status = "okay"; + def-addr = <0x10>; + reg = <0x1d>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "IMU"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_3_out: endpoint { + vc-id = <3>; + port-index = <3>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in3>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_b"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <3>; + num-lanes = <2>; + }; + }; + + ds5_2: ds5@1c { + status = "okay"; + def-addr = <0x10>; + reg = <0x1c>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Y8"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_2_out: endpoint { + vc-id = <2>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in2>; + }; + }; + }; + /* mode0: Y8, mode1: depth D16 */ + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_b"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <2>; + num-lanes = <2>; + }; + }; + + ds5_1: ds5@1b { + status = "okay"; + def-addr = <0x10>; + reg = <0x1b>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "RGB"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_1_out: endpoint { + vc-id = <1>; + port-index = <1>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in1>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_e"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <1>; + num-lanes = <2>; + }; + }; + + ds5_0: ds5@1a { + status = "okay"; + def-addr = <0x10>; + reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Depth"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_0_out: endpoint { + vc-id = <0>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in0>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_a"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <0>; + num-lanes = <2>; + }; + }; + }; + }; + }; + }; + }; + }; +}; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch.dts index e00885b4..ce095470 100644 --- a/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch.dts +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-fg12-16ch.dts @@ -20,7 +20,7 @@ /* camera control gpio definitions */ / { - overlay-name = "Jetson RealSense Camera D457"; + overlay-name = "Jetson RealSense Camera D4xx with max96712 and tca9546 (fg12-16ch)"; jetson-header-name = "Jetson AGX CSI Connector"; compatible = JETSON_COMPATIBLE; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-max96712-EVB.calib.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-max96712-EVB.calib.dts new file mode 100644 index 00000000..183e14fd --- /dev/null +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-max96712-EVB.calib.dts @@ -0,0 +1,409 @@ +// SPDX-License-Identifier: GPL-2.0-only +// SPDX-FileCopyrightText: Copyright (c) 2018-2023, INTEL CORPORATION. All rights reserved. + +/dts-v1/; +/plugin/; + +#include +#include +#include + +/* camera control gpio definitions */ +/ { + overlay-name = "Jetson RealSense Camera D4xx with max96712 and tca9548 for Calibration"; + jetson-header-name = "Jetson AGX CSI Connector"; + compatible = JETSON_COMPATIBLE; + + fragment@0 { + target-path = "/"; + __overlay__ { + tegra-capture-vi { + num-channels = <4>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_vi_in0: endpoint { + status = "okay"; + vc-id = <0>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out0>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_vi_in1: endpoint { + status = "okay"; + vc-id = <1>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out1>; + }; + }; + port@2 { + status = "okay"; + reg = <2>; + d4xx_vi_in2: endpoint { + status = "okay"; + vc-id = <2>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out2>; + }; + }; + port@3 { + status = "okay"; + reg = <3>; + d4xx_vi_in3: endpoint { + status = "okay"; + vc-id = <3>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_out3>; + }; + }; + }; + }; + + bus@0 { + host1x@13e00000 { + nvcsi@15a00000 { + num-channels = <4>; + channel@0 { + status = "okay"; + reg = <0>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in0: endpoint@0 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_0_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out0: endpoint@1 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in0>; + }; + }; + }; + }; + channel@1 { + status = "okay"; + reg = <1>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in1: endpoint@2 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_1_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out1: endpoint@3 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in1>; + }; + }; + }; + }; + channel@2 { + status = "okay"; + reg = <2>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in2: endpoint@4 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_2_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out2: endpoint@5 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in2>; + }; + }; + }; + }; + channel@3 { + status = "okay"; + reg = <3>; + ports { + status = "okay"; + port@0 { + status = "okay"; + reg = <0>; + d4xx_csi_in3: endpoint@6 { + status = "okay"; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&ds5_3_out>; + }; + }; + port@1 { + status = "okay"; + reg = <1>; + d4xx_csi_out3: endpoint@7 { + status = "okay"; + remote-endpoint = <&d4xx_vi_in3>; + }; + }; + }; + }; + }; + }; + + i2c@3180000 { + clock-frequency = <100000>; + tca9548@72 { + status = "okay"; + reg = <0x72>; + compatible = "nxp,pca9548"; + #address-cells = <1>; + #size-cells = <0>; + skip_mux_detect = "yes"; + /*vcc-pullup-supply = <&battery_reg>;*/ + vcc_lp = "vcc"; + i2c@0 { + status = "okay"; + reg = <0>; + i2c-mux,deselect-on-exit; + #address-cells = <1>; + #size-cells = <0>; + + dser: max96712@29 { + status = "okay"; + reg = <0x29>; + compatible = "maxim,max96712"; + csi-mode = "2x4"; + max-src = <1>; + channel = "a"; + }; + + ser_a: max9295_a@40 { + status = "okay"; + compatible = "maxim,max9295"; + reg = <0x40>; + maxim,gmsl-dser-device = <&dser>; + }; + + ds5_3: ds5@1d { + status = "okay"; + def-addr = <0x10>; + reg = <0x1d>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + //vcc-supply = <&vdd_cam12v_poc>; + cam-type = "IMU"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_3_out: endpoint { + vc-id = <3>; + port-index = <3>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in3>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_b"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <3>; + num-lanes = <2>; + }; + }; + + ds5_2: ds5@1c { + status = "okay"; + def-addr = <0x10>; + reg = <0x1c>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + //vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Y8"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_2_out: endpoint { + vc-id = <2>; + port-index = <2>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in2>; + }; + }; + }; + /* mode0: Y8, mode1: depth D16 */ + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_b"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "0"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <2>; + num-lanes = <2>; + }; + }; + + ds5_1: ds5@1b { + status = "okay"; + def-addr = <0x10>; + reg = <0x1b>; + override_reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + //vcc-supply = <&vdd_cam12v_poc>; + cam-type = "RGB"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_1_out: endpoint { + vc-id = <1>; + port-index = <1>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in1>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_e"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <1>; + num-lanes = <2>; + }; + }; + + ds5_0: ds5@1a { + status = "okay"; + def-addr = <0x10>; + reg = <0x1a>; + compatible = "intel,d4xx"; + use_sensor_mode_id = "true"; + //vcc-supply = <&vdd_cam12v_poc>; + cam-type = "Depth"; + nvidia,gmsl-ser-device = <&ser_a>; + nvidia,gmsl-dser-device = <&dser>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ds5_0_out: endpoint { + vc-id = <0>; + port-index = <0>; + bus-width = <2>; + remote-endpoint = <&d4xx_csi_in0>; + }; + }; + }; + mode0 { + pixel_t = "grey_y16"; + num_lanes = "2"; + csi_pixel_bit_depth = "16"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_a"; + mclk_khz = "24000"; + pix_clk_hz = "74250000"; + line_length = "1280"; /* 2200 */ + embedded_metadata_height = "1"; + }; + gmsl-link { + src-csi-port = "b"; + dst-csi-port = "a"; + serdes-csi-link = "a"; + csi-mode = "1x4"; + st-vc = <0>; + vc-id = <0>; + num-lanes = <2>; + }; + }; + }; + }; + }; + }; + }; + }; +}; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay-max96712-EVB.dts b/hardware/realsense/tegra234-camera-d4xx-overlay-max96712-EVB.dts index e691c434..445ad4f0 100644 --- a/hardware/realsense/tegra234-camera-d4xx-overlay-max96712-EVB.dts +++ b/hardware/realsense/tegra234-camera-d4xx-overlay-max96712-EVB.dts @@ -10,7 +10,7 @@ /* camera control gpio definitions */ / { - overlay-name = "Jetson RealSense Camera D457"; + overlay-name = "Jetson RealSense Camera D4xx with max96712 and tca9548"; jetson-header-name = "Jetson AGX CSI Connector"; compatible = JETSON_COMPATIBLE; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay.calib.dts b/hardware/realsense/tegra234-camera-d4xx-overlay.calib.dts index 3dc44670..242290cf 100644 --- a/hardware/realsense/tegra234-camera-d4xx-overlay.calib.dts +++ b/hardware/realsense/tegra234-camera-d4xx-overlay.calib.dts @@ -13,7 +13,7 @@ /* camera control gpio definitions */ / { - overlay-name = "Jetson RealSense Camera D457 Calibration"; + overlay-name = "Jetson RealSense Camera D4xx with max9296 and tca9548 for Calibration"; jetson-header-name = "Jetson AGX CSI Connector"; compatible = JETSON_COMPATIBLE; @@ -87,7 +87,7 @@ status = "okay"; port-index = <0>; bus-width = <2>; - remote-endpoint = <&d4m0_out>; + remote-endpoint = <&ds5_0_out>; }; }; port@1 { @@ -112,7 +112,7 @@ status = "okay"; port-index = <0>; bus-width = <2>; - remote-endpoint = <&d4m1_out>; + remote-endpoint = <&ds5_1_out>; }; }; port@1 { @@ -137,7 +137,7 @@ status = "okay"; port-index = <0>; bus-width = <2>; - remote-endpoint = <&d4m2_out>; + remote-endpoint = <&ds5_2_out>; }; }; port@1 { @@ -162,7 +162,7 @@ status = "okay"; port-index = <0>; bus-width = <2>; - remote-endpoint = <&d4m3_out>; + remote-endpoint = <&ds5_3_out>; }; }; port@1 { @@ -220,14 +220,15 @@ maxim,gmsl-dser-device = <&dser>; }; - d4m0: d4m@1a { + ds5_3: ds5@1d { status = "okay"; def-addr = <0x10>; - reg = <0x1a>; + reg = <0x1d>; + override_reg = <0x1a>; compatible = "intel,d4xx"; use_sensor_mode_id = "true"; vcc-supply = <&vdd_1v8_ls>; - cam-type = "Depth"; + cam-type = "IMU"; nvidia,gmsl-ser-device = <&ser_a>; nvidia,gmsl-dser-device = <&dser>; ports { @@ -236,11 +237,11 @@ port@0 { reg = <0>; - d4m0_out: endpoint { - vc-id = <0>; - port-index = <0>; + ds5_3_out: endpoint { + vc-id = <3>; + port-index = <3>; bus-width = <2>; - remote-endpoint = <&d4xx_csi_in0>; + remote-endpoint = <&d4xx_csi_in3>; }; }; }; @@ -248,13 +249,13 @@ pixel_t = "grey_y16"; num_lanes = "2"; csi_pixel_bit_depth = "16"; - active_w = "1280"; - active_h = "720"; - tegra_sinterface = "serial_a"; + active_w = "640"; + active_h = "480"; + tegra_sinterface = "serial_b"; mclk_khz = "24000"; pix_clk_hz = "74250000"; line_length = "1280"; /* 2200 */ - embedded_metadata_height = "1"; + embedded_metadata_height = "0"; }; gmsl-link { src-csi-port = "b"; @@ -262,27 +263,20 @@ serdes-csi-link = "a"; csi-mode = "1x4"; st-vc = <0>; - vc-id = <0>; + vc-id = <3>; num-lanes = <2>; }; }; - }; - i2c@1 { - status = "okay"; - reg = <3>; // line 3 of the I2C switch - i2c-mux,deselect-on-exit; - #address-cells = <1>; - #size-cells = <0>; - - d4m1: d4m@1a { + ds5_2: ds5@1c { status = "okay"; def-addr = <0x10>; - reg = <0x1a>; + reg = <0x1c>; + override_reg = <0x1a>; compatible = "intel,d4xx"; use_sensor_mode_id = "true"; vcc-supply = <&vdd_1v8_ls>; - cam-type = "RGB"; + cam-type = "Y8"; nvidia,gmsl-ser-device = <&ser_a>; nvidia,gmsl-dser-device = <&dser>; ports { @@ -291,25 +285,26 @@ port@0 { reg = <0>; - d4m1_out: endpoint { - vc-id = <1>; - port-index = <1>; + ds5_2_out: endpoint { + vc-id = <2>; + port-index = <2>; bus-width = <2>; - remote-endpoint = <&d4xx_csi_in1>; + remote-endpoint = <&d4xx_csi_in2>; }; }; }; + /* mode0: Y8, mode1: depth D16 */ mode0 { pixel_t = "grey_y16"; num_lanes = "2"; csi_pixel_bit_depth = "16"; - active_w = "1920"; - active_h = "1080"; - tegra_sinterface = "serial_e"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_b"; mclk_khz = "24000"; pix_clk_hz = "74250000"; line_length = "1280"; /* 2200 */ - embedded_metadata_height = "1"; + embedded_metadata_height = "0"; }; gmsl-link { src-csi-port = "b"; @@ -317,26 +312,20 @@ serdes-csi-link = "a"; csi-mode = "1x4"; st-vc = <0>; - vc-id = <1>; + vc-id = <2>; num-lanes = <2>; }; }; - }; - i2c@2 { - status = "okay"; - reg = <4>; // line 4 of the I2C switch - i2c-mux,deselect-on-exit; - #address-cells = <1>; - #size-cells = <0>; - d4m2: d4m@1a { + ds5_1: ds5@1b { status = "okay"; def-addr = <0x10>; - reg = <0x1a>; + reg = <0x1b>; + override_reg = <0x1a>; compatible = "intel,d4xx"; use_sensor_mode_id = "true"; vcc-supply = <&vdd_1v8_ls>; - cam-type = "Y8"; + cam-type = "RGB"; nvidia,gmsl-ser-device = <&ser_a>; nvidia,gmsl-dser-device = <&dser>; ports { @@ -345,26 +334,25 @@ port@0 { reg = <0>; - d4m2_out: endpoint { - vc-id = <2>; - port-index = <2>; + ds5_1_out: endpoint { + vc-id = <1>; + port-index = <1>; bus-width = <2>; - remote-endpoint = <&d4xx_csi_in2>; + remote-endpoint = <&d4xx_csi_in1>; }; }; }; - /* mode0: Y8, mode1: depth D16 */ mode0 { pixel_t = "grey_y16"; num_lanes = "2"; csi_pixel_bit_depth = "16"; - active_w = "1280"; - active_h = "720"; - tegra_sinterface = "serial_b"; + active_w = "1920"; + active_h = "1080"; + tegra_sinterface = "serial_e"; mclk_khz = "24000"; pix_clk_hz = "74250000"; line_length = "1280"; /* 2200 */ - embedded_metadata_height = "0"; + embedded_metadata_height = "1"; }; gmsl-link { src-csi-port = "b"; @@ -372,26 +360,19 @@ serdes-csi-link = "a"; csi-mode = "1x4"; st-vc = <0>; - vc-id = <2>; + vc-id = <1>; num-lanes = <2>; }; }; - }; - i2c@3 { - status = "okay"; - reg = <5>; // line 5 of the I2C switch - i2c-mux,deselect-on-exit; - #address-cells = <1>; - #size-cells = <0>; - d4m3: d4m@1a { + ds5_0: ds5@1a { status = "okay"; def-addr = <0x10>; reg = <0x1a>; compatible = "intel,d4xx"; use_sensor_mode_id = "true"; vcc-supply = <&vdd_1v8_ls>; - cam-type = "IMU"; + cam-type = "Depth"; nvidia,gmsl-ser-device = <&ser_a>; nvidia,gmsl-dser-device = <&dser>; ports { @@ -400,11 +381,11 @@ port@0 { reg = <0>; - d4m3_out: endpoint { - vc-id = <3>; - port-index = <3>; + ds5_0_out: endpoint { + vc-id = <0>; + port-index = <0>; bus-width = <2>; - remote-endpoint = <&d4xx_csi_in3>; + remote-endpoint = <&d4xx_csi_in0>; }; }; }; @@ -412,13 +393,13 @@ pixel_t = "grey_y16"; num_lanes = "2"; csi_pixel_bit_depth = "16"; - active_w = "640"; - active_h = "480"; - tegra_sinterface = "serial_b"; + active_w = "1280"; + active_h = "720"; + tegra_sinterface = "serial_a"; mclk_khz = "24000"; pix_clk_hz = "74250000"; line_length = "1280"; /* 2200 */ - embedded_metadata_height = "0"; + embedded_metadata_height = "1"; }; gmsl-link { src-csi-port = "b"; @@ -426,7 +407,7 @@ serdes-csi-link = "a"; csi-mode = "1x4"; st-vc = <0>; - vc-id = <3>; + vc-id = <0>; num-lanes = <2>; }; }; diff --git a/hardware/realsense/tegra234-camera-d4xx-overlay.dts b/hardware/realsense/tegra234-camera-d4xx-overlay.dts index ce709b60..4144b6c4 100644 --- a/hardware/realsense/tegra234-camera-d4xx-overlay.dts +++ b/hardware/realsense/tegra234-camera-d4xx-overlay.dts @@ -13,7 +13,7 @@ /* camera control gpio definitions */ / { - overlay-name = "Jetson RealSense Camera D457"; + overlay-name = "Jetson RealSense Camera D4xx with max9296 and tca9548"; jetson-header-name = "Jetson AGX CSI Connector"; compatible = JETSON_COMPATIBLE; diff --git a/kernel/realsense/d4xx.c b/kernel/realsense/d4xx.c index 83035522..e572fc19 100644 --- a/kernel/realsense/d4xx.c +++ b/kernel/realsense/d4xx.c @@ -1698,6 +1698,7 @@ static int ds5_configure(struct ds5 *state) u16 fmt, md_fmt, vc_id; #ifdef CONFIG_VIDEO_D4XX_SERDES u16 data_type1, data_type2; + bool is_calib = 0; #endif u16 dt_addr, md_addr, override_addr, fps_addr, width_addr, height_addr; u16 dt_value = 0; @@ -1753,7 +1754,8 @@ static int ds5_configure(struct ds5 *state) #ifdef CONFIG_VIDEO_D4XX_SERDES data_type1 = sensor->config.format->data_type; - data_type2 = state->is_imu ? 0x00 : md_fmt; + is_calib = (state->is_y8 && (data_type1 == GMSL_CSI_DT_RGB_888)); + data_type2 = (state->is_imu || is_calib) ? 0x00 : md_fmt; vc_id = state->g_ctx.dst_vc; if (!sensor->pipe_configured || @@ -1789,7 +1791,7 @@ static int ds5_configure(struct ds5 *state) ret = ds5_setup_pipeline(state, data_type1, data_type2, sensor->pipe_id, vc_id); // reset data path when switching to Y12I - if (state->is_y8 && data_type1 == GMSL_CSI_DT_RGB_888) + if (is_calib) state->dser_ops->reset_oneshot(state->dser_dev); if (ret < 0) return ret; @@ -6039,4 +6041,4 @@ MODULE_AUTHOR("Guennadi Liakhovetski ,\n\ Shikun Ding ,\n\ Dmitry Perchanov "); MODULE_LICENSE("GPL v2"); -MODULE_VERSION("1.0.2.9"); +MODULE_VERSION("1.0.2.10");