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