1*8b82b841SThierry Reding# SPDX-License-Identifier: GPL-2.0-only
2*8b82b841SThierry Reding%YAML 1.2
3*8b82b841SThierry Reding---
4*8b82b841SThierry Reding$id: http://devicetree.org/schemas/i2c/i2c-mux-pinctrl.yaml#
5*8b82b841SThierry Reding$schema: http://devicetree.org/meta-schemas/core.yaml#
6*8b82b841SThierry Reding
7*8b82b841SThierry Redingtitle: Pinctrl-based I2C Bus Mux
8*8b82b841SThierry Reding
9*8b82b841SThierry Redingmaintainers:
10*8b82b841SThierry Reding  - Wolfram Sang <wsa@kernel.org>
11*8b82b841SThierry Reding
12*8b82b841SThierry Redingdescription: |
13*8b82b841SThierry Reding  This binding describes an I2C bus multiplexer that uses pin multiplexing to route the I2C
14*8b82b841SThierry Reding  signals, and represents the pin multiplexing configuration using the pinctrl device tree
15*8b82b841SThierry Reding  bindings.
16*8b82b841SThierry Reding
17*8b82b841SThierry Reding                                 +-----+  +-----+
18*8b82b841SThierry Reding                                 | dev |  | dev |
19*8b82b841SThierry Reding    +------------------------+   +-----+  +-----+
20*8b82b841SThierry Reding    | SoC                    |      |        |
21*8b82b841SThierry Reding    |                   /----|------+--------+
22*8b82b841SThierry Reding    |   +---+   +------+     | child bus A, on first set of pins
23*8b82b841SThierry Reding    |   |I2C|---|Pinmux|     |
24*8b82b841SThierry Reding    |   +---+   +------+     | child bus B, on second set of pins
25*8b82b841SThierry Reding    |                   \----|------+--------+--------+
26*8b82b841SThierry Reding    |                        |      |        |        |
27*8b82b841SThierry Reding    +------------------------+  +-----+  +-----+  +-----+
28*8b82b841SThierry Reding                                | dev |  | dev |  | dev |
29*8b82b841SThierry Reding                                +-----+  +-----+  +-----+
30*8b82b841SThierry Reding
31*8b82b841SThierry Reding  For each named state defined in the pinctrl-names property, an I2C child bus will be created.
32*8b82b841SThierry Reding  I2C child bus numbers are assigned based on the index into the pinctrl-names property.
33*8b82b841SThierry Reding
34*8b82b841SThierry Reding  The only exception is that no bus will be created for a state named "idle". If such a state is
35*8b82b841SThierry Reding  defined, it must be the last entry in pinctrl-names. For example:
36*8b82b841SThierry Reding
37*8b82b841SThierry Reding    pinctrl-names = "ddc", "pta", "idle"  ->  ddc = bus 0, pta = bus 1
38*8b82b841SThierry Reding    pinctrl-names = "ddc", "idle", "pta"  ->  Invalid ("idle" not last)
39*8b82b841SThierry Reding    pinctrl-names = "idle", "ddc", "pta"  ->  Invalid ("idle" not last)
40*8b82b841SThierry Reding
41*8b82b841SThierry Reding  Whenever an access is made to a device on a child bus, the relevant pinctrl state will be
42*8b82b841SThierry Reding  programmed into hardware.
43*8b82b841SThierry Reding
44*8b82b841SThierry Reding  If an idle state is defined, whenever an access is not being made to a device on a child bus,
45*8b82b841SThierry Reding  the idle pinctrl state will be programmed into hardware.
46*8b82b841SThierry Reding
47*8b82b841SThierry Reding  If an idle state is not defined, the most recently used pinctrl state will be left programmed
48*8b82b841SThierry Reding  into hardware whenever no access is being made of a device on a child bus.
49*8b82b841SThierry Reding
50*8b82b841SThierry Redingproperties:
51*8b82b841SThierry Reding  compatible:
52*8b82b841SThierry Reding    const: i2c-mux-pinctrl
53*8b82b841SThierry Reding
54*8b82b841SThierry Reding  i2c-parent:
55*8b82b841SThierry Reding    $ref: /schemas/types.yaml#/definitions/phandle
56*8b82b841SThierry Reding    description: The phandle of the I2C bus that this multiplexer's master-side port is connected
57*8b82b841SThierry Reding      to.
58*8b82b841SThierry Reding
59*8b82b841SThierry RedingallOf:
60*8b82b841SThierry Reding  - $ref: i2c-mux.yaml
61*8b82b841SThierry Reding
62*8b82b841SThierry RedingunevaluatedProperties: false
63*8b82b841SThierry Reding
64*8b82b841SThierry Redingrequired:
65*8b82b841SThierry Reding  - compatible
66*8b82b841SThierry Reding  - i2c-parent
67*8b82b841SThierry Reding
68*8b82b841SThierry Redingexamples:
69*8b82b841SThierry Reding  - |
70*8b82b841SThierry Reding    i2cmux {
71*8b82b841SThierry Reding      compatible = "i2c-mux-pinctrl";
72*8b82b841SThierry Reding      #address-cells = <1>;
73*8b82b841SThierry Reding      #size-cells = <0>;
74*8b82b841SThierry Reding
75*8b82b841SThierry Reding      i2c-parent = <&i2c1>;
76*8b82b841SThierry Reding
77*8b82b841SThierry Reding      pinctrl-names = "ddc", "pta", "idle";
78*8b82b841SThierry Reding      pinctrl-0 = <&state_i2cmux_ddc>;
79*8b82b841SThierry Reding      pinctrl-1 = <&state_i2cmux_pta>;
80*8b82b841SThierry Reding      pinctrl-2 = <&state_i2cmux_idle>;
81*8b82b841SThierry Reding
82*8b82b841SThierry Reding      i2c@0 {
83*8b82b841SThierry Reding        reg = <0>;
84*8b82b841SThierry Reding        #address-cells = <1>;
85*8b82b841SThierry Reding        #size-cells = <0>;
86*8b82b841SThierry Reding
87*8b82b841SThierry Reding        eeprom@50 {
88*8b82b841SThierry Reding          compatible = "atmel,24c02";
89*8b82b841SThierry Reding          reg = <0x50>;
90*8b82b841SThierry Reding        };
91*8b82b841SThierry Reding      };
92*8b82b841SThierry Reding
93*8b82b841SThierry Reding      i2c@1 {
94*8b82b841SThierry Reding        reg = <1>;
95*8b82b841SThierry Reding        #address-cells = <1>;
96*8b82b841SThierry Reding        #size-cells = <0>;
97*8b82b841SThierry Reding
98*8b82b841SThierry Reding        eeprom@50 {
99*8b82b841SThierry Reding          compatible = "atmel,24c02";
100*8b82b841SThierry Reding          reg = <0x50>;
101*8b82b841SThierry Reding        };
102*8b82b841SThierry Reding      };
103*8b82b841SThierry Reding    };
104