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