002ad8686e1476c4e41dac206685e30b9c17ea50
[openwrt/openwrt.git] / target / linux / bcm27xx / patches-5.4 / 950-0658-dt-Implement-an-I2C-pinctrl-mux-for-BSC0.patch
1 From 77d7427bed21c92d1c10e0cc9beabb5ce9bb6c0b Mon Sep 17 00:00:00 2001
2 From: Dave Stevenson <dave.stevenson@raspberrypi.com>
3 Date: Thu, 9 Apr 2020 12:46:13 +0100
4 Subject: [PATCH] dt: Implement an I2C pinctrl mux for BSC0.
5
6 BSC0 serves either the HAT EEPROM pins on the 40pin connector,
7 or the display and camera on a board specific pairing of either
8 GPIO 28&29, or 44&45.
9
10 Use I2C_MUX_PINCTRL to allow exposing both pairs of pins as I2C
11 busses.
12
13 Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
14 ---
15 arch/arm/boot/dts/bcm2708-rpi-b-plus.dts | 9 ++++---
16 arch/arm/boot/dts/bcm2708-rpi-b.dts | 9 ++++---
17 arch/arm/boot/dts/bcm2708-rpi-cm.dts | 9 ++++---
18 arch/arm/boot/dts/bcm2708-rpi-zero-w.dts | 9 ++++---
19 arch/arm/boot/dts/bcm2708-rpi-zero.dts | 9 ++++---
20 arch/arm/boot/dts/bcm2709-rpi-2-b.dts | 9 ++++---
21 arch/arm/boot/dts/bcm270x-rpi.dtsi | 7 ++---
22 arch/arm/boot/dts/bcm2710-rpi-2-b.dts | 9 ++++---
23 arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts | 9 ++++---
24 arch/arm/boot/dts/bcm2710-rpi-3-b.dts | 9 ++++---
25 arch/arm/boot/dts/bcm2710-rpi-cm3.dts | 10 ++++---
26 arch/arm/boot/dts/bcm2711-rpi-4-b.dts | 5 ++--
27 arch/arm/boot/dts/bcm2711.dtsi | 2 +-
28 .../boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi | 4 +++
29 .../boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi | 4 +++
30 arch/arm/boot/dts/bcm283x.dtsi | 26 ++++++++++++++++++-
31 16 files changed, 100 insertions(+), 39 deletions(-)
32 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi
33 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
34
35 --- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
36 +++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
37 @@ -4,6 +4,7 @@
38 #include "bcm2708-rpi.dtsi"
39 #include "bcm283x-rpi-smsc9514.dtsi"
40 #include "bcm283x-rpi-csi1-2lane.dtsi"
41 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
42
43 / {
44 compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
45 @@ -68,12 +69,14 @@
46 };
47 };
48
49 -&i2c0 {
50 - pinctrl-names = "default";
51 - pinctrl-0 = <&i2c0_pins>;
52 +&i2c0if {
53 clock-frequency = <100000>;
54 };
55
56 +&i2c0mux {
57 + pinctrl-0 = <&i2c0_pins>;
58 +};
59 +
60 &i2c1 {
61 pinctrl-names = "default";
62 pinctrl-0 = <&i2c1_pins>;
63 --- a/arch/arm/boot/dts/bcm2708-rpi-b.dts
64 +++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
65 @@ -4,6 +4,7 @@
66 #include "bcm2708-rpi.dtsi"
67 #include "bcm283x-rpi-smsc9512.dtsi"
68 #include "bcm283x-rpi-csi1-2lane.dtsi"
69 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
70
71 / {
72 compatible = "raspberrypi,model-b", "brcm,bcm2835";
73 @@ -68,12 +69,14 @@
74 };
75 };
76
77 -&i2c0 {
78 - pinctrl-names = "default";
79 - pinctrl-0 = <&i2c0_pins>;
80 +&i2c0if {
81 clock-frequency = <100000>;
82 };
83
84 +&i2c0mux {
85 + pinctrl-0 = <&i2c0_pins>;
86 +};
87 +
88 &i2c1 {
89 pinctrl-names = "default";
90 pinctrl-0 = <&i2c1_pins>;
91 --- a/arch/arm/boot/dts/bcm2708-rpi-cm.dts
92 +++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
93 @@ -3,6 +3,7 @@
94 #include "bcm2708-rpi-cm.dtsi"
95 #include "bcm283x-rpi-csi0-2lane.dtsi"
96 #include "bcm283x-rpi-csi1-4lane.dtsi"
97 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
98
99 / {
100 compatible = "raspberrypi,compute-module", "brcm,bcm2835";
101 @@ -67,12 +68,14 @@
102 };
103 };
104
105 -&i2c0 {
106 - pinctrl-names = "default";
107 - pinctrl-0 = <&i2c0_pins>;
108 +&i2c0if {
109 clock-frequency = <100000>;
110 };
111
112 +&i2c0mux {
113 + pinctrl-0 = <&i2c0_pins>;
114 +};
115 +
116 &i2c1 {
117 pinctrl-names = "default";
118 pinctrl-0 = <&i2c1_pins>;
119 --- a/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
120 +++ b/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
121 @@ -3,6 +3,7 @@
122 #include "bcm2708.dtsi"
123 #include "bcm2708-rpi.dtsi"
124 #include "bcm283x-rpi-csi1-2lane.dtsi"
125 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
126
127 / {
128 compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
129 @@ -116,12 +117,14 @@
130 };
131 };
132
133 -&i2c0 {
134 - pinctrl-names = "default";
135 - pinctrl-0 = <&i2c0_pins>;
136 +&i2c0if {
137 clock-frequency = <100000>;
138 };
139
140 +&i2c0mux {
141 + pinctrl-0 = <&i2c0_pins>;
142 +};
143 +
144 &i2c1 {
145 pinctrl-names = "default";
146 pinctrl-0 = <&i2c1_pins>;
147 --- a/arch/arm/boot/dts/bcm2708-rpi-zero.dts
148 +++ b/arch/arm/boot/dts/bcm2708-rpi-zero.dts
149 @@ -3,6 +3,7 @@
150 #include "bcm2708.dtsi"
151 #include "bcm2708-rpi.dtsi"
152 #include "bcm283x-rpi-csi1-2lane.dtsi"
153 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
154
155 / {
156 compatible = "raspberrypi,model-zero", "brcm,bcm2835";
157 @@ -71,12 +72,14 @@
158 };
159 };
160
161 -&i2c0 {
162 - pinctrl-names = "default";
163 - pinctrl-0 = <&i2c0_pins>;
164 +&i2c0if {
165 clock-frequency = <100000>;
166 };
167
168 +&i2c0mux {
169 + pinctrl-0 = <&i2c0_pins>;
170 +};
171 +
172 &i2c1 {
173 pinctrl-names = "default";
174 pinctrl-0 = <&i2c1_pins>;
175 --- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
176 +++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
177 @@ -4,6 +4,7 @@
178 #include "bcm2709-rpi.dtsi"
179 #include "bcm283x-rpi-smsc9514.dtsi"
180 #include "bcm283x-rpi-csi1-2lane.dtsi"
181 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
182
183 / {
184 compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
185 @@ -68,12 +69,14 @@
186 };
187 };
188
189 -&i2c0 {
190 - pinctrl-names = "default";
191 - pinctrl-0 = <&i2c0_pins>;
192 +&i2c0if {
193 clock-frequency = <100000>;
194 };
195
196 +&i2c0mux {
197 + pinctrl-0 = <&i2c0_pins>;
198 +};
199 +
200 &i2c1 {
201 pinctrl-names = "default";
202 pinctrl-0 = <&i2c1_pins>;
203 --- a/arch/arm/boot/dts/bcm270x-rpi.dtsi
204 +++ b/arch/arm/boot/dts/bcm270x-rpi.dtsi
205 @@ -21,6 +21,7 @@
206 i2s = &i2s;
207 i2c0 = &i2c0;
208 i2c1 = &i2c1;
209 + i2c10 = &i2c_csi_dsi;
210 spi0 = &spi0;
211 spi1 = &spi1;
212 spi2 = &spi2;
213 @@ -83,9 +84,9 @@
214 uart1 = <&uart1>,"status";
215 i2s = <&i2s>,"status";
216 spi = <&spi0>,"status";
217 - i2c0 = <&i2c0>,"status";
218 + i2c0 = <&i2c0if>,"status",<&i2c0mux>,"status";
219 i2c1 = <&i2c1>,"status";
220 - i2c0_baudrate = <&i2c0>,"clock-frequency:0";
221 + i2c0_baudrate = <&i2c0if>,"clock-frequency:0";
222 i2c1_baudrate = <&i2c1>,"clock-frequency:0";
223
224 audio = <&audio>,"status";
225 @@ -105,7 +106,7 @@
226 status = "disabled";
227 };
228
229 -&i2c0 {
230 +&i2c0if {
231 status = "disabled";
232 };
233
234 --- a/arch/arm/boot/dts/bcm2710-rpi-2-b.dts
235 +++ b/arch/arm/boot/dts/bcm2710-rpi-2-b.dts
236 @@ -4,6 +4,7 @@
237 #include "bcm2709-rpi.dtsi"
238 #include "bcm283x-rpi-smsc9514.dtsi"
239 #include "bcm283x-rpi-csi1-2lane.dtsi"
240 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
241
242 / {
243 compatible = "raspberrypi,2-model-b-rev2", "brcm,bcm2837";
244 @@ -68,12 +69,14 @@
245 };
246 };
247
248 -&i2c0 {
249 - pinctrl-names = "default";
250 - pinctrl-0 = <&i2c0_pins>;
251 +&i2c0if {
252 clock-frequency = <100000>;
253 };
254
255 +&i2c0mux {
256 + pinctrl-0 = <&i2c0_pins>;
257 +};
258 +
259 &i2c1 {
260 pinctrl-names = "default";
261 pinctrl-0 = <&i2c1_pins>;
262 --- a/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
263 +++ b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
264 @@ -4,6 +4,7 @@
265 #include "bcm2709-rpi.dtsi"
266 #include "bcm283x-rpi-lan7515.dtsi"
267 #include "bcm283x-rpi-csi1-2lane.dtsi"
268 +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
269
270 / {
271 compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837";
272 @@ -126,12 +127,14 @@
273 };
274 };
275
276 -&i2c0 {
277 - pinctrl-names = "default";
278 - pinctrl-0 = <&i2c0_pins>;
279 +&i2c0if {
280 clock-frequency = <100000>;
281 };
282
283 +&i2c0mux {
284 + pinctrl-0 = <&i2c0_pins>;
285 +};
286 +
287 &i2c1 {
288 pinctrl-names = "default";
289 pinctrl-0 = <&i2c1_pins>;
290 --- a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
291 +++ b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
292 @@ -4,6 +4,7 @@
293 #include "bcm2709-rpi.dtsi"
294 #include "bcm283x-rpi-smsc9514.dtsi"
295 #include "bcm283x-rpi-csi1-2lane.dtsi"
296 +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
297
298 / {
299 compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
300 @@ -137,12 +138,14 @@
301 };
302 };
303
304 -&i2c0 {
305 - pinctrl-names = "default";
306 - pinctrl-0 = <&i2c0_pins>;
307 +&i2c0if {
308 clock-frequency = <100000>;
309 };
310
311 +&i2c0mux {
312 + pinctrl-0 = <&i2c0_pins>;
313 +};
314 +
315 &i2c1 {
316 pinctrl-names = "default";
317 pinctrl-0 = <&i2c1_pins>;
318 --- a/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
319 +++ b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
320 @@ -4,7 +4,7 @@
321 #include "bcm2709-rpi.dtsi"
322 #include "bcm283x-rpi-csi0-2lane.dtsi"
323 #include "bcm283x-rpi-csi1-4lane.dtsi"
324 -
325 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
326 / {
327 compatible = "raspberrypi,3-compute-module", "brcm,bcm2837";
328 model = "Raspberry Pi Compute Module 3";
329 @@ -88,12 +88,14 @@
330 };
331 };
332
333 -&i2c0 {
334 - pinctrl-names = "default";
335 - pinctrl-0 = <&i2c0_pins>;
336 +&i2c0if {
337 clock-frequency = <100000>;
338 };
339
340 +&i2c0mux {
341 + pinctrl-0 = <&i2c0_pins>;
342 +};
343 +
344 &i2c1 {
345 pinctrl-names = "default";
346 pinctrl-0 = <&i2c1_pins>;
347 --- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
348 +++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
349 @@ -192,6 +192,7 @@
350
351 #include "bcm2711-rpi.dtsi"
352 #include "bcm283x-rpi-csi1-2lane.dtsi"
353 +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
354
355 /delete-node/ &emmc2;
356
357 @@ -421,9 +422,7 @@
358 };
359 };
360
361 -&i2c0 {
362 - pinctrl-names = "default";
363 - pinctrl-0 = <&i2c0_pins>;
364 +&i2c0if {
365 clock-frequency = <100000>;
366 };
367
368 --- a/arch/arm/boot/dts/bcm2711.dtsi
369 +++ b/arch/arm/boot/dts/bcm2711.dtsi
370 @@ -986,7 +986,7 @@
371 alloc-ranges = <0x0 0x00000000 0x40000000>;
372 };
373
374 -&i2c0 {
375 +&i2c0if {
376 compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
377 interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
378 };
379 --- /dev/null
380 +++ b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi
381 @@ -0,0 +1,4 @@
382 +&i2c0mux {
383 + pinctrl-0 = <&i2c0_gpio0>;
384 + pinctrl-1 = <&i2c0_gpio28>;
385 +};
386 --- /dev/null
387 +++ b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
388 @@ -0,0 +1,4 @@
389 +&i2c0mux {
390 + pinctrl-0 = <&i2c0_gpio0>;
391 + pinctrl-1 = <&i2c0_gpio44>;
392 +};
393 --- a/arch/arm/boot/dts/bcm283x.dtsi
394 +++ b/arch/arm/boot/dts/bcm283x.dtsi
395 @@ -340,7 +340,7 @@
396 status = "disabled";
397 };
398
399 - i2c0: i2c@7e205000 {
400 + i2c0if: i2c@7e205000 {
401 compatible = "brcm,bcm2835-i2c";
402 reg = <0x7e205000 0x200>;
403 interrupts = <2 21>;
404 @@ -350,6 +350,30 @@
405 status = "disabled";
406 };
407
408 + i2c0mux: i2c0mux {
409 + compatible = "i2c-mux-pinctrl";
410 + #address-cells = <1>;
411 + #size-cells = <0>;
412 +
413 + i2c-parent = <&i2c0if>;
414 +
415 + pinctrl-names = "i2c0", "i2c_csi_dsi";
416 +
417 + status = "disabled";
418 +
419 + i2c0: i2c@0 {
420 + reg = <0>;
421 + #address-cells = <1>;
422 + #size-cells = <0>;
423 + };
424 +
425 + i2c_csi_dsi: i2c@1 {
426 + reg = <1>;
427 + #address-cells = <1>;
428 + #size-cells = <0>;
429 + };
430 + };
431 +
432 dpi: dpi@7e208000 {
433 compatible = "brcm,bcm2835-dpi";
434 reg = <0x7e208000 0x8c>;