diff options
Diffstat (limited to 'Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt')
| -rw-r--r-- | Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt b/Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt new file mode 100644 index 000000000000..ae8af1694e95 --- /dev/null +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt | |||
| @@ -0,0 +1,93 @@ | |||
| 1 | Pinctrl-based I2C Bus Mux | ||
| 2 | |||
| 3 | This binding describes an I2C bus multiplexer that uses pin multiplexing to | ||
| 4 | route the I2C signals, and represents the pin multiplexing configuration | ||
| 5 | using the pinctrl device tree bindings. | ||
| 6 | |||
| 7 | +-----+ +-----+ | ||
| 8 | | dev | | dev | | ||
| 9 | +------------------------+ +-----+ +-----+ | ||
| 10 | | SoC | | | | ||
| 11 | | /----|------+--------+ | ||
| 12 | | +---+ +------+ | child bus A, on first set of pins | ||
| 13 | | |I2C|---|Pinmux| | | ||
| 14 | | +---+ +------+ | child bus B, on second set of pins | ||
| 15 | | \----|------+--------+--------+ | ||
| 16 | | | | | | | ||
| 17 | +------------------------+ +-----+ +-----+ +-----+ | ||
| 18 | | dev | | dev | | dev | | ||
| 19 | +-----+ +-----+ +-----+ | ||
| 20 | |||
| 21 | Required properties: | ||
| 22 | - compatible: i2c-mux-pinctrl | ||
| 23 | - i2c-parent: The phandle of the I2C bus that this multiplexer's master-side | ||
| 24 | port is connected to. | ||
| 25 | |||
| 26 | Also required are: | ||
| 27 | |||
| 28 | * Standard pinctrl properties that specify the pin mux state for each child | ||
| 29 | bus. See ../pinctrl/pinctrl-bindings.txt. | ||
| 30 | |||
| 31 | * Standard I2C mux properties. See mux.txt in this directory. | ||
| 32 | |||
| 33 | * I2C child bus nodes. See mux.txt in this directory. | ||
| 34 | |||
| 35 | For each named state defined in the pinctrl-names property, an I2C child bus | ||
| 36 | will be created. I2C child bus numbers are assigned based on the index into | ||
| 37 | the pinctrl-names property. | ||
| 38 | |||
| 39 | The only exception is that no bus will be created for a state named "idle". If | ||
| 40 | such a state is defined, it must be the last entry in pinctrl-names. For | ||
| 41 | example: | ||
| 42 | |||
| 43 | pinctrl-names = "ddc", "pta", "idle" -> ddc = bus 0, pta = bus 1 | ||
| 44 | pinctrl-names = "ddc", "idle", "pta" -> Invalid ("idle" not last) | ||
| 45 | pinctrl-names = "idle", "ddc", "pta" -> Invalid ("idle" not last) | ||
| 46 | |||
| 47 | Whenever an access is made to a device on a child bus, the relevant pinctrl | ||
| 48 | state will be programmed into hardware. | ||
| 49 | |||
| 50 | If an idle state is defined, whenever an access is not being made to a device | ||
| 51 | on a child bus, the idle pinctrl state will be programmed into hardware. | ||
| 52 | |||
| 53 | If an idle state is not defined, the most recently used pinctrl state will be | ||
| 54 | left programmed into hardware whenever no access is being made of a device on | ||
| 55 | a child bus. | ||
| 56 | |||
| 57 | Example: | ||
| 58 | |||
| 59 | i2cmux { | ||
| 60 | compatible = "i2c-mux-pinctrl"; | ||
| 61 | #address-cells = <1>; | ||
| 62 | #size-cells = <0>; | ||
| 63 | |||
| 64 | i2c-parent = <&i2c1>; | ||
| 65 | |||
| 66 | pinctrl-names = "ddc", "pta", "idle"; | ||
| 67 | pinctrl-0 = <&state_i2cmux_ddc>; | ||
| 68 | pinctrl-1 = <&state_i2cmux_pta>; | ||
| 69 | pinctrl-2 = <&state_i2cmux_idle>; | ||
| 70 | |||
| 71 | i2c@0 { | ||
| 72 | reg = <0>; | ||
| 73 | #address-cells = <1>; | ||
| 74 | #size-cells = <0>; | ||
| 75 | |||
| 76 | eeprom { | ||
| 77 | compatible = "eeprom"; | ||
| 78 | reg = <0x50>; | ||
| 79 | }; | ||
| 80 | }; | ||
| 81 | |||
| 82 | i2c@1 { | ||
| 83 | reg = <1>; | ||
| 84 | #address-cells = <1>; | ||
| 85 | #size-cells = <0>; | ||
| 86 | |||
| 87 | eeprom { | ||
| 88 | compatible = "eeprom"; | ||
| 89 | reg = <0x50>; | ||
| 90 | }; | ||
| 91 | }; | ||
| 92 | }; | ||
| 93 | |||
