Skip to content

Commit 4411a2c

Browse files
geertuwsakernel
authored andcommitted
dt-bindings: i2c: i2c-demux-pinctrl: Convert to json-schema
Convert the pinctrl-based I2C bus demultiplexer Device Tree binding documentation to json-schema. Update the example to match reality. Signed-off-by: Geert Uytterhoeven <[email protected]> Reviewed-by: Wolfram Sang <[email protected]> Reviewed-by: Conor Dooley <[email protected]> Signed-off-by: Wolfram Sang <[email protected]>
1 parent 7ba2b17 commit 4411a2c

File tree

2 files changed

+172
-135
lines changed

2 files changed

+172
-135
lines changed

Documentation/devicetree/bindings/i2c/i2c-demux-pinctrl.txt

Lines changed: 0 additions & 135 deletions
This file was deleted.
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
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 <[email protected]>
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+
};

0 commit comments

Comments
 (0)