Дерево устройств Linux для 2 устройств i2c на одной шине

#linux-device-driver #gpio #i2c #microchip #device-tree

#linux-драйвер устройства #gpio #i2c #микросхема #дерево устройств

Вопрос:

У меня есть 2 расширителя портов, подключенных к I2C моего чипа. Я могу настроить один расширитель портов из NXP и может переключать gpio. Но второй — от microchip, и он не отображает gpio, перечисленные как в предыдущем случае. Пожалуйста, дайте мне знать, как правильно это настроить.

 amp;i2c1 {
 #address-cells = <1>;
 #size-cells = <0>;
 clock-frequency = <100000>;
 pinctrl-names = "default", "gpio";
 pinctrl-0 = <amp;pinctrl_i2c1>;
 scl-gpios = <amp;lsio_gpio0 xx GPIO_ACTIVE_HIGH>;
 sda-gpios = <amp;lsio_gpio0 xx GPIO_ACTIVE_HIGH>;
 status = "okay";

mcp23017: gpio@10 {
 compatible = "microchip,mcp23017";
 reg = <0x10>;
 gpio-controller;
 #gpio-cells = <2>;
};

pca6416: gpio@11 {
 compatible = "ti,tca6416";
 reg = <0x11>;
 gpio-controller;
 #gpio-cells = <2>;
};
 

Комментарии:

1. Микрочип один — это контактный элемент управления, а не старый простой чип GPIO, вы должны использовать привязки pinctrl.

2. Согласно спецификации MCP23017, адрес I2C, установленный его выводами A2, A1 и A0, будет находиться в диапазоне от 0x20 до 0x27, но в вашем узле дерева устройств для него установлено значение 0x10.