Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/device-tree/Bindings/i2c/i2c-demux-pinctrl.txt
48375 views
1
Pinctrl-based I2C Bus DeMux
2
3
This binding describes an I2C bus demultiplexer that uses pin multiplexing to
4
route the I2C signals, and represents the pin multiplexing configuration using
5
the pinctrl device tree bindings. This may be used to select one I2C IP core at
6
runtime which may have a better feature set for a given task than another I2C
7
IP core on the SoC. The most simple example is to fall back to GPIO bitbanging
8
if your current runtime configuration hits an errata of the internal IP core.
9
10
+-------------------------------+
11
| SoC |
12
| | +-----+ +-----+
13
| +------------+ | | dev | | dev |
14
| |I2C IP Core1|--\ | +-----+ +-----+
15
| +------------+ \-------+ | | |
16
| |Pinctrl|--|------+--------+
17
| +------------+ +-------+ |
18
| |I2C IP Core2|--/ |
19
| +------------+ |
20
| |
21
+-------------------------------+
22
23
Required properties:
24
- compatible: "i2c-demux-pinctrl"
25
- i2c-parent: List of phandles of I2C masters available for selection. The first
26
one will be used as default.
27
- i2c-bus-name: The name of this bus. Also needed as pinctrl-name for the I2C
28
parents.
29
30
Furthermore, I2C mux properties and child nodes. See i2c-mux.yaml in this
31
directory.
32
33
Example:
34
35
Here is a snipplet for a bus to be demuxed. It contains various i2c clients for
36
HDMI, so the bus is named "i2c-hdmi":
37
38
i2chdmi: i2c@8 {
39
40
compatible = "i2c-demux-pinctrl";
41
i2c-parent = <&gpioi2c>, <&iic2>, <&i2c2>;
42
i2c-bus-name = "i2c-hdmi";
43
#address-cells = <1>;
44
#size-cells = <0>;
45
46
ak4643: sound-codec@12 {
47
compatible = "asahi-kasei,ak4643";
48
49
#sound-dai-cells = <0>;
50
reg = <0x12>;
51
};
52
53
composite-in@20 {
54
compatible = "adi,adv7180";
55
reg = <0x20>;
56
remote = <&vin1>;
57
58
port {
59
adv7180: endpoint {
60
bus-width = <8>;
61
remote-endpoint = <&vin1ep0>;
62
};
63
};
64
};
65
66
hdmi@39 {
67
compatible = "adi,adv7511w";
68
reg = <0x39>;
69
interrupt-parent = <&gpio1>;
70
interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
71
72
adi,input-depth = <8>;
73
adi,input-colorspace = "rgb";
74
adi,input-clock = "1x";
75
adi,input-style = <1>;
76
adi,input-justification = "evenly";
77
78
ports {
79
#address-cells = <1>;
80
#size-cells = <0>;
81
82
port@0 {
83
reg = <0>;
84
adv7511_in: endpoint {
85
remote-endpoint = <&du_out_lvds0>;
86
};
87
};
88
89
port@1 {
90
reg = <1>;
91
adv7511_out: endpoint {
92
remote-endpoint = <&hdmi_con>;
93
};
94
};
95
};
96
};
97
};
98
99
And for clarification, here are the snipplets for the i2c-parents:
100
101
gpioi2c: i2c@9 {
102
#address-cells = <1>;
103
#size-cells = <0>;
104
compatible = "i2c-gpio";
105
gpios = <&gpio5 6 GPIO_ACTIVE_HIGH /* sda */
106
&gpio5 5 GPIO_ACTIVE_HIGH /* scl */
107
>;
108
i2c-gpio,delay-us = <5>;
109
};
110
111
...
112
113
&i2c2 {
114
pinctrl-0 = <&i2c2_pins>;
115
pinctrl-names = "i2c-hdmi";
116
117
clock-frequency = <100000>;
118
};
119
120
...
121
122
&iic2 {
123
pinctrl-0 = <&iic2_pins>;
124
pinctrl-names = "i2c-hdmi";
125
126
clock-frequency = <100000>;
127
};
128
129
Please note:
130
131
- pinctrl properties for the parent I2C controllers need a pinctrl state
132
with the same name as i2c-bus-name, not "default"!
133
134
- the i2c masters must have their status "disabled". This driver will
135
enable them at runtime when needed.
136
137