I2C access problem on the buses i2c-3, i2c-5 and i2c-6


We added some I2C devices to the buses i2c-3, i2c-5 and i2c-6 on our custom board, but it is not possible to access them. We checked the development kit (with unmodified load written via SDK Manager) and saw the same behavior.

Every address query on those buses returns an error similar to that one:

agx@agx:~$ sudo i2cdetect -y 6
Warning: Can't use SMBus Quick Write command, will skip some addresses
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
30: [ 2833.139823] tegra-i2c 31c0000.i2c: pio timed out addr: 0x30 tlen:12 rlen:4
[ 2833.140026] tegra-i2c 31c0000.i2c: --- register dump for debugging ----
[ 2833.140193] tegra-i2c 31c0000.i2c: I2C_CNFG - 0x22c00
[ 2833.140304] tegra-i2c 31c0000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
[ 2833.140438] tegra-i2c 31c0000.i2c: I2C_FIFO_CONTROL - 0x0
[ 2833.140544] tegra-i2c 31c0000.i2c: I2C_FIFO_STATUS - 0x800080
[ 2833.140688] tegra-i2c 31c0000.i2c: I2C_MST_FIFO_CONTROL - 0x70000
[ 2833.140823] tegra-i2c 31c0000.i2c: I2C_MST_FIFO_STATUS - 0x800000
[ 2833.140942] tegra-i2c 31c0000.i2c: I2C_MST_PACKET_TRANSFER_CNT - 0x0
[ 2833.141068] tegra-i2c 31c0000.i2c: I2C_INT_MASK - 0x7d
[ 2833.141171] tegra-i2c 31c0000.i2c: I2C_INT_STATUS - 0x2
[ 2833.141311] tegra-i2c 31c0000.i2c: i2c transfer timed out addr: 0x30
-- [ 2843.379549] tegra-i2c 31c0000.i2c: pio timed out addr: 0x31 tlen:12 rlen:4
[ 2843.379755] tegra-i2c 31c0000.i2c: --- register dump for debugging ----
[ 2843.379932] tegra-i2c 31c0000.i2c: I2C_CNFG - 0x22c00
[ 2843.380033] tegra-i2c 31c0000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
[ 2843.380166] tegra-i2c 31c0000.i2c: I2C_FIFO_CONTROL - 0x0
[ 2843.380273] tegra-i2c 31c0000.i2c: I2C_FIFO_STATUS - 0x800080
[ 2843.380408] tegra-i2c 31c0000.i2c: I2C_MST_FIFO_CONTROL - 0x70000
[ 2843.380545] tegra-i2c 31c0000.i2c: I2C_MST_FIFO_STATUS - 0x800000
[ 2843.380671] tegra-i2c 31c0000.i2c: I2C_MST_PACKET_TRANSFER_CNT - 0x0
[ 2843.380794] tegra-i2c 31c0000.i2c: I2C_INT_MASK - 0x7d
[ 2843.380900] tegra-i2c 31c0000.i2c: I2C_INT_STATUS - 0x2
[ 2843.381039] tegra-i2c 31c0000.i2c: i2c transfer timed out addr: 0x31
-- ^C^C

Use of “-r” and “-a” keys with i2cdetect didn’t change anything.

Could you please comment on this?


Does those bus have pin out for connecting i2c devices?

This is from the design guideline (DG-09840-001_v2.2, Page 101):

In the development kit, I2C7 (ic2-6 for Linux) should be accessible,
since the display is configured as HDMI.

This I2C controller should
communicate with the monitor somehow, right?
((DG-09840-001_v2.2, Page 84))
But I can’t see the monitor I2C device when I use

sudo i2cdetect -y 6

command. The result is what I reported above.

It’s for communicate with display when you have HW like EDID connect to them but you didn’t, right.

Actually I connected an HDMI monitor to the dev-kit.
So, I expect to be able to access the related I2C bus
and see the EDID eeprom of the monitor on that bus.

The ddc channel for HDMI is by default disabled. So you need to manually open it with below method.

echo 1 > /sys/kernel/debug/tegra_hdmi/ddc_power_toggle

Hi Wayne,

Will this also allow me to access the İ2c bus for other devices we added on our custom carrier?

Mustafa Güler
Software Engineer

No, this has nothing to do with your other i2c issue.
Only specific to HDMI.

I asked the DDC, while it is based on I2C.
We added I2C devices to those buses on our carrier board.
But we cannot access them.
We get timeout and this behaviour is also observable on the devkit.

Is your i2c device the HDMI monitor that uses our tegra DC driver?

On Head 2, we have a permanent non-monitor display device at 0x50 (like a monitor) and an HDMI Re Timer IC at 0x40 (read-only afaik).

On Head 1, we have an optional monitor at 0x50 and the Re Timer IC at 0x40 again.

Head 0 is disabled.

If they are running by our tegra dc driver, then yes, you need to use that node to enable eeprom.

Only HDMI can use this method. DP is not.

I don’t have tegra_hdmi under the folder /sys/kernel/debug

Is there any kernel compile-time parameter for that?

Hi Wayne,

I’m sorry there was an access right problem.
I switched to root user.

Now I can access i2c-3 and i2c-6 (Linux convention) and see the monitors.

Thank you.

1 Like

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