Tool/software:
Hi export,
Device Tree Overlays We Used:
k3-j722s-evm-fpdlink-fusion.dtbo
k3-fpdlink-imx390-rcm-0-0.dtbo
These overlays have been correctly included via uEnv.txt.
Hardware Connection Topology
IMX390 (LI-IMX390-FPDLINKIII-120H, without ISP)
⇅
DS90UB953
⇅
DS90UB960
⇅
SK-TDA4VM
Current Status
After boot, using media-ctl to inspect the topology shows the connection up to the DS90UB953 serializer is detected correctly.
However, the IMX390 sensor fails to initialize, and no camera stream is available.
The imx390 kernel module is loaded correctly.
Based on dmesg, the IMX390 fails during probe with an I2C read error (error -121).
Relevant dmesg Logs
[ 12.656592] imx390 10-0021: inck rate: 27027027 Hz
[ 12.707615] imx390 10-0021: imx390_read: failed to read reg 0x0330: -121
[ 12.714641] imx390: probe of 10-0021 failed with error -121
Kernel Modules Loaded (lsmod)
imx390 102400 0
ds90ub953 16384 1
ds90ub960 36864 1
Media Topology
As shown in the attached image, the following links are established and visible:
j721e-csi2rx → cdns_csi2rx → ds90ub960 → ds90ub953
However, the IMX390 camera does not appear in the media graph and cannot be accessed.
Here is my dtso:
k3-j721e-sk-fpdlink-fusion.dtso // SPDX-License-Identifier: GPL-2.0 /* * DT Overlay for Fusion (FPD-Link III) board on J721E SK, * AM68 SK or AM69 SK. * https://svtronics.com/portfolio/evm577pfusion-v1-0-fusion/ * * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ */ /dts-v1/; /plugin/; #include <dt-bindings/gpio/gpio.h> &{/} { clk_fusion_25M_fixed: fixed-clock-25M { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <25000000>; }; }; &cam0_i2c { #address-cells = <1>; #size-cells = <0>; deser@3d { compatible = "ti,ds90ub960-q1"; reg = <0x3d>; clocks = <&clk_fusion_25M_fixed>; clock-names = "refclk"; i2c-alias-pool = <0x4a 0x4b 0x4c 0x4d 0x4e 0x4f>; ds90ub960_0_ports: ports { #address-cells = <1>; #size-cells = <0>; /* CSI-2 TX*/ port@4 { reg = <4>; ds90ub960_0_csi_out: endpoint { clock-lanes = <0>; data-lanes = <1 2 3 4>; link-frequencies = /bits/ 64 <1200000000>; remote-endpoint = <&csi2_phy0>; }; }; }; ds90ub960_0_links: links { #address-cells = <1>; #size-cells = <0>; }; }; }; &cdns_csi2rx0 { ports { #address-cells = <1>; #size-cells = <0>; csi0_port0: port@0 { reg = <0>; status = "okay"; csi2_phy0: endpoint { remote-endpoint = <&ds90ub960_0_csi_out>; clock-lanes = <0>; data-lanes = <1 2 3 4>; link-frequencies = /bits/ 64 <1200000000>; }; }; }; }; &ti_csi2rx0 { status = "okay"; }; &dphy0 { status = "okay"; };
k3-fpdlink-imx390-rcm-0-0.dtso // SPDX-License-Identifier: GPL-2.0 /* * IMX390 FPD-Link 3 Camera Module * Copyright (c) 2023 Texas Instruments Incorporated - http://www.ti.com/ */ /dts-v1/; /plugin/; #include <dt-bindings/gpio/gpio.h> &ds90ub960_0_ports { #address-cells = <1>; #size-cells = <0>; /* FPDLink RX 0 */ port@0 { reg = <0>; ub960_fpd3_1_in: endpoint { remote-endpoint = <&ub953_1_out>; }; }; }; &ds90ub960_0_links { #address-cells = <1>; #size-cells = <0>; link@0 { reg = <0>; i2c-alias = <0x18>; ti,rx-mode = <3>; serializer: serializer { compatible = "ti,ds90ub953-q1"; gpio-controller; #gpio-cells = <2>; #clock-cells = <0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; ub953_1_in: endpoint { data-lanes = <1 2 3 4>; remote-endpoint = <&sensor_1_out>; }; }; port@1 { reg = <1>; ub953_1_out: endpoint { remote-endpoint = <&ub960_fpd3_1_in>; }; }; }; i2c { #address-cells = <1>; #size-cells = <0>; sensor@21 { compatible = "sony,imx390"; reg = <0x21>; clocks = <&serializer>; clock-names = "inck"; assigned-clocks = <&serializer>; assigned-clock-rates = <27000000>; xclr-gpios = <&serializer 1 GPIO_ACTIVE_LOW>; error0-gpios = <&serializer 2 GPIO_ACTIVE_HIGH>; error1-gpios = <&serializer 3 GPIO_ACTIVE_HIGH>; comready-gpios = <&serializer 0 GPIO_ACTIVE_HIGH>; port { sensor_1_out: endpoint { remote-endpoint = <&ub953_1_in>; }; }; }; }; }; }; };
We also confirmed the occupancy of i2c, 0x3d is the address of ds90ub960, 0x18 is the address of ds90ub953 registered remotely.