162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/i2c/i2c-mux-pinctrl.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Pinctrl-based I2C Bus Mux 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Wolfram Sang <wsa@kernel.org> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cidescription: | 1362306a36Sopenharmony_ci This binding describes an I2C bus multiplexer that uses pin multiplexing to route the I2C 1462306a36Sopenharmony_ci signals, and represents the pin multiplexing configuration using the pinctrl device tree 1562306a36Sopenharmony_ci bindings. 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci +-----+ +-----+ 1862306a36Sopenharmony_ci | dev | | dev | 1962306a36Sopenharmony_ci +------------------------+ +-----+ +-----+ 2062306a36Sopenharmony_ci | SoC | | | 2162306a36Sopenharmony_ci | /----|------+--------+ 2262306a36Sopenharmony_ci | +---+ +------+ | child bus A, on first set of pins 2362306a36Sopenharmony_ci | |I2C|---|Pinmux| | 2462306a36Sopenharmony_ci | +---+ +------+ | child bus B, on second set of pins 2562306a36Sopenharmony_ci | \----|------+--------+--------+ 2662306a36Sopenharmony_ci | | | | | 2762306a36Sopenharmony_ci +------------------------+ +-----+ +-----+ +-----+ 2862306a36Sopenharmony_ci | dev | | dev | | dev | 2962306a36Sopenharmony_ci +-----+ +-----+ +-----+ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci For each named state defined in the pinctrl-names property, an I2C child bus will be created. 3262306a36Sopenharmony_ci I2C child bus numbers are assigned based on the index into the pinctrl-names property. 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci The only exception is that no bus will be created for a state named "idle". If such a state is 3562306a36Sopenharmony_ci defined, it must be the last entry in pinctrl-names. For example: 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci pinctrl-names = "ddc", "pta", "idle" -> ddc = bus 0, pta = bus 1 3862306a36Sopenharmony_ci pinctrl-names = "ddc", "idle", "pta" -> Invalid ("idle" not last) 3962306a36Sopenharmony_ci pinctrl-names = "idle", "ddc", "pta" -> Invalid ("idle" not last) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci Whenever an access is made to a device on a child bus, the relevant pinctrl state will be 4262306a36Sopenharmony_ci programmed into hardware. 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci If an idle state is defined, whenever an access is not being made to a device on a child bus, 4562306a36Sopenharmony_ci the idle pinctrl state will be programmed into hardware. 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci If an idle state is not defined, the most recently used pinctrl state will be left programmed 4862306a36Sopenharmony_ci into hardware whenever no access is being made of a device on a child bus. 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciproperties: 5162306a36Sopenharmony_ci compatible: 5262306a36Sopenharmony_ci const: i2c-mux-pinctrl 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci i2c-parent: 5562306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/phandle 5662306a36Sopenharmony_ci description: The phandle of the I2C bus that this multiplexer's master-side port is connected 5762306a36Sopenharmony_ci to. 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ciallOf: 6062306a36Sopenharmony_ci - $ref: i2c-mux.yaml 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ciunevaluatedProperties: false 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cirequired: 6562306a36Sopenharmony_ci - compatible 6662306a36Sopenharmony_ci - i2c-parent 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciexamples: 6962306a36Sopenharmony_ci - | 7062306a36Sopenharmony_ci i2cmux { 7162306a36Sopenharmony_ci compatible = "i2c-mux-pinctrl"; 7262306a36Sopenharmony_ci #address-cells = <1>; 7362306a36Sopenharmony_ci #size-cells = <0>; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci i2c-parent = <&i2c1>; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci pinctrl-names = "ddc", "pta", "idle"; 7862306a36Sopenharmony_ci pinctrl-0 = <&state_i2cmux_ddc>; 7962306a36Sopenharmony_ci pinctrl-1 = <&state_i2cmux_pta>; 8062306a36Sopenharmony_ci pinctrl-2 = <&state_i2cmux_idle>; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci i2c@0 { 8362306a36Sopenharmony_ci reg = <0>; 8462306a36Sopenharmony_ci #address-cells = <1>; 8562306a36Sopenharmony_ci #size-cells = <0>; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci eeprom@50 { 8862306a36Sopenharmony_ci compatible = "atmel,24c02"; 8962306a36Sopenharmony_ci reg = <0x50>; 9062306a36Sopenharmony_ci }; 9162306a36Sopenharmony_ci }; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci i2c@1 { 9462306a36Sopenharmony_ci reg = <1>; 9562306a36Sopenharmony_ci #address-cells = <1>; 9662306a36Sopenharmony_ci #size-cells = <0>; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci eeprom@50 { 9962306a36Sopenharmony_ci compatible = "atmel,24c02"; 10062306a36Sopenharmony_ci reg = <0x50>; 10162306a36Sopenharmony_ci }; 10262306a36Sopenharmony_ci }; 10362306a36Sopenharmony_ci }; 104