Commit | Line | Data |
---|---|---|
50a5ba87 WS |
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 | ||
2e932849 SH |
30 | Furthermore, I2C mux properties and child nodes. See i2c-mux.txt in this |
31 | directory. | |
50a5ba87 WS |
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 | status = "disabled"; | |
106 | gpios = <&gpio5 6 GPIO_ACTIVE_HIGH /* sda */ | |
107 | &gpio5 5 GPIO_ACTIVE_HIGH /* scl */ | |
108 | >; | |
109 | i2c-gpio,delay-us = <5>; | |
110 | }; | |
111 | ||
112 | ... | |
113 | ||
114 | &i2c2 { | |
115 | pinctrl-0 = <&i2c2_pins>; | |
116 | pinctrl-names = "i2c-hdmi"; | |
117 | ||
118 | clock-frequency = <100000>; | |
119 | }; | |
120 | ||
121 | ... | |
122 | ||
123 | &iic2 { | |
124 | pinctrl-0 = <&iic2_pins>; | |
125 | pinctrl-names = "i2c-hdmi"; | |
126 | ||
127 | clock-frequency = <100000>; | |
128 | }; | |
129 | ||
130 | Please note: | |
131 | ||
132 | - pinctrl properties for the parent I2C controllers need a pinctrl state | |
133 | with the same name as i2c-bus-name, not "default"! | |
134 | ||
135 | - the i2c masters must have their status "disabled". This driver will | |
136 | enable them at runtime when needed. |