162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/i2c/i2c-mux-gpmux.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: General Purpose I2C Bus Mux 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Peter Rosin <peda@axentia.se> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cidescription: |+ 1362306a36Sopenharmony_ci This binding describes an I2C bus multiplexer that uses a mux controller 1462306a36Sopenharmony_ci from the mux subsystem to route the I2C signals. 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci .-----. .-----. 1762306a36Sopenharmony_ci | dev | | dev | 1862306a36Sopenharmony_ci .------------. '-----' '-----' 1962306a36Sopenharmony_ci | SoC | | | 2062306a36Sopenharmony_ci | | .--------+--------' 2162306a36Sopenharmony_ci | .------. | .------+ child bus A, on MUX value set to 0 2262306a36Sopenharmony_ci | | I2C |-|--| Mux | 2362306a36Sopenharmony_ci | '------' | '--+---+ child bus B, on MUX value set to 1 2462306a36Sopenharmony_ci | .------. | | '----------+--------+--------. 2562306a36Sopenharmony_ci | | MUX- | | | | | | 2662306a36Sopenharmony_ci | | Ctrl |-|-----+ .-----. .-----. .-----. 2762306a36Sopenharmony_ci | '------' | | dev | | dev | | dev | 2862306a36Sopenharmony_ci '------------' '-----' '-----' '-----' 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ciallOf: 3262306a36Sopenharmony_ci - $ref: /schemas/i2c/i2c-mux.yaml# 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciproperties: 3562306a36Sopenharmony_ci compatible: 3662306a36Sopenharmony_ci const: i2c-mux 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci i2c-parent: 3962306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/phandle 4062306a36Sopenharmony_ci description: 4162306a36Sopenharmony_ci The phandle of the I2C bus that this multiplexer's master-side port is 4262306a36Sopenharmony_ci connected to. 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci mux-controls: 4562306a36Sopenharmony_ci maxItems: 1 4662306a36Sopenharmony_ci description: 4762306a36Sopenharmony_ci The mux-controller states are the I2C sub-bus numbers. 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci mux-locked: 5062306a36Sopenharmony_ci type: boolean 5162306a36Sopenharmony_ci description: | 5262306a36Sopenharmony_ci Explicitly allow unrelated I2C transactions on the parent I2C adapter at 5362306a36Sopenharmony_ci these times: 5462306a36Sopenharmony_ci - during setup of the multiplexer 5562306a36Sopenharmony_ci - between setup of the multiplexer and the child bus I2C transaction 5662306a36Sopenharmony_ci - between the child bus I2C transaction and releasing of the multiplexer 5762306a36Sopenharmony_ci - during releasing of the multiplexer 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci However, I2C transactions to devices behind all I2C multiplexers connected 6062306a36Sopenharmony_ci to the same parent adapter that this multiplexer is connected to are blocked 6162306a36Sopenharmony_ci for the full duration of the complete multiplexed I2C transaction (i.e. 6262306a36Sopenharmony_ci including the times covered by the above list). 6362306a36Sopenharmony_ci If mux-locked is not present, the multiplexer is assumed to be parent-locked. 6462306a36Sopenharmony_ci This means that no unrelated I2C transactions are allowed on the parent I2C 6562306a36Sopenharmony_ci adapter for the complete multiplexed I2C transaction. 6662306a36Sopenharmony_ci The properties of mux-locked and parent-locked multiplexers are discussed 6762306a36Sopenharmony_ci in more detail in Documentation/i2c/i2c-topology.rst. 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cirequired: 7062306a36Sopenharmony_ci - compatible 7162306a36Sopenharmony_ci - i2c-parent 7262306a36Sopenharmony_ci - mux-controls 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ciunevaluatedProperties: false 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ciexamples: 7762306a36Sopenharmony_ci - | 7862306a36Sopenharmony_ci #include <dt-bindings/gpio/gpio.h> 7962306a36Sopenharmony_ci mux: mux-controller { 8062306a36Sopenharmony_ci compatible = "gpio-mux"; 8162306a36Sopenharmony_ci #mux-control-cells = <0>; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>, 8462306a36Sopenharmony_ci <&pioA 1 GPIO_ACTIVE_HIGH>; 8562306a36Sopenharmony_ci }; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci i2c-mux { 8862306a36Sopenharmony_ci compatible = "i2c-mux"; 8962306a36Sopenharmony_ci mux-locked; 9062306a36Sopenharmony_ci i2c-parent = <&i2c1>; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci mux-controls = <&mux>; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci #address-cells = <1>; 9562306a36Sopenharmony_ci #size-cells = <0>; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci i2c@1 { 9862306a36Sopenharmony_ci reg = <1>; 9962306a36Sopenharmony_ci #address-cells = <1>; 10062306a36Sopenharmony_ci #size-cells = <0>; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci gpio@20 { 10362306a36Sopenharmony_ci compatible = "nxp,pca9555"; 10462306a36Sopenharmony_ci gpio-controller; 10562306a36Sopenharmony_ci #gpio-cells = <2>; 10662306a36Sopenharmony_ci reg = <0x20>; 10762306a36Sopenharmony_ci }; 10862306a36Sopenharmony_ci }; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci i2c@3 { 11162306a36Sopenharmony_ci reg = <3>; 11262306a36Sopenharmony_ci #address-cells = <1>; 11362306a36Sopenharmony_ci #size-cells = <0>; 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci gpio@20 { 11662306a36Sopenharmony_ci compatible = "nxp,pca9555"; 11762306a36Sopenharmony_ci gpio-controller; 11862306a36Sopenharmony_ci #gpio-cells = <2>; 11962306a36Sopenharmony_ci reg = <0x20>; 12062306a36Sopenharmony_ci }; 12162306a36Sopenharmony_ci }; 12262306a36Sopenharmony_ci }; 12362306a36Sopenharmony_ci... 124