Adv7481 and nvcsi connection

I have a Jetson Nano board with a 4.9 kernel,the output of “head -n 1 /etc/nv_tegra_release” is “# R32 (release), REVISION: 7.1, GCID: 29818004, BOARD: t210ref, EABI: aarch64, DATE: Sat Feb 19 17:05:08 UTC 2022” and output of “uname -r” is “4.9.253-tegra”.
I want to capture video from a sdi camera connected to an ADV7481 chip.
The video parallel signal is input to the chip through the TTL interface, with a resolution of 1920×1080 at 30 fps.
I modified the adv748x driver source code to enable the internal connection path from TTL to TXA,
so i build driver source code as a module and put it in /lib/modules/$(uname -r)/extra/ and and load it.
I use overlay dts file for defined the nodes and test device-tree in kernel so that the data flow is established as adv748x → nvcsi → vi.
All the nodes are created successfully, but the link between txa and nvcsi is not established, the adv748x txa node is v4l type and can not link to nvcsi that is v4l2 subdev, and therefore I cannot get any video on /dev/video0.
The output of media-ctl -p is this:
Media controller API version 0.1.0

Media device information

driver vi
model NVIDIA Tegra Video Input Device
serial
bus info
hw revision 0x3
driver version 0.0.0

Device topology

  • entity 1: 150c0000.nvcsi–1 (2 pads, 1 link)
    type V4L2 subdev subtype Unknown flags 0
    device node name /dev/v4l-subdev0
    pad0: Sink
    pad1: Source
    → “vi-output, 150c0000.nvcsi–1”:0 [ENABLED]

  • entity 4: adv748x 6-0070 txa (2 pads, 1 link)
    type Node subtype V4L flags 0
    device node name /dev/v4l-subdev2
    pad0: Sink
    ← “adv748x 6-0070 ttl”:1 [ENABLED,IMMUTABLE]
    pad1: Source

  • entity 7: adv748x 6-0070 ttl (2 pads, 1 link)
    type V4L2 subdev subtype Unknown flags 0
    device node name /dev/v4l-subdev1
    pad0: Sink
    [fmt:UYVY8_2X8/1920x1080 field:none colorspace:rec709]
    pad1: Source
    [fmt:UYVY8_2X8/1920x1080 field:none colorspace:rec709]
    → “adv748x 6-0070 txa”:0 [ENABLED,IMMUTABLE]

  • entity 12: vi-output, 150c0000.nvcsi–1 (1 pad, 1 link)
    type Node subtype V4L flags 0
    device node name /dev/video0
    pad0: Sink
    ← “150c0000.nvcsi–1”:1 [ENABLED]

Enable the debug print of csi2_fops.c/vi2_fops.c to get more information.

echo file csi2_fops.c +p > /sys/kernel/debug/dynamic_debug/control
echo file vi2_fops.c +p > /sys/kernel/debug/dynamic_debug/control

hi thanks for reply

mydts.txt.txt (5.4 KB)

The output of “dmesg |grep nvcsi” is this :

“[ 1.460808] nvcsi 150c0000.nvcsi: failed to get regulator (-22)
[ 1.460845] nvcsi 150c0000.nvcsi: clk_get failed for i=0 tegra_150c0000.nvcsi:nvcsi
[ 1.468638] nvcsi 150c0000.nvcsi: clk_get failed for i=1 tegra_150c0000.nvcsi:nvcsilp
[ 1.476900] nvcsi 150c0000.nvcsi: initialized
[ 1.517413] vi 54080000.vi: subdev 150c0000.nvcsi–1 bound“

The output of “dmesg |grep vi” is :

“[ 0.000000] Linux version 4.9.253-tegra (buildbrain@mobile-u64-5434-d8000) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) ) #1 SMP PREEMPT Sat Feb 19 08:59:22 PST 2022
[ 0.000000] OF: reserved mem: initialized node vpr-carveout, compatible id nvidia,vpr-carveout
[ 0.000000] OF: reserved mem: initialized node iram-carveout, compatible id nvidia,iram-carveout
[ 0.000000] OF: reserved mem: initialized node ramoops_carveout, compatible id nvidia,ramoops
[ 0.000000] Kernel command line: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1125 core_edp_ma=4000 gpt tegra_fbmem=0x140000@0x92ca9000 is_hdmi_initialised=1 earlycon=uart8250,mmio32,0x70006000 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0
[ 0.000000] log_buf_len individual max cpu contribution: 32768 bytes
[ 0.001647] Console: colour dummy device 80x25
[ 0.171428] sched-energy: CPU device node has no sched-energy-costs
[ 0.207908] tegra-id: opt_subrevision=0.
[ 0.207925] Tegra Speedo/IDDQ fuse revision 4
[ 0.207967] Tegra Revision: A02 SKU: 0x8f CPU Process: 0 SoC Process: 0
[ 0.207982] DTS File Name: /dvs/git/dirty/git-master_linux/kernel/kernel-4.9/arch/arm64/boot/dts/../../../../../../hardware/nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-b00.dts
[ 0.381336] OS set in device tree is not L4T.
[ 0.416230] DTS File Name: /dvs/git/dirty/git-master_linux/kernel/kernel-4.9/arch/arm64/boot/dts/../../../../../../hardware/nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-b00.dts
[ 0.422593] iommu: Adding device tegra-carveouts to group 0
[ 0.423084] iommu: Adding device smmu_test to group 1
[ 0.434772] iommu: Adding device 70090000.xusb to group 2
[ 0.435054] iommu: Adding device 70006000.serial to group 3
[ 0.435544] iommu: Adding device 70006040.serial to group 4
[ 0.435812] iommu: Adding device 70006200.serial to group 5
[ 0.436038] iommu: Adding device sound to group 6
[ 0.436670] iommu: Adding device 7000d400.spi to group 7
[ 0.436931] iommu: Adding device 7000d600.spi to group 8
[ 0.437256] iommu: Adding device 70410000.spi to group 9
[ 0.437567] iommu: Adding device 50000000.host1x to group 10
[ 0.437978] iommu: Adding device 54080000.vi to group 11
[ 0.438372] iommu: Adding device 54600000.isp to group 12
[ 0.438666] iommu: Adding device 54680000.isp to group 13
[ 0.438940] iommu: Adding device tegradc.0 to group 14
[ 0.441127] iommu: Adding device tegradc.1 to group 15
[ 0.443175] iommu: Adding device 54340000.vic to group 16
[ 0.443396] iommu: Adding device 544c0000.nvenc to group 17
[ 0.443612] iommu: Adding device 54500000.tsec to group 18
[ 0.443806] iommu: Adding device 54100000.tsecb to group 19
[ 0.444029] iommu: Adding device 54480000.nvdec to group 20
[ 0.444229] iommu: Adding device 54380000.nvjpg to group 21
[ 0.445314] iommu: Adding device 546c0000.i2c to group 22
[ 0.445637] iommu: Adding device 57000000.gpu to group 23
[ 0.497559] iommu: Adding device 70012000.se to group 24
[ 0.498117] iommu: Adding device 1003000.pcie to group 25
[ 0.498632] iommu: Adding device 7000c000.i2c to group 26
[ 0.498891] iommu: Adding device 7000c400.i2c to group 27
[ 0.499142] iommu: Adding device 7000c500.i2c to group 28
[ 0.499392] iommu: Adding device 7000c700.i2c to group 29
[ 0.499649] iommu: Adding device 7000d000.i2c to group 30
[ 0.499901] iommu: Adding device 7000d100.i2c to group 31
[ 0.500199] iommu: Adding device sdhci-tegra.0 to group 32
[ 0.501097] iommu: Adding device 700d0000.xudc to group 33
[ 0.541678] gpiochip_setup_dev: registered GPIOs 0 to 255 on device: gpiochip0 (tegra-gpio)
[ 0.550705] usbcore: registered new device driver usb
[ 0.599981] gpiochip_setup_dev: registered GPIOs 504 to 511 on device: gpiochip1 (max77620-gpio)
[ 0.603171] Linux video capture interface: v2.00
[ 0.608902] Bluetooth: HCI device and connection manager initialized
[ 0.623987] camchar: rtcpu character device driver loaded
[ 1.019417] iommu: Adding device 702ef000.adsp to group 34
[ 1.028619] iommu: Adding device aconnect@702c0000:adsp_audio to group 35
[ 1.044780] misc tegra_camera_ctrl: tegra_camera_isomgr_register isp_iso_bw=500000, vi_iso_bw=1875000, max_bw=1875000
[ 1.055156] Adding domain vic03-pd to PM domain host1x-pd
[ 1.059337] falcon 54340000.vic: initialized
[ 1.095085] No Device Node present for smmu client: serial8250 !!
[ 1.095136] iommu: Adding device serial8250 to group 36
[ 1.097567] Console: switching to colour frame buffer device 80x30
[ 1.131636] tun: Universal TUN/TAP device driver, 1.6
[ 1.157353] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[ 1.157360] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.157524] tegra-xudc-new 700d0000.xudc: device count: 1
[ 1.159304] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[ 1.159311] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.160729] mousedev: PS/2 mouse device common for all mice
[ 1.293334] rtc rtc1: alarm rtc device
[ 1.319663] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x10
[ 1.343606] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x10
[ 1.352096] tegra_dfll_action dfll-cdev-cap: Tegra DFLL ‘cap cooling device’ registered
[ 1.352390] tegra_dfll_action dfll-cdev-floor: Tegra DFLL ‘floor cooling device’ registered
[ 1.359101] device-mapper: uevent: version 1.0.3
[ 1.359616] device-mapper: ioctl: 4.35.0-ioctl (2016-06-23) initialised: dm-devel@redhat.com
[ 1.374867] tegra21x_actmon 6000c800.actmon: initialization Completed for the device mc_all
[ 1.377989] No Device Node present for smmu client: snd-soc-dummy !!
[ 1.378013] iommu: Adding device snd-soc-dummy to group 37
[ 1.383565] input: tegra-hda HDMI/DP,pcm=3 as /devices/70030000.hda/sound/card0/input0
[ 1.454030] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[ 1.486120] usb 1-2: new high-speed USB device number 2 using tegra-xusb
[ 1.491984] tegra_core_action core_dvfs_cdev_floor: Tegra CORE DVFS ‘floor cooling device’ registered
[ 1.492595] tegra_core_action core_dvfs_cdev_cap: Tegra CORE DVFS ‘cap cooling device’ registered
[ 1.493106] input: gpio-keys as /devices/gpio-keys/input/input1
[ 1.506644] usb 1-2: New USB device found, idVendor=214b, idProduct=7250
[ 1.506648] usb 1-2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[ 1.512279] vi 54080000.vi: vi_probe: ++
[ 1.515394] vi 54080000.vi: initialized
[ 1.517413] vi 54080000.vi: subdev 150c0000.nvcsi–1 bound
[ 1.519367] ALSA device list:
[ 1.547068] Root device found: mmcblk0p1
[ 1.794109] usb 1-2.1: new low-speed USB device number 3 using tegra-xusb
[ 1.819230] usb 1-2.1: New USB device found, idVendor=15ca, idProduct=00c3
[ 1.819234] usb 1-2.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 1.823375] input: USB Optical Mouse as /devices/70090000.xusb/usb1/1-2/1-2.1/1-2.1:1.0/0003:15CA:00C3.0001/input/input2
[ 2.389765] iommu: Adding device 0000:00:02.0 to group 38
[ 2.390315] iommu: Adding device 0000:01:00.0 to group 39
[ 2.402579] pcie_pme 0000:00:02.0:pcie001: service driver pcie_pme loaded
[ 2.402660] aer 0000:00:02.0:pcie002: service driver aer loaded
[ 2.402826] r8168 0000:01:00.0: enabling device (0000 → 0003)
[ 2.417269] r8168 0000:01:00.0 (unnamed net_device) (uninitialized): Invalid ethernet address 00:00:00:00:00:00, trying device tree node
[ 2.417331] r8168 0000:01:00.0 (unnamed net_device) (uninitialized): Found valid ethernet address 48:b0:2d:5b:bc:a8 from device tree
[ 3.776147] systemd[1]: Set hostname to .
[ 4.115139] systemd[1]: File /lib/systemd/system/systemd-journald.service:36 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling.
[ 6.560546] (NULL device *): adv748x_probe 766
[ 6.627485] adv748x 6-0070: chip found @ 0xe0 revision 2143
[ 6.792981] cpu-throttle-alert cooling device registered.
[ 6.793121] gpu-throttle-alert cooling device registered.
[ 6.793328] hot-surface-alert cooling device registered.
[ 7.946065] adv748x 6-0070: v4l2_device registered successfully at ffffffc0f4aded98
[ 8.189243] (NULL device *): adv748x_csi2_init_controls 270
[ 8.189258] vi 54080000.vi: subdev adv748x 6-0070 txa bound
[ 10.408806] device rndis0 entered promiscuous mode
[ 10.418541] device usb0 entered promiscuous mode
[ 16.938777] zram: Added device: zram0
[ 16.942245] zram: Added device: zram1
[ 16.946951] zram: Added device: zram2
[ 16.947503] zram: Added device: zram3
[ 26.211447] Netfilter messages via NETLINK v0.30.“

and the output of “dmesg|grep adv748 “ is this:

“[ 6.557426] adv748x_probe 759
[ 6.560546] (NULL device *): adv748x_probe 766
[ 6.565139] adv748x 6-0070: adv748x_parse_dt 714
[ 6.578909] adv748x 6-0070: Endpoint /host1x/i2c@546c0000/adv7482_a@70/ports/port@0/endpoint@0 on port 0
[ 6.578915] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.584400] adv748x 6-0070: adv748x_identify_chip 664
[ 6.589629] adv748x 6-0070: adv748x_read 200: page = 00, reg = DF
[ 6.596503] adv748x 6-0070: adv748x_read_check 183
[ 6.602301] adv748x 6-0070: adv748x_read_check 187: val = 21, err = 0
[ 6.608892] adv748x 6-0070: adv748x_read 200: page = 00, reg = E0
[ 6.615184] adv748x 6-0070: adv748x_read_check 183
[ 6.620886] adv748x 6-0070: adv748x_read_check 187: val = 43, err = 0
[ 6.627485] adv748x 6-0070: chip found @ 0xe0 revision 2143
[ 6.627492] adv748x 6-0070: adv748x_initialise_clients 258
[ 6.633109] adv748x 6-0070: adv748x_dummy_client 235
[ 6.639454] adv748x 6-0070: adv748x_write 208: page = 00, reg = F3, value = 4C, err = 0
[ 6.647631] adv748x 6-0070: adv748x_read 200: page = 00, reg = F3
[ 6.653859] adv748x 6-0070: adv748x_read_check 183
[ 6.659539] adv748x 6-0070: adv748x_read_check 187: val = 4C, err = 0
[ 6.666329] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.671814] adv748x 6-0070: adv748x_dummy_client 235
[ 6.677641] adv748x 6-0070: adv748x_write 208: page = 00, reg = F4, value = 44, err = 0
[ 6.685866] adv748x 6-0070: adv748x_read 200: page = 00, reg = F4
[ 6.692097] adv748x 6-0070: adv748x_read_check 183
[ 6.697779] adv748x 6-0070: adv748x_read_check 187: val = 44, err = 0
[ 6.704538] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.710020] adv748x 6-0070: adv748x_dummy_client 235
[ 6.715818] adv748x 6-0070: adv748x_write 208: page = 00, reg = F5, value = 68, err = 0
[ 6.723989] adv748x 6-0070: adv748x_read 200: page = 00, reg = F5
[ 6.730218] adv748x 6-0070: adv748x_read_check 183
[ 6.735888] adv748x 6-0070: adv748x_read_check 187: val = 68, err = 0
[ 6.743618] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.750108] adv748x 6-0070: adv748x_dummy_client 235
[ 6.756960] adv748x 6-0070: adv748x_write 208: page = 00, reg = F6, value = 6C, err = 0
[ 6.766169] adv748x 6-0070: adv748x_read 200: page = 00, reg = F6
[ 6.773473] adv748x 6-0070: adv748x_read_check 183
[ 6.780207] adv748x 6-0070: adv748x_read_check 187: val = 6C, err = 0
[ 6.788031] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.794542] adv748x 6-0070: adv748x_dummy_client 235
[ 6.801439] adv748x 6-0070: adv748x_write 208: page = 00, reg = F7, value = 64, err = 0
[ 6.810632] adv748x 6-0070: adv748x_read 200: page = 00, reg = F7
[ 6.817867] adv748x 6-0070: adv748x_read_check 183
[ 6.825262] adv748x 6-0070: adv748x_read_check 187: val = 64, err = 0
[ 6.833020] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.839515] adv748x 6-0070: adv748x_dummy_client 235
[ 6.846365] adv748x 6-0070: adv748x_write 208: page = 00, reg = F8, value = 62, err = 0
[ 6.855469] adv748x 6-0070: adv748x_read 200: page = 00, reg = F8
[ 6.862648] adv748x 6-0070: adv748x_read_check 183
[ 6.869278] adv748x 6-0070: adv748x_read_check 187: val = 62, err = 0
[ 6.876972] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.883370] adv748x 6-0070: adv748x_dummy_client 235
[ 6.890157] adv748x 6-0070: adv748x_write 208: page = 00, reg = F9, value = 82, err = 0
[ 6.899230] adv748x 6-0070: adv748x_read 200: page = 00, reg = F9
[ 6.906395] adv748x 6-0070: adv748x_read_check 183
[ 6.913019] adv748x 6-0070: adv748x_read_check 187: val = 82, err = 0
[ 6.920721] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.927169] adv748x 6-0070: adv748x_dummy_client 235
[ 6.934650] adv748x 6-0070: adv748x_write 208: page = 00, reg = FA, value = F2, err = 0
[ 6.943774] adv748x 6-0070: adv748x_read 200: page = 00, reg = FA
[ 6.950973] adv748x 6-0070: adv748x_read_check 183
[ 6.958895] adv748x 6-0070: adv748x_read_check 187: val = F2, err = 0
[ 6.966656] adv748x 6-0070: adv748x_configure_regmap 142
[ 6.974300] adv748x 6-0070: adv748x_dummy_client 235
[ 6.983581] adv748x 6-0070: adv748x_write 208: page = 00, reg = FB, value = 90, err = 0
[ 6.993319] adv748x 6-0070: adv748x_read 200: page = 00, reg = FB
[ 7.001696] adv748x 6-0070: adv748x_read_check 183
[ 7.009025] adv748x 6-0070: adv748x_read_check 187: val = 90, err = 0
[ 7.017392] adv748x 6-0070: adv748x_configure_regmap 142
[ 7.024496] adv748x 6-0070: adv748x_dummy_client 235
[ 7.031939] adv748x 6-0070: adv748x_write 208: page = 00, reg = FC, value = 94, err = 0
[ 7.041698] adv748x 6-0070: adv748x_read 200: page = 00, reg = FC
[ 7.049517] adv748x 6-0070: adv748x_read_check 183
[ 7.056775] adv748x 6-0070: adv748x_read_check 187: val = 94, err = 0
[ 7.065115] adv748x 6-0070: adv748x_configure_regmap 142
[ 7.073625] adv748x 6-0070: adv748x_reset 611
[ 7.079090] adv748x 6-0070: adv748x_write_regs 294
[ 7.085690] adv748x 6-0070: adv748x_write 208: page = 00, reg = FF, value = FF, err = 0
[ 7.110907] adv748x 6-0070: adv748x_write 208: page = 00, reg = 01, value = 76, err = 0
[ 7.120855] adv748x 6-0070: adv748x_write 208: page = 00, reg = F2, value = 01, err = 0
[ 7.130171] adv748x 6-0070: adv748x_write_regs 294
[ 7.136800] adv748x 6-0070: adv748x_write 208: page = 00, reg = F3, value = 4C, err = 0
[ 7.146860] adv748x 6-0070: adv748x_write 208: page = 00, reg = F4, value = 44, err = 0
[ 7.156824] adv748x 6-0070: adv748x_write 208: page = 00, reg = F5, value = 68, err = 0
[ 7.166659] adv748x 6-0070: adv748x_write 208: page = 00, reg = F6, value = 6C, err = 0
[ 7.176589] adv748x 6-0070: adv748x_write 208: page = 00, reg = F7, value = 64, err = 0
[ 7.186365] adv748x 6-0070: adv748x_write 208: page = 00, reg = F8, value = 62, err = 0
[ 7.196202] adv748x 6-0070: adv748x_write 208: page = 00, reg = FA, value = 82, err = 0
[ 7.206071] adv748x 6-0070: adv748x_write 208: page = 00, reg = FB, value = F2, err = 0
[ 7.215798] adv748x 6-0070: adv748x_write 208: page = 00, reg = FC, value = 90, err = 0
[ 7.225637] adv748x 6-0070: adv748x_write 208: page = 00, reg = FD, value = 94, err = 0
[ 7.234619] adv748x 6-0070: adv748x_write_regs 294
[ 7.241231] adv748x 6-0070: adv748x_write 208: page = 00, reg = 06, value = 35, err = 0
[ 7.250978] adv748x 6-0070: adv748x_write 208: page = 00, reg = 03, value = 14, err = 0
[ 7.260815] adv748x 6-0070: adv748x_write 208: page = 00, reg = 10, value = 84, err = 0
[ 7.270496] adv748x 6-0070: adv748x_write 208: page = 00, reg = 0E, value = F3, err = 0
[ 7.280289] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 00, value = 84, err = 0
[ 7.290178] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 00, value = A4, err = 0
[ 7.299798] adv748x 6-0070: adv748x_write 208: page = 0A, reg = F0, value = 00, err = 0
[ 7.309578] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 31, value = 82, err = 0
[ 7.319224] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 1E, value = 40, err = 0
[ 7.328997] adv748x 6-0070: adv748x_write 208: page = 0A, reg = DA, value = 01, err = 0
[ 7.346855] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 00, value = 24, err = 0
[ 7.366819] adv748x 6-0070: adv748x_write 208: page = 0A, reg = C1, value = 2B, err = 0
[ 7.386840] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 31, value = 80, err = 0
[ 7.395805] adv748x 6-0070: adv748x_txa_power 380
[ 7.402499] adv748x 6-0070: adv748x_read 200: page = 0A, reg = 1E
[ 7.410146] adv748x 6-0070: adv748x_read_check 183
[ 7.416507] adv748x 6-0070: adv748x_read_check 187: val = 40, err = 0
[ 7.423889] adv748x 6-0070: adv748x_write_regs 294
[ 7.430194] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 31, value = 82, err = 0
[ 7.439968] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 1E, value = 00, err = 0
[ 7.449609] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 00, value = 84, err = 0
[ 7.459270] adv748x 6-0070: adv748x_write 208: page = 0A, reg = DA, value = 01, err = 0
[ 7.468806] adv748x 6-0070: adv748x_write 208: page = 0A, reg = C1, value = 3B, err = 0
[ 7.477732] adv748x 6-0070: adv748x_write_regs 294
[ 7.484017] adv748x 6-0070: adv748x_write 208: page = 00, reg = 00, value = 30, err = 0
[ 7.494132] adv748x 6-0070: adv748x_write 208: page = 00, reg = F2, value = 01, err = 0
[ 7.503671] adv748x 6-0070: adv748x_write 208: page = 00, reg = 0E, value = FF, err = 0
[ 7.513322] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0F, value = 00, err = 0
[ 7.523076] adv748x 6-0070: adv748x_write 208: page = 08, reg = 52, value = CD, err = 0
[ 7.532596] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0E, value = 80, err = 0
[ 7.542267] adv748x 6-0070: adv748x_write 208: page = 08, reg = 9C, value = 00, err = 0
[ 7.551665] adv748x 6-0070: adv748x_write 208: page = 08, reg = 9C, value = FF, err = 0
[ 7.561186] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0E, value = 00, err = 0
[ 7.570575] adv748x 6-0070: adv748x_write 208: page = 08, reg = 80, value = 51, err = 0
[ 7.580141] adv748x 6-0070: adv748x_write 208: page = 08, reg = 81, value = 51, err = 0
[ 7.589727] adv748x 6-0070: adv748x_write 208: page = 08, reg = 82, value = 68, err = 0
[ 7.599097] adv748x 6-0070: adv748x_write 208: page = 08, reg = 03, value = 42, err = 0
[ 7.608547] adv748x 6-0070: adv748x_write 208: page = 08, reg = 04, value = B5, err = 0
[ 7.617890] adv748x 6-0070: adv748x_write 208: page = 08, reg = 13, value = 00, err = 0
[ 7.627343] adv748x 6-0070: adv748x_write 208: page = 08, reg = 17, value = 41, err = 0
[ 7.636662] adv748x 6-0070: adv748x_write 208: page = 08, reg = 31, value = 12, err = 0
[ 7.646110] adv748x 6-0070: adv748x_write 208: page = 08, reg = E6, value = 4F, err = 0
[ 7.655476] adv748x 6-0070: adv748x_write 208: page = 00, reg = 10, value = 70, err = 0
[ 7.664834] adv748x 6-0070: adv748x_write 208: page = 09, reg = 00, value = 81, err = 0
[ 7.674307] adv748x 6-0070: adv748x_write 208: page = 09, reg = 00, value = A1, err = 0
[ 7.683596] adv748x 6-0070: adv748x_write 208: page = 09, reg = D2, value = 40, err = 0
[ 7.693002] adv748x 6-0070: adv748x_write 208: page = 09, reg = C4, value = 0A, err = 0
[ 7.702330] adv748x 6-0070: adv748x_write 208: page = 09, reg = 71, value = 33, err = 0
[ 7.711698] adv748x 6-0070: adv748x_write 208: page = 09, reg = 72, value = 11, err = 0
[ 7.721018] adv748x 6-0070: adv748x_write 208: page = 09, reg = F0, value = 00, err = 0
[ 7.730453] adv748x 6-0070: adv748x_write 208: page = 09, reg = 31, value = 82, err = 0
[ 7.739803] adv748x 6-0070: adv748x_write 208: page = 09, reg = 1E, value = 40, err = 0
[ 7.749006] adv748x 6-0070: adv748x_write 208: page = 09, reg = DA, value = 01, err = 0
[ 7.770876] adv748x 6-0070: adv748x_write 208: page = 09, reg = 00, value = 21, err = 0
[ 7.790829] adv748x 6-0070: adv748x_write 208: page = 09, reg = C1, value = 2B, err = 0
[ 7.811353] adv748x 6-0070: adv748x_write 208: page = 09, reg = 31, value = 80, err = 0
[ 7.819968] adv748x 6-0070: adv748x_txb_power 403
[ 7.825266] adv748x 6-0070: adv748x_read 200: page = 09, reg = 1E
[ 7.832004] adv748x 6-0070: adv748x_read_check 183
[ 7.838226] adv748x 6-0070: adv748x_read_check 187: val = 40, err = 0
[ 7.845305] adv748x 6-0070: adv748x_write_regs 294
[ 7.851389] adv748x 6-0070: adv748x_write 208: page = 09, reg = 31, value = 82, err = 0
[ 7.860873] adv748x 6-0070: adv748x_write 208: page = 09, reg = 1E, value = 00, err = 0
[ 7.870283] adv748x 6-0070: adv748x_write 208: page = 09, reg = 00, value = 81, err = 0
[ 7.879732] adv748x 6-0070: adv748x_write 208: page = 09, reg = DA, value = 01, err = 0
[ 7.889118] adv748x 6-0070: adv748x_write 208: page = 09, reg = C1, value = 3B, err = 0
[ 7.898507] adv748x 6-0070: adv748x_write 208: page = 00, reg = 00, value = 00, err = 0
[ 7.907861] adv748x 6-0070: adv748x_write 208: page = 00, reg = 10, value = A0, err = 0
[ 7.916475] adv748x 6-0070: adv748x_read 200: page = 02, reg = C9
[ 7.923332] adv748x 6-0070: adv748x_read_check 183
[ 7.929561] adv748x 6-0070: adv748x_read_check 187: val = 2C, err = 0
[ 7.937398] adv748x 6-0070: adv748x_write 208: page = 02, reg = C9, value = 2D, err = 0
[ 7.946065] adv748x 6-0070: v4l2_device registered successfully at ffffffc0f4aded98
[ 7.946069] adv748x 6-0070: adv748x_subdev_init 688
[ 7.951601] adv748x 6-0070: adv748x_subdev_init 703: name = adv748x 6-0070 afe
[ 7.960252] adv748x 6-0070: adv748x_write 208: page = 08, reg = 00, value = 00, err = 0
[ 7.968958] adv748x 6-0070: AFE Default input set to 0
[ 7.975435] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0E, value = 00, err = 0
[ 7.984837] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0A, value = 00, err = 0
[ 7.994251] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0E, value = 00, err = 0
[ 8.003620] adv748x 6-0070: adv748x_write 208: page = 08, reg = 08, value = 80, err = 0
[ 8.012948] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0E, value = 00, err = 0
[ 8.022332] adv748x 6-0070: adv748x_write 208: page = 08, reg = E3, value = 80, err = 0
[ 8.031658] adv748x 6-0070: adv748x_write 208: page = 08, reg = E4, value = 80, err = 0
[ 8.041073] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0E, value = 00, err = 0
[ 8.050543] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0B, value = 00, err = 0
[ 8.059876] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0E, value = 00, err = 0
[ 8.068559] adv748x 6-0070: adv748x_read 200: page = 08, reg = 0C
[ 8.075377] adv748x 6-0070: adv748x_read_check 183
[ 8.081635] adv748x 6-0070: adv748x_read_check 187: val = 36, err = 0
[ 8.089523] adv748x 6-0070: adv748x_write 208: page = 08, reg = 0C, value = 36, err = 0
[ 8.098302] adv748x 6-0070: adv748x_read 200: page = 08, reg = 14
[ 8.105164] adv748x 6-0070: adv748x_read_check 183
[ 8.111446] adv748x 6-0070: adv748x_read_check 187: val = 10, err = 0
[ 8.119407] adv748x 6-0070: adv748x_write 208: page = 08, reg = 14, value = FF, err = 0
[ 8.128349] adv748x 6-0070: adv748x_subdev_init 688
[ 8.134064] adv748x 6-0070: adv748x_subdev_init 703: name = adv748x 6-0070 ttl
[ 8.142236] adv748x 6-0070: adv748x_csi2_init 289
[ 8.147801] adv748x 6-0070: adv748x_csi2_init 293: TXA
[ 8.153790] adv748x 6-0070: adv748x_csi2_init 297: TXA
[ 8.160551] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 0D, value = 00, err = 0
[ 8.169398] adv748x 6-0070: adv748x_subdev_init 688
[ 8.175318] adv748x 6-0070: adv748x_subdev_init 703: name = adv748x 6-0070 txa
[ 8.183471] adv748x 6-0070: adv748x_csi2_init 324
[ 8.189236] adv748x 6-0070: adv748x_csi2_init 327
[ 8.189240] adv748x 6-0070: adv748x_csi2_init 331
[ 8.189243] (NULL device *): adv748x_csi2_init_controls 270
[ 8.189253] adv748x 6-0070: adv748x_csi2_init 335
[ 8.189258] vi 54080000.vi: subdev adv748x 6-0070 txa bound
[ 8.189268] adv748x 6-0070: adv748x_csi2_registered 81
[ 8.189271] adv748x 6-0070: Registered TXA (adv748x 6-0070 txa)
[ 8.189273] adv748x 6-0070: Linking TTL → TXA
[ 8.189276] adv748x 6-0070: adv748x_csi2_register_link 50
[ 8.189991] adv748x 6-0070: adv748x_csi2_init 338: ret = 0
[ 8.189993] adv748x 6-0070: adv748x_csi2_init 350
[ 8.189996] adv748x 6-0070: adv748x_txa_power 380
[ 8.190000] adv748x 6-0070: adv748x_read 200: page = 0A, reg = 1E
[ 8.190003] adv748x 6-0070: adv748x_read_check 183
[ 8.190853] adv748x 6-0070: adv748x_read_check 187: val = 0, err = 0
[ 8.190856] adv748x 6-0070: adv748x_write_regs 294
[ 8.191548] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 00, value = 84, err = 0
[ 8.192226] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 00, value = A4, err = 0
[ 8.192942] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 31, value = 82, err = 0
[ 8.193634] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 1E, value = 40, err = 0
[ 8.194319] adv748x 6-0070: adv748x_write 208: page = 0A, reg = DA, value = 01, err = 0
[ 8.206810] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 00, value = 24, err = 0
[ 8.218775] adv748x 6-0070: adv748x_write 208: page = 0A, reg = C1, value = 2B, err = 0
[ 8.230803] adv748x 6-0070: adv748x_write 208: page = 0A, reg = 31, value = 80, err = 0“

so my dts file is attached.

Looks like your device tree is not for Jetson Nano.

Should be csi{} instead of nvcsi@150c0000{}

/ {
22 	host1x {
23 		vi {
24 			num-channels = <2>;
25 			ports {
26 				#address-cells = <1>;
27 				#size-cells = <0>;
28 				port@0 {
29 					reg = <0>;
30 					imx274_vi_in0: endpoint {
31 						port-index = <0>;
32 						bus-width = <4>;
33 						remote-endpoint = <&imx274_csi_out0>;
34 					};
35 				};
36 				port@1 {
37 					reg = <1>;
38 					tc358840_vi_in0: endpoint {
39 						port-index = <2>;
40 						bus-width = <8>;
41 						remote-endpoint = <&tc358840_csi_out0>;
42 					};
43 				};
44 			};
45 		};
46 
47 		nvcsi {
48 			num-channels = <2>;
49 			channel@0 {
50 				reg = <0>;
51 				ports {
52 					#address-cells = <1>;
53 					#size-cells = <0>;
54 					port@0 {
55 						reg = <0>;
56 						imx274_csi_in0: endpoint@0 {
57 							port-index = <0>;
58 							bus-width = <4>;
59 							remote-endpoint = <&imx274_out0>;
60 						};
61 					};
62 					port@1 {
63 						reg = <1>;
64 						imx274_csi_out0: endpoint@1 {
65 							remote-endpoint = <&imx274_vi_in0>;
66 						};
67 					};
68 				};
69 			};
70 			channel@1 {
71 				reg = <1>;
72 				ports {
73 					#address-cells = <1>;
74 					#size-cells = <0>;
75 					port@0 {
76 						reg = <0>;
77 						tc358840_csi_in0: endpoint@2 {
78 							port-index = <2>;
79 							bus-width = <8>;
80 							remote-endpoint = <&tc358840_out0>;
81 						};
82 					};
83 					port@1 {
84 						reg = <1>;
85 						tc358840_csi_out0: endpoint@3 {
86 							remote-endpoint = <&tc358840_vi_in0>;
87 						};
88 					};
89 				};
90 			};
91 		};

When I try this, even the VI-to-NVCSI connection didn’t come up. I found the NVCSI node at reg = <0x0 0x150c0000 0x0 0x40000>; and added it to the DTS. I also found compatible = "nvidia,tegra186-nvcsi"; in the kernel source. With these two changes, the NVCSI was detected

Jetson Nano is tegra210 instead of tegra186.

I had also seen in the Jetson Nano documents that the compatible was nvidia,tegra210-nvcsi, but when I tried it, NVCSI didn’t probe. So I checked the kernel source and found this one: nvidia,tegra186-nvcsi.

“uname -r” is “4.9.253-tegra” and i get source of it from “JetPack 4.6.1”

Could you flash original system image by sdkmanager to dump the device tree to confirm.

dump.txt (328.1 KB) this is original dump from my kernel dtb, nvcsi is not enable

Now you can user jetson-io to enable the imx219 or imx477 then reference to modify it.

Suppose nvcsi@0x150c0000{} is incorrect for Jetson Nano.

new_dump.txt (328.4 KB)

By enabling IMX219 using jetson-io, the NVCSI nodes appeared in the media graph, but the IMX219 driver itself did not probe. In the dumped DTB file, I didn’t see any changes except the activation of the nodes. I think it’s because of the default NVCSI remote-endpoints, which prevent it from connecting to my driver.is it correct?

1 Like

I disabled the nodes related to the IMX sensors and connected to the kernel’s original NVCSI. I also compared the dumped DTB file of my jetson with the dump from a working device, and they were exactly the same. However, the ADV748X connection to NVCSI still doesn’t get established. At this point, I think the main problem is in the driver source, which is not making the final link.if i send my source can you help me?

camera-adv748_dts.txt (4.2 KB)

I would suggest reference to tc358840 both device tree and kernel source code.

I understand that the SDI output of adv748 sensor , the clock and data0/data1 are connected to CSI_0, and data2/data3 are connected to CSI_1.
For PAL, the differential clock and a single differential data line (data0) are connected to CSI_2 ,Does this affect the DTS connections?

You may check design guide from the downloader center to confirm it.

Thanks

I researched this and found conflicting information. Some places say to define three NVCSI channels, others say to increase the number of ports, and some people say it works with the same DTS. I still haven’t reached a clear conclusion. Please guide me.

I don’t have this device to confirm what’s config is correct.

You may consult the one have experience to make it worked. Or search on the Forum if any relative topic for reference.

Thanks

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.