Mention branches and keyring.
[releases.git] / bindings / i2c / i2c-demux-pinctrl.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/i2c/i2c-demux-pinctrl.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Pinctrl-based I2C Bus Demultiplexer
8
9 maintainers:
10   - Wolfram Sang <wsa+renesas@sang-engineering.com>
11
12 description: |
13   This binding describes an I2C bus demultiplexer that uses pin multiplexing to
14   route the I2C signals, and represents the pin multiplexing configuration
15   using the pinctrl device tree bindings.  This may be used to select one I2C
16   IP core at runtime which may have a better feature set for a given task than
17   another I2C IP core on the SoC.  The most simple example is to fall back to
18   GPIO bitbanging if your current runtime configuration hits an errata of the
19   internal IP core.
20
21       +-------------------------------+
22       | SoC                           |
23       |                               |   +-----+  +-----+
24       |   +------------+              |   | dev |  | dev |
25       |   |I2C IP Core1|--\           |   +-----+  +-----+
26       |   +------------+   \-------+  |      |        |
27       |                    |Pinctrl|--|------+--------+
28       |   +------------+   +-------+  |
29       |   |I2C IP Core2|--/           |
30       |   +------------+              |
31       |                               |
32       +-------------------------------+
33
34 allOf:
35   - $ref: i2c-mux.yaml
36   - $ref: /schemas/i2c/i2c-controller.yaml#
37
38 properties:
39   compatible:
40     const: i2c-demux-pinctrl
41
42   i2c-parent:
43     $ref: /schemas/types.yaml#/definitions/phandle-array
44     description:
45       List of phandles of I2C masters available for selection.  The first one
46       will be used as default.
47
48   i2c-bus-name:
49     $ref: /schemas/types.yaml#/definitions/string
50     description:
51       The name of this bus.  Also needed as pinctrl-name for the I2C parents.
52
53 required:
54   - compatible
55   - i2c-parent
56   - i2c-bus-name
57
58 unevaluatedProperties: false
59
60 examples:
61   - |
62     #include <dt-bindings/gpio/gpio.h>
63     #include <dt-bindings/interrupt-controller/irq.h>
64
65     gpioi2c2: i2c-9 {
66         #address-cells = <1>;
67         #size-cells = <0>;
68         compatible = "i2c-gpio";
69         scl-gpios = <&gpio5 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
70         sda-gpios = <&gpio5 6 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
71         i2c-gpio,delay-us = <5>;
72
73         // The I2C controller must have its status "disabled".  The I2C bus
74         // demultiplexer will enable it at runtime when needed.
75         status = "disabled";
76     };
77
78     iic2: i2c@e6520000 {
79         reg = <0xe6520000 0x425>;
80         pinctrl-0 = <&iic2_pins>;
81         // The pinctrl property for the parent I2C controller needs a pinctrl
82         // state with the same name as i2c-bus-name in the I2C bus demultiplexer
83         // node, not "default"!
84         pinctrl-names = "i2c-hdmi";
85
86         clock-frequency = <100000>;
87
88         // The I2C controller must have its status "disabled".  The I2C bus
89         // demultiplexer will enable it at runtime when needed.
90         status = "disabled";
91     };
92
93     i2c2: i2c@e6530000 {
94         reg = <0 0xe6530000 0 0x40>;
95         pinctrl-0 = <&i2c2_pins>;
96         // The pinctrl property for the parent I2C controller needs a pinctrl
97         // state with the same name as i2c-bus-name in the I2C bus demultiplexer
98         // node, not "default"!
99         pinctrl-names = "i2c-hdmi";
100
101         clock-frequency = <100000>;
102
103         // The I2C controller must have its status "disabled".  The I2C bus
104         // demultiplexer will enable it at runtime when needed.
105         status = "disabled";
106     };
107
108     // Example for a bus to be demuxed.  It contains various I2C clients for
109     // HDMI, so the bus is named "i2c-hdmi":
110     i2chdmi: i2c-mux3 {
111             compatible = "i2c-demux-pinctrl";
112             i2c-parent = <&iic2>, <&i2c2>, <&gpioi2c2>;
113             i2c-bus-name = "i2c-hdmi";
114             #address-cells = <1>;
115             #size-cells = <0>;
116
117             ak4643: codec@12 {
118                     compatible = "asahi-kasei,ak4643";
119                     #sound-dai-cells = <0>;
120                     reg = <0x12>;
121             };
122
123             composite-in@20 {
124                     compatible = "adi,adv7180";
125                     reg = <0x20>;
126
127                     port {
128                             adv7180: endpoint {
129                                     bus-width = <8>;
130                                     remote-endpoint = <&vin1ep0>;
131                             };
132                     };
133             };
134
135             hdmi@39 {
136                     compatible = "adi,adv7511w";
137                     reg = <0x39>;
138                     interrupt-parent = <&gpio1>;
139                     interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
140                     clocks = <&cec_clock>;
141                     clock-names = "cec";
142
143                     avdd-supply = <&fixedregulator1v8>;
144                     dvdd-supply = <&fixedregulator1v8>;
145                     pvdd-supply = <&fixedregulator1v8>;
146                     dvdd-3v-supply = <&fixedregulator3v3>;
147                     bgvdd-supply = <&fixedregulator1v8>;
148
149                     adi,input-depth = <8>;
150                     adi,input-colorspace = "rgb";
151                     adi,input-clock = "1x";
152
153                     ports {
154                             #address-cells = <1>;
155                             #size-cells = <0>;
156
157                             port@0 {
158                                     reg = <0>;
159                                     adv7511_in: endpoint {
160                                             remote-endpoint = <&lvds0_out>;
161                                     };
162                             };
163
164                             port@1 {
165                                     reg = <1>;
166                                     adv7511_out: endpoint {
167                                             remote-endpoint = <&hdmi_con_out>;
168                                     };
169                             };
170                     };
171             };
172     };