Message ID | 20250430152201.209797-2-herve.codina@bootlin.com |
---|---|
State | New |
Headers | show |
Series | i2c: Introduce I2C bus extensions | expand |
Hello Hervé, On Wed, 30 Apr 2025 17:22:00 +0200 Herve Codina <herve.codina@bootlin.com> 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 { > i2c-bus = <&i2c_ctrl>; > }; > ... > }; > > i2c5: i2c@cafe0000 { > compatible = "xyz,i2c-ctrl"; > i2c-bus-extension@0 { > i2c-bus = <&i2c-sensors>; ^^^^^^^^^^^ This should be i2c_sensors (with an underscore)... > }; > ... > }; > > connector { > i2c_ctrl: i2c-ctrl { > i2c-parent = <&i2c1>; > #address-cells = <1>; > #size-cells = <0>; > }; > > i2c-sensors { ...and this should have a label: i2c-sensors: i2c-sensors { With those fixed you can add my: +Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Hi Luca, On Fri, 2 May 2025 16:09:10 +0200 Luca Ceresoli <luca.ceresoli@bootlin.com> wrote: > Hello Hervé, > > On Wed, 30 Apr 2025 17:22:00 +0200 > Herve Codina <herve.codina@bootlin.com> 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 { > > i2c-bus = <&i2c_ctrl>; > > }; > > ... > > }; > > > > i2c5: i2c@cafe0000 { > > compatible = "xyz,i2c-ctrl"; > > i2c-bus-extension@0 { > > i2c-bus = <&i2c-sensors>; > ^^^^^^^^^^^ > > This should be i2c_sensors (with an underscore)... > > > }; > > ... > > }; > > > > connector { > > i2c_ctrl: i2c-ctrl { > > i2c-parent = <&i2c1>; > > #address-cells = <1>; > > #size-cells = <0>; > > }; > > > > i2c-sensors { > > ...and this should have a label: > > i2c-sensors: i2c-sensors { > > With those fixed you can add my: Indeed, thanks for pointing out. I will fix them in the next iteration and add your 'Reviewed-by' tag. > > +Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com> > Best regards, Hervé
diff --git a/dtschema/schemas/i2c/i2c-controller.yaml b/dtschema/schemas/i2c/i2c-controller.yaml index 8488edd..8ab7fec 100644 --- a/dtschema/schemas/i2c/i2c-controller.yaml +++ b/dtschema/schemas/i2c/i2c-controller.yaml @@ -30,6 +30,13 @@ properties: minimum: 1 maximum: 5000000 + i2c-parent: + $ref: /schemas/types.yaml#/definitions/phandle + description: + In case of an I2C bus extension, reference to the I2C bus controller + this extension is connected to. In other word, reference the I2C bus + controller on the fixed side that drives the bus extension. + i2c-scl-falling-time-ns: description: Number of nanoseconds the SCL signal takes to fall; t(f) in the I2C @@ -159,6 +166,25 @@ allOf: - i2c-scl-has-clk-low-timeout patternProperties: + 'i2c-bus-extension@[0-9a-f]+$': + type: object + description: + An I2C bus extension connected to an I2C bus. Those extensions allow to + decouple I2C busses when they are wired to connectors. + + properties: + reg: + maxItems: 1 + + i2c-bus: + $ref: /schemas/types.yaml#/definitions/phandle + description: + Reference to the extension bus. + + required: + - reg + - i2c-bus + '@[0-9a-f]+$': type: object @@ -221,3 +247,44 @@ dependentRequired: i2c-digital-filter-width-ns: [ i2c-digital-filter ] additionalProperties: true + +examples: + # I2C bus extension example involving an I2C bus controller and a connector. + # + # +--------------+ +-------------+ +-------------+ + # | i2c@abcd0000 | | Connector | | Addon board | + # | (i2c1) +-----+ (i2c-addon) +-----+ (device@10) | + # | | | | | | + # +--------------+ +-------------+ +-------------+ + # + # The i2c1 I2C bus is wired from a I2C controller to a connector. It is + # identified at connector level as i2c-addon bus. + # An addon board can be connected to this connector and connects a device + # (device@10) to this i2c-addon extension bus. + - | + i2c1: i2c@abcd0000 { + compatible = "xyz,i2c-ctrl"; + reg = <0xabcd0000 0x100>; + #address-cells = <1>; + #size-cells = <0>; + + i2c-bus-extension@0 { + reg = <0>; + i2c-bus = <&i2c_addon>; + }; + }; + + connector { + i2c_addon: i2c-addon { + i2c-parent = <&i2c1>; + #address-cells = <1>; + #size-cells = <0>; + + device@10 { + compatible = "xyz,foo"; + reg = <0x10>; + }; + }; + }; + +...