bcm27xx: update patches from RPi foundation
[oweals/openwrt.git] / target / linux / bcm27xx / patches-5.4 / 950-0667-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>;