Re: [PATCH 2/2] schemas: i2c: Introduce I2C bus extensions
Rob Herring <[email protected]>
| Newsgroups | org.kernel.vger.devicetree-spec,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-i2c,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAL_JsqKQdzDzAYHDctP-nmrONBynRfi-qyncnyj10r4xZNrx1A@mail.gmail.com> |
On Tue, Apr 1, 2025 at 3:11 AM Herve Codina <[email protected]> wrote: > > An I2C bus can be wired to the connector and allows an add-on board to > connect additional I2C devices to this bus. > > Those additional I2C devices could be described as sub-nodes of the I2C > bus controller node however for hotplug connectors described via device > tree overlays there is additional level of indirection, which is needed > to decouple the overlay and the base tree: > > --- base device tree --- > > i2c1: i2c@abcd0000 { > compatible = "xyz,i2c-ctrl"; > i2c-bus-extension@0 { What does 0 represent? Some fake I2C address? Why do you even need a child node here? > i2c-bus = <&i2c_ctrl>; > }; > ... > }; > > i2c5: i2c@cafe0000 { > compatible = "xyz,i2c-ctrl"; > i2c-bus-extension@0 { > i2c-bus = <&i2c-sensors>; > }; > ... > }; > > connector { > i2c_ctrl: i2c-ctrl { > i2c-parent = <&i2c1>; > #address-cells = <1>; > #size-cells = <0>; > }; > > i2c-sensors { > i2c-parent = <&i2c5>; > #address-cells = <1>; > #size-cells = <0>; > }; > }; > > --- device tree overlay --- > > ... > // This node will overlay on the i2c-ctrl node of the base tree > i2c-ctrl { > eeprom@50 { compatible = "atmel,24c64"; ... }; > }; > ... > > --- resulting device tree --- > > i2c1: i2c@abcd0000 { > compatible = "xyz,i2c-ctrl"; > i2c-bus-extension@0 { > i2c-bus = <&i2c_ctrl>; > }; > ... > }; > > i2c5: i2c@cafe0000 { > compatible = "xyz,i2c-ctrl"; > i2c-bus-extension@0 { > i2c-bus = <&i2c-sensors>; > }; > ... > }; > > connector { > i2c-ctrl { > i2c-parent = <&i2c1>; > #address-cells = <1>; > #size-cells = <0>; > > eeprom@50 { compatible = "atmel,24c64"; ... }; > }; > > i2c-sensors { > i2c-parent = <&i2c5>; > #address-cells = <1>; > #size-cells = <0>; > }; > }; > > Here i2c-ctrl (same goes for i2c-sensors) represent the part of I2C bus > that is on the hot-pluggable add-on. On hot-plugging it will physically > connect to the I2C adapter on the base board. Let's call the 'i2c-ctrl' > node an "extension node". > > In order to decouple the overlay from the base tree, the I2C adapter > (i2c@abcd0000) and the extension node (i2c-ctrl) are separate nodes. > > The extension node is linked to the I2C bus controller in two ways. The > first one with the i2c-bus-extension available in I2C controller > sub-node and the second one with the i2c-parent property available in > the extension node itself. > > The purpose of those two links is to provide the link in both direction > from the I2C controller to the I2C extension and from the I2C extension > to the I2C controller. Why do you need both directions? An i2c controller can search the tree for i2c-parent and find the one's that belong to it. Or the connector can register with the I2C controller somehow. Rob