Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/Documentation/devicetree/bindings/i2c/i2c-demux-pinctrl.yaml
26307 views
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: /schemas/i2c/i2c-controller.yaml#
36
37
properties:
38
compatible:
39
const: i2c-demux-pinctrl
40
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.
48
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.
53
54
required:
55
- compatible
56
- i2c-parent
57
- i2c-bus-name
58
59
unevaluatedProperties: false
60
61
examples:
62
- |
63
#include <dt-bindings/gpio/gpio.h>
64
#include <dt-bindings/interrupt-controller/irq.h>
65
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>;
73
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
};
78
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";
86
87
clock-frequency = <100000>;
88
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
};
93
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";
101
102
clock-frequency = <100000>;
103
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
};
108
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>;
117
118
ak4643: codec@12 {
119
compatible = "asahi-kasei,ak4643";
120
#sound-dai-cells = <0>;
121
reg = <0x12>;
122
};
123
124
composite-in@20 {
125
compatible = "adi,adv7180";
126
reg = <0x20>;
127
128
port {
129
adv7180: endpoint {
130
bus-width = <8>;
131
remote-endpoint = <&vin1ep0>;
132
};
133
};
134
};
135
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";
143
144
avdd-supply = <&fixedregulator1v8>;
145
dvdd-supply = <&fixedregulator1v8>;
146
pvdd-supply = <&fixedregulator1v8>;
147
dvdd-3v-supply = <&fixedregulator3v3>;
148
bgvdd-supply = <&fixedregulator1v8>;
149
150
adi,input-depth = <8>;
151
adi,input-colorspace = "rgb";
152
adi,input-clock = "1x";
153
154
ports {
155
#address-cells = <1>;
156
#size-cells = <0>;
157
158
port@0 {
159
reg = <0>;
160
adv7511_in: endpoint {
161
remote-endpoint = <&lvds0_out>;
162
};
163
};
164
165
port@1 {
166
reg = <1>;
167
adv7511_out: endpoint {
168
remote-endpoint = <&hdmi_con_out>;
169
};
170
};
171
};
172
};
173
};
174
175