Okay, can you help me debug this? Here are the patches we are applying to device tree.
diff --git a/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-camera-imx390-a00.dtsi b/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-camera-imx390-a00.dtsi
index 715f8287db7a..82c435234bed 100644
--- a/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-camera-imx390-a00.dtsi
+++ b/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-camera-imx390-a00.dtsi
@@ -18,93 +20,1255 @@
/ {
host1x {
vi@15c10000 {
- num-channels = <2>;
+ num-channels = <8>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
- imx390_vi_in0: endpoint {
+ imx490_vi_in0: endpoint {
vc-id = <0>;
port-index = <0>;
- bus-width = <2>;
- remote-endpoint = <&imx390_csi_out0>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_out0>;
};
};
port@1 {
reg = <1>;
- imx390_vi_in1: endpoint {
+ imx490_vi_in1: endpoint {
vc-id = <1>;
port-index = <0>;
- bus-width = <2>;
- remote-endpoint = <&imx390_csi_out1>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_out1>;
+ };
+ };
+ port@2 {
+ reg = <2>;
+ imx490_vi_in2: endpoint {
+ vc-id = <0>;
+ port-index = <2>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_out2>;
+ };
+ };
+ port@3 {
+ reg = <3>;
+ imx490_vi_in3: endpoint {
+ vc-id = <1>;
+ port-index = <2>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_out3>;
+ };
+ };
+ port@4 {
+ reg = <4>;
+ imx490_vi_in4: endpoint {
+ vc-id = <0>;
+ port-index = <4>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_out4>;
+ };
+ };
+ port@5 {
+ reg = <5>;
+ imx490_vi_in5: endpoint {
+ vc-id = <1>;
+ port-index = <4>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_out5>;
+ };
+ };
+ port@6 {
+ reg = <6>;
+ imx490_vi_in6: endpoint {
+ vc-id = <0>;
+ port-index = <5>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_out6>;
+ };
+ };
+ port@7 {
+ reg = <7>;
+ imx490_vi_in7: endpoint {
+ vc-id = <1>;
+ port-index = <5>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_out7>;
+ };
+ };
+ };
+ };
+
+ nvcsi@15a00000 {
+ num-channels = <8>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ channel@0 {
+ reg = <0>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_csi_in0: endpoint@0 {
+ port-index = <0>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_imx490_out0>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ imx490_csi_out0: endpoint@1 {
+ remote-endpoint = <&imx490_vi_in0>;
+ };
+ };
+ };
+ };
+ channel@1 {
+ reg = <1>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_csi_in1: endpoint@2 {
+ port-index = <0>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_imx490_out1>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ imx490_csi_out1: endpoint@3 {
+ remote-endpoint = <&imx490_vi_in1>;
+ };
+ };
+ };
+ };
+ channel@2 {
+ reg = <2>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_csi_in2: endpoint@4 {
+ port-index = <2>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_imx490_out2>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ imx490_csi_out2: endpoint@5 {
+ remote-endpoint = <&imx490_vi_in2>;
+ };
+ };
+ };
+ };
+ channel@3 {
+ reg = <3>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_csi_in3: endpoint@6 {
+ port-index = <2>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_imx490_out3>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ imx490_csi_out3: endpoint@7 {
+ remote-endpoint = <&imx490_vi_in3>;
+ };
+ };
+ };
+ };
+ channel@4 {
+ reg = <4>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_csi_in4: endpoint@8 {
+ port-index = <4>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_imx490_out4>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ imx490_csi_out4: endpoint@9 {
+ remote-endpoint = <&imx490_vi_in4>;
+ };
+ };
+ };
+ };
+ channel@5 {
+ reg = <5>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_csi_in5: endpoint@10 {
+ port-index = <4>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_imx490_out5>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ imx490_csi_out5: endpoint@11 {
+ remote-endpoint = <&imx490_vi_in5>;
+ };
+ };
+ };
+ };
+ channel@6 {
+ reg = <6>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_csi_in6: endpoint@12 {
+ port-index = <6>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_imx490_out6>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ imx490_csi_out6: endpoint@13 {
+ remote-endpoint = <&imx490_vi_in6>;
+ };
+ };
+ };
+ };
+ channel@7 {
+ reg = <7>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_csi_in7: endpoint@14 {
+ port-index = <6>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_imx490_out7>;
+ };
+ };
+ port@1 {
+ reg = <1>;
+ imx490_csi_out7: endpoint@15 {
+ remote-endpoint = <&imx490_vi_in7>;
+ };
};
};
};
};
+ };
+
+ i2c@3180000 {
+ tca9546@70 {
+ i2c@0 {
+ imx490_a@1b {
+ compatible = "nvidia,imx490";
+
+ reg = <0x1b>;
+
+ /* Physical dimensions of sensor */
+ physical_w = "3.764";
+ physical_h = "2.738";
+
+ sensor_model = "imx490";
+
+ /* Defines number of frames to be dropped by driver internally after applying */
+ /* sensor crop settings. Some sensors send corrupt frames after applying */
+ /* crop co-ordinates */
+ post_crop_frame_drop = "0";
+
+ /* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+ use_decibel_gain = "true";
+
+ /* enable CID_SENSOR_MODE_ID for sensor modes selection */
+ use_sensor_mode_id = "true";
+
+ /**
+ * A modeX node is required to support v4l2 driver
+ * implementation with NVIDIA camera software stack
+ *
+ * mclk_khz = "";
+ * Standard MIPI driving clock, typically 24MHz
+ *
+ * num_lanes = "";
+ * Number of lane channels sensor is programmed to output
+ *
+ * tegra_sinterface = "";
+ * The base tegra serial interface lanes are connected to
+ *
+ * vc_id = "";
+ * The virtual channel id of the sensor.
+ *
+ * discontinuous_clk = "";
+ * The sensor is programmed to use a discontinuous clock on MIPI lanes
+ *
+ * dpcm_enable = "true";
+ * The sensor is programmed to use a DPCM modes
+ *
+ * cil_settletime = "";
+ * MIPI lane settle time value.
+ * A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+ *
+ * active_w = "";
+ * Pixel active region width
+ *
+ * active_h = "";
+ * Pixel active region height
+ *
+ * dynamic_pixel_bit_depth = "";
+ * sensor dynamic bit depth for sensor mode
+ *
+ * csi_pixel_bit_depth = "";
+ * sensor output bit depth for sensor mode
+ *
+ * mode_type="";
+ * Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+ *
+ * pixel_phase="";
+ * Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+ *
+ * readout_orientation = "0";
+ * Based on camera module orientation.
+ * Only change readout_orientation if you specifically
+ * Program a different readout order for this mode
+ *
+ * line_length = "";
+ * Pixel line length (width) for sensor mode.
+ * This is used to calibrate features in our camera stack.
+ *
+ * pix_clk_hz = "";
+ * Sensor pixel clock used for calculations like exposure and framerate
+ *
+ *
+ *
+ *
+ * inherent_gain = "";
+ * Gain obtained inherently from mode (ie. pixel binning)
+ *
+ * min_gain_val = ""; (floor to 6 decimal places)
+ * max_gain_val = ""; (floor to 6 decimal places)
+ * Gain limits for mode
+ * if use_decibel_gain = "true", please set the gain as decibel
+ *
+ * min_exp_time = ""; (ceil to integer)
+ * max_exp_time = ""; (ceil to integer)
+ * Exposure Time limits for mode (lines per exposure)
+ *
+ *
+ * min_hdr_ratio = "";
+ * max_hdr_ratio = "";
+ * HDR Ratio limits for mode
+ *
+ * min_framerate = "";
+ * max_framerate = "";
+ * Framerate limits for mode (fps)
+ *
+ * embedded_metadata_height = "";
+ * Sensor embedded metadata height in units of rows.
+ * If sensor does not support embedded metadata value should be 0.
+ */
+
+ mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+ mclk_khz = "24000";
+ num_lanes = "4";
+ tegra_sinterface = "serial_a";
+ vc_id = "0";
+ discontinuous_clk = "no";
+ dpcm_enable = "false";
+ cil_settletime = "0";
+ dynamic_pixel_bit_depth = "12";
+ csi_pixel_bit_depth = "12";
+ mode_type = "bayer";
+ pixel_phase = "rggb";
+ num_of_ignored_lines = "4"; /* optical black */
+
+ active_w = "2880";
+ active_h = "1860";
+ readout_orientation = "0";
+ line_length = "3000";
+ inherent_gain = "1";
+ pix_clk_hz = "180000000";
+ serdes_pix_clk_hz = "833333333";
+
+ gain_factor = "10";
+ min_gain_val = "0"; /* dB */
+ max_gain_val = "300"; /* dB */
+ step_gain_val = "3"; /* 0.3 */
+ default_gain = "0";
+ min_hdr_ratio = "1";
+ max_hdr_ratio = "1";
+ framerate_factor = "1000000";
+ min_framerate = "20000000";
+ max_framerate = "20000000";
+ step_framerate = "1";
+ default_framerate = "20000000";
+ exposure_factor = "1000000";
+ min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+ max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+ step_exp_time = "1";
+ default_exp_time = "500";
+ embedded_metadata_height = "0";
+ };
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_imx490_out0: endpoint {
+ vc-id = <0>;
+ port-index = <0>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_in0>;
+ };
+ };
+ };
+ };
+
+ imx490_b@1c {
+ compatible = "nvidia,imx490";
+
+ reg = <0x1c>;
+
+ /* Physical dimensions of sensor */
+ physical_w = "3.764";
+ physical_h = "2.738";
+
+ sensor_model = "imx490";
+
+ /* Defines number of frames to be dropped by driver internally after applying */
+ /* sensor crop settings. Some sensors send corrupt frames after applying */
+ /* crop co-ordinates */
+ post_crop_frame_drop = "0";
+
+ /* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+ use_decibel_gain = "true";
+
+ /* enable CID_SENSOR_MODE_ID for sensor modes selection */
+ use_sensor_mode_id = "true";
+
+ /**
+ * A modeX node is required to support v4l2 driver
+ * implementation with NVIDIA camera software stack
+ *
+ * mclk_khz = "";
+ * Standard MIPI driving clock, typically 24MHz
+ *
+ * num_lanes = "";
+ * Number of lane channels sensor is programmed to output
+ *
+ * tegra_sinterface = "";
+ * The base tegra serial interface lanes are connected to
+ *
+ * vc_id = "";
+ * The virtual channel id of the sensor.
+ *
+ * discontinuous_clk = "";
+ * The sensor is programmed to use a discontinuous clock on MIPI lanes
+ *
+ * dpcm_enable = "true";
+ * The sensor is programmed to use a DPCM modes
+ *
+ * cil_settletime = "";
+ * MIPI lane settle time value.
+ * A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+ *
+ * active_w = "";
+ * Pixel active region width
+ *
+ * active_h = "";
+ * Pixel active region height
+ *
+ * dynamic_pixel_bit_depth = "";
+ * sensor dynamic bit depth for sensor mode
+ *
+ * csi_pixel_bit_depth = "";
+ * sensor output bit depth for sensor mode
+ *
+ * mode_type="";
+ * Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+ *
+ * pixel_phase="";
+ * Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+ *
+ * readout_orientation = "0";
+ * Based on camera module orientation.
+ * Only change readout_orientation if you specifically
+ * Program a different readout order for this mode
+ *
+ * line_length = "";
+ * Pixel line length (width) for sensor mode.
+ * This is used to calibrate features in our camera stack.
+ *
+ * pix_clk_hz = "";
+ * Sensor pixel clock used for calculations like exposure and framerate
+ *
+ *
+ *
+ *
+ * inherent_gain = "";
+ * Gain obtained inherently from mode (ie. pixel binning)
+ *
+ * min_gain_val = ""; (floor to 6 decimal places)
+ * max_gain_val = ""; (floor to 6 decimal places)
+ * Gain limits for mode
+ * if use_decibel_gain = "true", please set the gain as decibel
+ *
+ * min_exp_time = ""; (ceil to integer)
+ * max_exp_time = ""; (ceil to integer)
+ * Exposure Time limits for mode (lines per exposure)
+ *
+ *
+ * min_hdr_ratio = "";
+ * max_hdr_ratio = "";
+ * HDR Ratio limits for mode
+ *
+ * min_framerate = "";
+ * max_framerate = "";
+ * Framerate limits for mode (fps)
+ *
+ * embedded_metadata_height = "";
+ * Sensor embedded metadata height in units of rows.
+ * If sensor does not support embedded metadata value should be 0.
+ */
+
+ mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+ mclk_khz = "24000";
+ num_lanes = "4";
+ tegra_sinterface = "serial_a";
+ vc_id = "1";
+ discontinuous_clk = "no";
+ dpcm_enable = "false";
+ cil_settletime = "0";
+ dynamic_pixel_bit_depth = "12";
+ csi_pixel_bit_depth = "12";
+ mode_type = "bayer";
+ pixel_phase = "rggb";
+ num_of_ignored_lines = "4"; /* optical black */
+
+ active_w = "2880";
+ active_h = "1860";
+ readout_orientation = "0";
+ line_length = "3000";
+ inherent_gain = "1";
+ pix_clk_hz = "180000000";
+ serdes_pix_clk_hz = "833333333";
+
+ gain_factor = "10";
+ min_gain_val = "0"; /* dB */
+ max_gain_val = "300"; /* dB */
+ step_gain_val = "3"; /* 0.3 */
+ default_gain = "0";
+ min_hdr_ratio = "1";
+ max_hdr_ratio = "1";
+ framerate_factor = "1000000";
+ min_framerate = "20000000";
+ max_framerate = "20000000";
+ step_framerate = "1";
+ default_framerate = "20000000";
+ exposure_factor = "1000000";
+ min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+ max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+ step_exp_time = "1";
+ default_exp_time = "500";
+ embedded_metadata_height = "0";
+ };
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_imx490_out1: endpoint {
+ vc-id = <1>;
+ port-index = <0>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_in1>;
+ };
+ };
+ };
+ };
+ };
+ i2c@1 {
+ imx490_c@1b {
+ compatible = "nvidia,imx490";
+
+ reg = <0x1b>;
+
+ /* Physical dimensions of sensor */
+ physical_w = "3.764";
+ physical_h = "2.738";
+
+ sensor_model ="imx490";
+
+ /* Defines number of frames to be dropped by driver internally after applying */
+ /* sensor crop settings. Some sensors send corrupt frames after applying */
+ /* crop co-ordinates */
+ post_crop_frame_drop = "0";
+
+ /* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+ use_decibel_gain = "true";
+
+ /* enable CID_SENSOR_MODE_ID for sensor modes selection */
+ use_sensor_mode_id = "true";
+
+ /**
+ * A modeX node is required to support v4l2 driver
+ * implementation with NVIDIA camera software stack
+ *
+ * mclk_khz = "";
+ * Standard MIPI driving clock, typically 24MHz
+ *
+ * num_lanes = "";
+ * Number of lane channels sensor is programmed to output
+ *
+ * tegra_sinterface = "";
+ * The base tegra serial interface lanes are connected to
+ *
+ * vc_id = "";
+ * The virtual channel id of the sensor.
+ *
+ * discontinuous_clk = "";
+ * The sensor is programmed to use a discontinuous clock on MIPI lanes
+ *
+ * dpcm_enable = "true";
+ * The sensor is programmed to use a DPCM modes
+ *
+ * cil_settletime = "";
+ * MIPI lane settle time value.
+ * A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+ *
+ * active_w = "";
+ * Pixel active region width
+ *
+ * active_h = "";
+ * Pixel active region height
+ *
+ * dynamic_pixel_bit_depth = "";
+ * sensor dynamic bit depth for sensor mode
+ *
+ * csi_pixel_bit_depth = "";
+ * sensor output bit depth for sensor mode
+ *
+ * mode_type="";
+ * Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+ *
+ * pixel_phase="";
+ * Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+ *
+ * readout_orientation = "0";
+ * Based on camera module orientation.
+ * Only change readout_orientation if you specifically
+ * Program a different readout order for this mode
+ *
+ * line_length = "";
+ * Pixel line length (width) for sensor mode.
+ * This is used to calibrate features in our camera stack.
+ *
+ * pix_clk_hz = "";
+ * Sensor pixel clock used for calculations like exposure and framerate
+ *
+ *
+ *
+ *
+ * inherent_gain = "";
+ * Gain obtained inherently from mode (ie. pixel binning)
+ *
+ * min_gain_val = ""; (floor to 6 decimal places)
+ * max_gain_val = ""; (floor to 6 decimal places)
+ * Gain limits for mode
+ * if use_decibel_gain = "true", please set the gain as decibel
+ *
+ * min_exp_time = ""; (ceil to integer)
+ * max_exp_time = ""; (ceil to integer)
+ * Exposure Time limits for mode (lines per exposure)
+ *
+ *
+ * min_hdr_ratio = "";
+ * max_hdr_ratio = "";
+ * HDR Ratio limits for mode
+ *
+ * min_framerate = "";
+ * max_framerate = "";
+ * Framerate limits for mode (fps)
+ *
+ * embedded_metadata_height = "";
+ * Sensor embedded metadata height in units of rows.
+ * If sensor does not support embedded metadata value should be 0.
+ */
+
+ mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+ mclk_khz = "24000";
+ num_lanes = "4";
+ tegra_sinterface = "serial_c";
+ vc_id = "0";
+ discontinuous_clk = "no";
+ dpcm_enable = "false";
+ cil_settletime = "0";
+ dynamic_pixel_bit_depth = "12";
+ csi_pixel_bit_depth = "12";
+ mode_type = "bayer";
+ pixel_phase = "rggb";
+ num_of_ignored_lines = "4"; /* optical black */
+
+ active_w = "2880";
+ active_h = "1860";
+ readout_orientation = "0";
+ line_length = "3000";
+ inherent_gain = "1";
+ pix_clk_hz = "180000000";
+ serdes_pix_clk_hz = "833333333";
+
+ gain_factor = "10";
+ min_gain_val = "0"; /* dB */
+ max_gain_val = "300"; /* dB */
+ step_gain_val = "3"; /* 0.3 */
+ default_gain = "0";
+ min_hdr_ratio = "1";
+ max_hdr_ratio = "1";
+ framerate_factor = "1000000";
+ min_framerate = "20000000";
+ max_framerate = "20000000";
+ step_framerate = "1";
+ default_framerate = "20000000";
+ exposure_factor = "1000000";
+ min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+ max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+ step_exp_time = "1";
+ default_exp_time = "500";
+ embedded_metadata_height = "0";
+ };
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_imx490_out2: endpoint {
+ vc-id = <0>;
+ port-index = <2>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_in2>;
+ };
+ };
+ };
+ };
+
+ imx490_d@1c {
+ compatible = "nvidia,imx490";
+
+ reg = <0x1c>;
+
+ /* Physical dimensions of sensor */
+ physical_w = "3.764";
+ physical_h = "2.738";
+
+ sensor_model ="imx490";
+
+ /* Defines number of frames to be dropped by driver internally after applying */
+ /* sensor crop settings. Some sensors send corrupt frames after applying */
+ /* crop co-ordinates */
+ post_crop_frame_drop = "0";
+
+ /* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+ use_decibel_gain = "true";
+
+ /* enable CID_SENSOR_MODE_ID for sensor modes selection */
+ use_sensor_mode_id = "true";
+
+ /**
+ * A modeX node is required to support v4l2 driver
+ * implementation with NVIDIA camera software stack
+ *
+ * mclk_khz = "";
+ * Standard MIPI driving clock, typically 24MHz
+ *
+ * num_lanes = "";
+ * Number of lane channels sensor is programmed to output
+ *
+ * tegra_sinterface = "";
+ * The base tegra serial interface lanes are connected to
+ *
+ * vc_id = "";
+ * The virtual channel id of the sensor.
+ *
+ * discontinuous_clk = "";
+ * The sensor is programmed to use a discontinuous clock on MIPI lanes
+ *
+ * dpcm_enable = "true";
+ * The sensor is programmed to use a DPCM modes
+ *
+ * cil_settletime = "";
+ * MIPI lane settle time value.
+ * A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+ *
+ * active_w = "";
+ * Pixel active region width
+ *
+ * active_h = "";
+ * Pixel active region height
+ *
+ * dynamic_pixel_bit_depth = "";
+ * sensor dynamic bit depth for sensor mode
+ *
+ * csi_pixel_bit_depth = "";
+ * sensor output bit depth for sensor mode
+ *
+ * mode_type="";
+ * Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+ *
+ * pixel_phase="";
+ * Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+ *
+ * readout_orientation = "0";
+ * Based on camera module orientation.
+ * Only change readout_orientation if you specifically
+ * Program a different readout order for this mode
+ *
+ * line_length = "";
+ * Pixel line length (width) for sensor mode.
+ * This is used to calibrate features in our camera stack.
+ *
+ * pix_clk_hz = "";
+ * Sensor pixel clock used for calculations like exposure and framerate
+ *
+ *
+ *
+ *
+ * inherent_gain = "";
+ * Gain obtained inherently from mode (ie. pixel binning)
+ *
+ * min_gain_val = ""; (floor to 6 decimal places)
+ * max_gain_val = ""; (floor to 6 decimal places)
+ * Gain limits for mode
+ * if use_decibel_gain = "true", please set the gain as decibel
+ *
+ * min_exp_time = ""; (ceil to integer)
+ * max_exp_time = ""; (ceil to integer)
+ * Exposure Time limits for mode (lines per exposure)
+ *
+ *
+ * min_hdr_ratio = "";
+ * max_hdr_ratio = "";
+ * HDR Ratio limits for mode
+ *
+ * min_framerate = "";
+ * max_framerate = "";
+ * Framerate limits for mode (fps)
+ *
+ * embedded_metadata_height = "";
+ * Sensor embedded metadata height in units of rows.
+ * If sensor does not support embedded metadata value should be 0.
+ */
+
+ mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+ mclk_khz = "24000";
+ num_lanes = "4";
+ tegra_sinterface = "serial_c";
+ vc_id = "1";
+ discontinuous_clk = "no";
+ dpcm_enable = "false";
+ cil_settletime = "0";
+ dynamic_pixel_bit_depth = "12";
+ csi_pixel_bit_depth = "12";
+ mode_type = "bayer";
+ pixel_phase = "rggb";
+ num_of_ignored_lines = "4"; /* optical black */
+
+ active_w = "2880";
+ active_h = "1860";
+ readout_orientation = "0";
+ line_length = "3000";
+ inherent_gain = "1";
+ pix_clk_hz = "180000000";
+ serdes_pix_clk_hz = "833333333";
+
+ gain_factor = "10";
+ min_gain_val = "0"; /* dB */
+ max_gain_val = "300"; /* dB */
+ step_gain_val = "3"; /* 0.3 */
+ default_gain = "0";
+ min_hdr_ratio = "1";
+ max_hdr_ratio = "1";
+ framerate_factor = "1000000";
+ min_framerate = "20000000";
+ max_framerate = "20000000";
+ step_framerate = "1";
+ default_framerate = "20000000";
+ exposure_factor = "1000000";
+ min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+ max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+ step_exp_time = "1";
+ default_exp_time = "500";
+ embedded_metadata_height = "0";
+ };
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ imx490_imx490_out3: endpoint {
+ vc-id = <1>;
+ port-index = <2>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_in3>;
+ };
+ };
+ };
+ };
+ };
+ i2c@2 {
+ imx490_e@1b {
+ compatible = "nvidia,imx490";
+
+ reg = <0x1b>;
+
+ /* Physical dimensions of sensor */
+ physical_w = "3.764";
+ physical_h = "2.738";
+
+ sensor_model ="imx490";
+
+ /* Defines number of frames to be dropped by driver internally after applying */
+ /* sensor crop settings. Some sensors send corrupt frames after applying */
+ /* crop co-ordinates */
+ post_crop_frame_drop = "0";
+
+ /* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+ use_decibel_gain = "true";
+
+ /* enable CID_SENSOR_MODE_ID for sensor modes selection */
+ use_sensor_mode_id = "true";
+
+ /**
+ * A modeX node is required to support v4l2 driver
+ * implementation with NVIDIA camera software stack
+ *
+ * mclk_khz = "";
+ * Standard MIPI driving clock, typically 24MHz
+ *
+ * num_lanes = "";
+ * Number of lane channels sensor is programmed to output
+ *
+ * tegra_sinterface = "";
+ * The base tegra serial interface lanes are connected to
+ *
+ * vc_id = "";
+ * The virtual channel id of the sensor.
+ *
+ * discontinuous_clk = "";
+ * The sensor is programmed to use a discontinuous clock on MIPI lanes
+ *
+ * dpcm_enable = "true";
+ * The sensor is programmed to use a DPCM modes
+ *
+ * cil_settletime = "";
+ * MIPI lane settle time value.
+ * A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+ *
+ * active_w = "";
+ * Pixel active region width
+ *
+ * active_h = "";
+ * Pixel active region height
+ *
+ * dynamic_pixel_bit_depth = "";
+ * sensor dynamic bit depth for sensor mode
+ *
+ * csi_pixel_bit_depth = "";
+ * sensor output bit depth for sensor mode
+ *
+ * mode_type="";
+ * Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+ *
+ * pixel_phase="";
+ * Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+ *
+ * readout_orientation = "0";
+ * Based on camera module orientation.
+ * Only change readout_orientation if you specifically
+ * Program a different readout order for this mode
+ *
+ * line_length = "";
+ * Pixel line length (width) for sensor mode.
+ * This is used to calibrate features in our camera stack.
+ *
+ * pix_clk_hz = "";
+ * Sensor pixel clock used for calculations like exposure and framerate
+ *
+ *
+ *
+ *
+ * inherent_gain = "";
+ * Gain obtained inherently from mode (ie. pixel binning)
+ *
+ * min_gain_val = ""; (floor to 6 decimal places)
+ * max_gain_val = ""; (floor to 6 decimal places)
+ * Gain limits for mode
+ * if use_decibel_gain = "true", please set the gain as decibel
+ *
+ * min_exp_time = ""; (ceil to integer)
+ * max_exp_time = ""; (ceil to integer)
+ * Exposure Time limits for mode (lines per exposure)
+ *
+ *
+ * min_hdr_ratio = "";
+ * max_hdr_ratio = "";
+ * HDR Ratio limits for mode
+ *
+ * min_framerate = "";
+ * max_framerate = "";
+ * Framerate limits for mode (fps)
+ *
+ * embedded_metadata_height = "";
+ * Sensor embedded metadata height in units of rows.
+ * If sensor does not support embedded metadata value should be 0.
+ */
- nvcsi@15a00000 {
- num-channels = <2>;
- #address-cells = <1>;
- #size-cells = <0>;
- channel@0 {
- reg = <0>;
+ mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+ mclk_khz = "24000";
+ num_lanes = "4";
+ tegra_sinterface = "serial_e";
+ vc_id = "0";
+ discontinuous_clk = "no";
+ dpcm_enable = "false";
+ cil_settletime = "0";
+ dynamic_pixel_bit_depth = "12";
+ csi_pixel_bit_depth = "12";
+ mode_type = "bayer";
+ pixel_phase = "rggb";
+ num_of_ignored_lines = "4"; /* optical black */
+
+ active_w = "2880";
+ active_h = "1860";
+ readout_orientation = "0";
+ line_length = "3000";
+ inherent_gain = "1";
+ pix_clk_hz = "180000000";
+ serdes_pix_clk_hz = "833333333";
+
+ gain_factor = "10";
+ min_gain_val = "0"; /* dB */
+ max_gain_val = "300"; /* dB */
+ step_gain_val = "3"; /* 0.3 */
+ default_gain = "0";
+ min_hdr_ratio = "1";
+ max_hdr_ratio = "1";
+ framerate_factor = "1000000";
+ min_framerate = "20000000";
+ max_framerate = "20000000";
+ step_framerate = "1";
+ default_framerate = "20000000";
+ exposure_factor = "1000000";
+ min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+ max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+ step_exp_time = "1";
+ default_exp_time = "500";
+ embedded_metadata_height = "0";
+ };
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
- imx390_csi_in0: endpoint@0 {
- port-index = <0>;
- bus-width = <2>;
- remote-endpoint = <&imx390_imx390_out0>;
- };
- };
- port@1 {
- reg = <1>;
- imx390_csi_out0: endpoint@1 {
- remote-endpoint = <&imx390_vi_in0>;
+ imx490_imx490_out4: endpoint {
+ vc-id = <0>;
+ port-index = <4>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_in4>;
};
};
};
};
- channel@1 {
- reg = <1>;
+
+ imx490_f@1c {
+ compatible = "nvidia,imx490";
+
+ reg = <0x1c>;
+
+ /* Physical dimensions of sensor */
+ physical_w = "3.764";
+ physical_h = "2.738";
+
+ sensor_model ="imx490";
+
+ /* Defines number of frames to be dropped by driver internally after applying */
+ /* sensor crop settings. Some sensors send corrupt frames after applying */
+ /* crop co-ordinates */
+ post_crop_frame_drop = "0";
+
+ /* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+ use_decibel_gain = "true";
+
+ /* enable CID_SENSOR_MODE_ID for sensor modes selection */
+ use_sensor_mode_id = "true";
+
+ /**
+ * A modeX node is required to support v4l2 driver
+ * implementation with NVIDIA camera software stack
+ *
+ * mclk_khz = "";
+ * Standard MIPI driving clock, typically 24MHz
+ *
+ * num_lanes = "";
+ * Number of lane channels sensor is programmed to output
+ *
+ * tegra_sinterface = "";
+ * The base tegra serial interface lanes are connected to
+ *
+ * vc_id = "";
+ * The virtual channel id of the sensor.
+ *
+ * discontinuous_clk = "";
+ * The sensor is programmed to use a discontinuous clock on MIPI lanes
+ *
+ * dpcm_enable = "true";
+ * The sensor is programmed to use a DPCM modes
+ *
+ * cil_settletime = "";
+ * MIPI lane settle time value.
+ * A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+ *
+ * active_w = "";
+ * Pixel active region width
+ *
+ * active_h = "";
+ * Pixel active region height
+ *
+ * dynamic_pixel_bit_depth = "";
+ * sensor dynamic bit depth for sensor mode
+ *
+ * csi_pixel_bit_depth = "";
+ * sensor output bit depth for sensor mode
+ *
+ * mode_type="";
+ * Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+ *
+ * pixel_phase="";
+ * Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+ *
+ * readout_orientation = "0";
+ * Based on camera module orientation.
+ * Only change readout_orientation if you specifically
+ * Program a different readout order for this mode
+ *
+ * line_length = "";
+ * Pixel line length (width) for sensor mode.
+ * This is used to calibrate features in our camera stack.
+ *
+ * pix_clk_hz = "";
+ * Sensor pixel clock used for calculations like exposure and framerate
+ *
+ *
+ *
+ *
+ * inherent_gain = "";
+ * Gain obtained inherently from mode (ie. pixel binning)
+ *
+ * min_gain_val = ""; (floor to 6 decimal places)
+ * max_gain_val = ""; (floor to 6 decimal places)
+ * Gain limits for mode
+ * if use_decibel_gain = "true", please set the gain as decibel
+ *
+ * min_exp_time = ""; (ceil to integer)
+ * max_exp_time = ""; (ceil to integer)
+ * Exposure Time limits for mode (lines per exposure)
+ *
+ *
+ * min_hdr_ratio = "";
+ * max_hdr_ratio = "";
+ * HDR Ratio limits for mode
+ *
+ * min_framerate = "";
+ * max_framerate = "";
+ * Framerate limits for mode (fps)
+ *
+ * embedded_metadata_height = "";
+ * Sensor embedded metadata height in units of rows.
+ * If sensor does not support embedded metadata value should be 0.
+ */
+
+ mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+ mclk_khz = "24000";
+ num_lanes = "4";
+ tegra_sinterface = "serial_e";
+ vc_id = "1";
+ discontinuous_clk = "no";
+ dpcm_enable = "false";
+ cil_settletime = "0";
+ dynamic_pixel_bit_depth = "12";
+ csi_pixel_bit_depth = "12";
+ mode_type = "bayer";
+ pixel_phase = "rggb";
+ num_of_ignored_lines = "4"; /* optical black */
+
+ active_w = "2880";
+ active_h = "1860";
+ readout_orientation = "0";
+ line_length = "3000";
+ inherent_gain = "1";
+ pix_clk_hz = "180000000";
+ serdes_pix_clk_hz = "833333333";
+
+ gain_factor = "10";
+ min_gain_val = "0"; /* dB */
+ max_gain_val = "300"; /* dB */
+ step_gain_val = "3"; /* 0.3 */
+ default_gain = "0";
+ min_hdr_ratio = "1";
+ max_hdr_ratio = "1";
+ framerate_factor = "1000000";
+ min_framerate = "20000000";
+ max_framerate = "20000000";
+ step_framerate = "1";
+ default_framerate = "20000000";
+ exposure_factor = "1000000";
+ min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+ max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+ step_exp_time = "1";
+ default_exp_time = "500";
+ embedded_metadata_height = "0";
+ };
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
- imx390_csi_in1: endpoint@2 {
- port-index = <0>;
- bus-width = <2>;
- remote-endpoint = <&imx390_imx390_out1>;
- };
- };
- port@1 {
- reg = <1>;
- imx390_csi_out1: endpoint@3 {
- remote-endpoint = <&imx390_vi_in1>;
+ imx490_imx490_out5: endpoint {
+ vc-id = <1>;
+ port-index = <4>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_in5>;
};
};
};
};
- };
- };
-
- i2c@3180000 {
- tca9546@70 {
- i2c@0 {
- imx390_a@1b {
- compatible = "nvidia,imx390";
+ };
+ i2c@3 {
+ imx490_g@1b {
+ compatible = "nvidia,imx490";
reg = <0x1b>;
/* Physical dimensions of sensor */
- physical_w = "15.0";
- physical_h = "12.5";
+ physical_w = "3.764";
+ physical_h = "2.738";
- sensor_model ="imx390";
+ sensor_model ="imx490";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
@@ -202,10 +1366,10 @@
* If sensor does not support embedded metadata value should be 0.
*/
- mode0 {/*mode IMX390_MODE_1920X1080_CROP_30FPS*/
+ mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
mclk_khz = "24000";
- num_lanes = "2";
- tegra_sinterface = "serial_a";
+ num_lanes = "4";
+ tegra_sinterface = "serial_g";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
@@ -214,13 +1378,14 @@
csi_pixel_bit_depth = "12";
mode_type = "bayer";
pixel_phase = "rggb";
+ num_of_ignored_lines = "4"; /* optical black */
- active_w = "1920";
- active_h = "1080";
+ active_w = "2880";
+ active_h = "1860";
readout_orientation = "0";
- line_length = "2200";
+ line_length = "3000";
inherent_gain = "1";
- pix_clk_hz = "74250000";
+ pix_clk_hz = "180000000";
serdes_pix_clk_hz = "833333333";
gain_factor = "10";
@@ -247,36 +1412,26 @@
#size-cells = <0>;
port@0 {
reg = <0>;
- imx390_imx390_out0: endpoint {
+ imx490_imx490_out6: endpoint {
vc-id = <0>;
- port-index = <0>;
- bus-width = <2>;
- remote-endpoint = <&imx390_csi_in0>;
- };
+ port-index = <6>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_in6>;
};
};
- 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>;
- streams = "ued-u1", "raw12";
- };
};
+ };
- imx390_b@1c {
- compatible = "nvidia,imx390";
+ imx490_h@1c {
+ compatible = "nvidia,imx490";
reg = <0x1c>;
/* Physical dimensions of sensor */
- physical_w = "15.0";
- physical_h = "12.5";
+ physical_w = "3.764";
+ physical_h = "2.738";
- sensor_model ="imx390";
+ sensor_model ="imx490";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
@@ -374,10 +1529,10 @@
* If sensor does not support embedded metadata value should be 0.
*/
- mode0 {/*mode IMX390_MODE_1920X1080_CROP_30FPS*/
+ mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
mclk_khz = "24000";
- num_lanes = "2";
- tegra_sinterface = "serial_a";
+ num_lanes = "4";
+ tegra_sinterface = "serial_g";
vc_id = "1";
discontinuous_clk = "no";
dpcm_enable = "false";
@@ -386,13 +1541,14 @@
csi_pixel_bit_depth = "12";
mode_type = "bayer";
pixel_phase = "rggb";
+ num_of_ignored_lines = "4"; /* optical black */
- active_w = "1920";
- active_h = "1080";
+ active_w = "2880";
+ active_h = "1860";
readout_orientation = "0";
- line_length = "2200";
+ line_length = "3000";
inherent_gain = "1";
- pix_clk_hz = "74250000";
+ pix_clk_hz = "180000000";
serdes_pix_clk_hz = "833333333";
gain_factor = "10";
@@ -419,26 +1575,16 @@
#size-cells = <0>;
port@0 {
reg = <0>;
- imx390_imx390_out1: endpoint {
+ imx490_imx490_out7: endpoint {
vc-id = <1>;
- port-index = <0>;
- bus-width = <2>;
- remote-endpoint = <&imx390_csi_in1>;
- };
+ port-index = <6>;
+ bus-width = <4>;
+ remote-endpoint = <&imx490_csi_in7>;
};
};
- gmsl-link {
- src-csi-port = "b";
- dst-csi-port = "a";
- serdes-csi-link = "b";
- csi-mode = "1x4";
- st-vc = <0>;
- vc-id = <1>;
- num-lanes = <2>;
- streams = "ued-u1", "raw12";
- };
};
};
+ };
};
};
};
@@ -474,9 +1620,9 @@
* isp_bw_margin_pct = <>;
* Isp bandwidth margin in percentage
*/
- num_csi_lanes = <2>;
+ num_csi_lanes = <8>;
max_lane_speed = <4000000>;
- min_bits_per_pixel = <10>;
+ min_bits_per_pixel = <12>;
vi_peak_byte_per_pixel = <2>;
vi_bw_margin_pct = <25>;
isp_peak_byte_per_pixel = <5>;
@@ -492,29 +1638,107 @@
*/
modules {
module0 {
- badge = "imx390_rear";
- position = "rear";
+ badge = "imx490_rear";
+ position = "bottomleft";
orientation = "1";
drivernode0 {
/* Declare PCL support driver (classically known as guid) */
pcl_id = "v4l2_sensor";
/* Driver v4l2 device name */
- devname = "imx390 30-001b";
+ devname = "imx490 30-001b";
/* Declare the device-tree hierarchy to driver instance */
- proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx390_a@1b";
+ proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx490_a@1b";
};
};
module1 {
- badge = "imx390_front";
- position = "front";
+ badge = "imx490_front";
+ position = "bottomleft";
+ orientation = "1";
+ drivernode0 {
+ /* Declare PCL support driver (classically known as guid) */
+ pcl_id = "v4l2_sensor";
+ /* Driver v4l2 device name */
+ devname = "imx490 30-001c";
+ /* Declare the device-tree hierarchy to driver instance */
+ proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx490_b@1c";
+ };
+ };
+ module2 {
+ badge = "imx490_bottomleft";
+ position = "bottomleft";
+ orientation = "1";
+ drivernode0 {
+ /* Declare PCL support driver (classically known as guid) */
+ pcl_id = "v4l2_sensor";
+ /* Driver v4l2 device name */
+ devname = "imx490 31-001b";
+ /* Declare the device-tree hierarchy to driver instance */
+ proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@1/imx490_c@1b";
+ };
+ };
+ module3 {
+ badge = "imx490_bottomright";
+ position = "bottomright";
+ orientation = "1";
+ drivernode0 {
+ /* Declare PCL support driver (classically known as guid) */
+ pcl_id = "v4l2_sensor";
+ /* Driver v4l2 device name */
+ devname = "imx490 31-001c";
+ /* Declare the device-tree hierarchy to driver instance */
+ proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@1/imx490_d@1c";
+ };
+ };
+ module4 {
+ badge = "imx490_topleft";
+ position = "topleft";
+ orientation = "1";
+ drivernode0 {
+ /* Declare PCL support driver (classically known as guid) */
+ pcl_id = "v4l2_sensor";
+ /* Driver v4l2 device name */
+ devname = "imx490 32-001b";
+ /* Declare the device-tree hierarchy to driver instance */
+ proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@2/imx490_e@1b";
+ };
+ };
+ module5 {
+ badge = "imx490_topright";
+ position = "topright";
+ orientation = "1";
+ drivernode0 {
+ /* Declare PCL support driver (classically known as guid) */
+ pcl_id = "v4l2_sensor";
+ /* Driver v4l2 device name */
+ devname = "imx490 32-001c";
+ /* Declare the device-tree hierarchy to driver instance */
+ proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@2/imx490_f@1c";
+ };
+ };
+ module6 {
+ badge = "imx490_centerleft";
+ position = "centerleft";
+ orientation = "1";
+ drivernode0 {
+ /* Declare PCL support driver (classically known as guid) */
+ pcl_id = "v4l2_sensor";
+ /* Driver v4l2 device name */
+ devname = "imx490 33-001b";
+ /* Declare the device-tree hierarchy to driver instance */
+ proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@3/imx490_g@1b";
+ };
+ };
+ module7 {
+ badge = "imx490_centerright";
+ position = "centerright";
orientation = "1";
drivernode0 {
/* Declare PCL support driver (classically known as guid) */
pcl_id = "v4l2_sensor";
/* Driver v4l2 device name */
- devname = "imx390 30-001c";
+ devname = "imx490 33-001c";
/* Declare the device-tree hierarchy to driver instance */
- proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx390_b@1c";
+ proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@3/imx490_h@1c";
};
};
};
diff --git a/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-0000-camera-imx390-a00.dtsi b/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-0000-camera-imx390-a00.dtsi
index fadfb0efcc96..c611135ab965 100644
--- a/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-0000-camera-imx390-a00.dtsi
+++ b/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-0000-camera-imx390-a00.dtsi
@@ -1,5 +1,6 @@
/*
- * Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2020, Leopard Imaging Inc. All rights reserved.
+ * Based on Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,11 +19,23 @@
#include "dt-bindings/clock/tegra194-clock.h"
#define CAM0_RST_L TEGRA194_MAIN_GPIO(H, 3)
+#define CAM0_PWDN TEGRA194_MAIN_GPIO(H, 6)
+#define CAM1_RST_L TEGRA194_MAIN_GPIO(T, 6)
+#define CAM1_PWDN TEGRA194_MAIN_GPIO(T, 5)
#define CAMERA_I2C_MUX_BUS(x) (0x1E + x)
/* camera control gpio definitions */
/ {
+
+ gpio@2200000 {
+ camera-control-output-low {
+ gpio-hog;
+ output-low;
+ gpios = <CAM1_PWDN 1>;
+ label = "cam1-rst";
+ };
+ };
i2c@3180000 {
tca9546@70 {
compatible = "nxp,pca9546";
@@ -40,49 +53,95 @@
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
- dser: max9296@48 {
- compatible = "nvidia,max9296";
- reg = <0x48>;
- csi-mode = "2x4";
- max-src = <2>;
- reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;
+ imx490_a@1b {
+ def-addr = <0x21>;
+ /* Define any required hw resources needed by driver */
+ /* ie. clocks, io pins, power sources */
+ clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+ <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+ clock-names = "extperiph1", "pllp_grtba";
+ mclk = "extperiph1";
};
- ser_prim: max9295_prim@62 {
- compatible = "nvidia,max9295";
- reg = <0x62>;
- is-prim-ser;
+ imx490_b@1c {
+ def-addr = <0x21>;
+ /* Define any required hw resources needed by driver */
+ /* ie. clocks, io pins, power sources */
+ clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+ <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+ clock-names = "extperiph1", "pllp_grtba";
+ mclk = "extperiph1";
};
- ser_a: max9295_a@40 {
- compatible = "nvidia,max9295";
- reg = <0x40>;
- nvidia,gmsl-dser-device = <&dser>;
+ };
+ i2c@1 {
+ reg = <1>;
+ i2c-mux,deselect-on-exit;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ imx490_c@1b {
+ def-addr = <0x21>;
+ /* Define any required hw resources needed by driver */
+ /* ie. clocks, io pins, power sources */
+ clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+ <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+ clock-names = "extperiph1", "pllp_grtba";
+ mclk = "extperiph1";
};
- ser_b: max9295_b@60 {
- compatible = "nvidia,max9295";
- reg = <0x60>;
- nvidia,gmsl-dser-device = <&dser>;
+ imx490_d@1c {
+ def-addr = <0x21>;
+ /* Define any required hw resources needed by driver */
+ /* ie. clocks, io pins, power sources */
+ clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+ <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+ clock-names = "extperiph1", "pllp_grtba";
+ mclk = "extperiph1";
+ };
+ };
+ i2c@2 {
+ reg = <2>;
+ i2c-mux,deselect-on-exit;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ imx490_e@1b {
+ def-addr = <0x21>;
+ /* Define any required hw resources needed by driver */
+ /* ie. clocks, io pins, power sources */
+ clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+ <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+ clock-names = "extperiph1", "pllp_grtba";
+ mclk = "extperiph1";
};
- imx390_a@1b {
- def-addr = <0x1a>;
+ imx490_f@1c {
+ def-addr = <0x21>;
+ /* Define any required hw resources needed by driver */
+ /* ie. clocks, io pins, power sources */
+ clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+ <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+ clock-names = "extperiph1", "pllp_grtba";
+ mclk = "extperiph1";
+ };
+ };
+ i2c@3 {
+ reg = <3>;
+ i2c-mux,deselect-on-exit;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ imx490_g@1b {
+ def-addr = <0x21>;
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
- nvidia,gmsl-ser-device = <&ser_a>;
- nvidia,gmsl-dser-device = <&dser>;
};
- imx390_b@1c {
- def-addr = <0x1a>;
+ imx490_h@1c {
+ def-addr = <0x21>;
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
- nvidia,gmsl-ser-device = <&ser_b>;
- nvidia,gmsl-dser-device = <&dser>;
};
};
};
diff --git a/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts b/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts
index f4073dbc2f6e..beb6e076d6d1 100644
--- a/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts
+++ b/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts
@@ -1,6 +1,7 @@
/*
* Top level DTS file for CVM:P2888-0001 and CVB:P2822-0000.
*
+ * Copyright (c) 2020, Leopard Imaging Inc. All rights reserved.
* Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -13,5 +14,4 @@
* more details.
*/
#include "common/tegra194-p2888-0001-p2822-0000-common.dtsi"
-#include "common/tegra194-p2822-camera-modules.dtsi"
-#include "t19x-common-modules/tegra194-camera-plugin-manager.dtsi"
+#include "common/tegra194-p2822-0000-camera-imx390-a00.dtsi"