Hi Jerry,
Thanks for the suggestion!
I double checked the DTS configuration according to the GMSL Camera Framework and I can’t see any abnormal configures based on my knowledge.
Could you help have a look on the sensor configuration?
(Currently, only camera imx490a@1b was enabled)
Platform Device Tree
i2c@4 {
reg = <4>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
dser_4: max9296@48 {
compatible = "maxim,max9296";
reg = <0x48>;
csi-mode = "2x4";
max-src = <2>;
reset-gpios = <&gpio_expander_24 4 GPIO_ACTIVE_HIGH>;
};
ser_4_prim: max9295_prim@40 {
compatible = "maxim,max9295";
reg = <0x40>;
is-prim-ser;
};
ser_4_a: max9295_a@62 {
compatible = "maxim,max9295";
reg = <0x62>;
nvidia,gmsl-dser-device = <&dser_4>;
};
ser_4_b: max9295_b@60 {
compatible = "maxim,max9295";
reg = <0x60>;
nvidia,gmsl-dser-device = <&dser_4>;
};
imx490_a@1b {
def-addr = <0x1a>;
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
nvidia,gmsl-ser-device = <&ser_4_a>;
nvidia,gmsl-dser-device = <&dser_4>;
};
imx490_b@1c {
def-addr = <0x1a>;
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
nvidia,gmsl-ser-device = <&ser_4_b>;
nvidia,gmsl-dser-device = <&dser_4>;
};
};
Module Device Tree - VI
tegra-capture-vi {
num-channels = <12>;
ports {
port@8 {
reg = <8>;
imx490_vi_in8: endpoint {
vc-id = <0>;
port-index = <4>;
bus-width = <4>;
remote-endpoint = <&imx490_csi_out8>;
};
};
port@9 {
reg = <9>;
imx490_vi_in9: endpoint {
vc-id = <1>;
port-index = <4>;
bus-width = <4>;
remote-endpoint = <&imx490_csi_out9>;
};
};
}
}
Module Device Tree - NVCSI
host1x@13e00000 {
nvcsi@15a00000 {
num-channels = <12>;
#address-cells = <1>;
#size-cells = <0>;
channel@8 {
reg = <8>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
imx490_csi_in8: endpoint@16 {
port-index = <4>;
bus-width = <4>;
remote-endpoint = <&imx490_imx490_out8>;
};
};
port@1 {
reg = <1>;
imx490_csi_out8: endpoint@17 {
remote-endpoint = <&imx490_vi_in8>;
};
};
};
};
channel@9 {
reg = <9>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
imx490_csi_in9: endpoint@18 {
port-index = <4>;
bus-width = <4>;
remote-endpoint = <&imx490_imx490_out9>;
};
};
port@1 {
reg = <1>;
imx490_csi_out9: endpoint@19 {
remote-endpoint = <&imx490_vi_in9>;
};
};
};
};
}
}
Virtual Channel and GMSL
i2c@4 {
imx490_a@1b {
compatible = "sony,imx490";
reg = <0x1b>;
devnode = "video8";
mode0 {/*mode IMX490_MODE_2880X1860_CROP_30FPS*/
num_lanes = "4";
tegra_sinterface = "serial_e";
vc_id = "0";
mode_type = "bayer";
pixel_phase = "rggb";
pix_clk_hz = "189600000";
serdes_pix_clk_hz = "300000000";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
imx490_imx490_out8: endpoint {
vc-id = <0>;
port-index = <4>;
bus-width = <4>;
remote-endpoint = <&imx490_csi_in8>;
};
};
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 = <4>;
streams = "ued-u1", "raw12";
};
};
imx490_b@1c {
compatible = "sony,imx490";
reg = <0x1c>;
devnode = "video9";
mode0 {/*mode IMX490_MODE_2880X1860_CROP_30FPS*/
num_lanes = "4";
tegra_sinterface = "serial_e";
vc_id = "1";
mode_type = "bayer";
pixel_phase = "rggb";
line_length = "3160";
pix_clk_hz = "189600000";
serdes_pix_clk_hz = "300000000";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
imx490_imx490_out9: endpoint {
vc-id = <1>;
port-index = <4>;
bus-width = <4>;
remote-endpoint = <&imx490_csi_in9>;
};
};
};
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 = <4>;
streams = "ued-u1", "raw12";
};
};
}
tegra-camera-platform node
tegra-camera-platform {
compatible = "nvidia, tegra-camera-platform";
num_csi_lanes = <4>;
max_lane_speed = <4000000>;
min_bits_per_pixel = <10>;
vi_peak_byte_per_pixel = <2>;
vi_bw_margin_pct = <25>;
isp_peak_byte_per_pixel = <5>;
isp_bw_margin_pct = <25>;
modules {
module8 {
badge = "imx490_rear";
position = "rear";
orientation = "1";
drivernode0 {
/* Declare PCL support driver (classically known as guid) */
pcl_id = "v4l2_sensor";
/* Driver v4l2 device name */
devname = "imx490 34-001b";
/* Declare the device-tree hierarchy to driver instance */
proc-device-tree = "/proc/device-tree/i2c@3160000/pca9547@70/i2c@4/imx490_a@1b";
};
};
module9 {
badge = "imx490_rear";
orientation = "1";
drivernode0 {
/* Declare PCL support driver (classically known as guid) */
pcl_id = "v4l2_sensor";
/* Driver v4l2 device name */
devname = "imx490 34-001c";
/* Declare the device-tree hierarchy to driver instance */
proc-device-tree = "/proc/device-tree/i2c@3160000/pca9547@70/i2c@4/imx490_b@1c";
};
};
};
}
Thanks!