This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TCA6424A: Operating two TCA6424ARGJR connected to same I2C bus

Part Number: TCA6424A
Other Parts Discussed in Thread: AM625-Q1, TPIC2810

Tool/software:

Greetings TI Community,

In our custom AM625-Q1 based board design we have connected two TCA6424ARGJR I/O Expanders onto the same I2C bus. As the SoC is operating on a Linux based environment we have also enabled the required device tree and kernel configurations for both the I/O expanders. However, we are only able to only able to utilize one I/O expander while the other is non-operational.


Kernel Configuration Settings

#
# I2C GPIO expanders
#
# CONFIG_GPIO_ADNP is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_MAX7300 is not set
CONFIG_GPIO_MAX732X=y
# CONFIG_GPIO_MAX732X_IRQ is not set
CONFIG_GPIO_PCA953X=y
CONFIG_GPIO_PCA953X_IRQ=y
# CONFIG_GPIO_PCA9570 is not set
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_TPIC2810 is not set
# end of I2C GPIO expanders

DTS Settings

&main_i2c3 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&main_i2c3_pins_default>;
	clock-frequency = <100000>;

	exp1: gpio@23 {
		compatible = "ti,tca6424";
		reg = <0x23>;
		gpio-controller;
		#gpio-cells = <2>;
		gpio-line-names = "12V_GPI1_OUT", "12V_GPI2_OUT",
				   "12V_GPI3_OUT", "12V_GPI4_OUT",
				   "12V_GPI5_OUT", "12V_GPI6_OUT",
				   "12V_GPI7_OUT", "12V_GPI8_OUT",
				   "12V_GPI9_OUT", "12V_GPI10_OUT",
				   "12V_GPI11_OUT", "12V_GPI12_OUT",
				   "12V_GPO1_IN", "12V_GPO2_IN",
				   "12V_GPO3_IN", "12V_GPO4_IN",
				   "12V_GPO5678_FAULT2", "12V_GPO5678_FAULT1",
				   "12V_GPO1234_FAULT2", "12V_GPO1234_FAULT1",
				   "12V_GPO8_IN", "12V_GPO7_IN",
				   "12V_GPO6_IN", "12V_GPO5_IN";

		pinctrl-names = "default";
		pinctrl-0 = <&main_gpio1_ioexp_intr_pins_default>;

		interrupt-parent = <&main_gpio1>;
		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};

	exp2: gpio@22 {
		compatible = "ti,tca6424";
		reg = <0x22>;
		gpio-controller;
		#gpio-cells = <2>;
		gpio-line-names = "MCU_12V_GPI1_OUT", "MCU_12V_GPI2_OUT",
				   "MCU_12V_GPI3_OUT", "MCU_12V_GPI4_OUT",
				   "MCU_12V_GPI5_OUT", "MCU_12V_GPI6_OUT",
				   "MCU_12V_GPI7_OUT", "MCU_12V_GPI8_OUT",
				   "MCU_12V_GPI9_OUT", "MCU_12V_GPI10_OUT",
				   "MCU_12V_GPI11_OUT", "MCU_12V_GPI12_OUT",
				   "MCU_12V_GPO1_IN", "MCU_12V_GPO2_IN",
				   "MCU_12V_GPO3_IN", "MCU_12V_GPO4_IN",
				   "MCU_12V_GPO5678_FAULT2", "MCU_12V_GPO5678_FAULT1",
				   "MCU_12V_GPO1234_FAULT2", "MCU_12V_GPO1234_FAULT1",
				   "MCU_12V_GPO8_IN", "MCU_12V_GPO7_IN",
				   "MCU_12V_GPO6_IN", "MCU_12V_GPO5_IN";

		pinctrl-names = "default";
		pinctrl-0 = <&main_gpio1_ioexp_intr_pins_default>;

		interrupt-parent = <&main_gpio1>;
		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};
};

I2C Address

root@am62xx-evm:~# i2cdetect -r 3
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-3 using receive byte commands.
I will probe address range 0x08-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- 22 UU -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@am62xx-evm:~#

Linux GPIO Info

root@am62xx-evm:~# gpioinfo
gpiochip0 - 92 lines:
        line   0:       unnamed                 input
        line   1:       unnamed                 input
        line   2:       unnamed                 input
        line   3:       unnamed                 input
        line   4:       unnamed                 input
        line   5:       unnamed                 input
        line   6:       unnamed                 input
        line   7:       unnamed                 input
        line   8:       unnamed                 input
        line   9:       unnamed                 input
        line  10:       unnamed                 input
        line  11:       unnamed                 input
        line  12:       unnamed                 input
        line  13:       unnamed                 input
        line  14:       unnamed                 input
        line  15:       unnamed                 input
        line  16:       unnamed                 input
        line  17:       unnamed                 input
        line  18:       unnamed                 input
        line  19:       unnamed                 input
        line  20:       unnamed                 input
        line  21:       unnamed                 input
        line  22:       unnamed                 input
        line  23:       unnamed                 input
        line  24:       unnamed                 input
        line  25:       unnamed                 input
        line  26:       unnamed                 input
        line  27:       unnamed                 input
        line  28:       unnamed                 input
        line  29:       unnamed                 input
        line  30:       unnamed                 input
        line  31:       unnamed                 output consumer=regulator-6
        line  32:       unnamed                 input
        line  33:       unnamed                 input
        line  34:       unnamed                 input
        line  35:       unnamed                 input
        line  36:       unnamed                 output consumer=regulator-7
        line  37:       unnamed                 input
        line  38:       unnamed                 input
        line  39:       unnamed                 input
        line  40:       unnamed                 output consumer=tlv71033
        line  41:       unnamed                 input
        line  42:       unnamed                 input
        line  43:       unnamed                 input
        line  44:       unnamed                 input
        line  45:       unnamed                 input
        line  46:       unnamed                 input
        line  47:       unnamed                 input
        line  48:       unnamed                 input
        line  49:       unnamed                 input
        line  50:       unnamed                 input
        line  51:       unnamed                 input
        line  52:       unnamed                 input
        line  53:       unnamed                 input
        line  54:       unnamed                 input
        line  55:       unnamed                 input
        line  56:       unnamed                 input
        line  57:       unnamed                 input
        line  58:       unnamed                 input
        line  59:       unnamed                 input
        line  60:       unnamed                 input
        line  61:       unnamed                 input
        line  62:       unnamed                 input
        line  63:       unnamed                 input
        line  64:       unnamed                 input
        line  65:       unnamed                 input
        line  66:       unnamed                 input
        line  67:       unnamed                 input
        line  68:       unnamed                 input
        line  69:       unnamed                 input
        line  70:       unnamed                 input
        line  71:       unnamed                 input
        line  72:       unnamed                 input
        line  73:       unnamed                 output active-low consumer=reset
        line  74:       unnamed                 input
        line  75:       unnamed                 input
        line  76:       unnamed                 output consumer=regulator-3
        line  77:       unnamed                 input
        line  78:       unnamed                 input
        line  79:       unnamed                 input
        line  80:       unnamed                 input
        line  81:       unnamed                 input
        line  82:       unnamed                 input
        line  83:       unnamed                 input
        line  84:       unnamed                 input
        line  85:       unnamed                 input
        line  86:       unnamed                 input
        line  87:       unnamed                 input
        line  88:       unnamed                 input
        line  89:       unnamed                 input
        line  90:       unnamed                 output
        line  91:       unnamed                 input
gpiochip1 - 52 lines:
        line   0:       unnamed                 input
        line   1:       unnamed                 input
        line   2:       unnamed                 input
        line   3:       unnamed                 input
        line   4:       unnamed                 output
        line   5:       unnamed                 input
        line   6:       unnamed                 input
        line   7:       unnamed                 input
        line   8:       unnamed                 input
        line   9:       unnamed                 input
        line  10:       unnamed                 input
        line  11:       unnamed                 input
        line  12:       unnamed                 input
        line  13:       unnamed                 input
        line  14:       unnamed                 input
        line  15:       unnamed                 input
        line  16:       unnamed                 input
        line  17:       unnamed                 input
        line  18:       unnamed                 input
        line  19:       unnamed                 input
        line  20:       unnamed                 input
        line  21:       unnamed                 input
        line  22:       unnamed                 input
        line  23:       unnamed                 input
        line  24:       unnamed                 input
        line  25:       unnamed                 input
        line  26:       unnamed                 input
        line  27:       unnamed                 input
        line  28:       unnamed                 input
        line  29:       unnamed                 input
        line  30:       unnamed                 input
        line  31:       unnamed                 input
        line  32:       unnamed                 input
        line  33:       unnamed                 input
        line  34:       unnamed                 input
        line  35:       unnamed                 input
        line  36:       unnamed                 input
        line  37:       unnamed                 input
        line  38:       unnamed                 input
        line  39:       unnamed                 input
        line  40:       unnamed                 input
        line  41:       unnamed                 input
        line  42:       unnamed                 input
        line  43:       unnamed                 input
        line  44:       unnamed                 input
        line  45:       unnamed                 input
        line  46:       unnamed                 input
        line  47:       unnamed                 input
        line  48:       unnamed                 input
        line  49:       unnamed                 input
        line  50:       unnamed                 input
        line  51:       unnamed                 input
gpiochip2 - 24 lines:
        line   0:       "12V_GPI1_OUT"          input
        line   1:       "12V_GPI2_OUT"          input
        line   2:       "12V_GPI3_OUT"          input
        line   3:       "12V_GPI4_OUT"          input
        line   4:       "12V_GPI5_OUT"          input
        line   5:       "12V_GPI6_OUT"          input
        line   6:       "12V_GPI7_OUT"          input
        line   7:       "12V_GPI8_OUT"          input
        line   8:       "12V_GPI9_OUT"          input
        line   9:       "12V_GPI10_OUT"         input
        line  10:       "12V_GPI11_OUT"         input
        line  11:       "12V_GPI12_OUT"         input
        line  12:       "12V_GPO1_IN"           input
        line  13:       "12V_GPO2_IN"           input
        line  14:       "12V_GPO3_IN"           input
        line  15:       "12V_GPO4_IN"           input
        line  16:       "12V_GPO5678_FAULT2"    input
        line  17:       "12V_GPO5678_FAULT1"    input
        line  18:       "12V_GPO1234_FAULT2"    input
        line  19:       "12V_GPO1234_FAULT1"    input
        line  20:       "12V_GPO8_IN"           input
        line  21:       "12V_GPO7_IN"           input
        line  22:       "12V_GPO6_IN"           input
        line  23:       "12V_GPO5_IN"           input
root@am62xx-evm:~#

We are able to detect the I2C address of both the I/O expanders but only one is utilized or can be operated even though the kernel and dts configurations for both have been defined. We therefore need assistance to make both the I/O expanders operational.

Regards,

Visweshwar Selvaraj