INA3221 Communication Failure - TX2 NX

I am using the TX2 NX with a custom carrier board. My understanding from the 32.6.1 Software Features Documentation is that all modules include the INA3221 module for power monitoring, but communication on the i2c bus seems to be timing out and I cannot get power monitoring details.

[   11.593184] tegra-i2c 3180000.i2c: pio timed out addr: 0x40 tlen:16 rlen:0
[   11.600071] tegra-i2c 3180000.i2c: --- register dump for debugging ----
[   11.606694] tegra-i2c 3180000.i2c: I2C_CNFG - 0x22c00
[   11.611746] tegra-i2c 3180000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
[   11.618357] tegra-i2c 3180000.i2c: I2C_FIFO_CONTROL - 0xe0
[   11.623842] tegra-i2c 3180000.i2c: I2C_FIFO_STATUS - 0x800070
[   11.629585] tegra-i2c 3180000.i2c: I2C_INT_MASK - 0x7c
[   11.634722] tegra-i2c 3180000.i2c: I2C_INT_STATUS - 0x0
[   11.639946] tegra-i2c 3180000.i2c: i2c transfer timed out addr: 0x40
[   11.646326] ina3221x 2-0040: ina3221 reset failure status: 0xffffff92
[   11.652892] ina3221x: probe of 2-0040 failed with error -110

my device tree config at tegra186-p3636-0001-a00-powermon.dtsi matches the settings in the above linked documentation.

Any help would be appreciated.

hello joe_kale,

the Jetson TX2 NX module has a three-channel INA3221 power monitors at I2C address 0x40, bus 2.
could you please check via system nodes, /sys/bus/i2c/drivers/ina3221x/2-0040/iio:device0/

Hi @JerryChang,

The device does not appear to exist in the sysfs.

nvidia@tx2-nx:~$ ls -la /sys/bus/i2c/drivers/ina3221x/2-0040/iio:device0/
ls: cannot access '/sys/bus/i2c/drivers/ina3221x/2-0040/iio:device0/': No such file or directory 

here is the section from decompiled from the device tree I’m using. i2c_bus_2_dts.txt (1.5 KB)

hello joe_kale,

this is available by default, you don’t even modify device tree to check ina3221.
you should assign a \ before : for checking the node,
for example,
$ ls -la /sys/bus/i2c/drivers/ina3221x/2-0040/iio\:device0/

Hi JerryChang,

I retried with your modification. Device still does not exist. From my original post, the driver fails to probe due to communication errors with the ina3221.

nvidia@tx2-nx:~$ ls -la /sys/bus/i2c/drivers/ina3221x/
total 0
drwxr-xr-x  2 root root    0 Aug 26 09:21 .
drwxr-xr-x 40 root root    0 Aug 26 09:21 ..
--w-------  1 root root 4096 Aug 26 09:21 bind
--w-------  1 root root 4096 Aug 26 09:21 uevent
--w-------  1 root root 4096 Aug 26 09:21 unbind
nvidia@tx2-nx:~$ ls -la /sys/bus/i2c/drivers/ina3221x/2-0040/iio\:device0/
ls: cannot access '/sys/bus/i2c/drivers/ina3221x/2-0040/iio:device0/': No such file or directory

I am currently investigating other reasons why communication may be failing for that bus. Does the carrier card need to supply pull up resistors for that bus? The documentation doesn’t say it should, but the voltages on those pins of the SODIMM connector are too low.

I added pullup resistors to those pins on the SODIMM connector. I am now seeing proper 3.3V on those pins, but communication still times out and the driver for the ina3221 fails to probe.

I realized that I had created a flawed pinmux that was being flashed to the mb1_bct. After making a correction and reflashing that partition the i2c bus works correctly and I now have communication with the ina3221 device.