Merge tag 'block-6.13-20242901' of git://git.kernel.dk/linux
[drm/drm-misc.git] / Documentation / devicetree / bindings / i2c / i2c-demux-pinctrl.yaml
blob1eaf00b90a77a3e5f16ed0ab3f2fb55cb8e2cd37
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#
7 title: Pinctrl-based I2C Bus Demultiplexer
9 maintainers:
10   - Wolfram Sang <wsa+renesas@sang-engineering.com>
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.
21       +-------------------------------+
22       | SoC                           |
23       |                               |   +-----+  +-----+
24       |   +------------+              |   | dev |  | dev |
25       |   |I2C IP Core1|--\           |   +-----+  +-----+
26       |   +------------+   \-------+  |      |        |
27       |                    |Pinctrl|--|------+--------+
28       |   +------------+   +-------+  |
29       |   |I2C IP Core2|--/           |
30       |   +------------+              |
31       |                               |
32       +-------------------------------+
34 allOf:
35   - $ref: /schemas/i2c/i2c-controller.yaml#
37 properties:
38   compatible:
39     const: i2c-demux-pinctrl
41   i2c-parent:
42     $ref: /schemas/types.yaml#/definitions/phandle-array
43     items:
44       maxItems: 1
45     description:
46       List of phandles of I2C masters available for selection.  The first one
47       will be used as default.
49   i2c-bus-name:
50     $ref: /schemas/types.yaml#/definitions/string
51     description:
52       The name of this bus.  Also needed as pinctrl-name for the I2C parents.
54 required:
55   - compatible
56   - i2c-parent
57   - i2c-bus-name
59 unevaluatedProperties: false
61 examples:
62   - |
63     #include <dt-bindings/gpio/gpio.h>
64     #include <dt-bindings/interrupt-controller/irq.h>
66     gpioi2c2: i2c-9 {
67         #address-cells = <1>;
68         #size-cells = <0>;
69         compatible = "i2c-gpio";
70         scl-gpios = <&gpio5 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
71         sda-gpios = <&gpio5 6 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
72         i2c-gpio,delay-us = <5>;
74         // The I2C controller must have its status "disabled".  The I2C bus
75         // demultiplexer will enable it at runtime when needed.
76         status = "disabled";
77     };
79     iic2: i2c@e6520000 {
80         reg = <0xe6520000 0x425>;
81         pinctrl-0 = <&iic2_pins>;
82         // The pinctrl property for the parent I2C controller needs a pinctrl
83         // state with the same name as i2c-bus-name in the I2C bus demultiplexer
84         // node, not "default"!
85         pinctrl-names = "i2c-hdmi";
87         clock-frequency = <100000>;
89         // The I2C controller must have its status "disabled".  The I2C bus
90         // demultiplexer will enable it at runtime when needed.
91         status = "disabled";
92     };
94     i2c2: i2c@e6530000 {
95         reg = <0 0xe6530000 0 0x40>;
96         pinctrl-0 = <&i2c2_pins>;
97         // The pinctrl property for the parent I2C controller needs a pinctrl
98         // state with the same name as i2c-bus-name in the I2C bus demultiplexer
99         // node, not "default"!
100         pinctrl-names = "i2c-hdmi";
102         clock-frequency = <100000>;
104         // The I2C controller must have its status "disabled".  The I2C bus
105         // demultiplexer will enable it at runtime when needed.
106         status = "disabled";
107     };
109     // Example for a bus to be demuxed.  It contains various I2C clients for
110     // HDMI, so the bus is named "i2c-hdmi":
111     i2chdmi: i2c-mux3 {
112         compatible = "i2c-demux-pinctrl";
113         i2c-parent = <&iic2>, <&i2c2>, <&gpioi2c2>;
114         i2c-bus-name = "i2c-hdmi";
115         #address-cells = <1>;
116         #size-cells = <0>;
118         ak4643: codec@12 {
119             compatible = "asahi-kasei,ak4643";
120             #sound-dai-cells = <0>;
121             reg = <0x12>;
122         };
124         composite-in@20 {
125             compatible = "adi,adv7180";
126             reg = <0x20>;
128             port {
129                 adv7180: endpoint {
130                     bus-width = <8>;
131                     remote-endpoint = <&vin1ep0>;
132                 };
133             };
134         };
136         hdmi@39 {
137             compatible = "adi,adv7511w";
138             reg = <0x39>;
139             interrupt-parent = <&gpio1>;
140             interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
141             clocks = <&cec_clock>;
142             clock-names = "cec";
144             avdd-supply = <&fixedregulator1v8>;
145             dvdd-supply = <&fixedregulator1v8>;
146             pvdd-supply = <&fixedregulator1v8>;
147             dvdd-3v-supply = <&fixedregulator3v3>;
148             bgvdd-supply = <&fixedregulator1v8>;
150             adi,input-depth = <8>;
151             adi,input-colorspace = "rgb";
152             adi,input-clock = "1x";
154             ports {
155                 #address-cells = <1>;
156                 #size-cells = <0>;
158                 port@0 {
159                     reg = <0>;
160                     adv7511_in: endpoint {
161                         remote-endpoint = <&lvds0_out>;
162                     };
163                 };
165                 port@1 {
166                     reg = <1>;
167                     adv7511_out: endpoint {
168                         remote-endpoint = <&hdmi_con_out>;
169                     };
170                 };
171             };
172         };
173     };