Orin NX HDMI Output without DDC I2C

Hi there,

We have designed a custom carrier board based on the Xavier NX Carrier Board P3509. The HDMI output section features a 1:4 splitter, the PI3HDX414FCEEX, which implements a Pin control and I2C control mode. For some reason we need the HDMI splitter to be in Pin control mode which disables the DDC lines (grounded).

There is no output on the screen when using the Orin NX, it works fine with a Xavier NX module.

Is there a possibility to bypass/disable the DDC channel and force the output on the HDMI lines to the screen? Or hardcode the display information in the BSP?

Thanks for your responses.

Upon hotplugging the HDMI, here is the warning that repeats in the kernel logs:

[  277.751952] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1a0
[  277.761364] Modules linked in: fuse(E) lzo_rle(E) lzo_compress(E) zram(E) ramoops(E) reed_sol)
[  277.761464]  nvidia(OE) nv_imx219(E) spi_tegra114(E) cfg80211(E) realtek(E) ina3221(E) pwm_fa]
[  277.761488] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W  OE     5.10.104-tegra #1
[  277.761491] Hardware name: Unknown NVIDIA Orin NX Developer Kit/NVIDIA Orin NX Developer Kit,3
[  277.761494] pstate: 20400089 (nzCv daIf +PAN -UAO -TCO BTYPE=--)
[  277.761498] pc : tegra186_gpio_irq+0x1ac/0x1f0
[  277.761502] lr : tegra186_gpio_irq+0x11c/0x1f0
[  277.761504] sp : ffff800010003c60
[  277.761507] x29: ffff800010003c60 x28: ffff556840e33660 
[  277.761513] x27: ffffd5154724cff8 x26: 0000000000000018 
[  277.761519] x25: ffff556845a75880 x24: ffff556845a9f000 
[  277.761524] x23: 000000000000000c x22: 000000000000004c 
[  277.761530] x21: 00000000000000bb x20: 0000000000000000 
[  277.761536] x19: ffffd5154670e690 x18: 0000000000000000 
[  277.761542] x17: 0000000000000000 x16: 0000000000000000 
[  277.761548] x15: 0000000000000000 x14: ffffd51547132680 
[  277.761553] x13: ffff805627e2e000 x12: 000000003464d91d 
[  277.761559] x11: 0000000000000040 x10: ffffd515471b7a80 
[  277.761565] x9 : ffffd515471b7a78 x8 : ffff5568404b6938 
[  277.761571] x7 : 0000000000000000 x6 : 0000000000000001 
[  277.761577] x5 : 0000000000000000 x4 : 0000000000000000 
[  277.761582] x3 : 0000000000000000 x2 : ffffd515455ee170 
[  277.761589] x1 : 000000000000004c x0 : 0000000000000000 
[  277.761594] Call trace:
[  277.761598]  tegra186_gpio_irq+0x1ac/0x1f0
[  277.761603]  generic_handle_irq+0x40/0x60
[  277.761608]  __handle_domain_irq+0x70/0xd0
[  277.761612]  gic_handle_irq+0x68/0x134
[  277.761615]  el1_irq+0xd0/0x180
[  277.761618]  __do_softirq+0xb4/0x3e8
[  277.761623]  irq_exit+0xc0/0xe0
[  277.761628]  __handle_domain_irq+0x74/0xd0
[  277.761631]  gic_handle_irq+0x68/0x134
[  277.761634]  el1_irq+0xd0/0x180
[  277.761638]  cpuidle_enter_state+0xb8/0x410
[  277.761642]  cpuidle_enter+0x40/0x60
[  277.761645]  call_cpuidle+0x44/0x80
[  277.761649]  do_idle+0x208/0x270
[  277.761652]  cpu_startup_entry+0x2c/0x70
[  277.761657]  rest_init+0xdc/0xe8
[  277.761660]  arch_call_rest_init+0x18/0x20
[  277.761663]  start_kernel+0x514/0x54c
[  277.761666] ---[ end trace 5a0705e81b55b67b ]---

It is unlikely. The display driver on Orin is totally different from Xavier. It has a non-public source of firmware to control too.

Need to follow the standard way.

I see. Thanks for the feedback.

Hi @WayneWWW, or anybody able to help,

We put the splitter in I2C control mode and got rid of the warning. We are now looking at a way to bypass EDID. So I scrolled the source code for v35.2.1 of the BSP and the display driver does not seem to be available for us to modify. The module reporting EDID not being found is nvidia-modeset.

  1. Can you confirm the source code of the driver is actually not available? If so is there an ETA for it to be added?
  2. Can you please advise as to a mean to enable a fallback EDID into the kernel in case it is not found for whatever reason? Or simply force HDMI output with a default resolution?

Much thanks.

Source code is available here.

There is a separate source code tarball (not in kernel source) which is for nvidia.ko/nvidia-modeset.ko

Thanks @WayneWWW , found it and made an initial attempt to set a fallback edid, no luck obtaining an HDMI output so far. Just to recap, we ended up leaving the I2C bus of the DDC channel unconnected, pulled up with 2.2k resistor as recommended.
When the Xavier NX is placed on our custom carrier board, the kernel logs show that the tegradc driver uses a fallback edid, hence an HDMI output is produced. Can you please advise as to a reliable way to modify nvidia_modeset or the display control related modules of the Orin NX to use a fallback EDID?
Much thanks.

[Update] We managed to force a given EDID in the driver. Still interested in an eventual proper way to use the interfaces already implemented in the driver to define a fallback EDID.

Hi @cfall

You can try this in another way. Xorg.conf is able to put a fixed EDID in it now.

So no need to do it in kernel driver anymore. Again, these are all experimental. Our official method does not support fallback edid at all.

Hi @WayneWWW,
Thanks for the info, that is great.
We realised that the default config [xorg.conf] allows for a fallback in case no EDID is found, which is great. But there needs to be a device on the HDMI DDC I2C bus + at the expected address for the display server to chime in. Is it something you can confirm?
Also, can you confirm that the logic to intervene on the DDC I2C communication or bypass it is located in the kernel and not in the driver?
[L4T 35.2.1]

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