bcm27xx: add support for linux v5.15
[openwrt/staging/chunkeey.git] / target / linux / bcm27xx / patches-5.15 / 950-0078-BCM2708-Add-core-Device-Tree-support.patch
1 From 47aa556cd8897b84417a2745650affa8e1dd2b62 Mon Sep 17 00:00:00 2001
2 From: notro <notro@tronnes.org>
3 Date: Wed, 9 Jul 2014 14:46:08 +0200
4 Subject: [PATCH] BCM2708: Add core Device Tree support
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Add the bare minimum needed to boot BCM2708 from a Device Tree.
10
11 Signed-off-by: Noralf Tronnes <notro@tronnes.org>
12
13 BCM2708: DT: change 'axi' nodename to 'soc'
14
15 Change DT node named 'axi' to 'soc' so it matches ARCH_BCM2835.
16 The VC4 bootloader fills in certain properties in the 'axi' subtree,
17 but since this is part of an upstreaming effort, the name is changed.
18
19 Signed-off-by: Noralf Tronnes notro@tronnes.org
20
21 BCM2708_DT: Correct length of the peripheral space
22
23 Use dts-dirs feature for overlays.
24
25 The kernel makefiles have a dts-dirs target that is for vendor subdirectories.
26
27 Using this fixes the install_dtbs target, which previously did not install the overlays.
28
29 BCM270X_DT: configure I2S DMA channels
30
31 Signed-off-by: Matthias Reichl <hias@horus.com>
32
33 BCM270X_DT: switch to bcm2835-i2s
34
35 I2S soundcard drivers with proper devicetree support (i.e. not linking
36 to the cpu_dai/platform via name but to cpu/platform via of_node)
37 will work out of the box without any modifications.
38
39 When the kernel is compiled without devicetree support the platform
40 code will instantiate the bcm2708-i2s driver and I2S soundcard drivers
41 will link to it via name, as before.
42
43 Signed-off-by: Matthias Reichl <hias@horus.com>
44
45 SDIO-overlay: add poll_once-boolean parameter
46
47 Add paramter to toggle sdio-device-polling
48 done every second or once at boot-time.
49
50 Signed-off-by: Patrick Boettcher <patrick.boettcher@posteo.de>
51
52 BCM270X_DT: Make mmc overlay compatible with current firmware
53
54 The original DT overlay logic followed a merge-then-patch procedure,
55 i.e. parameters are applied to the loaded overlay before the overlay
56 is merged into the base DTB. This sequence has been changed to
57 patch-then-merge, in order to support parameterised node names, and
58 to protect against bad overlays. As a result, overrides (parameters)
59 must only target labels in the overlay, but the overlay can obviously target nodes in the base DTB.
60
61 mmc-overlay.dts (that switches back to the original mmc sdcard
62 driver) is the only overlay violating that rule, and this patch
63 fixes it.
64
65 bcm270x_dt: Use the sdhost MMC controller by default
66
67 The "mmc" overlay reverts to using the other controller.
68
69 squash: Add cprman to dt
70
71 BCM270X_DT: Use clk_core for I2C interfaces
72
73 BCM270X_DT: Use bcm283x.dtsi, bcm2835.dtsi and bcm2836.dtsi
74
75 The mainline Device Tree files are quite close to downstream now.
76 Let's use bcm283x.dtsi, bcm2835.dtsi and bcm2836.dtsi as base files
77 for our dts files.
78
79 Mainline dts files are based on these files:
80
81 bcm2835-rpi.dtsi
82 bcm2835.dtsi bcm2836.dtsi
83 bcm283x.dtsi
84
85 Current downstream are based on these:
86
87 bcm2708.dtsi bcm2709.dtsi bcm2710.dtsi
88 bcm2708_common.dtsi
89
90 This patch introduces this dependency:
91
92 bcm2708.dtsi bcm2709.dtsi
93 bcm2708-rpi.dtsi
94 bcm270x.dtsi
95 bcm2835.dtsi bcm2836.dtsi
96 bcm283x.dtsi
97
98 And:
99 bcm2710.dtsi
100 bcm2708-rpi.dtsi
101 bcm270x.dtsi
102 bcm283x.dtsi
103
104 bcm270x.dtsi contains the downstream bcm283x.dtsi diff.
105 bcm2708-rpi.dtsi is the downstream version of bcm2835-rpi.dtsi.
106
107 Other changes:
108 - The led node has moved from /soc/leds to /leds. This is not a problem
109 since the label is used to reference it.
110 - The clk_osc reg property changes from 6 to 3.
111 - The gpu nodes has their interrupt property set in the base file.
112 - the clocks label does not point to the /clocks node anymore, but
113 points to the cprman node. This is not a problem since the overlays
114 that use the clock node refer to it directly: target-path = "/clocks";
115 - some nodes now have 2 labels since mainline and downstream differs in
116 this respect: cprman/clocks, spi0/spi, gpu/vc4.
117 - some nodes doesn't have an explicit status = "okay" since they're not
118 disabled in the base file: watchdog and random.
119 - gpiomem doesn't need an explicit status = "okay".
120 - bcm2708-rpi-cm.dts got the hpd-gpios property from bcm2708_common.dtsi,
121 it's now set directly in that file.
122 - bcm2709-rpi-2-b.dts has the timer node moved from /soc/timer to /timer.
123 - Removed clock-frequency property on the bcm{2709,2710}.dtsi timer nodes.
124
125 Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
126
127 BCM270X_DT: Use raspberrypi-power to turn on USB power
128
129 Use the raspberrypi-power driver to turn on USB power.
130
131 Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
132
133 BCM270X_DT: Add a .dtbo target, use for overlays
134
135 Change the filenames and extensions to keep the pre-DDT style of
136 overlay (<name>-overlay.dtb) distinct from new ones that use a
137 different style of local fixups (<name>.dtbo), and to match other
138 platforms.
139
140 The RPi firmware uses the DDTK trailer atom to choose which type of
141 overlay to use for each kernel.
142
143 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
144
145 BCM270X_DT: Don't generate "linux,phandle" props
146
147 The EPAPR standard says to use "phandle" properties to store phandles,
148 rather than the deprecated "linux,phandle" version. By default, dtc
149 generates both, but adding "-H epapr" causes it to only generate
150 "phandle"s, saving some space and clutter.
151
152 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
153
154 BCM270X_DT: Add overlay for enc28j60 on SPI2
155
156 Works on SPI2 for compute module
157
158 BCM270X_DT: Add midi-uart0 overlay
159
160 MIDI requires 31.25kbaud, a baudrate unsupported by Linux. The
161 midi-uart0 overlay configures uart0 (ttyAMA0) to use a fake clock
162 so that requesting 38.4kbaud actually gets 31.25kbaud.
163
164 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
165
166 BCM270X_DT: Add i2c-sensor overlay
167
168 The i2c-sensor overlay is a container for various pressure and
169 temperature sensors, currently bmp085 and bmp280. The standalone
170 bmp085_i2c-sensor overlay is now deprecated.
171
172 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
173
174 BCM270X_DT: overlays/*-overlay.dtb -> overlays/*.dtbo (#1752)
175
176 We now create overlays as .dtbo files.
177
178 build: support for .dtbo files for dtb overlays
179
180 Kernel 4.4.6+ on RaspberryPi support .dtbo files for overlays, instead of .dtb.
181 Patch the kernel, which has faulty rules to generate .dtbo the way yocto does
182
183 Signed-off-by: Herve Jourdain <herve.jourdain@neuf.fr>
184 Signed-off-by: Khem Raj <raj.khem@gmail.com>
185
186 BCM270X: Drop position requirement for CMA in VC4 overlay.
187
188 No longer necessary since 2aefcd576195a739a7a256099571c9c4a401005f,
189 and will probably let peeople that want to choose a larger CMA
190 allocation (particularly on pi0/1).
191
192 Signed-off-by: Eric Anholt <eric@anholt.net>
193
194 BCM270X_DT: RPi Device Tree tidy
195
196 Use the upstream sdhost node, add thermal-zones, and factor out some
197 common elements.
198
199 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
200
201 kbuild: Silence unhelpful DTC warnings
202
203 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
204
205 BCM270X_DT: DT build rules no longer arch-specific
206
207 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
208 ---
209 arch/arm/boot/dts/Makefile | 17 +
210 arch/arm/boot/dts/bcm2708-rpi-b-plus.dts | 129 +
211 arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts | 132 +
212 arch/arm/boot/dts/bcm2708-rpi-b.dts | 119 +
213 arch/arm/boot/dts/bcm2708-rpi-bt.dtsi | 26 +
214 arch/arm/boot/dts/bcm2708-rpi-cm.dts | 112 +
215 arch/arm/boot/dts/bcm2708-rpi-cm.dtsi | 18 +
216 arch/arm/boot/dts/bcm2708-rpi-zero-w.dts | 169 +
217 arch/arm/boot/dts/bcm2708-rpi-zero.dts | 123 +
218 arch/arm/boot/dts/bcm2708-rpi.dtsi | 36 +
219 arch/arm/boot/dts/bcm2708.dtsi | 12 +
220 arch/arm/boot/dts/bcm2709-rpi-2-b.dts | 129 +
221 arch/arm/boot/dts/bcm2709-rpi.dtsi | 5 +
222 arch/arm/boot/dts/bcm2709.dtsi | 22 +
223 arch/arm/boot/dts/bcm270x-rpi.dtsi | 154 +
224 arch/arm/boot/dts/bcm270x.dtsi | 217 +
225 arch/arm/boot/dts/bcm2710-rpi-2-b.dts | 129 +
226 arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts | 201 +
227 arch/arm/boot/dts/bcm2710-rpi-3-b.dts | 203 +
228 arch/arm/boot/dts/bcm2710-rpi-cm3.dts | 148 +
229 arch/arm/boot/dts/bcm2710.dtsi | 25 +
230 arch/arm/boot/dts/bcm2711-rpi-4-b.dts | 310 +-
231 arch/arm/boot/dts/bcm2711-rpi-400.dts | 624 ++-
232 arch/arm/boot/dts/bcm2711-rpi-cm4.dts | 660 +++
233 arch/arm/boot/dts/bcm2711-rpi-ds.dtsi | 205 +
234 arch/arm/boot/dts/bcm2711.dtsi | 46 +-
235 arch/arm/boot/dts/bcm271x-rpi-bt.dtsi | 26 +
236 arch/arm/boot/dts/bcm2835-common.dtsi | 4 +-
237 arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 5 +
238 arch/arm/boot/dts/bcm2835-rpi-a.dts | 7 +
239 arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 5 +
240 arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 7 +
241 arch/arm/boot/dts/bcm2835-rpi-b.dts | 7 +
242 arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts | 5 +
243 arch/arm/boot/dts/bcm2835-rpi-zero-w.dts | 5 +
244 arch/arm/boot/dts/bcm2835-rpi-zero.dts | 5 +
245 arch/arm/boot/dts/bcm2835-rpi.dtsi | 19 +-
246 arch/arm/boot/dts/bcm2835.dtsi | 2 +-
247 arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 5 +
248 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts | 5 +
249 arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts | 5 +
250 arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 5 +
251 arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts | 5 +
252 .../boot/dts/bcm283x-rpi-cam1-regulator.dtsi | 10 +
253 arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi | 4 +
254 arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi | 4 +
255 arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi | 4 +
256 .../boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi | 4 +
257 .../boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi | 4 +
258 arch/arm/boot/dts/bcm283x.dtsi | 26 +-
259 arch/arm/boot/dts/overlays/Makefile | 248 ++
260 arch/arm/boot/dts/overlays/README | 3530 +++++++++++++++++
261 .../arm/boot/dts/overlays/act-led-overlay.dts | 27 +
262 .../boot/dts/overlays/adafruit18-overlay.dts | 55 +
263 .../dts/overlays/adau1977-adc-overlay.dts | 40 +
264 .../dts/overlays/adau7002-simple-overlay.dts | 52 +
265 .../arm/boot/dts/overlays/ads1015-overlay.dts | 98 +
266 .../arm/boot/dts/overlays/ads1115-overlay.dts | 103 +
267 .../arm/boot/dts/overlays/ads7846-overlay.dts | 89 +
268 .../boot/dts/overlays/adv7282m-overlay.dts | 65 +
269 .../boot/dts/overlays/adv728x-m-overlay.dts | 37 +
270 .../overlays/akkordion-iqdacplus-overlay.dts | 49 +
271 .../allo-boss-dac-pcm512x-audio-overlay.dts | 59 +
272 .../overlays/allo-boss2-dac-audio-overlay.dts | 57 +
273 .../dts/overlays/allo-digione-overlay.dts | 44 +
274 .../allo-katana-dac-audio-overlay.dts | 57 +
275 .../allo-piano-dac-pcm512x-audio-overlay.dts | 54 +
276 ...o-piano-dac-plus-pcm512x-audio-overlay.dts | 57 +
277 arch/arm/boot/dts/overlays/anyspi-overlay.dts | 205 +
278 .../boot/dts/overlays/apds9960-overlay.dts | 57 +
279 .../boot/dts/overlays/applepi-dac-overlay.dts | 57 +
280 .../boot/dts/overlays/at86rf233-overlay.dts | 57 +
281 .../overlays/audioinjector-addons-overlay.dts | 60 +
282 ...dioinjector-isolated-soundcard-overlay.dts | 55 +
283 .../overlays/audioinjector-ultra-overlay.dts | 71 +
284 .../audioinjector-wm8731-audio-overlay.dts | 39 +
285 .../dts/overlays/audiosense-pi-overlay.dts | 82 +
286 .../boot/dts/overlays/audremap-overlay.dts | 42 +
287 .../boot/dts/overlays/balena-fin-overlay.dts | 125 +
288 .../arm/boot/dts/overlays/cap1106-overlay.dts | 52 +
289 .../boot/dts/overlays/chipdip-dac-overlay.dts | 46 +
290 arch/arm/boot/dts/overlays/cma-overlay.dts | 36 +
291 arch/arm/boot/dts/overlays/dht11-overlay.dts | 41 +
292 .../dts/overlays/dionaudio-loco-overlay.dts | 39 +
293 .../overlays/dionaudio-loco-v2-overlay.dts | 49 +
294 .../boot/dts/overlays/disable-bt-overlay.dts | 64 +
295 .../dts/overlays/disable-wifi-overlay.dts | 20 +
296 arch/arm/boot/dts/overlays/dpi18-overlay.dts | 39 +
297 .../boot/dts/overlays/dpi18cpadhi-overlay.dts | 26 +
298 arch/arm/boot/dts/overlays/dpi24-overlay.dts | 39 +
299 arch/arm/boot/dts/overlays/draws-overlay.dts | 208 +
300 .../arm/boot/dts/overlays/dwc-otg-overlay.dts | 14 +
301 arch/arm/boot/dts/overlays/dwc2-overlay.dts | 26 +
302 .../boot/dts/overlays/edt-ft5406-overlay.dts | 10 +
303 arch/arm/boot/dts/overlays/edt-ft5406.dtsi | 55 +
304 .../boot/dts/overlays/enc28j60-overlay.dts | 53 +
305 .../dts/overlays/enc28j60-spi2-overlay.dts | 47 +
306 .../arm/boot/dts/overlays/exc3000-overlay.dts | 48 +
307 .../boot/dts/overlays/fe-pi-audio-overlay.dts | 70 +
308 .../boot/dts/overlays/fsm-demo-overlay.dts | 104 +
309 .../boot/dts/overlays/ghost-amp-overlay.dts | 145 +
310 arch/arm/boot/dts/overlays/goodix-overlay.dts | 46 +
311 .../googlevoicehat-soundcard-overlay.dts | 49 +
312 .../boot/dts/overlays/gpio-fan-overlay.dts | 79 +
313 .../arm/boot/dts/overlays/gpio-ir-overlay.dts | 49 +
314 .../boot/dts/overlays/gpio-ir-tx-overlay.dts | 36 +
315 .../boot/dts/overlays/gpio-key-overlay.dts | 48 +
316 .../boot/dts/overlays/gpio-led-overlay.dts | 97 +
317 .../overlays/gpio-no-bank0-irq-overlay.dts | 14 +
318 .../boot/dts/overlays/gpio-no-irq-overlay.dts | 14 +
319 .../dts/overlays/gpio-poweroff-overlay.dts | 37 +
320 .../dts/overlays/gpio-shutdown-overlay.dts | 86 +
321 .../boot/dts/overlays/hd44780-lcd-overlay.dts | 46 +
322 .../hdmi-backlight-hwhack-gpio-overlay.dts | 47 +
323 .../dts/overlays/hifiberry-amp-overlay.dts | 39 +
324 .../dts/overlays/hifiberry-amp100-overlay.dts | 64 +
325 .../dts/overlays/hifiberry-dac-overlay.dts | 34 +
326 .../overlays/hifiberry-dacplus-overlay.dts | 65 +
327 .../overlays/hifiberry-dacplusadc-overlay.dts | 72 +
328 .../hifiberry-dacplusadcpro-overlay.dts | 65 +
329 .../overlays/hifiberry-dacplusdsp-overlay.dts | 34 +
330 .../overlays/hifiberry-dacplushd-overlay.dts | 106 +
331 .../dts/overlays/hifiberry-digi-overlay.dts | 41 +
332 .../overlays/hifiberry-digi-pro-overlay.dts | 43 +
333 .../boot/dts/overlays/highperi-overlay.dts | 63 +
334 arch/arm/boot/dts/overlays/hy28a-overlay.dts | 93 +
335 .../boot/dts/overlays/hy28b-2017-overlay.dts | 152 +
336 arch/arm/boot/dts/overlays/hy28b-overlay.dts | 148 +
337 .../boot/dts/overlays/i-sabre-q2m-overlay.dts | 39 +
338 .../boot/dts/overlays/i2c-bcm2708-overlay.dts | 13 +
339 .../boot/dts/overlays/i2c-gpio-overlay.dts | 47 +
340 .../arm/boot/dts/overlays/i2c-mux-overlay.dts | 139 +
341 .../dts/overlays/i2c-pwm-pca9685a-overlay.dts | 26 +
342 .../arm/boot/dts/overlays/i2c-rtc-common.dtsi | 323 ++
343 .../dts/overlays/i2c-rtc-gpio-overlay.dts | 31 +
344 .../arm/boot/dts/overlays/i2c-rtc-overlay.dts | 34 +
345 .../boot/dts/overlays/i2c-sensor-overlay.dts | 320 ++
346 arch/arm/boot/dts/overlays/i2c0-overlay.dts | 83 +
347 arch/arm/boot/dts/overlays/i2c1-overlay.dts | 44 +
348 arch/arm/boot/dts/overlays/i2c3-overlay.dts | 36 +
349 arch/arm/boot/dts/overlays/i2c4-overlay.dts | 36 +
350 arch/arm/boot/dts/overlays/i2c5-overlay.dts | 36 +
351 arch/arm/boot/dts/overlays/i2c6-overlay.dts | 36 +
352 .../dts/overlays/i2s-gpio28-31-overlay.dts | 18 +
353 .../boot/dts/overlays/ilitek251x-overlay.dts | 45 +
354 arch/arm/boot/dts/overlays/imx219-overlay.dts | 115 +
355 arch/arm/boot/dts/overlays/imx290-overlay.dts | 32 +
356 .../boot/dts/overlays/imx290_327-overlay.dtsi | 144 +
357 arch/arm/boot/dts/overlays/imx378-overlay.dts | 10 +
358 arch/arm/boot/dts/overlays/imx477-overlay.dts | 10 +
359 .../boot/dts/overlays/imx477_378-overlay.dtsi | 110 +
360 .../dts/overlays/iqaudio-codec-overlay.dts | 42 +
361 .../boot/dts/overlays/iqaudio-dac-overlay.dts | 46 +
362 .../dts/overlays/iqaudio-dacplus-overlay.dts | 49 +
363 .../iqaudio-digi-wm8804-audio-overlay.dts | 47 +
364 .../arm/boot/dts/overlays/irs1125-overlay.dts | 85 +
365 .../dts/overlays/jedec-spi-nor-overlay.dts | 309 ++
366 .../dts/overlays/justboom-both-overlay.dts | 65 +
367 .../dts/overlays/justboom-dac-overlay.dts | 46 +
368 .../dts/overlays/justboom-digi-overlay.dts | 41 +
369 .../arm/boot/dts/overlays/ltc294x-overlay.dts | 86 +
370 .../boot/dts/overlays/max98357a-overlay.dts | 84 +
371 .../boot/dts/overlays/maxtherm-overlay.dts | 186 +
372 .../boot/dts/overlays/mbed-dac-overlay.dts | 64 +
373 .../boot/dts/overlays/mcp23017-overlay.dts | 69 +
374 .../boot/dts/overlays/mcp23s17-overlay.dts | 732 ++++
375 .../dts/overlays/mcp2515-can0-overlay.dts | 73 +
376 .../dts/overlays/mcp2515-can1-overlay.dts | 73 +
377 .../boot/dts/overlays/mcp251xfd-overlay.dts | 226 ++
378 .../arm/boot/dts/overlays/mcp3008-overlay.dts | 205 +
379 .../arm/boot/dts/overlays/mcp3202-overlay.dts | 205 +
380 .../arm/boot/dts/overlays/mcp342x-overlay.dts | 164 +
381 .../dts/overlays/media-center-overlay.dts | 134 +
382 .../boot/dts/overlays/merus-amp-overlay.dts | 60 +
383 .../boot/dts/overlays/midi-uart0-overlay.dts | 36 +
384 .../boot/dts/overlays/midi-uart1-overlay.dts | 43 +
385 .../boot/dts/overlays/midi-uart2-overlay.dts | 37 +
386 .../boot/dts/overlays/midi-uart3-overlay.dts | 38 +
387 .../boot/dts/overlays/midi-uart4-overlay.dts | 38 +
388 .../boot/dts/overlays/midi-uart5-overlay.dts | 38 +
389 .../boot/dts/overlays/minipitft13-overlay.dts | 70 +
390 .../boot/dts/overlays/miniuart-bt-overlay.dts | 93 +
391 arch/arm/boot/dts/overlays/mmc-overlay.dts | 46 +
392 .../arm/boot/dts/overlays/mpu6050-overlay.dts | 29 +
393 .../arm/boot/dts/overlays/mz61581-overlay.dts | 117 +
394 arch/arm/boot/dts/overlays/ov5647-overlay.dts | 94 +
395 arch/arm/boot/dts/overlays/ov7251-overlay.dts | 113 +
396 arch/arm/boot/dts/overlays/ov9281-overlay.dts | 113 +
397 arch/arm/boot/dts/overlays/overlay_map.dts | 158 +
398 .../arm/boot/dts/overlays/papirus-overlay.dts | 89 +
399 .../arm/boot/dts/overlays/pca953x-overlay.dts | 240 ++
400 .../dts/overlays/pcie-32bit-dma-overlay.dts | 18 +
401 arch/arm/boot/dts/overlays/pibell-overlay.dts | 81 +
402 .../dts/overlays/pifacedigital-overlay.dts | 144 +
403 .../arm/boot/dts/overlays/pifi-40-overlay.dts | 50 +
404 .../boot/dts/overlays/pifi-dac-hd-overlay.dts | 49 +
405 .../dts/overlays/pifi-dac-zero-overlay.dts | 49 +
406 .../dts/overlays/pifi-mini-210-overlay.dts | 42 +
407 arch/arm/boot/dts/overlays/piglow-overlay.dts | 97 +
408 .../boot/dts/overlays/piscreen-overlay.dts | 102 +
409 .../boot/dts/overlays/piscreen2r-overlay.dts | 106 +
410 .../arm/boot/dts/overlays/pisound-overlay.dts | 120 +
411 .../arm/boot/dts/overlays/pitft22-overlay.dts | 69 +
412 .../overlays/pitft28-capacitive-overlay.dts | 91 +
413 .../overlays/pitft28-resistive-overlay.dts | 119 +
414 .../overlays/pitft35-resistive-overlay.dts | 119 +
415 .../boot/dts/overlays/pps-gpio-overlay.dts | 38 +
416 .../boot/dts/overlays/pwm-2chan-overlay.dts | 49 +
417 .../boot/dts/overlays/pwm-ir-tx-overlay.dts | 40 +
418 arch/arm/boot/dts/overlays/pwm-overlay.dts | 45 +
419 .../arm/boot/dts/overlays/qca7000-overlay.dts | 55 +
420 .../dts/overlays/qca7000-uart0-overlay.dts | 46 +
421 .../dts/overlays/rotary-encoder-overlay.dts | 59 +
422 .../dts/overlays/rpi-backlight-overlay.dts | 21 +
423 .../overlays/rpi-cirrus-wm5102-overlay.dts | 172 +
424 .../arm/boot/dts/overlays/rpi-dac-overlay.dts | 34 +
425 .../boot/dts/overlays/rpi-display-overlay.dts | 91 +
426 .../boot/dts/overlays/rpi-ft5406-overlay.dts | 25 +
427 .../arm/boot/dts/overlays/rpi-poe-overlay.dts | 102 +
428 .../dts/overlays/rpi-poe-plus-overlay.dts | 23 +
429 .../boot/dts/overlays/rpi-proto-overlay.dts | 39 +
430 .../boot/dts/overlays/rpi-sense-overlay.dts | 47 +
431 arch/arm/boot/dts/overlays/rpi-tv-overlay.dts | 34 +
432 .../boot/dts/overlays/rpivid-v4l2-overlay.dts | 50 +
433 .../rra-digidac1-wm8741-audio-overlay.dts | 49 +
434 .../boot/dts/overlays/sainsmart18-overlay.dts | 52 +
435 .../dts/overlays/sc16is750-i2c-overlay.dts | 43 +
436 .../dts/overlays/sc16is752-i2c-overlay.dts | 43 +
437 .../dts/overlays/sc16is752-spi0-overlay.dts | 49 +
438 .../dts/overlays/sc16is752-spi1-overlay.dts | 67 +
439 arch/arm/boot/dts/overlays/sdhost-overlay.dts | 38 +
440 arch/arm/boot/dts/overlays/sdio-overlay.dts | 77 +
441 .../overlays/seeed-can-fd-hat-v1-overlay.dts | 138 +
442 .../overlays/seeed-can-fd-hat-v2-overlay.dts | 117 +
443 .../boot/dts/overlays/sh1106-spi-overlay.dts | 84 +
444 .../boot/dts/overlays/si446x-spi0-overlay.dts | 53 +
445 .../arm/boot/dts/overlays/smi-dev-overlay.dts | 20 +
446 .../boot/dts/overlays/smi-nand-overlay.dts | 66 +
447 arch/arm/boot/dts/overlays/smi-overlay.dts | 37 +
448 .../dts/overlays/spi-gpio35-39-overlay.dts | 31 +
449 .../dts/overlays/spi-gpio40-45-overlay.dts | 36 +
450 .../arm/boot/dts/overlays/spi-rtc-overlay.dts | 75 +
451 .../boot/dts/overlays/spi0-1cs-overlay.dts | 42 +
452 .../boot/dts/overlays/spi0-2cs-overlay.dts | 37 +
453 .../boot/dts/overlays/spi1-1cs-overlay.dts | 57 +
454 .../boot/dts/overlays/spi1-2cs-overlay.dts | 69 +
455 .../boot/dts/overlays/spi1-3cs-overlay.dts | 81 +
456 .../boot/dts/overlays/spi2-1cs-overlay.dts | 57 +
457 .../boot/dts/overlays/spi2-2cs-overlay.dts | 69 +
458 .../boot/dts/overlays/spi2-3cs-overlay.dts | 81 +
459 .../boot/dts/overlays/spi3-1cs-overlay.dts | 44 +
460 .../boot/dts/overlays/spi3-2cs-overlay.dts | 56 +
461 .../boot/dts/overlays/spi4-1cs-overlay.dts | 44 +
462 .../boot/dts/overlays/spi4-2cs-overlay.dts | 56 +
463 .../boot/dts/overlays/spi5-1cs-overlay.dts | 44 +
464 .../boot/dts/overlays/spi5-2cs-overlay.dts | 56 +
465 .../boot/dts/overlays/spi6-1cs-overlay.dts | 44 +
466 .../boot/dts/overlays/spi6-2cs-overlay.dts | 56 +
467 .../arm/boot/dts/overlays/ssd1306-overlay.dts | 36 +
468 .../boot/dts/overlays/ssd1306-spi-overlay.dts | 84 +
469 .../boot/dts/overlays/ssd1331-spi-overlay.dts | 83 +
470 .../boot/dts/overlays/ssd1351-spi-overlay.dts | 83 +
471 .../dts/overlays/superaudioboard-overlay.dts | 73 +
472 arch/arm/boot/dts/overlays/sx150x-overlay.dts | 1706 ++++++++
473 .../dts/overlays/tc358743-audio-overlay.dts | 52 +
474 .../boot/dts/overlays/tc358743-overlay.dts | 107 +
475 .../boot/dts/overlays/tinylcd35-overlay.dts | 222 ++
476 .../boot/dts/overlays/tpm-slb9670-overlay.dts | 44 +
477 arch/arm/boot/dts/overlays/uart0-overlay.dts | 32 +
478 arch/arm/boot/dts/overlays/uart1-overlay.dts | 38 +
479 arch/arm/boot/dts/overlays/uart2-overlay.dts | 27 +
480 arch/arm/boot/dts/overlays/uart3-overlay.dts | 27 +
481 arch/arm/boot/dts/overlays/uart4-overlay.dts | 27 +
482 arch/arm/boot/dts/overlays/uart5-overlay.dts | 27 +
483 arch/arm/boot/dts/overlays/udrc-overlay.dts | 128 +
484 .../dts/overlays/ugreen-dabboard-overlay.dts | 49 +
485 .../boot/dts/overlays/upstream-overlay.dts | 101 +
486 .../dts/overlays/upstream-pi4-overlay.dts | 137 +
487 .../dts/overlays/vc4-fkms-v3d-overlay.dts | 40 +
488 .../dts/overlays/vc4-fkms-v3d-pi4-overlay.dts | 44 +
489 .../vc4-kms-dpi-at056tn53v1-overlay.dts | 44 +
490 .../overlays/vc4-kms-dsi-7inch-overlay.dts | 118 +
491 .../vc4-kms-dsi-lt070me05000-overlay.dts | 69 +
492 .../vc4-kms-dsi-lt070me05000-v2-overlay.dts | 64 +
493 .../overlays/vc4-kms-kippah-7inch-overlay.dts | 43 +
494 .../boot/dts/overlays/vc4-kms-v3d-overlay.dts | 123 +
495 .../dts/overlays/vc4-kms-v3d-pi4-overlay.dts | 197 +
496 .../dts/overlays/vc4-kms-vga666-overlay.dts | 100 +
497 arch/arm/boot/dts/overlays/vga666-overlay.dts | 30 +
498 .../arm/boot/dts/overlays/w1-gpio-overlay.dts | 40 +
499 .../dts/overlays/w1-gpio-pullup-overlay.dts | 42 +
500 arch/arm/boot/dts/overlays/w5500-overlay.dts | 63 +
501 .../arm/boot/dts/overlays/wittypi-overlay.dts | 44 +
502 .../dts/overlays/wm8960-soundcard-overlay.dts | 82 +
503 arch/arm64/boot/dts/Makefile | 2 +
504 arch/arm64/boot/dts/broadcom/Makefile | 12 +
505 .../boot/dts/broadcom/bcm2710-rpi-2-b.dts | 1 +
506 .../dts/broadcom/bcm2710-rpi-3-b-plus.dts | 1 +
507 .../boot/dts/broadcom/bcm2710-rpi-3-b.dts | 1 +
508 .../boot/dts/broadcom/bcm2710-rpi-cm3.dts | 1 +
509 .../boot/dts/broadcom/bcm2711-rpi-4-b.dts | 3 +-
510 .../boot/dts/broadcom/bcm2711-rpi-400.dts | 3 +-
511 .../boot/dts/broadcom/bcm2711-rpi-cm4.dts | 1 +
512 .../dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi | 1 +
513 .../dts/broadcom/bcm283x-rpi-lan7515.dtsi | 1 +
514 arch/arm64/boot/dts/overlays | 1 +
515 scripts/Makefile.dtbinst | 3 +-
516 scripts/Makefile.lib | 13 +
517 308 files changed, 27244 insertions(+), 48 deletions(-)
518 create mode 100644 arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
519 create mode 100644 arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts
520 create mode 100644 arch/arm/boot/dts/bcm2708-rpi-b.dts
521 create mode 100644 arch/arm/boot/dts/bcm2708-rpi-bt.dtsi
522 create mode 100644 arch/arm/boot/dts/bcm2708-rpi-cm.dts
523 create mode 100644 arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
524 create mode 100644 arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
525 create mode 100644 arch/arm/boot/dts/bcm2708-rpi-zero.dts
526 create mode 100644 arch/arm/boot/dts/bcm2708-rpi.dtsi
527 create mode 100644 arch/arm/boot/dts/bcm2708.dtsi
528 create mode 100644 arch/arm/boot/dts/bcm2709-rpi-2-b.dts
529 create mode 100644 arch/arm/boot/dts/bcm2709-rpi.dtsi
530 create mode 100644 arch/arm/boot/dts/bcm2709.dtsi
531 create mode 100644 arch/arm/boot/dts/bcm270x-rpi.dtsi
532 create mode 100644 arch/arm/boot/dts/bcm270x.dtsi
533 create mode 100644 arch/arm/boot/dts/bcm2710-rpi-2-b.dts
534 create mode 100644 arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
535 create mode 100644 arch/arm/boot/dts/bcm2710-rpi-3-b.dts
536 create mode 100644 arch/arm/boot/dts/bcm2710-rpi-cm3.dts
537 create mode 100644 arch/arm/boot/dts/bcm2710.dtsi
538 create mode 100644 arch/arm/boot/dts/bcm2711-rpi-cm4.dts
539 create mode 100644 arch/arm/boot/dts/bcm2711-rpi-ds.dtsi
540 create mode 100644 arch/arm/boot/dts/bcm271x-rpi-bt.dtsi
541 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-cam1-regulator.dtsi
542 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi
543 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi
544 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi
545 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi
546 create mode 100644 arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
547 create mode 100644 arch/arm/boot/dts/overlays/Makefile
548 create mode 100644 arch/arm/boot/dts/overlays/README
549 create mode 100644 arch/arm/boot/dts/overlays/act-led-overlay.dts
550 create mode 100644 arch/arm/boot/dts/overlays/adafruit18-overlay.dts
551 create mode 100644 arch/arm/boot/dts/overlays/adau1977-adc-overlay.dts
552 create mode 100644 arch/arm/boot/dts/overlays/adau7002-simple-overlay.dts
553 create mode 100644 arch/arm/boot/dts/overlays/ads1015-overlay.dts
554 create mode 100644 arch/arm/boot/dts/overlays/ads1115-overlay.dts
555 create mode 100644 arch/arm/boot/dts/overlays/ads7846-overlay.dts
556 create mode 100644 arch/arm/boot/dts/overlays/adv7282m-overlay.dts
557 create mode 100644 arch/arm/boot/dts/overlays/adv728x-m-overlay.dts
558 create mode 100644 arch/arm/boot/dts/overlays/akkordion-iqdacplus-overlay.dts
559 create mode 100644 arch/arm/boot/dts/overlays/allo-boss-dac-pcm512x-audio-overlay.dts
560 create mode 100644 arch/arm/boot/dts/overlays/allo-boss2-dac-audio-overlay.dts
561 create mode 100644 arch/arm/boot/dts/overlays/allo-digione-overlay.dts
562 create mode 100644 arch/arm/boot/dts/overlays/allo-katana-dac-audio-overlay.dts
563 create mode 100644 arch/arm/boot/dts/overlays/allo-piano-dac-pcm512x-audio-overlay.dts
564 create mode 100644 arch/arm/boot/dts/overlays/allo-piano-dac-plus-pcm512x-audio-overlay.dts
565 create mode 100755 arch/arm/boot/dts/overlays/anyspi-overlay.dts
566 create mode 100644 arch/arm/boot/dts/overlays/apds9960-overlay.dts
567 create mode 100644 arch/arm/boot/dts/overlays/applepi-dac-overlay.dts
568 create mode 100644 arch/arm/boot/dts/overlays/at86rf233-overlay.dts
569 create mode 100644 arch/arm/boot/dts/overlays/audioinjector-addons-overlay.dts
570 create mode 100644 arch/arm/boot/dts/overlays/audioinjector-isolated-soundcard-overlay.dts
571 create mode 100644 arch/arm/boot/dts/overlays/audioinjector-ultra-overlay.dts
572 create mode 100644 arch/arm/boot/dts/overlays/audioinjector-wm8731-audio-overlay.dts
573 create mode 100644 arch/arm/boot/dts/overlays/audiosense-pi-overlay.dts
574 create mode 100644 arch/arm/boot/dts/overlays/audremap-overlay.dts
575 create mode 100644 arch/arm/boot/dts/overlays/balena-fin-overlay.dts
576 create mode 100644 arch/arm/boot/dts/overlays/cap1106-overlay.dts
577 create mode 100644 arch/arm/boot/dts/overlays/chipdip-dac-overlay.dts
578 create mode 100644 arch/arm/boot/dts/overlays/cma-overlay.dts
579 create mode 100644 arch/arm/boot/dts/overlays/dht11-overlay.dts
580 create mode 100644 arch/arm/boot/dts/overlays/dionaudio-loco-overlay.dts
581 create mode 100644 arch/arm/boot/dts/overlays/dionaudio-loco-v2-overlay.dts
582 create mode 100644 arch/arm/boot/dts/overlays/disable-bt-overlay.dts
583 create mode 100644 arch/arm/boot/dts/overlays/disable-wifi-overlay.dts
584 create mode 100644 arch/arm/boot/dts/overlays/dpi18-overlay.dts
585 create mode 100644 arch/arm/boot/dts/overlays/dpi18cpadhi-overlay.dts
586 create mode 100644 arch/arm/boot/dts/overlays/dpi24-overlay.dts
587 create mode 100644 arch/arm/boot/dts/overlays/draws-overlay.dts
588 create mode 100644 arch/arm/boot/dts/overlays/dwc-otg-overlay.dts
589 create mode 100644 arch/arm/boot/dts/overlays/dwc2-overlay.dts
590 create mode 100644 arch/arm/boot/dts/overlays/edt-ft5406-overlay.dts
591 create mode 100644 arch/arm/boot/dts/overlays/edt-ft5406.dtsi
592 create mode 100644 arch/arm/boot/dts/overlays/enc28j60-overlay.dts
593 create mode 100644 arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts
594 create mode 100644 arch/arm/boot/dts/overlays/exc3000-overlay.dts
595 create mode 100644 arch/arm/boot/dts/overlays/fe-pi-audio-overlay.dts
596 create mode 100644 arch/arm/boot/dts/overlays/fsm-demo-overlay.dts
597 create mode 100644 arch/arm/boot/dts/overlays/ghost-amp-overlay.dts
598 create mode 100644 arch/arm/boot/dts/overlays/goodix-overlay.dts
599 create mode 100644 arch/arm/boot/dts/overlays/googlevoicehat-soundcard-overlay.dts
600 create mode 100644 arch/arm/boot/dts/overlays/gpio-fan-overlay.dts
601 create mode 100644 arch/arm/boot/dts/overlays/gpio-ir-overlay.dts
602 create mode 100644 arch/arm/boot/dts/overlays/gpio-ir-tx-overlay.dts
603 create mode 100644 arch/arm/boot/dts/overlays/gpio-key-overlay.dts
604 create mode 100755 arch/arm/boot/dts/overlays/gpio-led-overlay.dts
605 create mode 100755 arch/arm/boot/dts/overlays/gpio-no-bank0-irq-overlay.dts
606 create mode 100644 arch/arm/boot/dts/overlays/gpio-no-irq-overlay.dts
607 create mode 100644 arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts
608 create mode 100644 arch/arm/boot/dts/overlays/gpio-shutdown-overlay.dts
609 create mode 100644 arch/arm/boot/dts/overlays/hd44780-lcd-overlay.dts
610 create mode 100644 arch/arm/boot/dts/overlays/hdmi-backlight-hwhack-gpio-overlay.dts
611 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
612 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-amp100-overlay.dts
613 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
614 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
615 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-dacplusadc-overlay.dts
616 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-dacplusadcpro-overlay.dts
617 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-dacplusdsp-overlay.dts
618 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-dacplushd-overlay.dts
619 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
620 create mode 100644 arch/arm/boot/dts/overlays/hifiberry-digi-pro-overlay.dts
621 create mode 100644 arch/arm/boot/dts/overlays/highperi-overlay.dts
622 create mode 100644 arch/arm/boot/dts/overlays/hy28a-overlay.dts
623 create mode 100644 arch/arm/boot/dts/overlays/hy28b-2017-overlay.dts
624 create mode 100644 arch/arm/boot/dts/overlays/hy28b-overlay.dts
625 create mode 100644 arch/arm/boot/dts/overlays/i-sabre-q2m-overlay.dts
626 create mode 100644 arch/arm/boot/dts/overlays/i2c-bcm2708-overlay.dts
627 create mode 100644 arch/arm/boot/dts/overlays/i2c-gpio-overlay.dts
628 create mode 100644 arch/arm/boot/dts/overlays/i2c-mux-overlay.dts
629 create mode 100644 arch/arm/boot/dts/overlays/i2c-pwm-pca9685a-overlay.dts
630 create mode 100644 arch/arm/boot/dts/overlays/i2c-rtc-common.dtsi
631 create mode 100644 arch/arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts
632 create mode 100644 arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
633 create mode 100755 arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
634 create mode 100644 arch/arm/boot/dts/overlays/i2c0-overlay.dts
635 create mode 100644 arch/arm/boot/dts/overlays/i2c1-overlay.dts
636 create mode 100644 arch/arm/boot/dts/overlays/i2c3-overlay.dts
637 create mode 100644 arch/arm/boot/dts/overlays/i2c4-overlay.dts
638 create mode 100644 arch/arm/boot/dts/overlays/i2c5-overlay.dts
639 create mode 100644 arch/arm/boot/dts/overlays/i2c6-overlay.dts
640 create mode 100644 arch/arm/boot/dts/overlays/i2s-gpio28-31-overlay.dts
641 create mode 100644 arch/arm/boot/dts/overlays/ilitek251x-overlay.dts
642 create mode 100644 arch/arm/boot/dts/overlays/imx219-overlay.dts
643 create mode 100644 arch/arm/boot/dts/overlays/imx290-overlay.dts
644 create mode 100644 arch/arm/boot/dts/overlays/imx290_327-overlay.dtsi
645 create mode 100644 arch/arm/boot/dts/overlays/imx378-overlay.dts
646 create mode 100644 arch/arm/boot/dts/overlays/imx477-overlay.dts
647 create mode 100644 arch/arm/boot/dts/overlays/imx477_378-overlay.dtsi
648 create mode 100644 arch/arm/boot/dts/overlays/iqaudio-codec-overlay.dts
649 create mode 100644 arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
650 create mode 100644 arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
651 create mode 100644 arch/arm/boot/dts/overlays/iqaudio-digi-wm8804-audio-overlay.dts
652 create mode 100644 arch/arm/boot/dts/overlays/irs1125-overlay.dts
653 create mode 100644 arch/arm/boot/dts/overlays/jedec-spi-nor-overlay.dts
654 create mode 100644 arch/arm/boot/dts/overlays/justboom-both-overlay.dts
655 create mode 100644 arch/arm/boot/dts/overlays/justboom-dac-overlay.dts
656 create mode 100644 arch/arm/boot/dts/overlays/justboom-digi-overlay.dts
657 create mode 100644 arch/arm/boot/dts/overlays/ltc294x-overlay.dts
658 create mode 100644 arch/arm/boot/dts/overlays/max98357a-overlay.dts
659 create mode 100644 arch/arm/boot/dts/overlays/maxtherm-overlay.dts
660 create mode 100644 arch/arm/boot/dts/overlays/mbed-dac-overlay.dts
661 create mode 100644 arch/arm/boot/dts/overlays/mcp23017-overlay.dts
662 create mode 100644 arch/arm/boot/dts/overlays/mcp23s17-overlay.dts
663 create mode 100755 arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts
664 create mode 100644 arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts
665 create mode 100644 arch/arm/boot/dts/overlays/mcp251xfd-overlay.dts
666 create mode 100755 arch/arm/boot/dts/overlays/mcp3008-overlay.dts
667 create mode 100755 arch/arm/boot/dts/overlays/mcp3202-overlay.dts
668 create mode 100644 arch/arm/boot/dts/overlays/mcp342x-overlay.dts
669 create mode 100644 arch/arm/boot/dts/overlays/media-center-overlay.dts
670 create mode 100644 arch/arm/boot/dts/overlays/merus-amp-overlay.dts
671 create mode 100644 arch/arm/boot/dts/overlays/midi-uart0-overlay.dts
672 create mode 100644 arch/arm/boot/dts/overlays/midi-uart1-overlay.dts
673 create mode 100644 arch/arm/boot/dts/overlays/midi-uart2-overlay.dts
674 create mode 100644 arch/arm/boot/dts/overlays/midi-uart3-overlay.dts
675 create mode 100644 arch/arm/boot/dts/overlays/midi-uart4-overlay.dts
676 create mode 100644 arch/arm/boot/dts/overlays/midi-uart5-overlay.dts
677 create mode 100644 arch/arm/boot/dts/overlays/minipitft13-overlay.dts
678 create mode 100644 arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts
679 create mode 100644 arch/arm/boot/dts/overlays/mmc-overlay.dts
680 create mode 100644 arch/arm/boot/dts/overlays/mpu6050-overlay.dts
681 create mode 100644 arch/arm/boot/dts/overlays/mz61581-overlay.dts
682 create mode 100644 arch/arm/boot/dts/overlays/ov5647-overlay.dts
683 create mode 100644 arch/arm/boot/dts/overlays/ov7251-overlay.dts
684 create mode 100644 arch/arm/boot/dts/overlays/ov9281-overlay.dts
685 create mode 100644 arch/arm/boot/dts/overlays/overlay_map.dts
686 create mode 100644 arch/arm/boot/dts/overlays/papirus-overlay.dts
687 create mode 100644 arch/arm/boot/dts/overlays/pca953x-overlay.dts
688 create mode 100644 arch/arm/boot/dts/overlays/pcie-32bit-dma-overlay.dts
689 create mode 100644 arch/arm/boot/dts/overlays/pibell-overlay.dts
690 create mode 100644 arch/arm/boot/dts/overlays/pifacedigital-overlay.dts
691 create mode 100644 arch/arm/boot/dts/overlays/pifi-40-overlay.dts
692 create mode 100644 arch/arm/boot/dts/overlays/pifi-dac-hd-overlay.dts
693 create mode 100644 arch/arm/boot/dts/overlays/pifi-dac-zero-overlay.dts
694 create mode 100644 arch/arm/boot/dts/overlays/pifi-mini-210-overlay.dts
695 create mode 100644 arch/arm/boot/dts/overlays/piglow-overlay.dts
696 create mode 100644 arch/arm/boot/dts/overlays/piscreen-overlay.dts
697 create mode 100644 arch/arm/boot/dts/overlays/piscreen2r-overlay.dts
698 create mode 100644 arch/arm/boot/dts/overlays/pisound-overlay.dts
699 create mode 100644 arch/arm/boot/dts/overlays/pitft22-overlay.dts
700 create mode 100644 arch/arm/boot/dts/overlays/pitft28-capacitive-overlay.dts
701 create mode 100644 arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts
702 create mode 100644 arch/arm/boot/dts/overlays/pitft35-resistive-overlay.dts
703 create mode 100644 arch/arm/boot/dts/overlays/pps-gpio-overlay.dts
704 create mode 100644 arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts
705 create mode 100644 arch/arm/boot/dts/overlays/pwm-ir-tx-overlay.dts
706 create mode 100644 arch/arm/boot/dts/overlays/pwm-overlay.dts
707 create mode 100644 arch/arm/boot/dts/overlays/qca7000-overlay.dts
708 create mode 100644 arch/arm/boot/dts/overlays/qca7000-uart0-overlay.dts
709 create mode 100644 arch/arm/boot/dts/overlays/rotary-encoder-overlay.dts
710 create mode 100644 arch/arm/boot/dts/overlays/rpi-backlight-overlay.dts
711 create mode 100644 arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts
712 create mode 100644 arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
713 create mode 100644 arch/arm/boot/dts/overlays/rpi-display-overlay.dts
714 create mode 100644 arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts
715 create mode 100644 arch/arm/boot/dts/overlays/rpi-poe-overlay.dts
716 create mode 100644 arch/arm/boot/dts/overlays/rpi-poe-plus-overlay.dts
717 create mode 100644 arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
718 create mode 100644 arch/arm/boot/dts/overlays/rpi-sense-overlay.dts
719 create mode 100644 arch/arm/boot/dts/overlays/rpi-tv-overlay.dts
720 create mode 100644 arch/arm/boot/dts/overlays/rpivid-v4l2-overlay.dts
721 create mode 100644 arch/arm/boot/dts/overlays/rra-digidac1-wm8741-audio-overlay.dts
722 create mode 100644 arch/arm/boot/dts/overlays/sainsmart18-overlay.dts
723 create mode 100644 arch/arm/boot/dts/overlays/sc16is750-i2c-overlay.dts
724 create mode 100644 arch/arm/boot/dts/overlays/sc16is752-i2c-overlay.dts
725 create mode 100644 arch/arm/boot/dts/overlays/sc16is752-spi0-overlay.dts
726 create mode 100644 arch/arm/boot/dts/overlays/sc16is752-spi1-overlay.dts
727 create mode 100644 arch/arm/boot/dts/overlays/sdhost-overlay.dts
728 create mode 100644 arch/arm/boot/dts/overlays/sdio-overlay.dts
729 create mode 100644 arch/arm/boot/dts/overlays/seeed-can-fd-hat-v1-overlay.dts
730 create mode 100644 arch/arm/boot/dts/overlays/seeed-can-fd-hat-v2-overlay.dts
731 create mode 100644 arch/arm/boot/dts/overlays/sh1106-spi-overlay.dts
732 create mode 100644 arch/arm/boot/dts/overlays/si446x-spi0-overlay.dts
733 create mode 100644 arch/arm/boot/dts/overlays/smi-dev-overlay.dts
734 create mode 100644 arch/arm/boot/dts/overlays/smi-nand-overlay.dts
735 create mode 100644 arch/arm/boot/dts/overlays/smi-overlay.dts
736 create mode 100644 arch/arm/boot/dts/overlays/spi-gpio35-39-overlay.dts
737 create mode 100644 arch/arm/boot/dts/overlays/spi-gpio40-45-overlay.dts
738 create mode 100644 arch/arm/boot/dts/overlays/spi-rtc-overlay.dts
739 create mode 100644 arch/arm/boot/dts/overlays/spi0-1cs-overlay.dts
740 create mode 100644 arch/arm/boot/dts/overlays/spi0-2cs-overlay.dts
741 create mode 100644 arch/arm/boot/dts/overlays/spi1-1cs-overlay.dts
742 create mode 100644 arch/arm/boot/dts/overlays/spi1-2cs-overlay.dts
743 create mode 100644 arch/arm/boot/dts/overlays/spi1-3cs-overlay.dts
744 create mode 100644 arch/arm/boot/dts/overlays/spi2-1cs-overlay.dts
745 create mode 100644 arch/arm/boot/dts/overlays/spi2-2cs-overlay.dts
746 create mode 100644 arch/arm/boot/dts/overlays/spi2-3cs-overlay.dts
747 create mode 100644 arch/arm/boot/dts/overlays/spi3-1cs-overlay.dts
748 create mode 100644 arch/arm/boot/dts/overlays/spi3-2cs-overlay.dts
749 create mode 100644 arch/arm/boot/dts/overlays/spi4-1cs-overlay.dts
750 create mode 100644 arch/arm/boot/dts/overlays/spi4-2cs-overlay.dts
751 create mode 100644 arch/arm/boot/dts/overlays/spi5-1cs-overlay.dts
752 create mode 100644 arch/arm/boot/dts/overlays/spi5-2cs-overlay.dts
753 create mode 100644 arch/arm/boot/dts/overlays/spi6-1cs-overlay.dts
754 create mode 100644 arch/arm/boot/dts/overlays/spi6-2cs-overlay.dts
755 create mode 100644 arch/arm/boot/dts/overlays/ssd1306-overlay.dts
756 create mode 100644 arch/arm/boot/dts/overlays/ssd1306-spi-overlay.dts
757 create mode 100644 arch/arm/boot/dts/overlays/ssd1331-spi-overlay.dts
758 create mode 100644 arch/arm/boot/dts/overlays/ssd1351-spi-overlay.dts
759 create mode 100755 arch/arm/boot/dts/overlays/superaudioboard-overlay.dts
760 create mode 100644 arch/arm/boot/dts/overlays/sx150x-overlay.dts
761 create mode 100644 arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts
762 create mode 100644 arch/arm/boot/dts/overlays/tc358743-overlay.dts
763 create mode 100644 arch/arm/boot/dts/overlays/tinylcd35-overlay.dts
764 create mode 100644 arch/arm/boot/dts/overlays/tpm-slb9670-overlay.dts
765 create mode 100755 arch/arm/boot/dts/overlays/uart0-overlay.dts
766 create mode 100644 arch/arm/boot/dts/overlays/uart1-overlay.dts
767 create mode 100644 arch/arm/boot/dts/overlays/uart2-overlay.dts
768 create mode 100644 arch/arm/boot/dts/overlays/uart3-overlay.dts
769 create mode 100644 arch/arm/boot/dts/overlays/uart4-overlay.dts
770 create mode 100644 arch/arm/boot/dts/overlays/uart5-overlay.dts
771 create mode 100644 arch/arm/boot/dts/overlays/udrc-overlay.dts
772 create mode 100644 arch/arm/boot/dts/overlays/ugreen-dabboard-overlay.dts
773 create mode 100644 arch/arm/boot/dts/overlays/upstream-overlay.dts
774 create mode 100644 arch/arm/boot/dts/overlays/upstream-pi4-overlay.dts
775 create mode 100644 arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts
776 create mode 100644 arch/arm/boot/dts/overlays/vc4-fkms-v3d-pi4-overlay.dts
777 create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-dpi-at056tn53v1-overlay.dts
778 create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-dsi-7inch-overlay.dts
779 create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-dsi-lt070me05000-overlay.dts
780 create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-dsi-lt070me05000-v2-overlay.dts
781 create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-kippah-7inch-overlay.dts
782 create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts
783 create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts
784 create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-vga666-overlay.dts
785 create mode 100644 arch/arm/boot/dts/overlays/vga666-overlay.dts
786 create mode 100644 arch/arm/boot/dts/overlays/w1-gpio-overlay.dts
787 create mode 100644 arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts
788 create mode 100644 arch/arm/boot/dts/overlays/w5500-overlay.dts
789 create mode 100644 arch/arm/boot/dts/overlays/wittypi-overlay.dts
790 create mode 100644 arch/arm/boot/dts/overlays/wm8960-soundcard-overlay.dts
791 create mode 100644 arch/arm64/boot/dts/broadcom/bcm2710-rpi-2-b.dts
792 create mode 100644 arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b-plus.dts
793 create mode 100644 arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dts
794 create mode 100644 arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts
795 create mode 100644 arch/arm64/boot/dts/broadcom/bcm2711-rpi-cm4.dts
796 create mode 120000 arch/arm64/boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi
797 create mode 120000 arch/arm64/boot/dts/broadcom/bcm283x-rpi-lan7515.dtsi
798 create mode 120000 arch/arm64/boot/dts/overlays
799
800 diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
801 index 27ca1ca6e827..ab6a5c6ea5ee 100644
802 --- a/arch/arm/boot/dts/Makefile
803 +++ b/arch/arm/boot/dts/Makefile
804 @@ -1,4 +1,11 @@
805 # SPDX-License-Identifier: GPL-2.0
806 +
807 +dtb-$(CONFIG_ARCH_BCM2835) += \
808 + bcm2708-rpi-b-rev1.dtb \
809 + bcm2708-rpi-cm.dtb \
810 + bcm2710-rpi-cm3.dtb \
811 + bcm2711-rpi-cm4.dtb
812 +
813 dtb-$(CONFIG_ARCH_ALPINE) += \
814 alpine-db.dtb
815 dtb-$(CONFIG_MACH_ARTPEC6) += \
816 @@ -1499,3 +1506,13 @@ dtb-$(CONFIG_ARCH_ASPEED) += \
817 aspeed-bmc-portwell-neptune.dtb \
818 aspeed-bmc-quanta-q71l.dtb \
819 aspeed-bmc-supermicro-x11spi.dtb
820 +
821 +targets += dtbs dtbs_install
822 +targets += $(dtb-y)
823 +
824 +subdir-y := overlays
825 +
826 +# Enable fixups to support overlays on BCM2835 platforms
827 +ifeq ($(CONFIG_ARCH_BCM2835),y)
828 + DTC_FLAGS += -@
829 +endif
830 diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
831 new file mode 100644
832 index 000000000000..e42cba84ab0e
833 --- /dev/null
834 +++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
835 @@ -0,0 +1,129 @@
836 +/dts-v1/;
837 +
838 +#include "bcm2708.dtsi"
839 +#include "bcm2708-rpi.dtsi"
840 +#include "bcm283x-rpi-smsc9514.dtsi"
841 +#include "bcm283x-rpi-csi1-2lane.dtsi"
842 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
843 +#include "bcm283x-rpi-cam1-regulator.dtsi"
844 +
845 +/ {
846 + compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
847 + model = "Raspberry Pi Model B+";
848 +};
849 +
850 +&gpio {
851 + spi0_pins: spi0_pins {
852 + brcm,pins = <9 10 11>;
853 + brcm,function = <4>; /* alt0 */
854 + };
855 +
856 + spi0_cs_pins: spi0_cs_pins {
857 + brcm,pins = <8 7>;
858 + brcm,function = <1>; /* output */
859 + };
860 +
861 + i2c0_pins: i2c0 {
862 + brcm,pins = <0 1>;
863 + brcm,function = <4>;
864 + };
865 +
866 + i2c1_pins: i2c1 {
867 + brcm,pins = <2 3>;
868 + brcm,function = <4>;
869 + };
870 +
871 + i2s_pins: i2s {
872 + brcm,pins = <18 19 20 21>;
873 + brcm,function = <4>; /* alt0 */
874 + };
875 +
876 + audio_pins: audio_pins {
877 + brcm,pins = <40 45>;
878 + brcm,function = <4>;
879 + };
880 +};
881 +
882 +&uart0 {
883 + status = "okay";
884 +};
885 +
886 +&spi0 {
887 + pinctrl-names = "default";
888 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
889 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
890 +
891 + spidev0: spidev@0{
892 + compatible = "spidev";
893 + reg = <0>; /* CE0 */
894 + #address-cells = <1>;
895 + #size-cells = <0>;
896 + spi-max-frequency = <125000000>;
897 + };
898 +
899 + spidev1: spidev@1{
900 + compatible = "spidev";
901 + reg = <1>; /* CE1 */
902 + #address-cells = <1>;
903 + #size-cells = <0>;
904 + spi-max-frequency = <125000000>;
905 + };
906 +};
907 +
908 +&i2c0if {
909 + clock-frequency = <100000>;
910 +};
911 +
912 +&i2c1 {
913 + pinctrl-names = "default";
914 + pinctrl-0 = <&i2c1_pins>;
915 + clock-frequency = <100000>;
916 +};
917 +
918 +&i2c2 {
919 + clock-frequency = <100000>;
920 +};
921 +
922 +&i2s {
923 + pinctrl-names = "default";
924 + pinctrl-0 = <&i2s_pins>;
925 +};
926 +
927 +&leds {
928 + act_led: led-act {
929 + label = "led0";
930 + linux,default-trigger = "mmc0";
931 + gpios = <&gpio 47 0>;
932 + };
933 +
934 + pwr_led: led-pwr {
935 + label = "led1";
936 + linux,default-trigger = "input";
937 + gpios = <&gpio 35 0>;
938 + };
939 +};
940 +
941 +&hdmi {
942 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
943 +};
944 +
945 +&audio {
946 + pinctrl-names = "default";
947 + pinctrl-0 = <&audio_pins>;
948 +};
949 +
950 +&cam1_reg {
951 + gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
952 +};
953 +
954 +/ {
955 + __overrides__ {
956 + act_led_gpio = <&act_led>,"gpios:4";
957 + act_led_activelow = <&act_led>,"gpios:8";
958 + act_led_trigger = <&act_led>,"linux,default-trigger";
959 +
960 + pwr_led_gpio = <&pwr_led>,"gpios:4";
961 + pwr_led_activelow = <&pwr_led>,"gpios:8";
962 + pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
963 + };
964 +};
965 diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts b/arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts
966 new file mode 100644
967 index 000000000000..4ea1e68f5e29
968 --- /dev/null
969 +++ b/arch/arm/boot/dts/bcm2708-rpi-b-rev1.dts
970 @@ -0,0 +1,132 @@
971 +/dts-v1/;
972 +
973 +#include "bcm2708.dtsi"
974 +#include "bcm2708-rpi.dtsi"
975 +#include "bcm283x-rpi-smsc9512.dtsi"
976 +#include "bcm283x-rpi-csi1-2lane.dtsi"
977 +#include "bcm283x-rpi-cam1-regulator.dtsi"
978 +
979 +/ {
980 + compatible = "raspberrypi,model-b", "brcm,bcm2835";
981 + model = "Raspberry Pi Model B";
982 +};
983 +
984 +&gpio {
985 + spi0_pins: spi0_pins {
986 + brcm,pins = <9 10 11>;
987 + brcm,function = <4>; /* alt0 */
988 + };
989 +
990 + spi0_cs_pins: spi0_cs_pins {
991 + brcm,pins = <8 7>;
992 + brcm,function = <1>; /* output */
993 + };
994 +
995 + i2c0_pins: i2c0 {
996 + brcm,pins = <0 1>;
997 + brcm,function = <4>;
998 + };
999 +
1000 + i2c1_pins: i2c1 {
1001 + brcm,pins = <2 3>;
1002 + brcm,function = <4>;
1003 + };
1004 +
1005 + i2s_pins: i2s {
1006 + brcm,pins = <28 29 30 31>;
1007 + brcm,function = <6>; /* alt2 */
1008 + };
1009 +
1010 + audio_pins: audio_pins {
1011 + brcm,pins = <40 45>;
1012 + brcm,function = <4>;
1013 + };
1014 +};
1015 +
1016 +&uart0 {
1017 + status = "okay";
1018 +};
1019 +
1020 +&spi0 {
1021 + pinctrl-names = "default";
1022 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
1023 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
1024 +
1025 + spidev0: spidev@0{
1026 + compatible = "spidev";
1027 + reg = <0>; /* CE0 */
1028 + #address-cells = <1>;
1029 + #size-cells = <0>;
1030 + spi-max-frequency = <125000000>;
1031 + };
1032 +
1033 + spidev1: spidev@1{
1034 + compatible = "spidev";
1035 + reg = <1>; /* CE1 */
1036 + #address-cells = <1>;
1037 + #size-cells = <0>;
1038 + spi-max-frequency = <125000000>;
1039 + };
1040 +};
1041 +
1042 +/delete-node/ &i2c0mux;
1043 +
1044 +i2c0: &i2c0if {
1045 + pinctrl-names = "default";
1046 + pinctrl-0 = <&i2c0_pins>;
1047 + clock-frequency = <100000>;
1048 +};
1049 +
1050 +i2c_csi_dsi: &i2c1 {
1051 + pinctrl-names = "default";
1052 + pinctrl-0 = <&i2c1_pins>;
1053 + clock-frequency = <100000>;
1054 +};
1055 +
1056 +/ {
1057 + aliases {
1058 + i2c0 = &i2c0;
1059 + };
1060 +
1061 + __overrides__ {
1062 + i2c0 = <&i2c0>, "status";
1063 + };
1064 +};
1065 +
1066 +&i2c2 {
1067 + clock-frequency = <100000>;
1068 +};
1069 +
1070 +&i2s {
1071 + pinctrl-names = "default";
1072 + pinctrl-0 = <&i2s_pins>;
1073 +};
1074 +
1075 +&leds {
1076 + act_led: led-act {
1077 + label = "led0";
1078 + linux,default-trigger = "mmc0";
1079 + gpios = <&gpio 16 1>;
1080 + };
1081 +};
1082 +
1083 +&hdmi {
1084 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
1085 +};
1086 +
1087 +&audio {
1088 + pinctrl-names = "default";
1089 + pinctrl-0 = <&audio_pins>;
1090 +};
1091 +
1092 +&cam1_reg {
1093 + gpio = <&gpio 27 GPIO_ACTIVE_HIGH>;
1094 +};
1095 +
1096 +/ {
1097 + __overrides__ {
1098 + act_led_gpio = <&act_led>,"gpios:4";
1099 + act_led_activelow = <&act_led>,"gpios:8";
1100 + act_led_trigger = <&act_led>,"linux,default-trigger";
1101 + };
1102 +};
1103 diff --git a/arch/arm/boot/dts/bcm2708-rpi-b.dts b/arch/arm/boot/dts/bcm2708-rpi-b.dts
1104 new file mode 100644
1105 index 000000000000..a152c1c8e648
1106 --- /dev/null
1107 +++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
1108 @@ -0,0 +1,119 @@
1109 +/dts-v1/;
1110 +
1111 +#include "bcm2708.dtsi"
1112 +#include "bcm2708-rpi.dtsi"
1113 +#include "bcm283x-rpi-smsc9512.dtsi"
1114 +#include "bcm283x-rpi-csi1-2lane.dtsi"
1115 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
1116 +#include "bcm283x-rpi-cam1-regulator.dtsi"
1117 +
1118 +/ {
1119 + compatible = "raspberrypi,model-b", "brcm,bcm2835";
1120 + model = "Raspberry Pi Model B";
1121 +};
1122 +
1123 +&gpio {
1124 + spi0_pins: spi0_pins {
1125 + brcm,pins = <9 10 11>;
1126 + brcm,function = <4>; /* alt0 */
1127 + };
1128 +
1129 + spi0_cs_pins: spi0_cs_pins {
1130 + brcm,pins = <8 7>;
1131 + brcm,function = <1>; /* output */
1132 + };
1133 +
1134 + i2c0_pins: i2c0 {
1135 + brcm,pins = <0 1>;
1136 + brcm,function = <4>;
1137 + };
1138 +
1139 + i2c1_pins: i2c1 {
1140 + brcm,pins = <2 3>;
1141 + brcm,function = <4>;
1142 + };
1143 +
1144 + i2s_pins: i2s {
1145 + brcm,pins = <28 29 30 31>;
1146 + brcm,function = <6>; /* alt2 */
1147 + };
1148 +
1149 + audio_pins: audio_pins {
1150 + brcm,pins = <40 45>;
1151 + brcm,function = <4>;
1152 + };
1153 +};
1154 +
1155 +&uart0 {
1156 + status = "okay";
1157 +};
1158 +
1159 +&spi0 {
1160 + pinctrl-names = "default";
1161 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
1162 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
1163 +
1164 + spidev0: spidev@0{
1165 + compatible = "spidev";
1166 + reg = <0>; /* CE0 */
1167 + #address-cells = <1>;
1168 + #size-cells = <0>;
1169 + spi-max-frequency = <125000000>;
1170 + };
1171 +
1172 + spidev1: spidev@1{
1173 + compatible = "spidev";
1174 + reg = <1>; /* CE1 */
1175 + #address-cells = <1>;
1176 + #size-cells = <0>;
1177 + spi-max-frequency = <125000000>;
1178 + };
1179 +};
1180 +
1181 +&i2c0if {
1182 + clock-frequency = <100000>;
1183 +};
1184 +
1185 +&i2c1 {
1186 + pinctrl-names = "default";
1187 + pinctrl-0 = <&i2c1_pins>;
1188 + clock-frequency = <100000>;
1189 +};
1190 +
1191 +&i2c2 {
1192 + clock-frequency = <100000>;
1193 +};
1194 +
1195 +&i2s {
1196 + pinctrl-names = "default";
1197 + pinctrl-0 = <&i2s_pins>;
1198 +};
1199 +
1200 +&leds {
1201 + act_led: led-act {
1202 + label = "led0";
1203 + linux,default-trigger = "mmc0";
1204 + gpios = <&gpio 16 1>;
1205 + };
1206 +};
1207 +
1208 +&hdmi {
1209 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
1210 +};
1211 +
1212 +&audio {
1213 + pinctrl-names = "default";
1214 + pinctrl-0 = <&audio_pins>;
1215 +};
1216 +
1217 +&cam1_reg {
1218 + gpio = <&gpio 21 GPIO_ACTIVE_HIGH>;
1219 +};
1220 +
1221 +/ {
1222 + __overrides__ {
1223 + act_led_gpio = <&act_led>,"gpios:4";
1224 + act_led_activelow = <&act_led>,"gpios:8";
1225 + act_led_trigger = <&act_led>,"linux,default-trigger";
1226 + };
1227 +};
1228 diff --git a/arch/arm/boot/dts/bcm2708-rpi-bt.dtsi b/arch/arm/boot/dts/bcm2708-rpi-bt.dtsi
1229 new file mode 100644
1230 index 000000000000..a18f80af97d3
1231 --- /dev/null
1232 +++ b/arch/arm/boot/dts/bcm2708-rpi-bt.dtsi
1233 @@ -0,0 +1,26 @@
1234 +// SPDX-License-Identifier: GPL-2.0
1235 +
1236 +&uart0 {
1237 + bt: bluetooth {
1238 + compatible = "brcm,bcm43438-bt";
1239 + max-speed = <3000000>;
1240 + shutdown-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>;
1241 + status = "disabled";
1242 + };
1243 +};
1244 +
1245 +&uart1 {
1246 + minibt: bluetooth {
1247 + compatible = "brcm,bcm43438-bt";
1248 + max-speed = <460800>;
1249 + shutdown-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>;
1250 + status = "disabled";
1251 + };
1252 +};
1253 +
1254 +/ {
1255 + __overrides__ {
1256 + krnbt = <&bt>,"status";
1257 + krnbt_baudrate = <&bt>,"max-speed:0";
1258 + };
1259 +};
1260 diff --git a/arch/arm/boot/dts/bcm2708-rpi-cm.dts b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
1261 new file mode 100644
1262 index 000000000000..f61e3418425a
1263 --- /dev/null
1264 +++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
1265 @@ -0,0 +1,112 @@
1266 +/dts-v1/;
1267 +
1268 +#include "bcm2708-rpi-cm.dtsi"
1269 +#include "bcm283x-rpi-csi0-2lane.dtsi"
1270 +#include "bcm283x-rpi-csi1-4lane.dtsi"
1271 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
1272 +
1273 +/ {
1274 + compatible = "raspberrypi,compute-module", "brcm,bcm2835";
1275 + model = "Raspberry Pi Compute Module";
1276 +
1277 + cam1_reg: cam1_reg {
1278 + compatible = "regulator-fixed";
1279 + regulator-name = "cam1-regulator";
1280 + gpio = <&gpio 2 GPIO_ACTIVE_HIGH>;
1281 + enable-active-high;
1282 + status = "disabled";
1283 + };
1284 + cam0_reg: cam0_reg {
1285 + compatible = "regulator-fixed";
1286 + regulator-name = "cam0-regulator";
1287 + gpio = <&gpio 30 GPIO_ACTIVE_HIGH>;
1288 + enable-active-high;
1289 + status = "disabled";
1290 + };
1291 +};
1292 +
1293 +&uart0 {
1294 + status = "okay";
1295 +};
1296 +
1297 +&gpio {
1298 + spi0_pins: spi0_pins {
1299 + brcm,pins = <9 10 11>;
1300 + brcm,function = <4>; /* alt0 */
1301 + };
1302 +
1303 + spi0_cs_pins: spi0_cs_pins {
1304 + brcm,pins = <8 7>;
1305 + brcm,function = <1>; /* output */
1306 + };
1307 +
1308 + i2c0_pins: i2c0 {
1309 + brcm,pins = <0 1>;
1310 + brcm,function = <4>;
1311 + };
1312 +
1313 + i2c1_pins: i2c1 {
1314 + brcm,pins = <2 3>;
1315 + brcm,function = <4>;
1316 + };
1317 +
1318 + i2s_pins: i2s {
1319 + brcm,pins = <18 19 20 21>;
1320 + brcm,function = <4>; /* alt0 */
1321 + };
1322 +
1323 + audio_pins: audio_pins {
1324 + brcm,pins;
1325 + brcm,function;
1326 + };
1327 +};
1328 +
1329 +&spi0 {
1330 + pinctrl-names = "default";
1331 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
1332 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
1333 +
1334 + spidev0: spidev@0{
1335 + compatible = "spidev";
1336 + reg = <0>; /* CE0 */
1337 + #address-cells = <1>;
1338 + #size-cells = <0>;
1339 + spi-max-frequency = <125000000>;
1340 + };
1341 +
1342 + spidev1: spidev@1{
1343 + compatible = "spidev";
1344 + reg = <1>; /* CE1 */
1345 + #address-cells = <1>;
1346 + #size-cells = <0>;
1347 + spi-max-frequency = <125000000>;
1348 + };
1349 +};
1350 +
1351 +&i2c0if {
1352 + clock-frequency = <100000>;
1353 +};
1354 +
1355 +&i2c1 {
1356 + pinctrl-names = "default";
1357 + pinctrl-0 = <&i2c1_pins>;
1358 + clock-frequency = <100000>;
1359 +};
1360 +
1361 +&i2c2 {
1362 + clock-frequency = <100000>;
1363 +};
1364 +
1365 +&i2s {
1366 + pinctrl-names = "default";
1367 + pinctrl-0 = <&i2s_pins>;
1368 +};
1369 +
1370 +&audio {
1371 + pinctrl-names = "default";
1372 + pinctrl-0 = <&audio_pins>;
1373 +};
1374 +
1375 +&hdmi {
1376 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
1377 +};
1378 diff --git a/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi b/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
1379 new file mode 100644
1380 index 000000000000..d5572b2d2103
1381 --- /dev/null
1382 +++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
1383 @@ -0,0 +1,18 @@
1384 +#include "bcm2708.dtsi"
1385 +#include "bcm2708-rpi.dtsi"
1386 +
1387 +&leds {
1388 + act_led: led-act {
1389 + label = "led0";
1390 + linux,default-trigger = "mmc0";
1391 + gpios = <&gpio 47 0>;
1392 + };
1393 +};
1394 +
1395 +/ {
1396 + __overrides__ {
1397 + act_led_gpio = <&act_led>,"gpios:4";
1398 + act_led_activelow = <&act_led>,"gpios:8";
1399 + act_led_trigger = <&act_led>,"linux,default-trigger";
1400 + };
1401 +};
1402 diff --git a/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts b/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
1403 new file mode 100644
1404 index 000000000000..75a5b41514f9
1405 --- /dev/null
1406 +++ b/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts
1407 @@ -0,0 +1,169 @@
1408 +/dts-v1/;
1409 +
1410 +#include "bcm2708.dtsi"
1411 +#include "bcm2708-rpi.dtsi"
1412 +#include "bcm283x-rpi-csi1-2lane.dtsi"
1413 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
1414 +#include "bcm2708-rpi-bt.dtsi"
1415 +#include "bcm283x-rpi-cam1-regulator.dtsi"
1416 +
1417 +/ {
1418 + compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
1419 + model = "Raspberry Pi Zero W";
1420 +
1421 + chosen {
1422 + bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
1423 + };
1424 +
1425 + aliases {
1426 + serial0 = &uart1;
1427 + serial1 = &uart0;
1428 + mmc1 = &mmcnr;
1429 + };
1430 +};
1431 +
1432 +&gpio {
1433 + spi0_pins: spi0_pins {
1434 + brcm,pins = <9 10 11>;
1435 + brcm,function = <4>; /* alt0 */
1436 + };
1437 +
1438 + spi0_cs_pins: spi0_cs_pins {
1439 + brcm,pins = <8 7>;
1440 + brcm,function = <1>; /* output */
1441 + };
1442 +
1443 + i2c0_pins: i2c0 {
1444 + brcm,pins = <0 1>;
1445 + brcm,function = <4>;
1446 + };
1447 +
1448 + i2c1_pins: i2c1 {
1449 + brcm,pins = <2 3>;
1450 + brcm,function = <4>;
1451 + };
1452 +
1453 + i2s_pins: i2s {
1454 + brcm,pins = <18 19 20 21>;
1455 + brcm,function = <4>; /* alt0 */
1456 + };
1457 +
1458 + sdio_pins: sdio_pins {
1459 + brcm,pins = <34 35 36 37 38 39>;
1460 + brcm,function = <7>; /* ALT3 = SD1 */
1461 + brcm,pull = <0 2 2 2 2 2>;
1462 + };
1463 +
1464 + bt_pins: bt_pins {
1465 + brcm,pins = <43>;
1466 + brcm,function = <4>; /* alt0:GPCLK2 */
1467 + brcm,pull = <0>; /* none */
1468 + };
1469 +
1470 + uart0_pins: uart0_pins {
1471 + brcm,pins = <30 31 32 33>;
1472 + brcm,function = <7>; /* alt3=UART0 */
1473 + brcm,pull = <2 0 0 2>; /* up none none up */
1474 + };
1475 +
1476 + uart1_pins: uart1_pins {
1477 + brcm,pins;
1478 + brcm,function;
1479 + brcm,pull;
1480 + };
1481 +
1482 + audio_pins: audio_pins {
1483 + brcm,pins = <>;
1484 + brcm,function = <>;
1485 + };
1486 +};
1487 +
1488 +&mmcnr {
1489 + pinctrl-names = "default";
1490 + pinctrl-0 = <&sdio_pins>;
1491 + bus-width = <4>;
1492 + status = "okay";
1493 +};
1494 +
1495 +&uart0 {
1496 + pinctrl-names = "default";
1497 + pinctrl-0 = <&uart0_pins &bt_pins>;
1498 + status = "okay";
1499 +};
1500 +
1501 +&uart1 {
1502 + pinctrl-names = "default";
1503 + pinctrl-0 = <&uart1_pins>;
1504 + status = "okay";
1505 +};
1506 +
1507 +&spi0 {
1508 + pinctrl-names = "default";
1509 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
1510 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
1511 +
1512 + spidev0: spidev@0{
1513 + compatible = "spidev";
1514 + reg = <0>; /* CE0 */
1515 + #address-cells = <1>;
1516 + #size-cells = <0>;
1517 + spi-max-frequency = <125000000>;
1518 + };
1519 +
1520 + spidev1: spidev@1{
1521 + compatible = "spidev";
1522 + reg = <1>; /* CE1 */
1523 + #address-cells = <1>;
1524 + #size-cells = <0>;
1525 + spi-max-frequency = <125000000>;
1526 + };
1527 +};
1528 +
1529 +&i2c0if {
1530 + clock-frequency = <100000>;
1531 +};
1532 +
1533 +&i2c1 {
1534 + pinctrl-names = "default";
1535 + pinctrl-0 = <&i2c1_pins>;
1536 + clock-frequency = <100000>;
1537 +};
1538 +
1539 +&i2c2 {
1540 + clock-frequency = <100000>;
1541 +};
1542 +
1543 +&i2s {
1544 + pinctrl-names = "default";
1545 + pinctrl-0 = <&i2s_pins>;
1546 +};
1547 +
1548 +&leds {
1549 + act_led: led-act {
1550 + label = "led0";
1551 + linux,default-trigger = "actpwr";
1552 + gpios = <&gpio 47 GPIO_ACTIVE_LOW>;
1553 + };
1554 +};
1555 +
1556 +&hdmi {
1557 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
1558 +};
1559 +
1560 +&audio {
1561 + pinctrl-names = "default";
1562 + pinctrl-0 = <&audio_pins>;
1563 + brcm,disable-headphones = <1>;
1564 +};
1565 +
1566 +&cam1_reg {
1567 + gpio = <&gpio 44 GPIO_ACTIVE_HIGH>;
1568 +};
1569 +
1570 +/ {
1571 + __overrides__ {
1572 + act_led_gpio = <&act_led>,"gpios:4";
1573 + act_led_activelow = <&act_led>,"gpios:8";
1574 + act_led_trigger = <&act_led>,"linux,default-trigger";
1575 + };
1576 +};
1577 diff --git a/arch/arm/boot/dts/bcm2708-rpi-zero.dts b/arch/arm/boot/dts/bcm2708-rpi-zero.dts
1578 new file mode 100644
1579 index 000000000000..84591bd7d423
1580 --- /dev/null
1581 +++ b/arch/arm/boot/dts/bcm2708-rpi-zero.dts
1582 @@ -0,0 +1,123 @@
1583 +/dts-v1/;
1584 +
1585 +#include "bcm2708.dtsi"
1586 +#include "bcm2708-rpi.dtsi"
1587 +#include "bcm283x-rpi-csi1-2lane.dtsi"
1588 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
1589 +#include "bcm283x-rpi-cam1-regulator.dtsi"
1590 +
1591 +/ {
1592 + compatible = "raspberrypi,model-zero", "brcm,bcm2835";
1593 + model = "Raspberry Pi Zero";
1594 +
1595 + chosen {
1596 + bootargs = "coherent_pool=1M snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
1597 + };
1598 +};
1599 +
1600 +&gpio {
1601 + spi0_pins: spi0_pins {
1602 + brcm,pins = <9 10 11>;
1603 + brcm,function = <4>; /* alt0 */
1604 + };
1605 +
1606 + spi0_cs_pins: spi0_cs_pins {
1607 + brcm,pins = <8 7>;
1608 + brcm,function = <1>; /* output */
1609 + };
1610 +
1611 + i2c0_pins: i2c0 {
1612 + brcm,pins = <0 1>;
1613 + brcm,function = <4>;
1614 + };
1615 +
1616 + i2c1_pins: i2c1 {
1617 + brcm,pins = <2 3>;
1618 + brcm,function = <4>;
1619 + };
1620 +
1621 + i2s_pins: i2s {
1622 + brcm,pins = <18 19 20 21>;
1623 + brcm,function = <4>; /* alt0 */
1624 + };
1625 +
1626 + audio_pins: audio_pins {
1627 + brcm,pins = <>;
1628 + brcm,function = <>;
1629 + };
1630 +};
1631 +
1632 +&uart0 {
1633 + status = "okay";
1634 +};
1635 +
1636 +&spi0 {
1637 + pinctrl-names = "default";
1638 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
1639 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
1640 +
1641 + spidev0: spidev@0{
1642 + compatible = "spidev";
1643 + reg = <0>; /* CE0 */
1644 + #address-cells = <1>;
1645 + #size-cells = <0>;
1646 + spi-max-frequency = <125000000>;
1647 + };
1648 +
1649 + spidev1: spidev@1{
1650 + compatible = "spidev";
1651 + reg = <1>; /* CE1 */
1652 + #address-cells = <1>;
1653 + #size-cells = <0>;
1654 + spi-max-frequency = <125000000>;
1655 + };
1656 +};
1657 +
1658 +&i2c0if {
1659 + clock-frequency = <100000>;
1660 +};
1661 +
1662 +&i2c1 {
1663 + pinctrl-names = "default";
1664 + pinctrl-0 = <&i2c1_pins>;
1665 + clock-frequency = <100000>;
1666 +};
1667 +
1668 +&i2c2 {
1669 + clock-frequency = <100000>;
1670 +};
1671 +
1672 +&i2s {
1673 + pinctrl-names = "default";
1674 + pinctrl-0 = <&i2s_pins>;
1675 +};
1676 +
1677 +&leds {
1678 + act_led: led-act {
1679 + label = "led0";
1680 + linux,default-trigger = "actpwr";
1681 + gpios = <&gpio 47 GPIO_ACTIVE_LOW>;
1682 + };
1683 +};
1684 +
1685 +&hdmi {
1686 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
1687 +};
1688 +
1689 +&audio {
1690 + pinctrl-names = "default";
1691 + pinctrl-0 = <&audio_pins>;
1692 + brcm,disable-headphones = <1>;
1693 +};
1694 +
1695 +&cam1_reg {
1696 + gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
1697 +};
1698 +
1699 +/ {
1700 + __overrides__ {
1701 + act_led_gpio = <&act_led>,"gpios:4";
1702 + act_led_activelow = <&act_led>,"gpios:8";
1703 + act_led_trigger = <&act_led>,"linux,default-trigger";
1704 + };
1705 +};
1706 diff --git a/arch/arm/boot/dts/bcm2708-rpi.dtsi b/arch/arm/boot/dts/bcm2708-rpi.dtsi
1707 new file mode 100644
1708 index 000000000000..e2458b15d64a
1709 --- /dev/null
1710 +++ b/arch/arm/boot/dts/bcm2708-rpi.dtsi
1711 @@ -0,0 +1,36 @@
1712 +/* Downstream modifications common to bcm2835, bcm2836, bcm2837 */
1713 +
1714 +#include "bcm2835-rpi.dtsi"
1715 +#include "bcm270x-rpi.dtsi"
1716 +
1717 +/ {
1718 + memory@0 {
1719 + device_type = "memory";
1720 + reg = <0x0 0x0>;
1721 + };
1722 +
1723 + aliases {
1724 + i2c2 = &i2c2;
1725 + };
1726 +
1727 + __overrides__ {
1728 + i2c2_iknowwhatimdoing = <&i2c2>,"status";
1729 + i2c2_baudrate = <&i2c2>,"clock-frequency:0";
1730 + sd_poll_once = <&sdhost>,"non-removable?";
1731 + };
1732 +};
1733 +
1734 +&sdhost {
1735 + pinctrl-names = "default";
1736 + pinctrl-0 = <&sdhost_gpio48>;
1737 + status = "okay";
1738 +};
1739 +
1740 +&hdmi {
1741 + power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
1742 + status = "disabled";
1743 +};
1744 +
1745 +&i2c2 {
1746 + status = "disabled";
1747 +};
1748 diff --git a/arch/arm/boot/dts/bcm2708.dtsi b/arch/arm/boot/dts/bcm2708.dtsi
1749 new file mode 100644
1750 index 000000000000..36ec4989403f
1751 --- /dev/null
1752 +++ b/arch/arm/boot/dts/bcm2708.dtsi
1753 @@ -0,0 +1,12 @@
1754 +#include "bcm2835.dtsi"
1755 +#include "bcm270x.dtsi"
1756 +
1757 +/ {
1758 + __overrides__ {
1759 + arm_freq;
1760 + };
1761 +};
1762 +
1763 +&vc4 {
1764 + status = "disabled";
1765 +};
1766 diff --git a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
1767 new file mode 100644
1768 index 000000000000..e1381d2b3a2c
1769 --- /dev/null
1770 +++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
1771 @@ -0,0 +1,129 @@
1772 +/dts-v1/;
1773 +
1774 +#include "bcm2709.dtsi"
1775 +#include "bcm2709-rpi.dtsi"
1776 +#include "bcm283x-rpi-smsc9514.dtsi"
1777 +#include "bcm283x-rpi-csi1-2lane.dtsi"
1778 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
1779 +#include "bcm283x-rpi-cam1-regulator.dtsi"
1780 +
1781 +/ {
1782 + compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
1783 + model = "Raspberry Pi 2 Model B";
1784 +};
1785 +
1786 +&gpio {
1787 + spi0_pins: spi0_pins {
1788 + brcm,pins = <9 10 11>;
1789 + brcm,function = <4>; /* alt0 */
1790 + };
1791 +
1792 + spi0_cs_pins: spi0_cs_pins {
1793 + brcm,pins = <8 7>;
1794 + brcm,function = <1>; /* output */
1795 + };
1796 +
1797 + i2c0_pins: i2c0 {
1798 + brcm,pins = <0 1>;
1799 + brcm,function = <4>;
1800 + };
1801 +
1802 + i2c1_pins: i2c1 {
1803 + brcm,pins = <2 3>;
1804 + brcm,function = <4>;
1805 + };
1806 +
1807 + i2s_pins: i2s {
1808 + brcm,pins = <18 19 20 21>;
1809 + brcm,function = <4>; /* alt0 */
1810 + };
1811 +
1812 + audio_pins: audio_pins {
1813 + brcm,pins = <40 45>;
1814 + brcm,function = <4>;
1815 + };
1816 +};
1817 +
1818 +&uart0 {
1819 + status = "okay";
1820 +};
1821 +
1822 +&spi0 {
1823 + pinctrl-names = "default";
1824 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
1825 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
1826 +
1827 + spidev0: spidev@0{
1828 + compatible = "spidev";
1829 + reg = <0>; /* CE0 */
1830 + #address-cells = <1>;
1831 + #size-cells = <0>;
1832 + spi-max-frequency = <125000000>;
1833 + };
1834 +
1835 + spidev1: spidev@1{
1836 + compatible = "spidev";
1837 + reg = <1>; /* CE1 */
1838 + #address-cells = <1>;
1839 + #size-cells = <0>;
1840 + spi-max-frequency = <125000000>;
1841 + };
1842 +};
1843 +
1844 +&i2c0if {
1845 + clock-frequency = <100000>;
1846 +};
1847 +
1848 +&i2c1 {
1849 + pinctrl-names = "default";
1850 + pinctrl-0 = <&i2c1_pins>;
1851 + clock-frequency = <100000>;
1852 +};
1853 +
1854 +&i2c2 {
1855 + clock-frequency = <100000>;
1856 +};
1857 +
1858 +&i2s {
1859 + pinctrl-names = "default";
1860 + pinctrl-0 = <&i2s_pins>;
1861 +};
1862 +
1863 +&leds {
1864 + act_led: led-act {
1865 + label = "led0";
1866 + linux,default-trigger = "mmc0";
1867 + gpios = <&gpio 47 0>;
1868 + };
1869 +
1870 + pwr_led: led-pwr {
1871 + label = "led1";
1872 + linux,default-trigger = "input";
1873 + gpios = <&gpio 35 0>;
1874 + };
1875 +};
1876 +
1877 +&hdmi {
1878 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
1879 +};
1880 +
1881 +&audio {
1882 + pinctrl-names = "default";
1883 + pinctrl-0 = <&audio_pins>;
1884 +};
1885 +
1886 +&cam1_reg {
1887 + gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
1888 +};
1889 +
1890 +/ {
1891 + __overrides__ {
1892 + act_led_gpio = <&act_led>,"gpios:4";
1893 + act_led_activelow = <&act_led>,"gpios:8";
1894 + act_led_trigger = <&act_led>,"linux,default-trigger";
1895 +
1896 + pwr_led_gpio = <&pwr_led>,"gpios:4";
1897 + pwr_led_activelow = <&pwr_led>,"gpios:8";
1898 + pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
1899 + };
1900 +};
1901 diff --git a/arch/arm/boot/dts/bcm2709-rpi.dtsi b/arch/arm/boot/dts/bcm2709-rpi.dtsi
1902 new file mode 100644
1903 index 000000000000..babfa41cd9f7
1904 --- /dev/null
1905 +++ b/arch/arm/boot/dts/bcm2709-rpi.dtsi
1906 @@ -0,0 +1,5 @@
1907 +#include "bcm2708-rpi.dtsi"
1908 +
1909 +&vchiq {
1910 + compatible = "brcm,bcm2836-vchiq", "brcm,bcm2835-vchiq";
1911 +};
1912 diff --git a/arch/arm/boot/dts/bcm2709.dtsi b/arch/arm/boot/dts/bcm2709.dtsi
1913 new file mode 100644
1914 index 000000000000..68eafc1b281a
1915 --- /dev/null
1916 +++ b/arch/arm/boot/dts/bcm2709.dtsi
1917 @@ -0,0 +1,22 @@
1918 +#include "bcm2836.dtsi"
1919 +#include "bcm270x.dtsi"
1920 +
1921 +/ {
1922 + soc {
1923 + ranges = <0x7e000000 0x3f000000 0x01000000>,
1924 + <0x40000000 0x40000000 0x00040000>;
1925 +
1926 + /delete-node/ timer@7e003000;
1927 + };
1928 +
1929 + __overrides__ {
1930 + arm_freq = <&v7_cpu0>, "clock-frequency:0",
1931 + <&v7_cpu1>, "clock-frequency:0",
1932 + <&v7_cpu2>, "clock-frequency:0",
1933 + <&v7_cpu3>, "clock-frequency:0";
1934 + };
1935 +};
1936 +
1937 +&vc4 {
1938 + status = "disabled";
1939 +};
1940 diff --git a/arch/arm/boot/dts/bcm270x-rpi.dtsi b/arch/arm/boot/dts/bcm270x-rpi.dtsi
1941 new file mode 100644
1942 index 000000000000..68a7e1c09db1
1943 --- /dev/null
1944 +++ b/arch/arm/boot/dts/bcm270x-rpi.dtsi
1945 @@ -0,0 +1,154 @@
1946 +/* Downstream modifications to bcm2835-rpi.dtsi */
1947 +
1948 +/ {
1949 + aliases {
1950 + audio = &audio;
1951 + aux = &aux;
1952 + sound = &sound;
1953 + soc = &soc;
1954 + dma = &dma;
1955 + intc = &intc;
1956 + watchdog = &watchdog;
1957 + random = &random;
1958 + mailbox = &mailbox;
1959 + gpio = &gpio;
1960 + uart0 = &uart0;
1961 + uart1 = &uart1;
1962 + sdhost = &sdhost;
1963 + mmc = &mmc;
1964 + mmc1 = &mmc;
1965 + mmc0 = &sdhost;
1966 + i2s = &i2s;
1967 + i2c0 = &i2c0;
1968 + i2c1 = &i2c1;
1969 + i2c10 = &i2c_csi_dsi;
1970 + spi0 = &spi0;
1971 + spi1 = &spi1;
1972 + spi2 = &spi2;
1973 + usb = &usb;
1974 + leds = &leds;
1975 + fb = &fb;
1976 + thermal = &thermal;
1977 + axiperf = &axiperf;
1978 + };
1979 +
1980 + /* Define these notional regulators for use by overlays */
1981 + vdd_3v3_reg: fixedregulator_3v3 {
1982 + compatible = "regulator-fixed";
1983 + regulator-always-on;
1984 + regulator-max-microvolt = <3300000>;
1985 + regulator-min-microvolt = <3300000>;
1986 + regulator-name = "3v3";
1987 + };
1988 +
1989 + vdd_5v0_reg: fixedregulator_5v0 {
1990 + compatible = "regulator-fixed";
1991 + regulator-always-on;
1992 + regulator-max-microvolt = <5000000>;
1993 + regulator-min-microvolt = <5000000>;
1994 + regulator-name = "5v0";
1995 + };
1996 +
1997 + leds: leds {
1998 + compatible = "gpio-leds";
1999 + };
2000 +
2001 + soc {
2002 + gpiomem {
2003 + compatible = "brcm,bcm2835-gpiomem";
2004 + reg = <0x7e200000 0x1000>;
2005 + };
2006 +
2007 + fb: fb {
2008 + compatible = "brcm,bcm2708-fb";
2009 + firmware = <&firmware>;
2010 + status = "okay";
2011 + };
2012 +
2013 + vcsm: vcsm {
2014 + compatible = "raspberrypi,bcm2835-vcsm";
2015 + firmware = <&firmware>;
2016 + status = "okay";
2017 + };
2018 +
2019 + /* External sound card */
2020 + sound: sound {
2021 + status = "disabled";
2022 + };
2023 + };
2024 +
2025 + __overrides__ {
2026 + cache_line_size;
2027 +
2028 + uart0 = <&uart0>,"status";
2029 + uart1 = <&uart1>,"status";
2030 + i2s = <&i2s>,"status";
2031 + spi = <&spi0>,"status";
2032 + i2c0 = <&i2c0if>,"status",<&i2c0mux>,"status";
2033 + i2c1 = <&i2c1>,"status";
2034 + i2c0_baudrate = <&i2c0if>,"clock-frequency:0";
2035 + i2c1_baudrate = <&i2c1>,"clock-frequency:0";
2036 +
2037 + audio = <&audio>,"status";
2038 + watchdog = <&watchdog>,"status";
2039 + random = <&random>,"status";
2040 + sd_overclock = <&sdhost>,"brcm,overclock-50:0";
2041 + sd_force_pio = <&sdhost>,"brcm,force-pio?";
2042 + sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
2043 + sd_debug = <&sdhost>,"brcm,debug";
2044 + sdio_overclock = <&mmc>,"brcm,overclock-50:0",
2045 + <&mmcnr>,"brcm,overclock-50:0";
2046 + axiperf = <&axiperf>,"status";
2047 + };
2048 +};
2049 +
2050 +&uart0 {
2051 + skip-init;
2052 +};
2053 +
2054 +&uart1 {
2055 + skip-init;
2056 +};
2057 +
2058 +&txp {
2059 + status = "disabled";
2060 +};
2061 +
2062 +&i2c0if {
2063 + status = "disabled";
2064 +};
2065 +
2066 +&i2c0mux {
2067 + status = "disabled";
2068 +};
2069 +
2070 +&i2c1 {
2071 + status = "disabled";
2072 +};
2073 +
2074 +&clocks {
2075 + firmware = <&firmware>;
2076 +};
2077 +
2078 +&sdhci {
2079 + pinctrl-names = "default";
2080 + pinctrl-0 = <&emmc_gpio48>;
2081 + bus-width = <4>;
2082 +};
2083 +
2084 +&cpu_thermal {
2085 + /delete-node/ trips;
2086 +};
2087 +
2088 +&vec {
2089 + status = "disabled";
2090 +};
2091 +
2092 +&vchiq {
2093 + /* Onboard audio */
2094 + audio: bcm2835_audio {
2095 + compatible = "brcm,bcm2835-audio";
2096 + brcm,pwm-channels = <8>;
2097 + status = "disabled";
2098 + };
2099 +};
2100 diff --git a/arch/arm/boot/dts/bcm270x.dtsi b/arch/arm/boot/dts/bcm270x.dtsi
2101 new file mode 100644
2102 index 000000000000..badcf341ecd2
2103 --- /dev/null
2104 +++ b/arch/arm/boot/dts/bcm270x.dtsi
2105 @@ -0,0 +1,217 @@
2106 +/* Downstream bcm283x.dtsi diff */
2107 +#include <dt-bindings/power/raspberrypi-power.h>
2108 +
2109 +/ {
2110 + chosen {
2111 + bootargs = "coherent_pool=1M snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
2112 + /delete-property/ stdout-path;
2113 + };
2114 +
2115 + soc: soc {
2116 +
2117 + watchdog: watchdog@7e100000 {
2118 + /* Add label */
2119 + };
2120 +
2121 + random: rng@7e104000 {
2122 + /* Add label */
2123 + };
2124 +
2125 + spi0: spi@7e204000 {
2126 + /* Add label */
2127 + };
2128 +
2129 +#ifndef BCM2711
2130 + pixelvalve0: pixelvalve@7e206000 {
2131 + /* Add label */
2132 + status = "disabled";
2133 + };
2134 +
2135 + pixelvalve1: pixelvalve@7e207000 {
2136 + /* Add label */
2137 + status = "disabled";
2138 + };
2139 +#endif
2140 +
2141 + /delete-node/ mmc@7e300000;
2142 +
2143 + sdhci: mmc: mmc@7e300000 {
2144 + compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
2145 + reg = <0x7e300000 0x100>;
2146 + interrupts = <2 30>;
2147 + clocks = <&clocks BCM2835_CLOCK_EMMC>;
2148 + dmas = <&dma 11>;
2149 + dma-names = "rx-tx";
2150 + brcm,overclock-50 = <0>;
2151 + status = "disabled";
2152 + };
2153 +
2154 + /* A clone of mmc but with non-removable set */
2155 + mmcnr: mmcnr@7e300000 {
2156 + compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
2157 + reg = <0x7e300000 0x100>;
2158 + interrupts = <2 30>;
2159 + clocks = <&clocks BCM2835_CLOCK_EMMC>;
2160 + dmas = <&dma 11>;
2161 + dma-names = "rx-tx";
2162 + brcm,overclock-50 = <0>;
2163 + non-removable;
2164 + status = "disabled";
2165 + };
2166 +
2167 + hvs: hvs@7e400000 {
2168 + /* Add label */
2169 + status = "disabled";
2170 + };
2171 +
2172 + firmwarekms: firmwarekms@7e600000 {
2173 + compatible = "raspberrypi,rpi-firmware-kms";
2174 + /* SMI interrupt reg */
2175 + reg = <0x7e600000 0x100>;
2176 + interrupts = <2 16>;
2177 + brcm,firmware = <&firmware>;
2178 + status = "disabled";
2179 + };
2180 +
2181 + smi: smi@7e600000 {
2182 + compatible = "brcm,bcm2835-smi";
2183 + reg = <0x7e600000 0x100>;
2184 + interrupts = <2 16>;
2185 + clocks = <&clocks BCM2835_CLOCK_SMI>;
2186 + assigned-clocks = <&clocks BCM2835_CLOCK_SMI>;
2187 + assigned-clock-rates = <125000000>;
2188 + dmas = <&dma 4>;
2189 + dma-names = "rx-tx";
2190 + status = "disabled";
2191 + };
2192 +
2193 + csi0: csi@7e800000 {
2194 + compatible = "brcm,bcm2835-unicam";
2195 + reg = <0x7e800000 0x800>,
2196 + <0x7e802000 0x4>;
2197 + interrupts = <2 6>;
2198 + clocks = <&clocks BCM2835_CLOCK_CAM0>,
2199 + <&firmware_clocks 4>;
2200 + clock-names = "lp", "vpu";
2201 + power-domains = <&power RPI_POWER_DOMAIN_UNICAM0>;
2202 + #address-cells = <1>;
2203 + #size-cells = <0>;
2204 + #clock-cells = <1>;
2205 + status = "disabled";
2206 + };
2207 +
2208 + csi1: csi@7e801000 {
2209 + compatible = "brcm,bcm2835-unicam";
2210 + reg = <0x7e801000 0x800>,
2211 + <0x7e802004 0x4>;
2212 + interrupts = <2 7>;
2213 + clocks = <&clocks BCM2835_CLOCK_CAM1>,
2214 + <&firmware_clocks 4>;
2215 + clock-names = "lp", "vpu";
2216 + power-domains = <&power RPI_POWER_DOMAIN_UNICAM1>;
2217 + #address-cells = <1>;
2218 + #size-cells = <0>;
2219 + #clock-cells = <1>;
2220 + status = "disabled";
2221 + };
2222 +
2223 +#ifndef BCM2711
2224 + pixelvalve2: pixelvalve@7e807000 {
2225 + /* Add label */
2226 + status = "disabled";
2227 + };
2228 +#endif
2229 +
2230 + hdmi@7e902000 { /* hdmi */
2231 + status = "disabled";
2232 + };
2233 +
2234 + usb@7e980000 { /* usb */
2235 + compatible = "brcm,bcm2708-usb";
2236 + reg = <0x7e980000 0x10000>,
2237 + <0x7e006000 0x1000>;
2238 + interrupt-names = "usb",
2239 + "soft";
2240 + interrupts = <1 9>,
2241 + <2 0>;
2242 + };
2243 +
2244 +#ifndef BCM2711
2245 + v3d@7ec00000 { /* vd3 */
2246 + compatible = "brcm,vc4-v3d";
2247 + power-domains = <&power RPI_POWER_DOMAIN_V3D>;
2248 + status = "disabled";
2249 + };
2250 +#endif
2251 +
2252 + axiperf: axiperf {
2253 + compatible = "brcm,bcm2835-axiperf";
2254 + reg = <0x7e009800 0x100>,
2255 + <0x7ee08000 0x100>;
2256 + firmware = <&firmware>;
2257 + status = "disabled";
2258 + };
2259 + };
2260 +
2261 + __overrides__ {
2262 + cam0-pwdn-ctrl;
2263 + cam0-pwdn;
2264 + cam0-led-ctrl;
2265 + cam0-led;
2266 + };
2267 +};
2268 +
2269 +&gpio {
2270 + interrupts = <2 17>, <2 18>;
2271 +
2272 + dpi_18bit_cpadhi_gpio0: dpi_18bit_cpadhi_gpio0 {
2273 + brcm,pins = <0 1 2 3 4 5 6 7 8 9
2274 + 12 13 14 15 16 17
2275 + 20 21 22 23 24 25>;
2276 + brcm,function = <BCM2835_FSEL_ALT2>;
2277 + brcm,pull = <0>; /* no pull */
2278 + };
2279 + dpi_18bit_cpadhi_gpio2: dpi_18bit_cpadhi_gpio2 {
2280 + brcm,pins = <2 3 4 5 6 7 8 9
2281 + 12 13 14 15 16 17
2282 + 20 21 22 23 24 25>;
2283 + brcm,function = <BCM2835_FSEL_ALT2>;
2284 + };
2285 + dpi_18bit_gpio0: dpi_18bit_gpio0 {
2286 + brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
2287 + 12 13 14 15 16 17 18 19
2288 + 20 21>;
2289 + brcm,function = <BCM2835_FSEL_ALT2>;
2290 + };
2291 + dpi_18bit_gpio2: dpi_18bit_gpio2 {
2292 + brcm,pins = <2 3 4 5 6 7 8 9 10 11
2293 + 12 13 14 15 16 17 18 19
2294 + 20 21>;
2295 + brcm,function = <BCM2835_FSEL_ALT2>;
2296 + };
2297 +};
2298 +
2299 +&uart0 {
2300 + /* Enable CTS bug workaround */
2301 + cts-event-workaround;
2302 +};
2303 +
2304 +&i2s {
2305 + #sound-dai-cells = <0>;
2306 + dmas = <&dma 2>, <&dma 3>;
2307 + dma-names = "tx", "rx";
2308 +};
2309 +
2310 +&sdhost {
2311 + dmas = <&dma (13|(1<<29))>;
2312 + dma-names = "rx-tx";
2313 + bus-width = <4>;
2314 + brcm,overclock-50 = <0>;
2315 + brcm,pio-limit = <1>;
2316 + firmware = <&firmware>;
2317 +};
2318 +
2319 +&spi0 {
2320 + dmas = <&dma 6>, <&dma 7>;
2321 + dma-names = "tx", "rx";
2322 +};
2323 diff --git a/arch/arm/boot/dts/bcm2710-rpi-2-b.dts b/arch/arm/boot/dts/bcm2710-rpi-2-b.dts
2324 new file mode 100644
2325 index 000000000000..ae9db1b1be1b
2326 --- /dev/null
2327 +++ b/arch/arm/boot/dts/bcm2710-rpi-2-b.dts
2328 @@ -0,0 +1,129 @@
2329 +/dts-v1/;
2330 +
2331 +#include "bcm2710.dtsi"
2332 +#include "bcm2709-rpi.dtsi"
2333 +#include "bcm283x-rpi-smsc9514.dtsi"
2334 +#include "bcm283x-rpi-csi1-2lane.dtsi"
2335 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
2336 +#include "bcm283x-rpi-cam1-regulator.dtsi"
2337 +
2338 +/ {
2339 + compatible = "raspberrypi,2-model-b-rev2", "brcm,bcm2837";
2340 + model = "Raspberry Pi 2 Model B rev 1.2";
2341 +};
2342 +
2343 +&gpio {
2344 + spi0_pins: spi0_pins {
2345 + brcm,pins = <9 10 11>;
2346 + brcm,function = <4>; /* alt0 */
2347 + };
2348 +
2349 + spi0_cs_pins: spi0_cs_pins {
2350 + brcm,pins = <8 7>;
2351 + brcm,function = <1>; /* output */
2352 + };
2353 +
2354 + i2c0_pins: i2c0 {
2355 + brcm,pins = <0 1>;
2356 + brcm,function = <4>;
2357 + };
2358 +
2359 + i2c1_pins: i2c1 {
2360 + brcm,pins = <2 3>;
2361 + brcm,function = <4>;
2362 + };
2363 +
2364 + i2s_pins: i2s {
2365 + brcm,pins = <18 19 20 21>;
2366 + brcm,function = <4>; /* alt0 */
2367 + };
2368 +
2369 + audio_pins: audio_pins {
2370 + brcm,pins = <40 45>;
2371 + brcm,function = <4>;
2372 + };
2373 +};
2374 +
2375 +&uart0 {
2376 + status = "okay";
2377 +};
2378 +
2379 +&spi0 {
2380 + pinctrl-names = "default";
2381 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
2382 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
2383 +
2384 + spidev0: spidev@0{
2385 + compatible = "spidev";
2386 + reg = <0>; /* CE0 */
2387 + #address-cells = <1>;
2388 + #size-cells = <0>;
2389 + spi-max-frequency = <125000000>;
2390 + };
2391 +
2392 + spidev1: spidev@1{
2393 + compatible = "spidev";
2394 + reg = <1>; /* CE1 */
2395 + #address-cells = <1>;
2396 + #size-cells = <0>;
2397 + spi-max-frequency = <125000000>;
2398 + };
2399 +};
2400 +
2401 +&i2c0if {
2402 + clock-frequency = <100000>;
2403 +};
2404 +
2405 +&i2c1 {
2406 + pinctrl-names = "default";
2407 + pinctrl-0 = <&i2c1_pins>;
2408 + clock-frequency = <100000>;
2409 +};
2410 +
2411 +&i2c2 {
2412 + clock-frequency = <100000>;
2413 +};
2414 +
2415 +&i2s {
2416 + pinctrl-names = "default";
2417 + pinctrl-0 = <&i2s_pins>;
2418 +};
2419 +
2420 +&leds {
2421 + act_led: led-act {
2422 + label = "led0";
2423 + linux,default-trigger = "mmc0";
2424 + gpios = <&gpio 47 0>;
2425 + };
2426 +
2427 + pwr_led: led-pwr {
2428 + label = "led1";
2429 + linux,default-trigger = "input";
2430 + gpios = <&gpio 35 0>;
2431 + };
2432 +};
2433 +
2434 +&hdmi {
2435 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
2436 +};
2437 +
2438 +&audio {
2439 + pinctrl-names = "default";
2440 + pinctrl-0 = <&audio_pins>;
2441 +};
2442 +
2443 +&cam1_reg {
2444 + gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
2445 +};
2446 +
2447 +/ {
2448 + __overrides__ {
2449 + act_led_gpio = <&act_led>,"gpios:4";
2450 + act_led_activelow = <&act_led>,"gpios:8";
2451 + act_led_trigger = <&act_led>,"linux,default-trigger";
2452 +
2453 + pwr_led_gpio = <&pwr_led>,"gpios:4";
2454 + pwr_led_activelow = <&pwr_led>,"gpios:8";
2455 + pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
2456 + };
2457 +};
2458 diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
2459 new file mode 100644
2460 index 000000000000..7e12c05cc28b
2461 --- /dev/null
2462 +++ b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
2463 @@ -0,0 +1,201 @@
2464 +/dts-v1/;
2465 +
2466 +#include "bcm2710.dtsi"
2467 +#include "bcm2709-rpi.dtsi"
2468 +#include "bcm283x-rpi-lan7515.dtsi"
2469 +#include "bcm283x-rpi-csi1-2lane.dtsi"
2470 +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
2471 +#include "bcm271x-rpi-bt.dtsi"
2472 +#include "bcm283x-rpi-cam1-regulator.dtsi"
2473 +
2474 +/ {
2475 + compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837";
2476 + model = "Raspberry Pi 3 Model B+";
2477 +
2478 + chosen {
2479 + bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
2480 + };
2481 +
2482 + aliases {
2483 + serial0 = &uart1;
2484 + serial1 = &uart0;
2485 + mmc1 = &mmcnr;
2486 + };
2487 +};
2488 +
2489 +&gpio {
2490 + spi0_pins: spi0_pins {
2491 + brcm,pins = <9 10 11>;
2492 + brcm,function = <4>; /* alt0 */
2493 + };
2494 +
2495 + spi0_cs_pins: spi0_cs_pins {
2496 + brcm,pins = <8 7>;
2497 + brcm,function = <1>; /* output */
2498 + };
2499 +
2500 + i2c0_pins: i2c0 {
2501 + brcm,pins = <0 1>;
2502 + brcm,function = <4>;
2503 + };
2504 +
2505 + i2c1_pins: i2c1 {
2506 + brcm,pins = <2 3>;
2507 + brcm,function = <4>;
2508 + };
2509 +
2510 + i2s_pins: i2s {
2511 + brcm,pins = <18 19 20 21>;
2512 + brcm,function = <4>; /* alt0 */
2513 + };
2514 +
2515 + sdio_pins: sdio_pins {
2516 + brcm,pins = <34 35 36 37 38 39>;
2517 + brcm,function = <7>; // alt3 = SD1
2518 + brcm,pull = <0 2 2 2 2 2>;
2519 + };
2520 +
2521 + bt_pins: bt_pins {
2522 + brcm,pins = <43>;
2523 + brcm,function = <4>; /* alt0:GPCLK2 */
2524 + brcm,pull = <0>;
2525 + };
2526 +
2527 + uart0_pins: uart0_pins {
2528 + brcm,pins = <32 33>;
2529 + brcm,function = <7>; /* alt3=UART0 */
2530 + brcm,pull = <0 2>;
2531 + };
2532 +
2533 + uart1_pins: uart1_pins {
2534 + brcm,pins;
2535 + brcm,function;
2536 + brcm,pull;
2537 + };
2538 +
2539 + audio_pins: audio_pins {
2540 + brcm,pins = <40 41>;
2541 + brcm,function = <4>;
2542 + };
2543 +};
2544 +
2545 +&mmcnr {
2546 + pinctrl-names = "default";
2547 + pinctrl-0 = <&sdio_pins>;
2548 + bus-width = <4>;
2549 + status = "okay";
2550 +};
2551 +
2552 +&firmware {
2553 + expgpio: expgpio {
2554 + compatible = "raspberrypi,firmware-gpio";
2555 + gpio-controller;
2556 + #gpio-cells = <2>;
2557 + status = "okay";
2558 + };
2559 +};
2560 +
2561 +&uart0 {
2562 + pinctrl-names = "default";
2563 + pinctrl-0 = <&uart0_pins &bt_pins>;
2564 + status = "okay";
2565 +};
2566 +
2567 +&uart1 {
2568 + pinctrl-names = "default";
2569 + pinctrl-0 = <&uart1_pins>;
2570 + status = "okay";
2571 +};
2572 +
2573 +&spi0 {
2574 + pinctrl-names = "default";
2575 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
2576 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
2577 +
2578 + spidev0: spidev@0{
2579 + compatible = "spidev";
2580 + reg = <0>; /* CE0 */
2581 + #address-cells = <1>;
2582 + #size-cells = <0>;
2583 + spi-max-frequency = <125000000>;
2584 + };
2585 +
2586 + spidev1: spidev@1{
2587 + compatible = "spidev";
2588 + reg = <1>; /* CE1 */
2589 + #address-cells = <1>;
2590 + #size-cells = <0>;
2591 + spi-max-frequency = <125000000>;
2592 + };
2593 +};
2594 +
2595 +&i2c0if {
2596 + clock-frequency = <100000>;
2597 +};
2598 +
2599 +&i2c1 {
2600 + pinctrl-names = "default";
2601 + pinctrl-0 = <&i2c1_pins>;
2602 + clock-frequency = <100000>;
2603 +};
2604 +
2605 +&i2c2 {
2606 + clock-frequency = <100000>;
2607 +};
2608 +
2609 +&i2s {
2610 + pinctrl-names = "default";
2611 + pinctrl-0 = <&i2s_pins>;
2612 +};
2613 +
2614 +&leds {
2615 + act_led: led-act {
2616 + label = "led0";
2617 + linux,default-trigger = "mmc0";
2618 + gpios = <&gpio 29 0>;
2619 + };
2620 +
2621 + pwr_led: led-pwr {
2622 + label = "led1";
2623 + linux,default-trigger = "default-on";
2624 + gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
2625 + };
2626 +};
2627 +
2628 +&hdmi {
2629 + hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
2630 +};
2631 +
2632 +&audio {
2633 + pinctrl-names = "default";
2634 + pinctrl-0 = <&audio_pins>;
2635 +};
2636 +
2637 +&eth_phy {
2638 + microchip,eee-enabled;
2639 + microchip,tx-lpi-timer = <600>; /* non-aggressive*/
2640 + microchip,downshift-after = <2>;
2641 +};
2642 +
2643 +&cam1_reg {
2644 + gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
2645 +};
2646 +
2647 +/ {
2648 + __overrides__ {
2649 + act_led_gpio = <&act_led>,"gpios:4";
2650 + act_led_activelow = <&act_led>,"gpios:8";
2651 + act_led_trigger = <&act_led>,"linux,default-trigger";
2652 +
2653 + pwr_led_gpio = <&pwr_led>,"gpios:4";
2654 + pwr_led_activelow = <&pwr_led>,"gpios:8";
2655 + pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
2656 +
2657 + eee = <&eth_phy>,"microchip,eee-enabled?";
2658 + tx_lpi_timer = <&eth_phy>,"microchip,tx-lpi-timer:0";
2659 + eth_led0 = <&eth_phy>,"microchip,led-modes:0";
2660 + eth_led1 = <&eth_phy>,"microchip,led-modes:4";
2661 + eth_downshift_after = <&eth_phy>,"microchip,downshift-after:0";
2662 + eth_max_speed = <&eth_phy>,"max-speed:0";
2663 + };
2664 +};
2665 diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
2666 new file mode 100644
2667 index 000000000000..d40722ddc286
2668 --- /dev/null
2669 +++ b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
2670 @@ -0,0 +1,203 @@
2671 +/dts-v1/;
2672 +
2673 +#include "bcm2710.dtsi"
2674 +#include "bcm2709-rpi.dtsi"
2675 +#include "bcm283x-rpi-smsc9514.dtsi"
2676 +#include "bcm283x-rpi-csi1-2lane.dtsi"
2677 +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
2678 +#include "bcm271x-rpi-bt.dtsi"
2679 +#include "bcm283x-rpi-cam1-regulator.dtsi"
2680 +
2681 +/ {
2682 + compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
2683 + model = "Raspberry Pi 3 Model B";
2684 +
2685 + chosen {
2686 + bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
2687 + };
2688 +
2689 + aliases {
2690 + serial0 = &uart1;
2691 + serial1 = &uart0;
2692 + mmc1 = &mmcnr;
2693 + };
2694 +};
2695 +
2696 +&gpio {
2697 + spi0_pins: spi0_pins {
2698 + brcm,pins = <9 10 11>;
2699 + brcm,function = <4>; /* alt0 */
2700 + };
2701 +
2702 + spi0_cs_pins: spi0_cs_pins {
2703 + brcm,pins = <8 7>;
2704 + brcm,function = <1>; /* output */
2705 + };
2706 +
2707 + i2c0_pins: i2c0 {
2708 + brcm,pins = <0 1>;
2709 + brcm,function = <4>;
2710 + };
2711 +
2712 + i2c1_pins: i2c1 {
2713 + brcm,pins = <2 3>;
2714 + brcm,function = <4>;
2715 + };
2716 +
2717 + i2s_pins: i2s {
2718 + brcm,pins = <18 19 20 21>;
2719 + brcm,function = <4>; /* alt0 */
2720 + };
2721 +
2722 + sdio_pins: sdio_pins {
2723 + brcm,pins = <34 35 36 37 38 39>;
2724 + brcm,function = <7>; // alt3 = SD1
2725 + brcm,pull = <0 2 2 2 2 2>;
2726 + };
2727 +
2728 + bt_pins: bt_pins {
2729 + brcm,pins = <43>;
2730 + brcm,function = <4>; /* alt0:GPCLK2 */
2731 + brcm,pull = <0>;
2732 + };
2733 +
2734 + uart0_pins: uart0_pins {
2735 + brcm,pins = <32 33>;
2736 + brcm,function = <7>; /* alt3=UART0 */
2737 + brcm,pull = <0 2>;
2738 + };
2739 +
2740 + uart1_pins: uart1_pins {
2741 + brcm,pins;
2742 + brcm,function;
2743 + brcm,pull;
2744 + };
2745 +
2746 + audio_pins: audio_pins {
2747 + brcm,pins = <40 41>;
2748 + brcm,function = <4>;
2749 + };
2750 +};
2751 +
2752 +&mmcnr {
2753 + pinctrl-names = "default";
2754 + pinctrl-0 = <&sdio_pins>;
2755 + bus-width = <4>;
2756 + status = "okay";
2757 +};
2758 +
2759 +&soc {
2760 + virtgpio: virtgpio {
2761 + compatible = "brcm,bcm2835-virtgpio";
2762 + gpio-controller;
2763 + #gpio-cells = <2>;
2764 + firmware = <&firmware>;
2765 + status = "okay";
2766 + };
2767 +
2768 +};
2769 +
2770 +&firmware {
2771 + expgpio: expgpio {
2772 + compatible = "raspberrypi,firmware-gpio";
2773 + gpio-controller;
2774 + #gpio-cells = <2>;
2775 + status = "okay";
2776 + };
2777 +};
2778 +
2779 +&uart0 {
2780 + pinctrl-names = "default";
2781 + pinctrl-0 = <&uart0_pins &bt_pins>;
2782 + status = "okay";
2783 +};
2784 +
2785 +&uart1 {
2786 + pinctrl-names = "default";
2787 + pinctrl-0 = <&uart1_pins>;
2788 + status = "okay";
2789 +};
2790 +
2791 +&bt {
2792 + max-speed = <921600>;
2793 +};
2794 +
2795 +&spi0 {
2796 + pinctrl-names = "default";
2797 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
2798 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
2799 +
2800 + spidev0: spidev@0{
2801 + compatible = "spidev";
2802 + reg = <0>; /* CE0 */
2803 + #address-cells = <1>;
2804 + #size-cells = <0>;
2805 + spi-max-frequency = <125000000>;
2806 + };
2807 +
2808 + spidev1: spidev@1{
2809 + compatible = "spidev";
2810 + reg = <1>; /* CE1 */
2811 + #address-cells = <1>;
2812 + #size-cells = <0>;
2813 + spi-max-frequency = <125000000>;
2814 + };
2815 +};
2816 +
2817 +&i2c0if {
2818 + clock-frequency = <100000>;
2819 +};
2820 +
2821 +&i2c1 {
2822 + pinctrl-names = "default";
2823 + pinctrl-0 = <&i2c1_pins>;
2824 + clock-frequency = <100000>;
2825 +};
2826 +
2827 +&i2c2 {
2828 + clock-frequency = <100000>;
2829 +};
2830 +
2831 +&i2s {
2832 + pinctrl-names = "default";
2833 + pinctrl-0 = <&i2s_pins>;
2834 +};
2835 +
2836 +&leds {
2837 + act_led: led-act {
2838 + label = "led0";
2839 + linux,default-trigger = "mmc0";
2840 + gpios = <&virtgpio 0 0>;
2841 + };
2842 +
2843 + pwr_led: led-pwr {
2844 + label = "led1";
2845 + linux,default-trigger = "input";
2846 + gpios = <&expgpio 7 0>;
2847 + };
2848 +};
2849 +
2850 +&hdmi {
2851 + hpd-gpios = <&expgpio 4 GPIO_ACTIVE_LOW>;
2852 +};
2853 +
2854 +&audio {
2855 + pinctrl-names = "default";
2856 + pinctrl-0 = <&audio_pins>;
2857 +};
2858 +
2859 +&cam1_reg {
2860 + gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
2861 +};
2862 +
2863 +/ {
2864 + __overrides__ {
2865 + act_led_gpio = <&act_led>,"gpios:4";
2866 + act_led_activelow = <&act_led>,"gpios:8";
2867 + act_led_trigger = <&act_led>,"linux,default-trigger";
2868 +
2869 + pwr_led_gpio = <&pwr_led>,"gpios:4";
2870 + pwr_led_activelow = <&pwr_led>,"gpios:8";
2871 + pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
2872 + };
2873 +};
2874 diff --git a/arch/arm/boot/dts/bcm2710-rpi-cm3.dts b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
2875 new file mode 100644
2876 index 000000000000..c386a855cdc3
2877 --- /dev/null
2878 +++ b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
2879 @@ -0,0 +1,148 @@
2880 +/dts-v1/;
2881 +
2882 +#include "bcm2710.dtsi"
2883 +#include "bcm2709-rpi.dtsi"
2884 +#include "bcm283x-rpi-csi0-2lane.dtsi"
2885 +#include "bcm283x-rpi-csi1-4lane.dtsi"
2886 +#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
2887 +/ {
2888 + compatible = "raspberrypi,3-compute-module", "brcm,bcm2837";
2889 + model = "Raspberry Pi Compute Module 3";
2890 +
2891 + cam1_reg: cam1_reg {
2892 + compatible = "regulator-fixed";
2893 + regulator-name = "cam1-regulator";
2894 + gpio = <&gpio 2 GPIO_ACTIVE_HIGH>;
2895 + enable-active-high;
2896 + status = "disabled";
2897 + };
2898 + cam0_reg: cam0_reg {
2899 + compatible = "regulator-fixed";
2900 + regulator-name = "cam0-regulator";
2901 + gpio = <&gpio 30 GPIO_ACTIVE_HIGH>;
2902 + enable-active-high;
2903 + status = "disabled";
2904 + };
2905 +};
2906 +
2907 +&uart0 {
2908 + status = "okay";
2909 +};
2910 +
2911 +&gpio {
2912 + spi0_pins: spi0_pins {
2913 + brcm,pins = <9 10 11>;
2914 + brcm,function = <4>; /* alt0 */
2915 + };
2916 +
2917 + spi0_cs_pins: spi0_cs_pins {
2918 + brcm,pins = <8 7>;
2919 + brcm,function = <1>; /* output */
2920 + };
2921 +
2922 + i2c0_pins: i2c0 {
2923 + brcm,pins = <0 1>;
2924 + brcm,function = <4>;
2925 + };
2926 +
2927 + i2c1_pins: i2c1 {
2928 + brcm,pins = <2 3>;
2929 + brcm,function = <4>;
2930 + };
2931 +
2932 + i2s_pins: i2s {
2933 + brcm,pins = <18 19 20 21>;
2934 + brcm,function = <4>; /* alt0 */
2935 + };
2936 +
2937 + audio_pins: audio_pins {
2938 + brcm,pins;
2939 + brcm,function;
2940 + };
2941 +};
2942 +
2943 +&soc {
2944 + virtgpio: virtgpio {
2945 + compatible = "brcm,bcm2835-virtgpio";
2946 + gpio-controller;
2947 + #gpio-cells = <2>;
2948 + firmware = <&firmware>;
2949 + status = "okay";
2950 + };
2951 +
2952 +};
2953 +
2954 +&firmware {
2955 + expgpio: expgpio {
2956 + compatible = "raspberrypi,firmware-gpio";
2957 + gpio-controller;
2958 + #gpio-cells = <2>;
2959 + status = "okay";
2960 + };
2961 +};
2962 +
2963 +&spi0 {
2964 + pinctrl-names = "default";
2965 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
2966 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
2967 +
2968 + spidev0: spidev@0{
2969 + compatible = "spidev";
2970 + reg = <0>; /* CE0 */
2971 + #address-cells = <1>;
2972 + #size-cells = <0>;
2973 + spi-max-frequency = <125000000>;
2974 + };
2975 +
2976 + spidev1: spidev@1{
2977 + compatible = "spidev";
2978 + reg = <1>; /* CE1 */
2979 + #address-cells = <1>;
2980 + #size-cells = <0>;
2981 + spi-max-frequency = <125000000>;
2982 + };
2983 +};
2984 +
2985 +&i2c0if {
2986 + clock-frequency = <100000>;
2987 +};
2988 +
2989 +&i2c1 {
2990 + pinctrl-names = "default";
2991 + pinctrl-0 = <&i2c1_pins>;
2992 + clock-frequency = <100000>;
2993 +};
2994 +
2995 +&i2c2 {
2996 + clock-frequency = <100000>;
2997 +};
2998 +
2999 +&i2s {
3000 + pinctrl-names = "default";
3001 + pinctrl-0 = <&i2s_pins>;
3002 +};
3003 +
3004 +&leds {
3005 + act_led: led-act {
3006 + label = "led0";
3007 + linux,default-trigger = "mmc0";
3008 + gpios = <&virtgpio 0 0>;
3009 + };
3010 +};
3011 +
3012 +&hdmi {
3013 + hpd-gpios = <&expgpio 0 GPIO_ACTIVE_LOW>;
3014 +};
3015 +
3016 +&audio {
3017 + pinctrl-names = "default";
3018 + pinctrl-0 = <&audio_pins>;
3019 +};
3020 +
3021 +/ {
3022 + __overrides__ {
3023 + act_led_gpio = <&act_led>,"gpios:4";
3024 + act_led_activelow = <&act_led>,"gpios:8";
3025 + act_led_trigger = <&act_led>,"linux,default-trigger";
3026 + };
3027 +};
3028 diff --git a/arch/arm/boot/dts/bcm2710.dtsi b/arch/arm/boot/dts/bcm2710.dtsi
3029 new file mode 100644
3030 index 000000000000..e7e5c913f1d1
3031 --- /dev/null
3032 +++ b/arch/arm/boot/dts/bcm2710.dtsi
3033 @@ -0,0 +1,25 @@
3034 +#include "bcm2837.dtsi"
3035 +#include "bcm270x.dtsi"
3036 +
3037 +/ {
3038 + compatible = "brcm,bcm2837", "brcm,bcm2836";
3039 +
3040 + arm-pmu {
3041 + compatible = "arm,cortex-a53-pmu", "arm,cortex-a7-pmu";
3042 + };
3043 +
3044 + soc {
3045 + /delete-node/ timer@7e003000;
3046 + };
3047 +
3048 + __overrides__ {
3049 + arm_freq = <&cpu0>, "clock-frequency:0",
3050 + <&cpu1>, "clock-frequency:0",
3051 + <&cpu2>, "clock-frequency:0",
3052 + <&cpu3>, "clock-frequency:0";
3053 + };
3054 +};
3055 +
3056 +&vc4 {
3057 + status = "disabled";
3058 +};
3059 diff --git a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
3060 index 72ce80fbf266..f6e0247f7d1b 100644
3061 --- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
3062 +++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
3063 @@ -2,7 +2,7 @@
3064 /dts-v1/;
3065 #include "bcm2711.dtsi"
3066 #include "bcm2711-rpi.dtsi"
3067 -#include "bcm283x-rpi-usb-peripheral.dtsi"
3068 +//#include "bcm283x-rpi-usb-peripheral.dtsi"
3069
3070 / {
3071 compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
3072 @@ -72,7 +72,7 @@ &expgpio {
3073 "VDD_SD_IO_SEL",
3074 "CAM_GPIO",
3075 "SD_PWR_ON",
3076 - "";
3077 + "SD_OC_N";
3078 };
3079
3080 &gpio {
3081 @@ -260,3 +260,309 @@ &vc4 {
3082 &vec {
3083 status = "disabled";
3084 };
3085 +
3086 +// =============================================
3087 +// Downstream rpi- changes
3088 +
3089 +#define BCM2711
3090 +
3091 +#include "bcm270x.dtsi"
3092 +#include "bcm271x-rpi-bt.dtsi"
3093 +
3094 +/ {
3095 + soc {
3096 + /delete-node/ pixelvalve@7e807000;
3097 + /delete-node/ hdmi@7e902000;
3098 + };
3099 +};
3100 +
3101 +#include "bcm2711-rpi-ds.dtsi"
3102 +#include "bcm283x-rpi-csi1-2lane.dtsi"
3103 +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
3104 +#include "bcm283x-rpi-cam1-regulator.dtsi"
3105 +
3106 +/ {
3107 + chosen {
3108 + bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
3109 + };
3110 +
3111 + aliases {
3112 + serial0 = &uart1;
3113 + serial1 = &uart0;
3114 + mmc0 = &emmc2;
3115 + mmc1 = &mmcnr;
3116 + mmc2 = &sdhost;
3117 + i2c3 = &i2c3;
3118 + i2c4 = &i2c4;
3119 + i2c5 = &i2c5;
3120 + i2c6 = &i2c6;
3121 + i2c20 = &ddc0;
3122 + i2c21 = &ddc1;
3123 + spi3 = &spi3;
3124 + spi4 = &spi4;
3125 + spi5 = &spi5;
3126 + spi6 = &spi6;
3127 + /delete-property/ intc;
3128 + };
3129 +
3130 + /delete-node/ wifi-pwrseq;
3131 +};
3132 +
3133 +&mmcnr {
3134 + pinctrl-names = "default";
3135 + pinctrl-0 = <&sdio_pins>;
3136 + bus-width = <4>;
3137 + status = "okay";
3138 +};
3139 +
3140 +&uart0 {
3141 + pinctrl-0 = <&uart0_pins &bt_pins>;
3142 + status = "okay";
3143 +};
3144 +
3145 +&uart1 {
3146 + pinctrl-0 = <&uart1_pins>;
3147 +};
3148 +
3149 +&spi0 {
3150 + pinctrl-names = "default";
3151 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
3152 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
3153 +
3154 + spidev0: spidev@0{
3155 + compatible = "spidev";
3156 + reg = <0>; /* CE0 */
3157 + #address-cells = <1>;
3158 + #size-cells = <0>;
3159 + spi-max-frequency = <125000000>;
3160 + };
3161 +
3162 + spidev1: spidev@1{
3163 + compatible = "spidev";
3164 + reg = <1>; /* CE1 */
3165 + #address-cells = <1>;
3166 + #size-cells = <0>;
3167 + spi-max-frequency = <125000000>;
3168 + };
3169 +};
3170 +
3171 +&gpio {
3172 + spi0_pins: spi0_pins {
3173 + brcm,pins = <9 10 11>;
3174 + brcm,function = <BCM2835_FSEL_ALT0>;
3175 + };
3176 +
3177 + spi0_cs_pins: spi0_cs_pins {
3178 + brcm,pins = <8 7>;
3179 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3180 + };
3181 +
3182 + spi3_pins: spi3_pins {
3183 + brcm,pins = <1 2 3>;
3184 + brcm,function = <BCM2835_FSEL_ALT3>;
3185 + };
3186 +
3187 + spi3_cs_pins: spi3_cs_pins {
3188 + brcm,pins = <0 24>;
3189 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3190 + };
3191 +
3192 + spi4_pins: spi4_pins {
3193 + brcm,pins = <5 6 7>;
3194 + brcm,function = <BCM2835_FSEL_ALT3>;
3195 + };
3196 +
3197 + spi4_cs_pins: spi4_cs_pins {
3198 + brcm,pins = <4 25>;
3199 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3200 + };
3201 +
3202 + spi5_pins: spi5_pins {
3203 + brcm,pins = <13 14 15>;
3204 + brcm,function = <BCM2835_FSEL_ALT3>;
3205 + };
3206 +
3207 + spi5_cs_pins: spi5_cs_pins {
3208 + brcm,pins = <12 26>;
3209 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3210 + };
3211 +
3212 + spi6_pins: spi6_pins {
3213 + brcm,pins = <19 20 21>;
3214 + brcm,function = <BCM2835_FSEL_ALT3>;
3215 + };
3216 +
3217 + spi6_cs_pins: spi6_cs_pins {
3218 + brcm,pins = <18 27>;
3219 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3220 + };
3221 +
3222 + i2c0_pins: i2c0 {
3223 + brcm,pins = <0 1>;
3224 + brcm,function = <BCM2835_FSEL_ALT0>;
3225 + brcm,pull = <BCM2835_PUD_UP>;
3226 + };
3227 +
3228 + i2c1_pins: i2c1 {
3229 + brcm,pins = <2 3>;
3230 + brcm,function = <BCM2835_FSEL_ALT0>;
3231 + brcm,pull = <BCM2835_PUD_UP>;
3232 + };
3233 +
3234 + i2c3_pins: i2c3 {
3235 + brcm,pins = <4 5>;
3236 + brcm,function = <BCM2835_FSEL_ALT5>;
3237 + brcm,pull = <BCM2835_PUD_UP>;
3238 + };
3239 +
3240 + i2c4_pins: i2c4 {
3241 + brcm,pins = <8 9>;
3242 + brcm,function = <BCM2835_FSEL_ALT5>;
3243 + brcm,pull = <BCM2835_PUD_UP>;
3244 + };
3245 +
3246 + i2c5_pins: i2c5 {
3247 + brcm,pins = <12 13>;
3248 + brcm,function = <BCM2835_FSEL_ALT5>;
3249 + brcm,pull = <BCM2835_PUD_UP>;
3250 + };
3251 +
3252 + i2c6_pins: i2c6 {
3253 + brcm,pins = <22 23>;
3254 + brcm,function = <BCM2835_FSEL_ALT5>;
3255 + brcm,pull = <BCM2835_PUD_UP>;
3256 + };
3257 +
3258 + i2s_pins: i2s {
3259 + brcm,pins = <18 19 20 21>;
3260 + brcm,function = <BCM2835_FSEL_ALT0>;
3261 + };
3262 +
3263 + sdio_pins: sdio_pins {
3264 + brcm,pins = <34 35 36 37 38 39>;
3265 + brcm,function = <BCM2835_FSEL_ALT3>; // alt3 = SD1
3266 + brcm,pull = <0 2 2 2 2 2>;
3267 + };
3268 +
3269 + bt_pins: bt_pins {
3270 + brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0
3271 + // to fool pinctrl
3272 + brcm,function = <0>;
3273 + brcm,pull = <2>;
3274 + };
3275 +
3276 + uart0_pins: uart0_pins {
3277 + brcm,pins = <32 33>;
3278 + brcm,function = <BCM2835_FSEL_ALT3>;
3279 + brcm,pull = <0 2>;
3280 + };
3281 +
3282 + uart1_pins: uart1_pins {
3283 + brcm,pins;
3284 + brcm,function;
3285 + brcm,pull;
3286 + };
3287 +
3288 + uart2_pins: uart2_pins {
3289 + brcm,pins = <0 1>;
3290 + brcm,function = <BCM2835_FSEL_ALT4>;
3291 + brcm,pull = <0 2>;
3292 + };
3293 +
3294 + uart3_pins: uart3_pins {
3295 + brcm,pins = <4 5>;
3296 + brcm,function = <BCM2835_FSEL_ALT4>;
3297 + brcm,pull = <0 2>;
3298 + };
3299 +
3300 + uart4_pins: uart4_pins {
3301 + brcm,pins = <8 9>;
3302 + brcm,function = <BCM2835_FSEL_ALT4>;
3303 + brcm,pull = <0 2>;
3304 + };
3305 +
3306 + uart5_pins: uart5_pins {
3307 + brcm,pins = <12 13>;
3308 + brcm,function = <BCM2835_FSEL_ALT4>;
3309 + brcm,pull = <0 2>;
3310 + };
3311 +};
3312 +
3313 +&i2c0if {
3314 + clock-frequency = <100000>;
3315 +};
3316 +
3317 +&i2c1 {
3318 + pinctrl-names = "default";
3319 + pinctrl-0 = <&i2c1_pins>;
3320 + clock-frequency = <100000>;
3321 +};
3322 +
3323 +&i2s {
3324 + pinctrl-names = "default";
3325 + pinctrl-0 = <&i2s_pins>;
3326 +};
3327 +
3328 +// =============================================
3329 +// Board specific stuff here
3330 +
3331 +&sdhost {
3332 + status = "disabled";
3333 +};
3334 +
3335 +&phy1 {
3336 + led-modes = <0x00 0x08>; /* link/activity link */
3337 +};
3338 +
3339 +&gpio {
3340 + audio_pins: audio_pins {
3341 + brcm,pins = <40 41>;
3342 + brcm,function = <4>;
3343 + };
3344 +};
3345 +
3346 +&leds {
3347 + act_led: led-act {
3348 + label = "led0";
3349 + linux,default-trigger = "mmc0";
3350 + gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
3351 + };
3352 +
3353 + pwr_led: led-pwr {
3354 + label = "led1";
3355 + linux,default-trigger = "default-on";
3356 + gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
3357 + };
3358 +};
3359 +
3360 +&pwm1 {
3361 + status = "disabled";
3362 +};
3363 +
3364 +&audio {
3365 + pinctrl-names = "default";
3366 + pinctrl-0 = <&audio_pins>;
3367 +};
3368 +
3369 +&cam1_reg {
3370 + gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
3371 +};
3372 +
3373 +/ {
3374 + __overrides__ {
3375 + act_led_gpio = <&act_led>,"gpios:4";
3376 + act_led_activelow = <&act_led>,"gpios:8";
3377 + act_led_trigger = <&act_led>,"linux,default-trigger";
3378 +
3379 + pwr_led_gpio = <&pwr_led>,"gpios:4";
3380 + pwr_led_activelow = <&pwr_led>,"gpios:8";
3381 + pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
3382 +
3383 + eth_led0 = <&phy1>,"led-modes:0";
3384 + eth_led1 = <&phy1>,"led-modes:4";
3385 +
3386 + sd_poll_once = <&emmc2>, "non-removable?";
3387 + spi_dma4 = <&spi0>, "dmas:0=", <&dma40>,
3388 + <&spi0>, "dmas:8=", <&dma40>;
3389 + };
3390 +};
3391 diff --git a/arch/arm/boot/dts/bcm2711-rpi-400.dts b/arch/arm/boot/dts/bcm2711-rpi-400.dts
3392 index f4d2fc20397c..bed192b085df 100644
3393 --- a/arch/arm/boot/dts/bcm2711-rpi-400.dts
3394 +++ b/arch/arm/boot/dts/bcm2711-rpi-400.dts
3395 @@ -1,6 +1,9 @@
3396 // SPDX-License-Identifier: GPL-2.0
3397 /dts-v1/;
3398 -#include "bcm2711-rpi-4-b.dts"
3399 +#include "bcm2711.dtsi"
3400 +#include "bcm2835-rpi.dtsi"
3401 +
3402 +#include <dt-bindings/reset/raspberrypi,firmware-reset.h>
3403
3404 / {
3405 compatible = "raspberrypi,400", "brcm,bcm2711";
3406 @@ -11,35 +14,624 @@ chosen {
3407 stdout-path = "serial1:115200n8";
3408 };
3409
3410 + /* Will be filled by the bootloader */
3411 + memory@0 {
3412 + device_type = "memory";
3413 + reg = <0 0 0>;
3414 + };
3415 +
3416 + aliases {
3417 + emmc2bus = &emmc2bus;
3418 + ethernet0 = &genet;
3419 + pcie0 = &pcie0;
3420 + blconfig = &blconfig;
3421 + };
3422 +
3423 leds {
3424 - /delete-node/ led-act;
3425 + led-act {
3426 + gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
3427 + };
3428
3429 led-pwr {
3430 - gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
3431 + label = "PWR";
3432 + gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
3433 + default-state = "keep";
3434 + linux,default-trigger = "default-on";
3435 + };
3436 + };
3437 +
3438 + wifi_pwrseq: wifi-pwrseq {
3439 + compatible = "mmc-pwrseq-simple";
3440 + reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
3441 + };
3442 +
3443 + sd_io_1v8_reg: sd_io_1v8_reg {
3444 + compatible = "regulator-gpio";
3445 + regulator-name = "vdd-sd-io";
3446 + regulator-min-microvolt = <1800000>;
3447 + regulator-max-microvolt = <3300000>;
3448 + regulator-boot-on;
3449 + regulator-always-on;
3450 + regulator-settling-time-us = <5000>;
3451 + gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
3452 + states = <1800000 0x1
3453 + 3300000 0x0>;
3454 + status = "okay";
3455 + };
3456 +
3457 + sd_vcc_reg: sd_vcc_reg {
3458 + compatible = "regulator-fixed";
3459 + regulator-name = "vcc-sd";
3460 + regulator-min-microvolt = <3300000>;
3461 + regulator-max-microvolt = <3300000>;
3462 + regulator-boot-on;
3463 + enable-active-high;
3464 + gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>;
3465 + };
3466 +};
3467 +
3468 +&ddc0 {
3469 + status = "okay";
3470 +};
3471 +
3472 +&ddc1 {
3473 + status = "okay";
3474 +};
3475 +
3476 +&firmware {
3477 + firmware_clocks: clocks {
3478 + compatible = "raspberrypi,firmware-clocks";
3479 + #clock-cells = <1>;
3480 + };
3481 +
3482 + expgpio: gpio {
3483 + compatible = "raspberrypi,firmware-gpio";
3484 + gpio-controller;
3485 + #gpio-cells = <2>;
3486 + gpio-line-names = "BT_ON",
3487 + "WL_ON",
3488 + "PWR_LED_OFF",
3489 + "GLOBAL_RESET",
3490 + "VDD_SD_IO_SEL",
3491 + "CAM_GPIO",
3492 + "SD_PWR_ON",
3493 + "SD_OC_N";
3494 + status = "okay";
3495 + };
3496 +
3497 + reset: reset {
3498 + compatible = "raspberrypi,firmware-reset";
3499 + #reset-cells = <1>;
3500 + };
3501 +};
3502 +
3503 +&gpio {
3504 + /*
3505 + * Parts taken from rpi_SCH_4b_4p0_reduced.pdf and
3506 + * the official GPU firmware DT blob.
3507 + *
3508 + * Legend:
3509 + * "FOO" = GPIO line named "FOO" on the schematic
3510 + * "FOO_N" = GPIO line named "FOO" on schematic, active low
3511 + */
3512 + gpio-line-names = "ID_SDA",
3513 + "ID_SCL",
3514 + "SDA1",
3515 + "SCL1",
3516 + "GPIO_GCLK",
3517 + "GPIO5",
3518 + "GPIO6",
3519 + "SPI_CE1_N",
3520 + "SPI_CE0_N",
3521 + "SPI_MISO",
3522 + "SPI_MOSI",
3523 + "SPI_SCLK",
3524 + "GPIO12",
3525 + "GPIO13",
3526 + /* Serial port */
3527 + "TXD1",
3528 + "RXD1",
3529 + "GPIO16",
3530 + "GPIO17",
3531 + "GPIO18",
3532 + "GPIO19",
3533 + "GPIO20",
3534 + "GPIO21",
3535 + "GPIO22",
3536 + "GPIO23",
3537 + "GPIO24",
3538 + "GPIO25",
3539 + "GPIO26",
3540 + "GPIO27",
3541 + "RGMII_MDIO",
3542 + "RGMIO_MDC",
3543 + /* Used by BT module */
3544 + "CTS0",
3545 + "RTS0",
3546 + "TXD0",
3547 + "RXD0",
3548 + /* Used by Wifi */
3549 + "SD1_CLK",
3550 + "SD1_CMD",
3551 + "SD1_DATA0",
3552 + "SD1_DATA1",
3553 + "SD1_DATA2",
3554 + "SD1_DATA3",
3555 + /* Shared with SPI flash */
3556 + "PWM0_MISO",
3557 + "PWM1_MOSI",
3558 + "STATUS_LED_G_CLK",
3559 + "SPIFLASH_CE_N",
3560 + "SDA0",
3561 + "SCL0",
3562 + "RGMII_RXCLK",
3563 + "RGMII_RXCTL",
3564 + "RGMII_RXD0",
3565 + "RGMII_RXD1",
3566 + "RGMII_RXD2",
3567 + "RGMII_RXD3",
3568 + "RGMII_TXCLK",
3569 + "RGMII_TXCTL",
3570 + "RGMII_TXD0",
3571 + "RGMII_TXD1",
3572 + "RGMII_TXD2",
3573 + "RGMII_TXD3";
3574 +};
3575 +
3576 +&hdmi0 {
3577 + clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
3578 + clock-names = "hdmi", "bvb", "audio", "cec";
3579 + wifi-2.4ghz-coexistence;
3580 + status = "okay";
3581 +};
3582 +
3583 +&hdmi1 {
3584 + clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
3585 + clock-names = "hdmi", "bvb", "audio", "cec";
3586 + wifi-2.4ghz-coexistence;
3587 + status = "okay";
3588 +};
3589 +
3590 +&hvs {
3591 + clocks = <&firmware_clocks 4>;
3592 +};
3593 +
3594 +&pixelvalve0 {
3595 + status = "okay";
3596 +};
3597 +
3598 +&pixelvalve1 {
3599 + status = "okay";
3600 +};
3601 +
3602 +&pixelvalve2 {
3603 + status = "okay";
3604 +};
3605 +
3606 +&pixelvalve4 {
3607 + status = "okay";
3608 +};
3609 +
3610 +&pwm1 {
3611 + pinctrl-names = "default";
3612 + pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>;
3613 + status = "okay";
3614 +};
3615 +
3616 +&rmem {
3617 + /*
3618 + * RPi4's co-processor will copy the board's bootloader configuration
3619 + * into memory for the OS to consume. It'll also update this node with
3620 + * its placement information.
3621 + */
3622 + blconfig: nvram@0 {
3623 + compatible = "raspberrypi,bootloader-config", "nvmem-rmem";
3624 + #address-cells = <1>;
3625 + #size-cells = <1>;
3626 + reg = <0x0 0x0 0x0>;
3627 + no-map;
3628 + status = "disabled";
3629 + };
3630 +};
3631 +
3632 +/* SDHCI is used to control the SDIO for wireless */
3633 +&sdhci {
3634 + #address-cells = <1>;
3635 + #size-cells = <0>;
3636 + pinctrl-names = "default";
3637 + pinctrl-0 = <&emmc_gpio34>;
3638 + bus-width = <4>;
3639 + non-removable;
3640 + mmc-pwrseq = <&wifi_pwrseq>;
3641 + status = "okay";
3642 +
3643 + brcmf: wifi@1 {
3644 + reg = <1>;
3645 + compatible = "brcm,bcm4329-fmac";
3646 + };
3647 +};
3648 +
3649 +/* EMMC2 is used to drive the SD card */
3650 +&emmc2 {
3651 + vqmmc-supply = <&sd_io_1v8_reg>;
3652 + vmmc-supply = <&sd_vcc_reg>;
3653 + broken-cd;
3654 + status = "okay";
3655 +};
3656 +
3657 +&genet {
3658 + phy-handle = <&phy1>;
3659 + phy-mode = "rgmii-rxid";
3660 + status = "okay";
3661 +};
3662 +
3663 +&genet_mdio {
3664 + phy1: ethernet-phy@1 {
3665 + /* No PHY interrupt */
3666 + reg = <0x1>;
3667 + };
3668 +};
3669 +
3670 +&pcie0 {
3671 + pci@0,0 {
3672 + device-type = "pci";
3673 + #address-cells = <3>;
3674 + #size-cells = <2>;
3675 + ranges;
3676 +
3677 + reg = <0 0 0 0 0>;
3678 +
3679 + usb@0,0 {
3680 + reg = <0x0 0 0 0 0>;
3681 + resets = <&reset RASPBERRYPI_FIRMWARE_RESET_ID_USB>;
3682 };
3683 };
3684 +};
3685 +
3686 +/* uart0 communicates with the BT module */
3687 +&uart0 {
3688 + pinctrl-names = "default";
3689 + pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
3690 + uart-has-rtscts;
3691 + status = "okay";
3692 +
3693 + bluetooth {
3694 + compatible = "brcm,bcm43438-bt";
3695 + max-speed = <2000000>;
3696 + shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
3697 + };
3698 +};
3699 +
3700 +/* uart1 is mapped to the pin header */
3701 +&uart1 {
3702 + pinctrl-names = "default";
3703 + pinctrl-0 = <&uart1_gpio14>;
3704 + status = "okay";
3705 +};
3706 +
3707 +&vchiq {
3708 + interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
3709 +};
3710 +
3711 +&vc4 {
3712 + status = "okay";
3713 +};
3714 +
3715 +&vec {
3716 + status = "disabled";
3717 +};
3718 +
3719 +// =============================================
3720 +// Downstream rpi- changes
3721 +
3722 +#define BCM2711
3723 +
3724 +#include "bcm270x.dtsi"
3725 +#include "bcm271x-rpi-bt.dtsi"
3726 +
3727 +/ {
3728 + soc {
3729 + /delete-node/ pixelvalve@7e807000;
3730 + /delete-node/ hdmi@7e902000;
3731 + };
3732 +};
3733
3734 - gpio-poweroff {
3735 +#include "bcm2711-rpi-ds.dtsi"
3736 +#include "bcm283x-rpi-csi1-2lane.dtsi"
3737 +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
3738 +
3739 +/ {
3740 + chosen {
3741 + bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
3742 + };
3743 +
3744 + aliases {
3745 + serial0 = &uart1;
3746 + serial1 = &uart0;
3747 + mmc0 = &emmc2;
3748 + mmc1 = &mmcnr;
3749 + mmc2 = &sdhost;
3750 + i2c3 = &i2c3;
3751 + i2c4 = &i2c4;
3752 + i2c5 = &i2c5;
3753 + i2c6 = &i2c6;
3754 + i2c20 = &ddc0;
3755 + i2c21 = &ddc1;
3756 + spi3 = &spi3;
3757 + spi4 = &spi4;
3758 + spi5 = &spi5;
3759 + spi6 = &spi6;
3760 + /delete-property/ intc;
3761 + };
3762 +
3763 + /delete-node/ wifi-pwrseq;
3764 +};
3765 +
3766 +&mmcnr {
3767 + pinctrl-names = "default";
3768 + pinctrl-0 = <&sdio_pins>;
3769 + bus-width = <4>;
3770 + status = "okay";
3771 +};
3772 +
3773 +&uart0 {
3774 + pinctrl-0 = <&uart0_pins &bt_pins>;
3775 + status = "okay";
3776 +};
3777 +
3778 +&uart1 {
3779 + pinctrl-0 = <&uart1_pins>;
3780 +};
3781 +
3782 +&spi0 {
3783 + pinctrl-names = "default";
3784 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
3785 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
3786 +
3787 + spidev0: spidev@0{
3788 + compatible = "spidev";
3789 + reg = <0>; /* CE0 */
3790 + #address-cells = <1>;
3791 + #size-cells = <0>;
3792 + spi-max-frequency = <125000000>;
3793 + };
3794 +
3795 + spidev1: spidev@1{
3796 + compatible = "spidev";
3797 + reg = <1>; /* CE1 */
3798 + #address-cells = <1>;
3799 + #size-cells = <0>;
3800 + spi-max-frequency = <125000000>;
3801 + };
3802 +};
3803 +
3804 +&gpio {
3805 + spi0_pins: spi0_pins {
3806 + brcm,pins = <9 10 11>;
3807 + brcm,function = <BCM2835_FSEL_ALT0>;
3808 + };
3809 +
3810 + spi0_cs_pins: spi0_cs_pins {
3811 + brcm,pins = <8 7>;
3812 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3813 + };
3814 +
3815 + spi3_pins: spi3_pins {
3816 + brcm,pins = <1 2 3>;
3817 + brcm,function = <BCM2835_FSEL_ALT3>;
3818 + };
3819 +
3820 + spi3_cs_pins: spi3_cs_pins {
3821 + brcm,pins = <0 24>;
3822 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3823 + };
3824 +
3825 + spi4_pins: spi4_pins {
3826 + brcm,pins = <5 6 7>;
3827 + brcm,function = <BCM2835_FSEL_ALT3>;
3828 + };
3829 +
3830 + spi4_cs_pins: spi4_cs_pins {
3831 + brcm,pins = <4 25>;
3832 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3833 + };
3834 +
3835 + spi5_pins: spi5_pins {
3836 + brcm,pins = <13 14 15>;
3837 + brcm,function = <BCM2835_FSEL_ALT3>;
3838 + };
3839 +
3840 + spi5_cs_pins: spi5_cs_pins {
3841 + brcm,pins = <12 26>;
3842 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3843 + };
3844 +
3845 + spi6_pins: spi6_pins {
3846 + brcm,pins = <19 20 21>;
3847 + brcm,function = <BCM2835_FSEL_ALT3>;
3848 + };
3849 +
3850 + spi6_cs_pins: spi6_cs_pins {
3851 + brcm,pins = <18 27>;
3852 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
3853 + };
3854 +
3855 + i2c0_pins: i2c0 {
3856 + brcm,pins = <0 1>;
3857 + brcm,function = <BCM2835_FSEL_ALT0>;
3858 + brcm,pull = <BCM2835_PUD_UP>;
3859 + };
3860 +
3861 + i2c1_pins: i2c1 {
3862 + brcm,pins = <2 3>;
3863 + brcm,function = <BCM2835_FSEL_ALT0>;
3864 + brcm,pull = <BCM2835_PUD_UP>;
3865 + };
3866 +
3867 + i2c3_pins: i2c3 {
3868 + brcm,pins = <4 5>;
3869 + brcm,function = <BCM2835_FSEL_ALT5>;
3870 + brcm,pull = <BCM2835_PUD_UP>;
3871 + };
3872 +
3873 + i2c4_pins: i2c4 {
3874 + brcm,pins = <8 9>;
3875 + brcm,function = <BCM2835_FSEL_ALT5>;
3876 + brcm,pull = <BCM2835_PUD_UP>;
3877 + };
3878 +
3879 + i2c5_pins: i2c5 {
3880 + brcm,pins = <12 13>;
3881 + brcm,function = <BCM2835_FSEL_ALT5>;
3882 + brcm,pull = <BCM2835_PUD_UP>;
3883 + };
3884 +
3885 + i2c6_pins: i2c6 {
3886 + brcm,pins = <22 23>;
3887 + brcm,function = <BCM2835_FSEL_ALT5>;
3888 + brcm,pull = <BCM2835_PUD_UP>;
3889 + };
3890 +
3891 + i2s_pins: i2s {
3892 + brcm,pins = <18 19 20 21>;
3893 + brcm,function = <BCM2835_FSEL_ALT0>;
3894 + };
3895 +
3896 + sdio_pins: sdio_pins {
3897 + brcm,pins = <34 35 36 37 38 39>;
3898 + brcm,function = <BCM2835_FSEL_ALT3>; // alt3 = SD1
3899 + brcm,pull = <0 2 2 2 2 2>;
3900 + };
3901 +
3902 + bt_pins: bt_pins {
3903 + brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0
3904 + // to fool pinctrl
3905 + brcm,function = <0>;
3906 + brcm,pull = <2>;
3907 + };
3908 +
3909 + uart0_pins: uart0_pins {
3910 + brcm,pins = <32 33>;
3911 + brcm,function = <BCM2835_FSEL_ALT3>;
3912 + brcm,pull = <0 2>;
3913 + };
3914 +
3915 + uart1_pins: uart1_pins {
3916 + brcm,pins;
3917 + brcm,function;
3918 + brcm,pull;
3919 + };
3920 +
3921 + uart2_pins: uart2_pins {
3922 + brcm,pins = <0 1>;
3923 + brcm,function = <BCM2835_FSEL_ALT4>;
3924 + brcm,pull = <0 2>;
3925 + };
3926 +
3927 + uart3_pins: uart3_pins {
3928 + brcm,pins = <4 5>;
3929 + brcm,function = <BCM2835_FSEL_ALT4>;
3930 + brcm,pull = <0 2>;
3931 + };
3932 +
3933 + uart4_pins: uart4_pins {
3934 + brcm,pins = <8 9>;
3935 + brcm,function = <BCM2835_FSEL_ALT4>;
3936 + brcm,pull = <0 2>;
3937 + };
3938 +
3939 + uart5_pins: uart5_pins {
3940 + brcm,pins = <12 13>;
3941 + brcm,function = <BCM2835_FSEL_ALT4>;
3942 + brcm,pull = <0 2>;
3943 + };
3944 +};
3945 +
3946 +&i2c0if {
3947 + clock-frequency = <100000>;
3948 +};
3949 +
3950 +&i2c1 {
3951 + pinctrl-names = "default";
3952 + pinctrl-0 = <&i2c1_pins>;
3953 + clock-frequency = <100000>;
3954 +};
3955 +
3956 +&i2s {
3957 + pinctrl-names = "default";
3958 + pinctrl-0 = <&i2s_pins>;
3959 +};
3960 +
3961 +// =============================================
3962 +// Board specific stuff here
3963 +
3964 +/ {
3965 + power_ctrl: power_ctrl {
3966 compatible = "gpio-poweroff";
3967 - gpios = <&expgpio 5 GPIO_ACTIVE_HIGH>;
3968 + gpios = <&expgpio 5 0>;
3969 + force;
3970 + };
3971 +};
3972 +
3973 +&sdhost {
3974 + status = "disabled";
3975 +};
3976 +
3977 +&phy1 {
3978 + led-modes = <0x00 0x08>; /* link/activity link */
3979 +};
3980 +
3981 +&gpio {
3982 + audio_pins: audio_pins {
3983 + brcm,pins = <>;
3984 + brcm,function = <>;
3985 + };
3986 +};
3987 +
3988 +&leds {
3989 + act_led: led-act {
3990 + label = "led0";
3991 + linux,default-trigger = "default-on";
3992 + default-state = "on";
3993 + gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
3994 + };
3995 +
3996 + pwr_led: led-pwr {
3997 + label = "led1";
3998 + linux,default-trigger = "default-on";
3999 + gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
4000 };
4001 };
4002
4003 -&expgpio {
4004 - gpio-line-names = "BT_ON",
4005 - "WL_ON",
4006 - "",
4007 - "GLOBAL_RESET",
4008 - "VDD_SD_IO_SEL",
4009 - "CAM_GPIO",
4010 - "SD_PWR_ON",
4011 - "SD_OC_N";
4012 +&pwm1 {
4013 + status = "disabled";
4014 +};
4015 +
4016 +&audio {
4017 + pinctrl-names = "default";
4018 + pinctrl-0 = <&audio_pins>;
4019 + brcm,disable-headphones = <1>;
4020 };
4021
4022 &genet_mdio {
4023 clock-frequency = <1950000>;
4024 };
4025
4026 -&pm {
4027 - /delete-property/ system-power-controller;
4028 +/ {
4029 + __overrides__ {
4030 + act_led_gpio = <&act_led>,"gpios:4";
4031 + act_led_activelow = <&act_led>,"gpios:8";
4032 + act_led_trigger = <&act_led>,"linux,default-trigger";
4033 +
4034 + pwr_led_gpio = <&pwr_led>,"gpios:4";
4035 + pwr_led_activelow = <&pwr_led>,"gpios:8";
4036 + pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
4037 +
4038 + eth_led0 = <&phy1>,"led-modes:0";
4039 + eth_led1 = <&phy1>,"led-modes:4";
4040 +
4041 + sd_poll_once = <&emmc2>, "non-removable?";
4042 + spi_dma4 = <&spi0>, "dmas:0=", <&dma40>,
4043 + <&spi0>, "dmas:8=", <&dma40>;
4044 + };
4045 };
4046 diff --git a/arch/arm/boot/dts/bcm2711-rpi-cm4.dts b/arch/arm/boot/dts/bcm2711-rpi-cm4.dts
4047 new file mode 100644
4048 index 000000000000..76dd97513a20
4049 --- /dev/null
4050 +++ b/arch/arm/boot/dts/bcm2711-rpi-cm4.dts
4051 @@ -0,0 +1,660 @@
4052 +// SPDX-License-Identifier: GPL-2.0
4053 +/dts-v1/;
4054 +#include "bcm2711.dtsi"
4055 +#include "bcm2835-rpi.dtsi"
4056 +
4057 +#include <dt-bindings/reset/raspberrypi,firmware-reset.h>
4058 +
4059 +/ {
4060 + compatible = "raspberrypi,4-compute-module", "brcm,bcm2711";
4061 + model = "Raspberry Pi Compute Module 4";
4062 +
4063 + chosen {
4064 + /* 8250 auxiliary UART instead of pl011 */
4065 + stdout-path = "serial1:115200n8";
4066 + };
4067 +
4068 + /* Will be filled by the bootloader */
4069 + memory@0 {
4070 + device_type = "memory";
4071 + reg = <0 0 0>;
4072 + };
4073 +
4074 + aliases {
4075 + emmc2bus = &emmc2bus;
4076 + ethernet0 = &genet;
4077 + pcie0 = &pcie0;
4078 + blconfig = &blconfig;
4079 + };
4080 +
4081 + leds {
4082 + led-act {
4083 + gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
4084 + };
4085 +
4086 + led-pwr {
4087 + label = "PWR";
4088 + gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
4089 + default-state = "keep";
4090 + linux,default-trigger = "default-on";
4091 + };
4092 + };
4093 +
4094 + wifi_pwrseq: wifi-pwrseq {
4095 + compatible = "mmc-pwrseq-simple";
4096 + reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
4097 + };
4098 +
4099 + sd_io_1v8_reg: sd_io_1v8_reg {
4100 + compatible = "regulator-gpio";
4101 + regulator-name = "vdd-sd-io";
4102 + regulator-min-microvolt = <1800000>;
4103 + regulator-max-microvolt = <3300000>;
4104 + regulator-boot-on;
4105 + regulator-always-on;
4106 + regulator-settling-time-us = <5000>;
4107 + gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
4108 + states = <1800000 0x1
4109 + 3300000 0x0>;
4110 + status = "okay";
4111 + };
4112 +
4113 + sd_vcc_reg: sd_vcc_reg {
4114 + compatible = "regulator-fixed";
4115 + regulator-name = "vcc-sd";
4116 + regulator-min-microvolt = <3300000>;
4117 + regulator-max-microvolt = <3300000>;
4118 + regulator-boot-on;
4119 + enable-active-high;
4120 + gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>;
4121 + };
4122 +};
4123 +
4124 +&ddc0 {
4125 + status = "okay";
4126 +};
4127 +
4128 +&ddc1 {
4129 + status = "okay";
4130 +};
4131 +
4132 +&firmware {
4133 + firmware_clocks: clocks {
4134 + compatible = "raspberrypi,firmware-clocks";
4135 + #clock-cells = <1>;
4136 + };
4137 +
4138 + expgpio: gpio {
4139 + compatible = "raspberrypi,firmware-gpio";
4140 + gpio-controller;
4141 + #gpio-cells = <2>;
4142 + gpio-line-names = "BT_ON",
4143 + "WL_ON",
4144 + "PWR_LED_OFF",
4145 + "ANT1",
4146 + "VDD_SD_IO_SEL",
4147 + "CAM_GPIO",
4148 + "SD_PWR_ON",
4149 + "ANT2";
4150 + status = "okay";
4151 +
4152 + ant1: ant1 {
4153 + gpio-hog;
4154 + gpios = <3 GPIO_ACTIVE_HIGH>;
4155 + output-high;
4156 + };
4157 +
4158 + ant2: ant2 {
4159 + gpio-hog;
4160 + gpios = <7 GPIO_ACTIVE_HIGH>;
4161 + output-low;
4162 + };
4163 + };
4164 +
4165 + reset: reset {
4166 + compatible = "raspberrypi,firmware-reset";
4167 + #reset-cells = <1>;
4168 + };
4169 +};
4170 +
4171 +&gpio {
4172 + /*
4173 + * Parts taken from rpi_SCH_4b_4p0_reduced.pdf and
4174 + * the official GPU firmware DT blob.
4175 + *
4176 + * Legend:
4177 + * "FOO" = GPIO line named "FOO" on the schematic
4178 + * "FOO_N" = GPIO line named "FOO" on schematic, active low
4179 + */
4180 + gpio-line-names = "ID_SDA",
4181 + "ID_SCL",
4182 + "SDA1",
4183 + "SCL1",
4184 + "GPIO_GCLK",
4185 + "GPIO5",
4186 + "GPIO6",
4187 + "SPI_CE1_N",
4188 + "SPI_CE0_N",
4189 + "SPI_MISO",
4190 + "SPI_MOSI",
4191 + "SPI_SCLK",
4192 + "GPIO12",
4193 + "GPIO13",
4194 + /* Serial port */
4195 + "TXD1",
4196 + "RXD1",
4197 + "GPIO16",
4198 + "GPIO17",
4199 + "GPIO18",
4200 + "GPIO19",
4201 + "GPIO20",
4202 + "GPIO21",
4203 + "GPIO22",
4204 + "GPIO23",
4205 + "GPIO24",
4206 + "GPIO25",
4207 + "GPIO26",
4208 + "GPIO27",
4209 + "RGMII_MDIO",
4210 + "RGMIO_MDC",
4211 + /* Used by BT module */
4212 + "CTS0",
4213 + "RTS0",
4214 + "TXD0",
4215 + "RXD0",
4216 + /* Used by Wifi */
4217 + "SD1_CLK",
4218 + "SD1_CMD",
4219 + "SD1_DATA0",
4220 + "SD1_DATA1",
4221 + "SD1_DATA2",
4222 + "SD1_DATA3",
4223 + /* Shared with SPI flash */
4224 + "PWM0_MISO",
4225 + "PWM1_MOSI",
4226 + "STATUS_LED_G_CLK",
4227 + "SPIFLASH_CE_N",
4228 + "SDA0",
4229 + "SCL0",
4230 + "RGMII_RXCLK",
4231 + "RGMII_RXCTL",
4232 + "RGMII_RXD0",
4233 + "RGMII_RXD1",
4234 + "RGMII_RXD2",
4235 + "RGMII_RXD3",
4236 + "RGMII_TXCLK",
4237 + "RGMII_TXCTL",
4238 + "RGMII_TXD0",
4239 + "RGMII_TXD1",
4240 + "RGMII_TXD2",
4241 + "RGMII_TXD3";
4242 +};
4243 +
4244 +&hdmi0 {
4245 + clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
4246 + clock-names = "hdmi", "bvb", "audio", "cec";
4247 + wifi-2.4ghz-coexistence;
4248 + status = "okay";
4249 +};
4250 +
4251 +&hdmi1 {
4252 + clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
4253 + clock-names = "hdmi", "bvb", "audio", "cec";
4254 + wifi-2.4ghz-coexistence;
4255 + status = "okay";
4256 +};
4257 +
4258 +&hvs {
4259 + clocks = <&firmware_clocks 4>;
4260 +};
4261 +
4262 +&pixelvalve0 {
4263 + status = "okay";
4264 +};
4265 +
4266 +&pixelvalve1 {
4267 + status = "okay";
4268 +};
4269 +
4270 +&pixelvalve2 {
4271 + status = "okay";
4272 +};
4273 +
4274 +&pixelvalve4 {
4275 + status = "okay";
4276 +};
4277 +
4278 +&pwm1 {
4279 + pinctrl-names = "default";
4280 + pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>;
4281 + status = "okay";
4282 +};
4283 +
4284 +&rmem {
4285 + /*
4286 + * RPi4's co-processor will copy the board's bootloader configuration
4287 + * into memory for the OS to consume. It'll also update this node with
4288 + * its placement information.
4289 + */
4290 + blconfig: nvram@0 {
4291 + compatible = "raspberrypi,bootloader-config", "nvmem-rmem";
4292 + #address-cells = <1>;
4293 + #size-cells = <1>;
4294 + reg = <0x0 0x0 0x0>;
4295 + no-map;
4296 + status = "disabled";
4297 + };
4298 +};
4299 +
4300 +/* SDHCI is used to control the SDIO for wireless */
4301 +&sdhci {
4302 + #address-cells = <1>;
4303 + #size-cells = <0>;
4304 + pinctrl-names = "default";
4305 + pinctrl-0 = <&emmc_gpio34>;
4306 + bus-width = <4>;
4307 + non-removable;
4308 + mmc-pwrseq = <&wifi_pwrseq>;
4309 + status = "okay";
4310 +
4311 + brcmf: wifi@1 {
4312 + reg = <1>;
4313 + compatible = "brcm,bcm4329-fmac";
4314 + };
4315 +};
4316 +
4317 +/* EMMC2 is used to drive the EMMC card */
4318 +&emmc2 {
4319 + bus-width = <8>;
4320 + vqmmc-supply = <&sd_io_1v8_reg>;
4321 + vmmc-supply = <&sd_vcc_reg>;
4322 + broken-cd;
4323 + status = "okay";
4324 +};
4325 +
4326 +&genet {
4327 + phy-handle = <&phy1>;
4328 + phy-mode = "rgmii-rxid";
4329 + status = "okay";
4330 +};
4331 +
4332 +&genet_mdio {
4333 + phy1: ethernet-phy@0 {
4334 + /* No PHY interrupt */
4335 + reg = <0x0>;
4336 + };
4337 +};
4338 +
4339 +&pcie0 {
4340 + pci@0,0 {
4341 + device-type = "pci";
4342 + #address-cells = <3>;
4343 + #size-cells = <2>;
4344 + ranges;
4345 +
4346 + reg = <0 0 0 0 0>;
4347 +
4348 + usb@0,0 {
4349 + reg = <0 0 0 0 0>;
4350 + resets = <&reset RASPBERRYPI_FIRMWARE_RESET_ID_USB>;
4351 + };
4352 + };
4353 +};
4354 +
4355 +/* uart0 communicates with the BT module */
4356 +&uart0 {
4357 + pinctrl-names = "default";
4358 + pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
4359 + uart-has-rtscts;
4360 + status = "okay";
4361 +
4362 + bluetooth {
4363 + compatible = "brcm,bcm43438-bt";
4364 + max-speed = <2000000>;
4365 + shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
4366 + };
4367 +};
4368 +
4369 +/* uart1 is mapped to the pin header */
4370 +&uart1 {
4371 + pinctrl-names = "default";
4372 + pinctrl-0 = <&uart1_gpio14>;
4373 + status = "okay";
4374 +};
4375 +
4376 +&vchiq {
4377 + interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
4378 +};
4379 +
4380 +&vc4 {
4381 + status = "okay";
4382 +};
4383 +
4384 +&vec {
4385 + status = "disabled";
4386 +};
4387 +
4388 +// =============================================
4389 +// Downstream rpi- changes
4390 +
4391 +#define BCM2711
4392 +
4393 +#include "bcm270x.dtsi"
4394 +#include "bcm271x-rpi-bt.dtsi"
4395 +
4396 +/ {
4397 + soc {
4398 + /delete-node/ pixelvalve@7e807000;
4399 + /delete-node/ hdmi@7e902000;
4400 + };
4401 +};
4402 +
4403 +#include "bcm2711-rpi-ds.dtsi"
4404 +#include "bcm283x-rpi-csi0-2lane.dtsi"
4405 +#include "bcm283x-rpi-csi1-4lane.dtsi"
4406 +#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
4407 +#include "bcm283x-rpi-cam1-regulator.dtsi"
4408 +
4409 +/ {
4410 + chosen {
4411 + bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
4412 + };
4413 +
4414 + aliases {
4415 + serial0 = &uart1;
4416 + serial1 = &uart0;
4417 + mmc0 = &emmc2;
4418 + mmc1 = &mmcnr;
4419 + mmc2 = &sdhost;
4420 + i2c3 = &i2c3;
4421 + i2c4 = &i2c4;
4422 + i2c5 = &i2c5;
4423 + i2c6 = &i2c6;
4424 + i2c20 = &ddc0;
4425 + i2c21 = &ddc1;
4426 + spi3 = &spi3;
4427 + spi4 = &spi4;
4428 + spi5 = &spi5;
4429 + spi6 = &spi6;
4430 + /delete-property/ intc;
4431 + };
4432 +
4433 + /delete-node/ wifi-pwrseq;
4434 +};
4435 +
4436 +&mmcnr {
4437 + pinctrl-names = "default";
4438 + pinctrl-0 = <&sdio_pins>;
4439 + bus-width = <4>;
4440 + status = "okay";
4441 +};
4442 +
4443 +&uart0 {
4444 + pinctrl-0 = <&uart0_pins &bt_pins>;
4445 + status = "okay";
4446 +};
4447 +
4448 +&uart1 {
4449 + pinctrl-0 = <&uart1_pins>;
4450 +};
4451 +
4452 +&spi0 {
4453 + pinctrl-names = "default";
4454 + pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
4455 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
4456 +
4457 + spidev0: spidev@0{
4458 + compatible = "spidev";
4459 + reg = <0>; /* CE0 */
4460 + #address-cells = <1>;
4461 + #size-cells = <0>;
4462 + spi-max-frequency = <125000000>;
4463 + };
4464 +
4465 + spidev1: spidev@1{
4466 + compatible = "spidev";
4467 + reg = <1>; /* CE1 */
4468 + #address-cells = <1>;
4469 + #size-cells = <0>;
4470 + spi-max-frequency = <125000000>;
4471 + };
4472 +};
4473 +
4474 +&gpio {
4475 + spi0_pins: spi0_pins {
4476 + brcm,pins = <9 10 11>;
4477 + brcm,function = <BCM2835_FSEL_ALT0>;
4478 + };
4479 +
4480 + spi0_cs_pins: spi0_cs_pins {
4481 + brcm,pins = <8 7>;
4482 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
4483 + };
4484 +
4485 + spi3_pins: spi3_pins {
4486 + brcm,pins = <1 2 3>;
4487 + brcm,function = <BCM2835_FSEL_ALT3>;
4488 + };
4489 +
4490 + spi3_cs_pins: spi3_cs_pins {
4491 + brcm,pins = <0 24>;
4492 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
4493 + };
4494 +
4495 + spi4_pins: spi4_pins {
4496 + brcm,pins = <5 6 7>;
4497 + brcm,function = <BCM2835_FSEL_ALT3>;
4498 + };
4499 +
4500 + spi4_cs_pins: spi4_cs_pins {
4501 + brcm,pins = <4 25>;
4502 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
4503 + };
4504 +
4505 + spi5_pins: spi5_pins {
4506 + brcm,pins = <13 14 15>;
4507 + brcm,function = <BCM2835_FSEL_ALT3>;
4508 + };
4509 +
4510 + spi5_cs_pins: spi5_cs_pins {
4511 + brcm,pins = <12 26>;
4512 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
4513 + };
4514 +
4515 + spi6_pins: spi6_pins {
4516 + brcm,pins = <19 20 21>;
4517 + brcm,function = <BCM2835_FSEL_ALT3>;
4518 + };
4519 +
4520 + spi6_cs_pins: spi6_cs_pins {
4521 + brcm,pins = <18 27>;
4522 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
4523 + };
4524 +
4525 + i2c0_pins: i2c0 {
4526 + brcm,pins = <0 1>;
4527 + brcm,function = <BCM2835_FSEL_ALT0>;
4528 + brcm,pull = <BCM2835_PUD_UP>;
4529 + };
4530 +
4531 + i2c1_pins: i2c1 {
4532 + brcm,pins = <2 3>;
4533 + brcm,function = <BCM2835_FSEL_ALT0>;
4534 + brcm,pull = <BCM2835_PUD_UP>;
4535 + };
4536 +
4537 + i2c3_pins: i2c3 {
4538 + brcm,pins = <4 5>;
4539 + brcm,function = <BCM2835_FSEL_ALT5>;
4540 + brcm,pull = <BCM2835_PUD_UP>;
4541 + };
4542 +
4543 + i2c4_pins: i2c4 {
4544 + brcm,pins = <8 9>;
4545 + brcm,function = <BCM2835_FSEL_ALT5>;
4546 + brcm,pull = <BCM2835_PUD_UP>;
4547 + };
4548 +
4549 + i2c5_pins: i2c5 {
4550 + brcm,pins = <12 13>;
4551 + brcm,function = <BCM2835_FSEL_ALT5>;
4552 + brcm,pull = <BCM2835_PUD_UP>;
4553 + };
4554 +
4555 + i2c6_pins: i2c6 {
4556 + brcm,pins = <22 23>;
4557 + brcm,function = <BCM2835_FSEL_ALT5>;
4558 + brcm,pull = <BCM2835_PUD_UP>;
4559 + };
4560 +
4561 + i2s_pins: i2s {
4562 + brcm,pins = <18 19 20 21>;
4563 + brcm,function = <BCM2835_FSEL_ALT0>;
4564 + };
4565 +
4566 + sdio_pins: sdio_pins {
4567 + brcm,pins = <34 35 36 37 38 39>;
4568 + brcm,function = <BCM2835_FSEL_ALT3>; // alt3 = SD1
4569 + brcm,pull = <0 2 2 2 2 2>;
4570 + };
4571 +
4572 + bt_pins: bt_pins {
4573 + brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0
4574 + // to fool pinctrl
4575 + brcm,function = <0>;
4576 + brcm,pull = <2>;
4577 + };
4578 +
4579 + uart0_pins: uart0_pins {
4580 + brcm,pins = <32 33>;
4581 + brcm,function = <BCM2835_FSEL_ALT3>;
4582 + brcm,pull = <0 2>;
4583 + };
4584 +
4585 + uart1_pins: uart1_pins {
4586 + brcm,pins;
4587 + brcm,function;
4588 + brcm,pull;
4589 + };
4590 +
4591 + uart2_pins: uart2_pins {
4592 + brcm,pins = <0 1>;
4593 + brcm,function = <BCM2835_FSEL_ALT4>;
4594 + brcm,pull = <0 2>;
4595 + };
4596 +
4597 + uart3_pins: uart3_pins {
4598 + brcm,pins = <4 5>;
4599 + brcm,function = <BCM2835_FSEL_ALT4>;
4600 + brcm,pull = <0 2>;
4601 + };
4602 +
4603 + uart4_pins: uart4_pins {
4604 + brcm,pins = <8 9>;
4605 + brcm,function = <BCM2835_FSEL_ALT4>;
4606 + brcm,pull = <0 2>;
4607 + };
4608 +
4609 + uart5_pins: uart5_pins {
4610 + brcm,pins = <12 13>;
4611 + brcm,function = <BCM2835_FSEL_ALT4>;
4612 + brcm,pull = <0 2>;
4613 + };
4614 +};
4615 +
4616 +&i2c0if {
4617 + clock-frequency = <100000>;
4618 +};
4619 +
4620 +&i2c1 {
4621 + pinctrl-names = "default";
4622 + pinctrl-0 = <&i2c1_pins>;
4623 + clock-frequency = <100000>;
4624 +};
4625 +
4626 +&i2s {
4627 + pinctrl-names = "default";
4628 + pinctrl-0 = <&i2s_pins>;
4629 +};
4630 +
4631 +// =============================================
4632 +// Board specific stuff here
4633 +
4634 +&pcie0 {
4635 + brcm,enable-l1ss;
4636 +};
4637 +
4638 +&sdhost {
4639 + status = "disabled";
4640 +};
4641 +
4642 +&phy1 {
4643 + led-modes = <0x00 0x08>; /* link/activity link */
4644 +};
4645 +
4646 +&gpio {
4647 + audio_pins: audio_pins {
4648 + brcm,pins = <>;
4649 + brcm,function = <>;
4650 + };
4651 +};
4652 +
4653 +&leds {
4654 + act_led: led-act {
4655 + label = "led0";
4656 + linux,default-trigger = "mmc0";
4657 + gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
4658 + };
4659 +
4660 + pwr_led: led-pwr {
4661 + label = "led1";
4662 + linux,default-trigger = "default-on";
4663 + gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
4664 + };
4665 +};
4666 +
4667 +&pwm1 {
4668 + status = "disabled";
4669 +};
4670 +
4671 +&audio {
4672 + pinctrl-names = "default";
4673 + pinctrl-0 = <&audio_pins>;
4674 + brcm,disable-headphones = <1>;
4675 +};
4676 +
4677 +cam0_reg: &cam1_reg {
4678 + gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
4679 +};
4680 +
4681 +/ {
4682 + __overrides__ {
4683 + act_led_gpio = <&act_led>,"gpios:4";
4684 + act_led_activelow = <&act_led>,"gpios:8";
4685 + act_led_trigger = <&act_led>,"linux,default-trigger";
4686 +
4687 + pwr_led_gpio = <&pwr_led>,"gpios:4";
4688 + pwr_led_activelow = <&pwr_led>,"gpios:8";
4689 + pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
4690 +
4691 + eth_led0 = <&phy1>,"led-modes:0";
4692 + eth_led1 = <&phy1>,"led-modes:4";
4693 +
4694 + ant1 = <&ant1>,"output-high?=on",
4695 + <&ant1>, "output-low?=off",
4696 + <&ant2>, "output-high?=off",
4697 + <&ant2>, "output-low?=on";
4698 + ant2 = <&ant1>,"output-high?=off",
4699 + <&ant1>, "output-low?=on",
4700 + <&ant2>, "output-high?=on",
4701 + <&ant2>, "output-low?=off";
4702 + noant = <&ant1>,"output-high?=off",
4703 + <&ant1>, "output-low?=on",
4704 + <&ant2>, "output-high?=off",
4705 + <&ant2>, "output-low?=on";
4706 +
4707 + sd_poll_once = <&emmc2>, "non-removable?";
4708 + spi_dma4 = <&spi0>, "dmas:0=", <&dma40>,
4709 + <&spi0>, "dmas:8=", <&dma40>;
4710 + };
4711 +};
4712 diff --git a/arch/arm/boot/dts/bcm2711-rpi-ds.dtsi b/arch/arm/boot/dts/bcm2711-rpi-ds.dtsi
4713 new file mode 100644
4714 index 000000000000..ebf73b789b4a
4715 --- /dev/null
4716 +++ b/arch/arm/boot/dts/bcm2711-rpi-ds.dtsi
4717 @@ -0,0 +1,205 @@
4718 +// SPDX-License-Identifier: GPL-2.0
4719 +#include "bcm270x-rpi.dtsi"
4720 +
4721 +/ {
4722 + __overrides__ {
4723 + arm_freq;
4724 + };
4725 +
4726 + v3dbus: v3dbus {
4727 + compatible = "simple-bus";
4728 + #address-cells = <1>;
4729 + #size-cells = <2>;
4730 + ranges = <0x7c500000 0x0 0xfc500000 0x0 0x03300000>,
4731 + <0x40000000 0x0 0xff800000 0x0 0x00800000>;
4732 + dma-ranges = <0x00000000 0x0 0x00000000 0x4 0x00000000>;
4733 +
4734 + v3d: v3d@7ec04000 {
4735 + compatible = "brcm,2711-v3d";
4736 + reg =
4737 + <0x7ec00000 0x0 0x4000>,
4738 + <0x7ec04000 0x0 0x4000>;
4739 + reg-names = "hub", "core0";
4740 +
4741 + power-domains = <&pm BCM2835_POWER_DOMAIN_GRAFX_V3D>;
4742 + resets = <&pm BCM2835_RESET_V3D>;
4743 + clocks = <&firmware_clocks 5>;
4744 + clocks-names = "v3d";
4745 + interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
4746 + status = "disabled";
4747 + };
4748 + };
4749 +
4750 + scb: scb {
4751 + /* Add a label */
4752 + };
4753 +};
4754 +
4755 +&vc4 {
4756 + raspberrypi,firmware = <&firmware>;
4757 +};
4758 +
4759 +&cma {
4760 + /* Limit cma to the lower 768MB to allow room for HIGHMEM on 32-bit */
4761 + alloc-ranges = <0x0 0x00000000 0x30000000>;
4762 +};
4763 +
4764 +&scb {
4765 + ranges = <0x0 0x7c000000 0x0 0xfc000000 0x0 0x03800000>,
4766 + <0x0 0x40000000 0x0 0xff800000 0x0 0x00800000>,
4767 + <0x6 0x00000000 0x6 0x00000000 0x0 0x40000000>,
4768 + <0x0 0x00000000 0x0 0x00000000 0x0 0xfc000000>;
4769 + dma-ranges = <0x0 0x00000000 0x0 0x00000000 0x4 0x00000000>;
4770 +
4771 + dma40: dma@7e007b00 {
4772 + compatible = "brcm,bcm2711-dma";
4773 + reg = <0x0 0x7e007b00 0x0 0x400>;
4774 + interrupts =
4775 + <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>, /* dma4 11 */
4776 + <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>, /* dma4 12 */
4777 + <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>, /* dma4 13 */
4778 + <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>; /* dma4 14 */
4779 + interrupt-names = "dma11",
4780 + "dma12",
4781 + "dma13",
4782 + "dma14";
4783 + #dma-cells = <1>;
4784 + brcm,dma-channel-mask = <0x7800>;
4785 + };
4786 +
4787 + xhci: xhci@7e9c0000 {
4788 + compatible = "generic-xhci";
4789 + status = "disabled";
4790 + reg = <0x0 0x7e9c0000 0x0 0x100000>;
4791 + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
4792 + power-domains = <&power RPI_POWER_DOMAIN_USB>;
4793 + };
4794 +
4795 + hevc-decoder@7eb00000 {
4796 + compatible = "raspberrypi,rpivid-hevc-decoder";
4797 + reg = <0x0 0x7eb00000 0x0 0x10000>;
4798 + status = "okay";
4799 + };
4800 +
4801 + rpivid-local-intc@7eb10000 {
4802 + compatible = "raspberrypi,rpivid-local-intc";
4803 + reg = <0x0 0x7eb10000 0x0 0x1000>;
4804 + status = "okay";
4805 + interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
4806 + };
4807 +
4808 + h264-decoder@7eb20000 {
4809 + compatible = "raspberrypi,rpivid-h264-decoder";
4810 + reg = <0x0 0x7eb20000 0x0 0x10000>;
4811 + status = "okay";
4812 + };
4813 +
4814 + vp9-decoder@7eb30000 {
4815 + compatible = "raspberrypi,rpivid-vp9-decoder";
4816 + reg = <0x0 0x7eb30000 0x0 0x10000>;
4817 + status = "okay";
4818 + };
4819 +};
4820 +
4821 +&dma40 {
4822 + /* The VPU firmware uses DMA channel 11 for VCHIQ */
4823 + brcm,dma-channel-mask = <0x7000>;
4824 +};
4825 +
4826 +&vchiq {
4827 + compatible = "brcm,bcm2711-vchiq";
4828 +};
4829 +
4830 +&firmwarekms {
4831 + compatible = "raspberrypi,rpi-firmware-kms-2711";
4832 + interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
4833 +};
4834 +
4835 +&smi {
4836 + interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
4837 +};
4838 +
4839 +&mmc {
4840 + interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
4841 +};
4842 +
4843 +&mmcnr {
4844 + interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
4845 +};
4846 +
4847 +&csi0 {
4848 + interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
4849 +};
4850 +
4851 +&csi1 {
4852 + interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
4853 +};
4854 +
4855 +&random {
4856 + compatible = "brcm,bcm2711-rng200";
4857 + status = "okay";
4858 +};
4859 +
4860 +&usb {
4861 + /* Enable the FIQ support */
4862 + reg = <0x7e980000 0x10000>,
4863 + <0x7e00b200 0x200>;
4864 + interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
4865 + <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
4866 + status = "disabled";
4867 +};
4868 +
4869 +&gpio {
4870 + interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
4871 + <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
4872 +};
4873 +
4874 +&emmc2 {
4875 + mmc-ddr-3_3v;
4876 +};
4877 +
4878 +&vc4 {
4879 + status = "disabled";
4880 +};
4881 +
4882 +&pixelvalve0 {
4883 + status = "disabled";
4884 +};
4885 +
4886 +&pixelvalve1 {
4887 + status = "disabled";
4888 +};
4889 +
4890 +&pixelvalve2 {
4891 + status = "disabled";
4892 +};
4893 +
4894 +&pixelvalve3 {
4895 + status = "disabled";
4896 +};
4897 +
4898 +&pixelvalve4 {
4899 + status = "disabled";
4900 +};
4901 +
4902 +&hdmi0 {
4903 + dmas = <&dma (10|(1<<27)|(1<<24)|(10<<16)|(15<<20))>;
4904 + status = "disabled";
4905 +};
4906 +
4907 +&ddc0 {
4908 + status = "disabled";
4909 +};
4910 +
4911 +&hdmi1 {
4912 + dmas = <&dma (17|(1<<27)|(1<<24)|(10<<16)|(15<<20))>;
4913 + status = "disabled";
4914 +};
4915 +
4916 +&ddc1 {
4917 + status = "disabled";
4918 +};
4919 +
4920 +&dvp {
4921 + status = "disabled";
4922 +};
4923 diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi
4924 index 89af57482bc8..131db82e079d 100644
4925 --- a/arch/arm/boot/dts/bcm2711.dtsi
4926 +++ b/arch/arm/boot/dts/bcm2711.dtsi
4927 @@ -323,6 +323,7 @@ aon_intr: interrupt-controller@7ef00100 {
4928 interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
4929 interrupt-controller;
4930 #interrupt-cells = <1>;
4931 + status = "disabled";
4932 };
4933
4934 hdmi0: hdmi@7ef00700 {
4935 @@ -335,7 +336,8 @@ hdmi0: hdmi@7ef00700 {
4936 <0x7ef01f00 0x400>,
4937 <0x7ef00200 0x80>,
4938 <0x7ef04300 0x100>,
4939 - <0x7ef20000 0x100>;
4940 + <0x7ef20000 0x100>,
4941 + <0x7ef00100 0x30>;
4942 reg-names = "hdmi",
4943 "dvp",
4944 "phy",
4945 @@ -344,7 +346,12 @@ hdmi0: hdmi@7ef00700 {
4946 "metadata",
4947 "csc",
4948 "cec",
4949 - "hd";
4950 + "hd",
4951 + "intr2";
4952 + clocks = <&firmware_clocks 13>,
4953 + <&firmware_clocks 14>,
4954 + <&dvp 0>,
4955 + <&clk_27MHz>;
4956 clock-names = "hdmi", "bvb", "audio", "cec";
4957 resets = <&dvp 0>;
4958 interrupt-parent = <&aon_intr>;
4959 @@ -353,7 +360,7 @@ hdmi0: hdmi@7ef00700 {
4960 interrupt-names = "cec-tx", "cec-rx", "cec-low",
4961 "wakeup", "hpd-connected", "hpd-removed";
4962 ddc = <&ddc0>;
4963 - dmas = <&dma 10>;
4964 + dmas = <&dma (10 | (1 << 27) | (1 << 24)| (15 << 20) | (10 << 16))>;
4965 dma-names = "audio-rx";
4966 status = "disabled";
4967 };
4968 @@ -376,7 +383,8 @@ hdmi1: hdmi@7ef05700 {
4969 <0x7ef06f00 0x400>,
4970 <0x7ef00280 0x80>,
4971 <0x7ef09300 0x100>,
4972 - <0x7ef20000 0x100>;
4973 + <0x7ef20000 0x100>,
4974 + <0x7ef00100 0x30>;
4975 reg-names = "hdmi",
4976 "dvp",
4977 "phy",
4978 @@ -385,16 +393,21 @@ hdmi1: hdmi@7ef05700 {
4979 "metadata",
4980 "csc",
4981 "cec",
4982 - "hd";
4983 + "hd",
4984 + "intr2";
4985 ddc = <&ddc1>;
4986 clock-names = "hdmi", "bvb", "audio", "cec";
4987 + clocks = <&firmware_clocks 13>,
4988 + <&firmware_clocks 14>,
4989 + <&dvp 0>,
4990 + <&clk_27MHz>;
4991 resets = <&dvp 1>;
4992 interrupt-parent = <&aon_intr>;
4993 interrupts = <8>, <7>, <6>,
4994 <9>, <10>, <11>;
4995 interrupt-names = "cec-tx", "cec-rx", "cec-low",
4996 "wakeup", "hpd-connected", "hpd-removed";
4997 - dmas = <&dma 17>;
4998 + dmas = <&dma (17 | (1 << 27) | (1 << 24)| (15 << 20) | (10 << 16))>;
4999 dma-names = "audio-rx";
5000 status = "disabled";
5001 };
5002 @@ -545,14 +558,14 @@ l2: l2-cache0 {
5003 scb {
5004 compatible = "simple-bus";
5005 #address-cells = <2>;
5006 - #size-cells = <1>;
5007 + #size-cells = <2>;
5008
5009 - ranges = <0x0 0x7c000000 0x0 0xfc000000 0x03800000>,
5010 - <0x6 0x00000000 0x6 0x00000000 0x40000000>;
5011 + ranges = <0x0 0x7c000000 0x0 0xfc000000 0x0 0x03800000>,
5012 + <0x6 0x00000000 0x6 0x00000000 0x0 0x40000000>;
5013
5014 pcie0: pcie@7d500000 {
5015 compatible = "brcm,bcm2711-pcie";
5016 - reg = <0x0 0x7d500000 0x9310>;
5017 + reg = <0x0 0x7d500000 0x0 0x9310>;
5018 device_type = "pci";
5019 #address-cells = <3>;
5020 #interrupt-cells = <1>;
5021 @@ -572,8 +585,8 @@ IRQ_TYPE_LEVEL_HIGH>,
5022 msi-controller;
5023 msi-parent = <&pcie0>;
5024
5025 - ranges = <0x02000000 0x0 0xf8000000 0x6 0x00000000
5026 - 0x0 0x04000000>;
5027 + ranges = <0x02000000 0x0 0xc0000000 0x6 0x00000000
5028 + 0x0 0x40000000>;
5029 /*
5030 * The wrapper around the PCIe block has a bug
5031 * preventing it from accessing beyond the first 3GB of
5032 @@ -586,7 +599,7 @@ IRQ_TYPE_LEVEL_HIGH>,
5033
5034 genet: ethernet@7d580000 {
5035 compatible = "brcm,bcm2711-genet-v5";
5036 - reg = <0x0 0x7d580000 0x10000>;
5037 + reg = <0x0 0x7d580000 0x0 0x10000>;
5038 #address-cells = <0x1>;
5039 #size-cells = <0x1>;
5040 interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>,
5041 @@ -1096,7 +1109,7 @@ &cma {
5042 alloc-ranges = <0x0 0x00000000 0x40000000>;
5043 };
5044
5045 -&i2c0 {
5046 +&i2c0if {
5047 compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
5048 interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
5049 };
5050 @@ -1152,8 +1165,3 @@ &uart1 {
5051 &usb {
5052 interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
5053 };
5054 -
5055 -&vec {
5056 - compatible = "brcm,bcm2711-vec";
5057 - interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
5058 -};
5059 diff --git a/arch/arm/boot/dts/bcm271x-rpi-bt.dtsi b/arch/arm/boot/dts/bcm271x-rpi-bt.dtsi
5060 new file mode 100644
5061 index 000000000000..6b9b79f74cf3
5062 --- /dev/null
5063 +++ b/arch/arm/boot/dts/bcm271x-rpi-bt.dtsi
5064 @@ -0,0 +1,26 @@
5065 +// SPDX-License-Identifier: GPL-2.0
5066 +
5067 +&uart0 {
5068 + bt: bluetooth {
5069 + compatible = "brcm,bcm43438-bt";
5070 + max-speed = <3000000>;
5071 + shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
5072 + status = "disabled";
5073 + };
5074 +};
5075 +
5076 +&uart1 {
5077 + minibt: bluetooth {
5078 + compatible = "brcm,bcm43438-bt";
5079 + max-speed = <460800>;
5080 + shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
5081 + status = "disabled";
5082 + };
5083 +};
5084 +
5085 +/ {
5086 + __overrides__ {
5087 + krnbt = <&bt>,"status";
5088 + krnbt_baudrate = <&bt>,"max-speed:0";
5089 + };
5090 +};
5091 diff --git a/arch/arm/boot/dts/bcm2835-common.dtsi b/arch/arm/boot/dts/bcm2835-common.dtsi
5092 index c25e797b9060..06d8c3882cb7 100644
5093 --- a/arch/arm/boot/dts/bcm2835-common.dtsi
5094 +++ b/arch/arm/boot/dts/bcm2835-common.dtsi
5095 @@ -124,12 +124,14 @@ hdmi: hdmi@7e902000 {
5096 compatible = "brcm,bcm2835-hdmi";
5097 reg = <0x7e902000 0x600>,
5098 <0x7e808000 0x100>;
5099 + reg-names = "hdmi",
5100 + "hd";
5101 interrupts = <2 8>, <2 9>;
5102 ddc = <&i2c2>;
5103 clocks = <&clocks BCM2835_PLLH_PIX>,
5104 <&clocks BCM2835_CLOCK_HSM>;
5105 clock-names = "pixel", "hdmi";
5106 - dmas = <&dma 17>;
5107 + dmas = <&dma (17|(1<<27)|(1<<24))>;
5108 dma-names = "audio-rx";
5109 status = "disabled";
5110 };
5111 diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
5112 index 40b9405f1a8e..d2384d8e8555 100644
5113 --- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
5114 +++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
5115 @@ -126,3 +126,8 @@ &uart0 {
5116 pinctrl-0 = <&uart0_gpio14>;
5117 status = "okay";
5118 };
5119 +
5120 +/* i2c on camera/display connector is gpio 28&29 */
5121 +&i2c0mux {
5122 + pinctrl-1 = <&i2c0_gpio28>;
5123 +};
5124 diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts
5125 index 11edb581dbaf..4ceca674b752 100644
5126 --- a/arch/arm/boot/dts/bcm2835-rpi-a.dts
5127 +++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts
5128 @@ -121,3 +121,10 @@ &uart0 {
5129 pinctrl-0 = <&uart0_gpio14>;
5130 status = "okay";
5131 };
5132 +
5133 +/* i2c0 on camera/display connector is gpio 0&1. Not exposed on header.
5134 + * To avoid having to remap everything, map both ports to gpios 0&1
5135 + */
5136 +&i2c0mux {
5137 + pinctrl-1 = <&i2c0_gpio0>;
5138 +};
5139 diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
5140 index 1b435c64bd9c..8f2d10d82fa1 100644
5141 --- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
5142 +++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
5143 @@ -128,3 +128,8 @@ &uart0 {
5144 pinctrl-0 = <&uart0_gpio14>;
5145 status = "okay";
5146 };
5147 +
5148 +/* i2c on camera/display connector is gpio 28&29 */
5149 +&i2c0mux {
5150 + pinctrl-1 = <&i2c0_gpio28>;
5151 +};
5152 diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
5153 index a23c25c00eea..547c88a3ae9f 100644
5154 --- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
5155 +++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
5156 @@ -121,3 +121,10 @@ &uart0 {
5157 pinctrl-0 = <&uart0_gpio14>;
5158 status = "okay";
5159 };
5160 +
5161 +/* i2c0 on camera/display connector is gpio 0&1. Not exposed on header.
5162 + * To avoid having to remap everything, map both ports to gpios 0&1
5163 + */
5164 +&i2c0mux {
5165 + pinctrl-1 = <&i2c0_gpio0>;
5166 +};
5167 diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts
5168 index 1b63d6b19750..073fc99ef8a2 100644
5169 --- a/arch/arm/boot/dts/bcm2835-rpi-b.dts
5170 +++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts
5171 @@ -116,3 +116,10 @@ &uart0 {
5172 pinctrl-0 = <&uart0_gpio14>;
5173 status = "okay";
5174 };
5175 +
5176 +/* camera/display connector use BSC1 on GPIOS 2&3.
5177 + * To avoid having to remap everything, map both ports to gpios 0&1
5178 + */
5179 +&i2c0mux {
5180 + pinctrl-1 = <&i2c0_gpio0>;
5181 +};
5182 diff --git a/arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts b/arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts
5183 index a75c882e6575..95564c93a645 100644
5184 --- a/arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts
5185 +++ b/arch/arm/boot/dts/bcm2835-rpi-cm1-io1.dts
5186 @@ -95,3 +95,8 @@ &uart0 {
5187 pinctrl-0 = <&uart0_gpio14>;
5188 status = "okay";
5189 };
5190 +
5191 +/* WHAT TO DO HERE? */
5192 +&i2c0mux {
5193 + pinctrl-1 = <&i2c0_gpio28>;
5194 +};
5195 diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
5196 index 33b2b77aa47d..3ea5c7e6be54 100644
5197 --- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
5198 +++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
5199 @@ -149,3 +149,8 @@ &uart1 {
5200 pinctrl-0 = <&uart1_gpio14>;
5201 status = "okay";
5202 };
5203 +
5204 +/* i2c on camera/display connector is gpio 28&29 */
5205 +&i2c0mux {
5206 + pinctrl-1 = <&i2c0_gpio28>;
5207 +};
5208 diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero.dts b/arch/arm/boot/dts/bcm2835-rpi-zero.dts
5209 index 6f9b3a908f28..a0eabab12c99 100644
5210 --- a/arch/arm/boot/dts/bcm2835-rpi-zero.dts
5211 +++ b/arch/arm/boot/dts/bcm2835-rpi-zero.dts
5212 @@ -117,3 +117,8 @@ &uart0 {
5213 pinctrl-0 = <&uart0_gpio14>;
5214 status = "okay";
5215 };
5216 +
5217 +/* i2c on camera/display connector is gpio 28&29 */
5218 +&i2c0mux {
5219 + pinctrl-1 = <&i2c0_gpio28>;
5220 +};
5221 diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
5222 index 87ddcad76083..edc55bba5ff4 100644
5223 --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
5224 +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
5225 @@ -19,6 +19,11 @@ firmware: firmware {
5226
5227 mboxes = <&mailbox>;
5228 dma-ranges;
5229 +
5230 + firmware_clocks: clocks {
5231 + compatible = "raspberrypi,firmware-clocks";
5232 + #clock-cells = <1>;
5233 + };
5234 };
5235
5236 power: power {
5237 @@ -49,13 +54,17 @@ alt0: alt0 {
5238 };
5239 };
5240
5241 -&i2c0 {
5242 - pinctrl-names = "default";
5243 - pinctrl-0 = <&i2c0_gpio0>;
5244 +&i2c0if {
5245 status = "okay";
5246 clock-frequency = <100000>;
5247 };
5248
5249 +&i2c0mux {
5250 + pinctrl-0 = <&i2c0_gpio0>;
5251 + /* pinctrl-1 varies based on platform */
5252 + status = "okay";
5253 +};
5254 +
5255 &i2c1 {
5256 pinctrl-names = "default";
5257 pinctrl-0 = <&i2c1_gpio2>;
5258 @@ -67,6 +76,10 @@ &usb {
5259 power-domains = <&power RPI_POWER_DOMAIN_USB>;
5260 };
5261
5262 +&vc4 {
5263 + raspberrypi,firmware = <&firmware>;
5264 +};
5265 +
5266 &vec {
5267 power-domains = <&power RPI_POWER_DOMAIN_VEC>;
5268 status = "okay";
5269 diff --git a/arch/arm/boot/dts/bcm2835.dtsi b/arch/arm/boot/dts/bcm2835.dtsi
5270 index 0549686134ea..2ea891228ea0 100644
5271 --- a/arch/arm/boot/dts/bcm2835.dtsi
5272 +++ b/arch/arm/boot/dts/bcm2835.dtsi
5273 @@ -19,7 +19,7 @@ cpu@0 {
5274
5275 soc {
5276 ranges = <0x7e000000 0x20000000 0x02000000>;
5277 - dma-ranges = <0x40000000 0x00000000 0x20000000>;
5278 + dma-ranges = <0x80000000 0x00000000 0x20000000>;
5279 };
5280
5281 arm-pmu {
5282 diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
5283 index d8af8eeac7b6..bf22b74359d8 100644
5284 --- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
5285 +++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
5286 @@ -128,3 +128,8 @@ &uart0 {
5287 pinctrl-0 = <&uart0_gpio14>;
5288 status = "okay";
5289 };
5290 +
5291 +/* i2c on camera/display connector is gpio 28&29 */
5292 +&i2c0mux {
5293 + pinctrl-1 = <&i2c0_gpio28>;
5294 +};
5295 diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts b/arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts
5296 index 77099a7871b0..9529c0475673 100644
5297 --- a/arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts
5298 +++ b/arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts
5299 @@ -178,3 +178,8 @@ &uart1 {
5300 pinctrl-0 = <&uart1_gpio14>;
5301 status = "okay";
5302 };
5303 +
5304 +/* i2c on camera/display connector is gpio 44&45 */
5305 +&i2c0mux {
5306 + pinctrl-1 = <&i2c0_gpio44>;
5307 +};
5308 diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts
5309 index 61010266ca9a..40cb269aed0f 100644
5310 --- a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts
5311 +++ b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts
5312 @@ -181,3 +181,8 @@ &uart1 {
5313 pinctrl-0 = <&uart1_gpio14>;
5314 status = "okay";
5315 };
5316 +
5317 +/* i2c on camera/display connector is gpio 44&45 */
5318 +&i2c0mux {
5319 + pinctrl-1 = <&i2c0_gpio44>;
5320 +};
5321 diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
5322 index dd4a48604097..8f16b6b3fe08 100644
5323 --- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
5324 +++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
5325 @@ -174,3 +174,8 @@ &sdhost {
5326 status = "okay";
5327 bus-width = <4>;
5328 };
5329 +
5330 +/* i2c on camera/display connector is gpio 44&45 */
5331 +&i2c0mux {
5332 + pinctrl-1 = <&i2c0_gpio44>;
5333 +};
5334 diff --git a/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts b/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts
5335 index 588d9411ceb6..dde209ade51b 100644
5336 --- a/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts
5337 +++ b/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts
5338 @@ -94,3 +94,8 @@ &uart0 {
5339 pinctrl-0 = <&uart0_gpio14>;
5340 status = "okay";
5341 };
5342 +
5343 +/* WHAT TO DO HERE? */
5344 +&i2c0mux {
5345 + pinctrl-1 = <&i2c0_gpio28>;
5346 +};
5347 diff --git a/arch/arm/boot/dts/bcm283x-rpi-cam1-regulator.dtsi b/arch/arm/boot/dts/bcm283x-rpi-cam1-regulator.dtsi
5348 new file mode 100644
5349 index 000000000000..55237d03ed94
5350 --- /dev/null
5351 +++ b/arch/arm/boot/dts/bcm283x-rpi-cam1-regulator.dtsi
5352 @@ -0,0 +1,10 @@
5353 +// SPDX-License-Identifier: GPL-2.0
5354 +
5355 +/ {
5356 + cam1_reg: cam1_reg {
5357 + compatible = "regulator-fixed";
5358 + regulator-name = "cam1-reg";
5359 + enable-active-high;
5360 + status = "disabled";
5361 + };
5362 +};
5363 diff --git a/arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi b/arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi
5364 new file mode 100644
5365 index 000000000000..6e4ce8622b47
5366 --- /dev/null
5367 +++ b/arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi
5368 @@ -0,0 +1,4 @@
5369 +// SPDX-License-Identifier: GPL-2.0-only
5370 +&csi0 {
5371 + brcm,num-data-lanes = <2>;
5372 +};
5373 diff --git a/arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi b/arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi
5374 new file mode 100644
5375 index 000000000000..6938f4daacdc
5376 --- /dev/null
5377 +++ b/arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi
5378 @@ -0,0 +1,4 @@
5379 +// SPDX-License-Identifier: GPL-2.0-only
5380 +&csi1 {
5381 + brcm,num-data-lanes = <2>;
5382 +};
5383 diff --git a/arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi b/arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi
5384 new file mode 100644
5385 index 000000000000..b37037437bee
5386 --- /dev/null
5387 +++ b/arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi
5388 @@ -0,0 +1,4 @@
5389 +// SPDX-License-Identifier: GPL-2.0-only
5390 +&csi1 {
5391 + brcm,num-data-lanes = <4>;
5392 +};
5393 diff --git a/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi
5394 new file mode 100644
5395 index 000000000000..38f0074bce3f
5396 --- /dev/null
5397 +++ b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_28.dtsi
5398 @@ -0,0 +1,4 @@
5399 +&i2c0mux {
5400 + pinctrl-0 = <&i2c0_gpio0>;
5401 + pinctrl-1 = <&i2c0_gpio28>;
5402 +};
5403 diff --git a/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
5404 new file mode 100644
5405 index 000000000000..119946d878db
5406 --- /dev/null
5407 +++ b/arch/arm/boot/dts/bcm283x-rpi-i2c0mux_0_44.dtsi
5408 @@ -0,0 +1,4 @@
5409 +&i2c0mux {
5410 + pinctrl-0 = <&i2c0_gpio0>;
5411 + pinctrl-1 = <&i2c0_gpio44>;
5412 +};
5413 diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
5414 index c113661a6668..62d7ee513549 100644
5415 --- a/arch/arm/boot/dts/bcm283x.dtsi
5416 +++ b/arch/arm/boot/dts/bcm283x.dtsi
5417 @@ -336,7 +336,7 @@ spi: spi@7e204000 {
5418 status = "disabled";
5419 };
5420
5421 - i2c0: i2c@7e205000 {
5422 + i2c0if: i2c@7e205000 {
5423 compatible = "brcm,bcm2835-i2c";
5424 reg = <0x7e205000 0x200>;
5425 interrupts = <2 21>;
5426 @@ -346,6 +346,30 @@ i2c0: i2c@7e205000 {
5427 status = "disabled";
5428 };
5429
5430 + i2c0mux: i2c0mux {
5431 + compatible = "i2c-mux-pinctrl";
5432 + #address-cells = <1>;
5433 + #size-cells = <0>;
5434 +
5435 + i2c-parent = <&i2c0if>;
5436 +
5437 + pinctrl-names = "i2c0", "i2c_csi_dsi";
5438 +
5439 + status = "disabled";
5440 +
5441 + i2c0: i2c@0 {
5442 + reg = <0>;
5443 + #address-cells = <1>;
5444 + #size-cells = <0>;
5445 + };
5446 +
5447 + i2c_csi_dsi: i2c@1 {
5448 + reg = <1>;
5449 + #address-cells = <1>;
5450 + #size-cells = <0>;
5451 + };
5452 + };
5453 +
5454 dpi: dpi@7e208000 {
5455 compatible = "brcm,bcm2835-dpi";
5456 reg = <0x7e208000 0x8c>;
5457 diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
5458 new file mode 100644
5459 index 000000000000..44aedc149ff0
5460 --- /dev/null
5461 +++ b/arch/arm/boot/dts/overlays/Makefile
5462 @@ -0,0 +1,248 @@
5463 +# Overlays for the Raspberry Pi platform
5464 +
5465 +dtb-$(CONFIG_ARCH_BCM2835) += overlay_map.dtb
5466 +
5467 +dtbo-$(CONFIG_ARCH_BCM2835) += \
5468 + act-led.dtbo \
5469 + adafruit18.dtbo \
5470 + adau1977-adc.dtbo \
5471 + adau7002-simple.dtbo \
5472 + ads1015.dtbo \
5473 + ads1115.dtbo \
5474 + ads7846.dtbo \
5475 + adv7282m.dtbo \
5476 + adv728x-m.dtbo \
5477 + akkordion-iqdacplus.dtbo \
5478 + allo-boss-dac-pcm512x-audio.dtbo \
5479 + allo-boss2-dac-audio.dtbo \
5480 + allo-digione.dtbo \
5481 + allo-katana-dac-audio.dtbo \
5482 + allo-piano-dac-pcm512x-audio.dtbo \
5483 + allo-piano-dac-plus-pcm512x-audio.dtbo \
5484 + anyspi.dtbo \
5485 + apds9960.dtbo \
5486 + applepi-dac.dtbo \
5487 + at86rf233.dtbo \
5488 + audioinjector-addons.dtbo \
5489 + audioinjector-isolated-soundcard.dtbo \
5490 + audioinjector-ultra.dtbo \
5491 + audioinjector-wm8731-audio.dtbo \
5492 + audiosense-pi.dtbo \
5493 + audremap.dtbo \
5494 + balena-fin.dtbo \
5495 + cap1106.dtbo \
5496 + chipdip-dac.dtbo \
5497 + cma.dtbo \
5498 + dht11.dtbo \
5499 + dionaudio-loco.dtbo \
5500 + dionaudio-loco-v2.dtbo \
5501 + disable-bt.dtbo \
5502 + disable-wifi.dtbo \
5503 + dpi18.dtbo \
5504 + dpi18cpadhi.dtbo \
5505 + dpi24.dtbo \
5506 + draws.dtbo \
5507 + dwc-otg.dtbo \
5508 + dwc2.dtbo \
5509 + edt-ft5406.dtbo \
5510 + enc28j60.dtbo \
5511 + enc28j60-spi2.dtbo \
5512 + exc3000.dtbo \
5513 + fe-pi-audio.dtbo \
5514 + fsm-demo.dtbo \
5515 + ghost-amp.dtbo \
5516 + goodix.dtbo \
5517 + googlevoicehat-soundcard.dtbo \
5518 + gpio-fan.dtbo \
5519 + gpio-ir.dtbo \
5520 + gpio-ir-tx.dtbo \
5521 + gpio-key.dtbo \
5522 + gpio-led.dtbo \
5523 + gpio-no-bank0-irq.dtbo \
5524 + gpio-no-irq.dtbo \
5525 + gpio-poweroff.dtbo \
5526 + gpio-shutdown.dtbo \
5527 + hd44780-lcd.dtbo \
5528 + hdmi-backlight-hwhack-gpio.dtbo \
5529 + hifiberry-amp.dtbo \
5530 + hifiberry-amp100.dtbo \
5531 + hifiberry-dac.dtbo \
5532 + hifiberry-dacplus.dtbo \
5533 + hifiberry-dacplusadc.dtbo \
5534 + hifiberry-dacplusadcpro.dtbo \
5535 + hifiberry-dacplusdsp.dtbo \
5536 + hifiberry-dacplushd.dtbo \
5537 + hifiberry-digi.dtbo \
5538 + hifiberry-digi-pro.dtbo \
5539 + highperi.dtbo \
5540 + hy28a.dtbo \
5541 + hy28b.dtbo \
5542 + hy28b-2017.dtbo \
5543 + i-sabre-q2m.dtbo \
5544 + i2c-bcm2708.dtbo \
5545 + i2c-gpio.dtbo \
5546 + i2c-mux.dtbo \
5547 + i2c-pwm-pca9685a.dtbo \
5548 + i2c-rtc.dtbo \
5549 + i2c-rtc-gpio.dtbo \
5550 + i2c-sensor.dtbo \
5551 + i2c0.dtbo \
5552 + i2c1.dtbo \
5553 + i2c3.dtbo \
5554 + i2c4.dtbo \
5555 + i2c5.dtbo \
5556 + i2c6.dtbo \
5557 + i2s-gpio28-31.dtbo \
5558 + ilitek251x.dtbo \
5559 + imx219.dtbo \
5560 + imx290.dtbo \
5561 + imx378.dtbo \
5562 + imx477.dtbo \
5563 + iqaudio-codec.dtbo \
5564 + iqaudio-dac.dtbo \
5565 + iqaudio-dacplus.dtbo \
5566 + iqaudio-digi-wm8804-audio.dtbo \
5567 + irs1125.dtbo \
5568 + jedec-spi-nor.dtbo \
5569 + justboom-both.dtbo \
5570 + justboom-dac.dtbo \
5571 + justboom-digi.dtbo \
5572 + ltc294x.dtbo \
5573 + max98357a.dtbo \
5574 + maxtherm.dtbo \
5575 + mbed-dac.dtbo \
5576 + mcp23017.dtbo \
5577 + mcp23s17.dtbo \
5578 + mcp2515-can0.dtbo \
5579 + mcp2515-can1.dtbo \
5580 + mcp251xfd.dtbo \
5581 + mcp3008.dtbo \
5582 + mcp3202.dtbo \
5583 + mcp342x.dtbo \
5584 + media-center.dtbo \
5585 + merus-amp.dtbo \
5586 + midi-uart0.dtbo \
5587 + midi-uart1.dtbo \
5588 + midi-uart2.dtbo \
5589 + midi-uart3.dtbo \
5590 + midi-uart4.dtbo \
5591 + midi-uart5.dtbo \
5592 + minipitft13.dtbo \
5593 + miniuart-bt.dtbo \
5594 + mmc.dtbo \
5595 + mpu6050.dtbo \
5596 + mz61581.dtbo \
5597 + ov5647.dtbo \
5598 + ov7251.dtbo \
5599 + ov9281.dtbo \
5600 + papirus.dtbo \
5601 + pca953x.dtbo \
5602 + pcie-32bit-dma.dtbo \
5603 + pibell.dtbo \
5604 + pifacedigital.dtbo \
5605 + pifi-40.dtbo \
5606 + pifi-dac-hd.dtbo \
5607 + pifi-dac-zero.dtbo \
5608 + pifi-mini-210.dtbo \
5609 + piglow.dtbo \
5610 + piscreen.dtbo \
5611 + piscreen2r.dtbo \
5612 + pisound.dtbo \
5613 + pitft22.dtbo \
5614 + pitft28-capacitive.dtbo \
5615 + pitft28-resistive.dtbo \
5616 + pitft35-resistive.dtbo \
5617 + pps-gpio.dtbo \
5618 + pwm.dtbo \
5619 + pwm-2chan.dtbo \
5620 + pwm-ir-tx.dtbo \
5621 + qca7000.dtbo \
5622 + qca7000-uart0.dtbo \
5623 + rotary-encoder.dtbo \
5624 + rpi-backlight.dtbo \
5625 + rpi-cirrus-wm5102.dtbo \
5626 + rpi-dac.dtbo \
5627 + rpi-display.dtbo \
5628 + rpi-ft5406.dtbo \
5629 + rpi-poe.dtbo \
5630 + rpi-poe-plus.dtbo \
5631 + rpi-proto.dtbo \
5632 + rpi-sense.dtbo \
5633 + rpi-tv.dtbo \
5634 + rpivid-v4l2.dtbo \
5635 + rra-digidac1-wm8741-audio.dtbo \
5636 + sainsmart18.dtbo \
5637 + sc16is750-i2c.dtbo \
5638 + sc16is752-i2c.dtbo \
5639 + sc16is752-spi0.dtbo \
5640 + sc16is752-spi1.dtbo \
5641 + sdhost.dtbo \
5642 + sdio.dtbo \
5643 + seeed-can-fd-hat-v1.dtbo \
5644 + seeed-can-fd-hat-v2.dtbo \
5645 + sh1106-spi.dtbo \
5646 + si446x-spi0.dtbo \
5647 + smi.dtbo \
5648 + smi-dev.dtbo \
5649 + smi-nand.dtbo \
5650 + spi-gpio35-39.dtbo \
5651 + spi-gpio40-45.dtbo \
5652 + spi-rtc.dtbo \
5653 + spi0-1cs.dtbo \
5654 + spi0-2cs.dtbo \
5655 + spi1-1cs.dtbo \
5656 + spi1-2cs.dtbo \
5657 + spi1-3cs.dtbo \
5658 + spi2-1cs.dtbo \
5659 + spi2-2cs.dtbo \
5660 + spi2-3cs.dtbo \
5661 + spi3-1cs.dtbo \
5662 + spi3-2cs.dtbo \
5663 + spi4-1cs.dtbo \
5664 + spi4-2cs.dtbo \
5665 + spi5-1cs.dtbo \
5666 + spi5-2cs.dtbo \
5667 + spi6-1cs.dtbo \
5668 + spi6-2cs.dtbo \
5669 + ssd1306.dtbo \
5670 + ssd1306-spi.dtbo \
5671 + ssd1331-spi.dtbo \
5672 + ssd1351-spi.dtbo \
5673 + superaudioboard.dtbo \
5674 + sx150x.dtbo \
5675 + tc358743.dtbo \
5676 + tc358743-audio.dtbo \
5677 + tinylcd35.dtbo \
5678 + tpm-slb9670.dtbo \
5679 + uart0.dtbo \
5680 + uart1.dtbo \
5681 + uart2.dtbo \
5682 + uart3.dtbo \
5683 + uart4.dtbo \
5684 + uart5.dtbo \
5685 + udrc.dtbo \
5686 + ugreen-dabboard.dtbo \
5687 + upstream.dtbo \
5688 + upstream-pi4.dtbo \
5689 + vc4-fkms-v3d.dtbo \
5690 + vc4-fkms-v3d-pi4.dtbo \
5691 + vc4-kms-dpi-at056tn53v1.dtbo \
5692 + vc4-kms-dsi-7inch.dtbo \
5693 + vc4-kms-dsi-lt070me05000.dtbo \
5694 + vc4-kms-dsi-lt070me05000-v2.dtbo \
5695 + vc4-kms-kippah-7inch.dtbo \
5696 + vc4-kms-v3d.dtbo \
5697 + vc4-kms-v3d-pi4.dtbo \
5698 + vc4-kms-vga666.dtbo \
5699 + vga666.dtbo \
5700 + w1-gpio.dtbo \
5701 + w1-gpio-pullup.dtbo \
5702 + w5500.dtbo \
5703 + wittypi.dtbo \
5704 + wm8960-soundcard.dtbo
5705 +
5706 +targets += dtbs dtbs_install
5707 +targets += $(dtbo-y)
5708 +
5709 +always-y := $(dtbo-y)
5710 +clean-files := *.dtbo
5711 diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
5712 new file mode 100644
5713 index 000000000000..eb2c9adfb1a8
5714 --- /dev/null
5715 +++ b/arch/arm/boot/dts/overlays/README
5716 @@ -0,0 +1,3530 @@
5717 +Introduction
5718 +============
5719 +
5720 +This directory contains Device Tree overlays. Device Tree makes it possible
5721 +to support many hardware configurations with a single kernel and without the
5722 +need to explicitly load or blacklist kernel modules. Note that this isn't a
5723 +"pure" Device Tree configuration (c.f. MACH_BCM2835) - some on-board devices
5724 +are still configured by the board support code, but the intention is to
5725 +eventually reach that goal.
5726 +
5727 +On Raspberry Pi, Device Tree usage is controlled from /boot/config.txt. By
5728 +default, the Raspberry Pi kernel boots with device tree enabled. You can
5729 +completely disable DT usage (for now) by adding:
5730 +
5731 + device_tree=
5732 +
5733 +to your config.txt, which should cause your Pi to revert to the old way of
5734 +doing things after a reboot.
5735 +
5736 +In /boot you will find a .dtb for each base platform. This describes the
5737 +hardware that is part of the Raspberry Pi board. The loader (start.elf and its
5738 +siblings) selects the .dtb file appropriate for the platform by name, and reads
5739 +it into memory. At this point, all of the optional interfaces (i2c, i2s, spi)
5740 +are disabled, but they can be enabled using Device Tree parameters:
5741 +
5742 + dtparam=i2c=on,i2s=on,spi=on
5743 +
5744 +However, this shouldn't be necessary in many use cases because loading an
5745 +overlay that requires one of those interfaces will cause it to be enabled
5746 +automatically, and it is advisable to only enable interfaces if they are
5747 +needed.
5748 +
5749 +Configuring additional, optional hardware is done using Device Tree overlays
5750 +(see below).
5751 +
5752 +GPIO numbering uses the hardware pin numbering scheme (aka BCM scheme) and
5753 +not the physical pin numbers.
5754 +
5755 +raspi-config
5756 +============
5757 +
5758 +The Advanced Options section of the raspi-config utility can enable and disable
5759 +Device Tree use, as well as toggling the I2C and SPI interfaces. Note that it
5760 +is possible to both enable an interface and blacklist the driver, if for some
5761 +reason you should want to defer the loading.
5762 +
5763 +Modules
5764 +=======
5765 +
5766 +As well as describing the hardware, Device Tree also gives enough information
5767 +to allow suitable driver modules to be located and loaded, with the corollary
5768 +that unneeded modules are not loaded. As a result it should be possible to
5769 +remove lines from /etc/modules, and /etc/modprobe.d/raspi-blacklist.conf can
5770 +have its contents deleted (or commented out).
5771 +
5772 +Using Overlays
5773 +==============
5774 +
5775 +Overlays are loaded using the "dtoverlay" config.txt setting. As an example,
5776 +consider I2C Real Time Clock drivers. In the pre-DT world these would be loaded
5777 +by writing a magic string comprising a device identifier and an I2C address to
5778 +a special file in /sys/class/i2c-adapter, having first loaded the driver for
5779 +the I2C interface and the RTC device - something like this:
5780 +
5781 + modprobe i2c-bcm2835
5782 + modprobe rtc-ds1307
5783 + echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
5784 +
5785 +With DT enabled, this becomes a line in config.txt:
5786 +
5787 + dtoverlay=i2c-rtc,ds1307
5788 +
5789 +This causes the file /boot/overlays/i2c-rtc.dtbo to be loaded and a "node"
5790 +describing the DS1307 I2C device to be added to the Device Tree for the Pi. By
5791 +default it usees address 0x68, but this can be modified with an additional DT
5792 +parameter:
5793 +
5794 + dtoverlay=i2c-rtc,ds1307,addr=0x68
5795 +
5796 +Parameters usually have default values, although certain parameters are
5797 +mandatory. See the list of overlays below for a description of the parameters
5798 +and their defaults.
5799 +
5800 +Making new Overlays based on existing Overlays
5801 +==============================================
5802 +
5803 +Recent overlays have been designed in a more general way, so that they can be
5804 +adapted to hardware by changing their parameters. When you have additional
5805 +hardware with more than one device of a kind, you end up using the same overlay
5806 +multiple times with other parameters, e.g.
5807 +
5808 + # 2 CAN FD interfaces on spi but with different pins
5809 + dtoverlay=mcp251xfd,spi0-0,interrupt=25
5810 + dtoverlay=mcp251xfd,spi0-1,interrupt=24
5811 +
5812 + # a realtime clock on i2c
5813 + dtoverlay=i2c-rtc,pcf85063
5814 +
5815 +While this approach does work, it requires knowledge about the hardware design.
5816 +It is more feasible to simplify things for the end user by providing a single
5817 +overlay as it is done the traditional way.
5818 +
5819 +A new overlay can be generated by using ovmerge utility.
5820 +https://github.com/raspberrypi/utils/blob/master/ovmerge/ovmerge
5821 +
5822 +To generate an overlay for the above configuration we pass the configuration
5823 +to ovmerge and add the -c flag.
5824 +
5825 + ovmerge -c mcp251xfd-overlay.dts,spi0-0,interrupt=25 \
5826 + mcp251xfd-overlay.dts,spi0-1,interrupt=24 \
5827 + i2c-rtc-overlay.dts,pcf85063 \
5828 + >> merged-overlay.dts
5829 +
5830 +The -c option writes the command above as a comment into the overlay as
5831 +a marker that this overlay is generated and how it was generated.
5832 +After compiling the overlay it can be loaded in a single line.
5833 +
5834 + dtoverlay=merged
5835 +
5836 +It does the same as the original configuration but without parameters.
5837 +
5838 +The Overlay and Parameter Reference
5839 +===================================
5840 +
5841 +N.B. When editing this file, please preserve the indentation levels to make it
5842 +simple to parse programmatically. NO HARD TABS.
5843 +
5844 +
5845 +Name: <The base DTB>
5846 +Info: Configures the base Raspberry Pi hardware
5847 +Load: <loaded automatically>
5848 +Params:
5849 + ant1 Select antenna 1 (default). CM4 only.
5850 +
5851 + ant2 Select antenna 2. CM4 only.
5852 +
5853 + noant Disable both antennas. CM4 only.
5854 +
5855 + audio Set to "on" to enable the onboard ALSA audio
5856 + interface (default "off")
5857 +
5858 + axiperf Set to "on" to enable the AXI bus performance
5859 + monitors.
5860 + See /sys/kernel/debug/raspberrypi_axi_monitor
5861 + for the results.
5862 +
5863 + eee Enable Energy Efficient Ethernet support for
5864 + compatible devices (default "on"). See also
5865 + "tx_lpi_timer". Pi3B+ only.
5866 +
5867 + eth_downshift_after Set the number of auto-negotiation failures
5868 + after which the 1000Mbps modes are disabled.
5869 + Legal values are 2, 3, 4, 5 and 0, where
5870 + 0 means never downshift (default 2). Pi3B+ only.
5871 +
5872 + eth_led0 Set mode of LED0 - amber on Pi3B+ (default "1"),
5873 + green on Pi4 (default "0").
5874 + The legal values are:
5875 +
5876 + Pi3B+
5877 +
5878 + 0=link/activity 1=link1000/activity
5879 + 2=link100/activity 3=link10/activity
5880 + 4=link100/1000/activity 5=link10/1000/activity
5881 + 6=link10/100/activity 14=off 15=on
5882 +
5883 + Pi4
5884 +
5885 + 0=Speed/Activity 1=Speed
5886 + 2=Flash activity 3=FDX
5887 + 4=Off 5=On
5888 + 6=Alt 7=Speed/Flash
5889 + 8=Link 9=Activity
5890 +
5891 + eth_led1 Set mode of LED1 - green on Pi3B+ (default "6"),
5892 + amber on Pi4 (default "8"). See eth_led0 for
5893 + legal values.
5894 +
5895 + eth_max_speed Set the maximum speed a link is allowed
5896 + to negotiate. Legal values are 10, 100 and
5897 + 1000 (default 1000). Pi3B+ only.
5898 +
5899 + i2c_arm Set to "on" to enable the ARM's i2c interface
5900 + (default "off")
5901 +
5902 + i2c_vc Set to "on" to enable the i2c interface
5903 + usually reserved for the VideoCore processor
5904 + (default "off")
5905 +
5906 + i2c An alias for i2c_arm
5907 +
5908 + i2c_arm_baudrate Set the baudrate of the ARM's i2c interface
5909 + (default "100000")
5910 +
5911 + i2c_vc_baudrate Set the baudrate of the VideoCore i2c interface
5912 + (default "100000")
5913 +
5914 + i2c_baudrate An alias for i2c_arm_baudrate
5915 +
5916 + i2s Set to "on" to enable the i2s interface
5917 + (default "off")
5918 +
5919 + krnbt Set to "on" to enable autoprobing of Bluetooth
5920 + driver without need of hciattach/btattach
5921 + (default "off")
5922 +
5923 + krnbt_baudrate Set the baudrate of the PL011 UART when used
5924 + with krnbt=on
5925 +
5926 + spi Set to "on" to enable the spi interfaces
5927 + (default "off")
5928 +
5929 + spi_dma4 Use to enable 40-bit DMA on spi interfaces
5930 + (the assigned value doesn't matter)
5931 + (2711 only)
5932 +
5933 + random Set to "on" to enable the hardware random
5934 + number generator (default "on")
5935 +
5936 + sd_overclock Clock (in MHz) to use when the MMC framework
5937 + requests 50MHz
5938 +
5939 + sd_poll_once Looks for a card once after booting. Useful
5940 + for network booting scenarios to avoid the
5941 + overhead of continuous polling. N.B. Using
5942 + this option restricts the system to using a
5943 + single card per boot (or none at all).
5944 + (default off)
5945 +
5946 + sd_force_pio Disable DMA support for SD driver (default off)
5947 +
5948 + sd_pio_limit Number of blocks above which to use DMA for
5949 + SD card (default 1)
5950 +
5951 + sd_debug Enable debug output from SD driver (default off)
5952 +
5953 + sdio_overclock Clock (in MHz) to use when the MMC framework
5954 + requests 50MHz for the SDIO/WLAN interface.
5955 +
5956 + tx_lpi_timer Set the delay in microseconds between going idle
5957 + and entering the low power state (default 600).
5958 + Requires EEE to be enabled - see "eee".
5959 +
5960 + uart0 Set to "off" to disable uart0 (default "on")
5961 +
5962 + uart1 Set to "on" or "off" to enable or disable uart1
5963 + (default varies)
5964 +
5965 + watchdog Set to "on" to enable the hardware watchdog
5966 + (default "off")
5967 +
5968 + act_led_trigger Choose which activity the LED tracks.
5969 + Use "heartbeat" for a nice load indicator.
5970 + (default "mmc")
5971 +
5972 + act_led_activelow Set to "on" to invert the sense of the LED
5973 + (default "off")
5974 + N.B. For Pi 3B, 3B+, 3A+ and 4B, use the act-led
5975 + overlay.
5976 +
5977 + act_led_gpio Set which GPIO to use for the activity LED
5978 + (in case you want to connect it to an external
5979 + device)
5980 + (default "16" on a non-Plus board, "47" on a
5981 + Plus or Pi 2)
5982 + N.B. For Pi 3B, 3B+, 3A+ and 4B, use the act-led
5983 + overlay.
5984 +
5985 + pwr_led_trigger
5986 + pwr_led_activelow
5987 + pwr_led_gpio
5988 + As for act_led_*, but using the PWR LED.
5989 + Not available on Model A/B boards.
5990 +
5991 + N.B. It is recommended to only enable those interfaces that are needed.
5992 + Leaving all interfaces enabled can lead to unwanted behaviour (i2c_vc
5993 + interfering with Pi Camera, I2S and SPI hogging GPIO pins, etc.)
5994 + Note also that i2c, i2c_arm and i2c_vc are aliases for the physical
5995 + interfaces i2c0 and i2c1. Use of the numeric variants is still possible
5996 + but deprecated because the ARM/VC assignments differ between board
5997 + revisions. The same board-specific mapping applies to i2c_baudrate,
5998 + and the other i2c baudrate parameters.
5999 +
6000 +
6001 +Name: act-led
6002 +Info: Pi 3B, 3B+, 3A+ and 4B use a GPIO expander to drive the LEDs which can
6003 + only be accessed from the VPU. There is a special driver for this with a
6004 + separate DT node, which has the unfortunate consequence of breaking the
6005 + act_led_gpio and act_led_activelow dtparams.
6006 + This overlay changes the GPIO controller back to the standard one and
6007 + restores the dtparams.
6008 +Load: dtoverlay=act-led,<param>=<val>
6009 +Params: activelow Set to "on" to invert the sense of the LED
6010 + (default "off")
6011 +
6012 + gpio Set which GPIO to use for the activity LED
6013 + (in case you want to connect it to an external
6014 + device)
6015 + REQUIRED
6016 +
6017 +
6018 +Name: adafruit18
6019 +Info: Overlay for the SPI-connected Adafruit 1.8" display (based on the
6020 + ST7735R chip). It includes support for the "green tab" version.
6021 +Load: dtoverlay=adafruit18,<param>=<val>
6022 +Params: green Use the adafruit18_green variant.
6023 + rotate Display rotation {0,90,180,270}
6024 + speed SPI bus speed in Hz (default 4000000)
6025 + fps Display frame rate in Hz
6026 + bgr Enable BGR mode (default off)
6027 + debug Debug output level {0-7}
6028 + dc_pin GPIO pin for D/C (default 24)
6029 + reset_pin GPIO pin for RESET (default 25)
6030 + led_pin GPIO used to control backlight (default 18)
6031 +
6032 +
6033 +Name: adau1977-adc
6034 +Info: Overlay for activation of ADAU1977 ADC codec over I2C for control
6035 + and I2S for data.
6036 +Load: dtoverlay=adau1977-adc
6037 +Params: <None>
6038 +
6039 +
6040 +Name: adau7002-simple
6041 +Info: Overlay for the activation of ADAU7002 stereo PDM to I2S converter.
6042 +Load: dtoverlay=adau7002-simple,<param>=<val>
6043 +Params: card-name Override the default, "adau7002", card name.
6044 +
6045 +
6046 +Name: ads1015
6047 +Info: Overlay for activation of Texas Instruments ADS1015 ADC over I2C
6048 +Load: dtoverlay=ads1015,<param>=<val>
6049 +Params: addr I2C bus address of device. Set based on how the
6050 + addr pin is wired. (default=0x48 assumes addr
6051 + is pulled to GND)
6052 + cha_enable Enable virtual channel a. (default=true)
6053 + cha_cfg Set the configuration for virtual channel a.
6054 + (default=4 configures this channel for the
6055 + voltage at A0 with respect to GND)
6056 + cha_datarate Set the datarate (samples/sec) for this channel.
6057 + (default=4 sets 1600 sps)
6058 + cha_gain Set the gain of the Programmable Gain
6059 + Amplifier for this channel. (default=2 sets the
6060 + full scale of the channel to 2.048 Volts)
6061 +
6062 + Channel (ch) parameters can be set for each enabled channel.
6063 + A maximum of 4 channels can be enabled (letters a thru d).
6064 + For more information refer to the device datasheet at:
6065 + http://www.ti.com/lit/ds/symlink/ads1015.pdf
6066 +
6067 +
6068 +Name: ads1115
6069 +Info: Texas Instruments ADS1115 ADC
6070 +Load: dtoverlay=ads1115,<param>[=<val>]
6071 +Params: addr I2C bus address of device. Set based on how the
6072 + addr pin is wired. (default=0x48 assumes addr
6073 + is pulled to GND)
6074 + cha_enable Enable virtual channel a.
6075 + cha_cfg Set the configuration for virtual channel a.
6076 + (default=4 configures this channel for the
6077 + voltage at A0 with respect to GND)
6078 + cha_datarate Set the datarate (samples/sec) for this channel.
6079 + (default=7 sets 860 sps)
6080 + cha_gain Set the gain of the Programmable Gain
6081 + Amplifier for this channel. (Default 1 sets the
6082 + full scale of the channel to 4.096 Volts)
6083 +
6084 + Channel parameters can be set for each enabled channel.
6085 + A maximum of 4 channels can be enabled (letters a thru d).
6086 + For more information refer to the device datasheet at:
6087 + http://www.ti.com/lit/ds/symlink/ads1115.pdf
6088 +
6089 +
6090 +Name: ads7846
6091 +Info: ADS7846 Touch controller
6092 +Load: dtoverlay=ads7846,<param>=<val>
6093 +Params: cs SPI bus Chip Select (default 1)
6094 + speed SPI bus speed (default 2MHz, max 3.25MHz)
6095 + penirq GPIO used for PENIRQ. REQUIRED
6096 + penirq_pull Set GPIO pull (default 0=none, 2=pullup)
6097 + swapxy Swap x and y axis
6098 + xmin Minimum value on the X axis (default 0)
6099 + ymin Minimum value on the Y axis (default 0)
6100 + xmax Maximum value on the X axis (default 4095)
6101 + ymax Maximum value on the Y axis (default 4095)
6102 + pmin Minimum reported pressure value (default 0)
6103 + pmax Maximum reported pressure value (default 65535)
6104 + xohms Touchpanel sensitivity (X-plate resistance)
6105 + (default 400)
6106 +
6107 + penirq is required and usually xohms (60-100) has to be set as well.
6108 + Apart from that, pmax (255) and swapxy are also common.
6109 + The rest of the calibration can be done with xinput-calibrator.
6110 + See: github.com/notro/fbtft/wiki/FBTFT-on-Raspian
6111 + Device Tree binding document:
6112 + www.kernel.org/doc/Documentation/devicetree/bindings/input/ads7846.txt
6113 +
6114 +
6115 +Name: adv7282m
6116 +Info: Analog Devices ADV7282M analogue video to CSI2 bridge.
6117 + Uses Unicam1, which is the standard camera connector on most Pi
6118 + variants.
6119 +Load: dtoverlay=adv7282m,<param>=<val>
6120 +Params: addr Overrides the I2C address (default 0x21)
6121 +
6122 +
6123 +Name: adv728x-m
6124 +Info: Analog Devices ADV728[0|1|2]-M analogue video to CSI2 bridges.
6125 + This is a wrapper for adv7282m, and defaults to ADV7282M.
6126 +Load: dtoverlay=adv728x-m,<param>=<val>
6127 +Params: addr Overrides the I2C address (default 0x21)
6128 + adv7280m Select ADV7280-M.
6129 + adv7281m Select ADV7281-M.
6130 + adv7281ma Select ADV7281-MA.
6131 +
6132 +
6133 +Name: akkordion-iqdacplus
6134 +Info: Configures the Digital Dreamtime Akkordion Music Player (based on the
6135 + OEM IQAudIO DAC+ or DAC Zero module).
6136 +Load: dtoverlay=akkordion-iqdacplus,<param>=<val>
6137 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6138 + Digital volume control. Enable with
6139 + dtoverlay=akkordion-iqdacplus,24db_digital_gain
6140 + (The default behaviour is that the Digital
6141 + volume control is limited to a maximum of
6142 + 0dB. ie. it can attenuate but not provide
6143 + gain. For most users, this will be desired
6144 + as it will prevent clipping. By appending
6145 + the 24db_digital_gain parameter, the Digital
6146 + volume control will allow up to 24dB of
6147 + gain. If this parameter is enabled, it is the
6148 + responsibility of the user to ensure that
6149 + the Digital volume control is set to a value
6150 + that does not result in clipping/distortion!)
6151 +
6152 +
6153 +Name: allo-boss-dac-pcm512x-audio
6154 +Info: Configures the Allo Boss DAC audio cards.
6155 +Load: dtoverlay=allo-boss-dac-pcm512x-audio,<param>
6156 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6157 + Digital volume control. Enable with
6158 + "dtoverlay=allo-boss-dac-pcm512x-audio,
6159 + 24db_digital_gain"
6160 + (The default behaviour is that the Digital
6161 + volume control is limited to a maximum of
6162 + 0dB. ie. it can attenuate but not provide
6163 + gain. For most users, this will be desired
6164 + as it will prevent clipping. By appending
6165 + the 24db_digital_gain parameter, the Digital
6166 + volume control will allow up to 24dB of
6167 + gain. If this parameter is enabled, it is the
6168 + responsibility of the user to ensure that
6169 + the Digital volume control is set to a value
6170 + that does not result in clipping/distortion!)
6171 + slave Force Boss DAC into slave mode, using Pi a
6172 + master for bit clock and frame clock. Enable
6173 + with "dtoverlay=allo-boss-dac-pcm512x-audio,
6174 + slave"
6175 +
6176 +
6177 +Name: allo-boss2-dac-audio
6178 +Info: Configures the Allo Boss2 DAC audio card
6179 +Load: dtoverlay=allo-boss2-dac-audio
6180 +Params: <None>
6181 +
6182 +
6183 +Name: allo-digione
6184 +Info: Configures the Allo Digione audio card
6185 +Load: dtoverlay=allo-digione
6186 +Params: <None>
6187 +
6188 +
6189 +Name: allo-katana-dac-audio
6190 +Info: Configures the Allo Katana DAC audio card
6191 +Load: dtoverlay=allo-katana-dac-audio
6192 +Params: <None>
6193 +
6194 +
6195 +Name: allo-piano-dac-pcm512x-audio
6196 +Info: Configures the Allo Piano DAC (2.0/2.1) audio cards.
6197 + (NB. This initial support is for 2.0 channel audio ONLY! ie. stereo.
6198 + The subwoofer outputs on the Piano 2.1 are not currently supported!)
6199 +Load: dtoverlay=allo-piano-dac-pcm512x-audio,<param>
6200 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6201 + Digital volume control.
6202 + (The default behaviour is that the Digital
6203 + volume control is limited to a maximum of
6204 + 0dB. ie. it can attenuate but not provide
6205 + gain. For most users, this will be desired
6206 + as it will prevent clipping. By appending
6207 + the 24db_digital_gain parameter, the Digital
6208 + volume control will allow up to 24dB of
6209 + gain. If this parameter is enabled, it is the
6210 + responsibility of the user to ensure that
6211 + the Digital volume control is set to a value
6212 + that does not result in clipping/distortion!)
6213 +
6214 +
6215 +Name: allo-piano-dac-plus-pcm512x-audio
6216 +Info: Configures the Allo Piano DAC (2.1) audio cards.
6217 +Load: dtoverlay=allo-piano-dac-plus-pcm512x-audio,<param>
6218 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6219 + Digital volume control.
6220 + (The default behaviour is that the Digital
6221 + volume control is limited to a maximum of
6222 + 0dB. ie. it can attenuate but not provide
6223 + gain. For most users, this will be desired
6224 + as it will prevent clipping. By appending
6225 + the 24db_digital_gain parameter, the Digital
6226 + volume control will allow up to 24dB of
6227 + gain. If this parameter is enabled, it is the
6228 + responsibility of the user to ensure that
6229 + the Digital volume control is set to a value
6230 + that does not result in clipping/distortion!)
6231 + glb_mclk This option is only with Kali board. If enabled,
6232 + MCLK for Kali is used and PLL is disabled for
6233 + better voice quality. (default Off)
6234 +
6235 +
6236 +Name: anyspi
6237 +Info: Universal device tree overlay for SPI devices
6238 +
6239 + Just specify the SPI address and device name ("compatible" property).
6240 + This overlay lacks any device-specific parameter support!
6241 +
6242 + For devices on spi1 or spi2, the interfaces should be enabled
6243 + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
6244 +
6245 + Examples:
6246 + 1. SPI NOR flash on spi0.1, maximum SPI clock frequency 45MHz:
6247 + dtoverlay=anyspi:spi0-1,dev="jedec,spi-nor",speed=45000000
6248 + 2. MCP3204 ADC on spi1.2, maximum SPI clock frequency 500kHz:
6249 + dtoverlay=anyspi:spi1-2,dev="microchip,mcp3204"
6250 +Load: dtoverlay=anyspi,<param>=<val>
6251 +Params: spi<n>-<m> Configure device at spi<n>, cs<m>
6252 + (boolean, required)
6253 + dev Set device name to search compatible module
6254 + (string, required)
6255 + speed Set SPI clock frequency in Hz
6256 + (integer, optional, default 500000)
6257 +
6258 +
6259 +Name: apds9960
6260 +Info: Configures the AVAGO APDS9960 digital proximity, ambient light, RGB and
6261 + gesture sensor
6262 +Load: dtoverlay=apds9960,<param>=<val>
6263 +Params: gpiopin GPIO used for INT (default 4)
6264 + noints Disable the interrupt GPIO line.
6265 +
6266 +
6267 +Name: applepi-dac
6268 +Info: Configures the Orchard Audio ApplePi-DAC audio card
6269 +Load: dtoverlay=applepi-dac
6270 +Params: <None>
6271 +
6272 +
6273 +Name: at86rf233
6274 +Info: Configures the Atmel AT86RF233 802.15.4 low-power WPAN transceiver,
6275 + connected to spi0.0
6276 +Load: dtoverlay=at86rf233,<param>=<val>
6277 +Params: interrupt GPIO used for INT (default 23)
6278 + reset GPIO used for Reset (default 24)
6279 + sleep GPIO used for Sleep (default 25)
6280 + speed SPI bus speed in Hz (default 3000000)
6281 + trim Fine tuning of the internal capacitance
6282 + arrays (0=+0pF, 15=+4.5pF, default 15)
6283 +
6284 +
6285 +Name: audioinjector-addons
6286 +Info: Configures the audioinjector.net audio add on soundcards
6287 +Load: dtoverlay=audioinjector-addons,<param>=<val>
6288 +Params: non-stop-clocks Keeps the clocks running even when the stream
6289 + is paused or stopped (default off)
6290 +
6291 +
6292 +Name: audioinjector-isolated-soundcard
6293 +Info: Configures the audioinjector.net isolated soundcard
6294 +Load: dtoverlay=audioinjector-isolated-soundcard
6295 +Params: <None>
6296 +
6297 +
6298 +Name: audioinjector-ultra
6299 +Info: Configures the audioinjector.net ultra soundcard
6300 +Load: dtoverlay=audioinjector-ultra
6301 +Params: <None>
6302 +
6303 +
6304 +Name: audioinjector-wm8731-audio
6305 +Info: Configures the audioinjector.net audio add on soundcard
6306 +Load: dtoverlay=audioinjector-wm8731-audio
6307 +Params: <None>
6308 +
6309 +
6310 +Name: audiosense-pi
6311 +Info: Configures the audiosense-pi add on soundcard
6312 + For more information refer to
6313 + https://gitlab.com/kakar0t/audiosense-pi
6314 +Load: dtoverlay=audiosense-pi
6315 +Params: <None>
6316 +
6317 +
6318 +Name: audremap
6319 +Info: Switches PWM sound output to GPIOs on the 40-pin header
6320 +Load: dtoverlay=audremap,<param>=<val>
6321 +Params: swap_lr Reverse the channel allocation, which will also
6322 + swap the audio jack outputs (default off)
6323 + enable_jack Don't switch off the audio jack output
6324 + (default off)
6325 + pins_12_13 Select GPIOs 12 & 13 (default)
6326 + pins_18_19 Select GPIOs 18 & 19
6327 +
6328 +
6329 +Name: balena-fin
6330 +Info: Overlay that enables WLAN, Bluetooth and the GPIO expander on the
6331 + balenaFin carrier board for the Raspberry Pi Compute Module 3/3+ Lite.
6332 +Load: dtoverlay=balena-fin
6333 +Params: <None>
6334 +
6335 +
6336 +Name: bmp085_i2c-sensor
6337 +Info: This overlay is now deprecated - see i2c-sensor
6338 +Load: <Deprecated>
6339 +
6340 +
6341 +Name: cap1106
6342 +Info: Enables the ability to use the cap1106 touch sensor as a keyboard
6343 +Load: dtoverlay=cap1106,<param>=<val>
6344 +Params: int_pin GPIO pin for interrupt signal (default 23)
6345 +
6346 +
6347 +Name: chipdip-dac
6348 +Info: Configures Chip Dip audio cards.
6349 +Load: dtoverlay=chipdip-dac
6350 +Params: <None>
6351 +
6352 +
6353 +Name: cma
6354 +Info: Set custom CMA sizes, only use if you know what you are doing, might
6355 + clash with other overlays like vc4-fkms-v3d and vc4-kms-v3d.
6356 +Load: dtoverlay=cma,<param>=<val>
6357 +Params: cma-512 CMA is 512MB (needs 1GB)
6358 + cma-448 CMA is 448MB (needs 1GB)
6359 + cma-384 CMA is 384MB (needs 1GB)
6360 + cma-320 CMA is 320MB (needs 1GB)
6361 + cma-256 CMA is 256MB (needs 1GB)
6362 + cma-192 CMA is 192MB (needs 1GB)
6363 + cma-128 CMA is 128MB
6364 + cma-96 CMA is 96MB
6365 + cma-64 CMA is 64MB
6366 + cma-size CMA size in bytes, 4MB aligned
6367 + cma-default Use upstream's default value
6368 +
6369 +
6370 +Name: dht11
6371 +Info: Overlay for the DHT11/DHT21/DHT22 humidity/temperature sensors
6372 + Also sometimes found with the part number(s) AM230x.
6373 +Load: dtoverlay=dht11,<param>=<val>
6374 +Params: gpiopin GPIO connected to the sensor's DATA output.
6375 + (default 4)
6376 +
6377 +
6378 +Name: dionaudio-loco
6379 +Info: Configures the Dion Audio LOCO DAC-AMP
6380 +Load: dtoverlay=dionaudio-loco
6381 +Params: <None>
6382 +
6383 +
6384 +Name: dionaudio-loco-v2
6385 +Info: Configures the Dion Audio LOCO-V2 DAC-AMP
6386 +Load: dtoverlay=dionaudio-loco-v2,<param>=<val>
6387 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6388 + Digital volume control. Enable with
6389 + "dtoverlay=hifiberry-dacplus,24db_digital_gain"
6390 + (The default behaviour is that the Digital
6391 + volume control is limited to a maximum of
6392 + 0dB. ie. it can attenuate but not provide
6393 + gain. For most users, this will be desired
6394 + as it will prevent clipping. By appending
6395 + the 24dB_digital_gain parameter, the Digital
6396 + volume control will allow up to 24dB of
6397 + gain. If this parameter is enabled, it is the
6398 + responsibility of the user to ensure that
6399 + the Digital volume control is set to a value
6400 + that does not result in clipping/distortion!)
6401 +
6402 +
6403 +Name: disable-bt
6404 +Info: Disable onboard Bluetooth on Pi 3B, 3B+, 3A+, 4B and Zero W, restoring
6405 + UART0/ttyAMA0 over GPIOs 14 & 15.
6406 + N.B. To disable the systemd service that initialises the modem so it
6407 + doesn't use the UART, use 'sudo systemctl disable hciuart'.
6408 +Load: dtoverlay=disable-bt
6409 +Params: <None>
6410 +
6411 +
6412 +Name: disable-wifi
6413 +Info: Disable onboard WLAN on Pi 3B, 3B+, 3A+, 4B and Zero W.
6414 +Load: dtoverlay=disable-wifi
6415 +Params: <None>
6416 +
6417 +
6418 +Name: dpi18
6419 +Info: Overlay for a generic 18-bit DPI display
6420 + This uses GPIOs 0-21 (so no I2C, uart etc.), and activates the output
6421 + 2-3 seconds after the kernel has started.
6422 +Load: dtoverlay=dpi18
6423 +Params: <None>
6424 +
6425 +
6426 +Name: dpi18cpadhi
6427 +Info: Overlay for a generic 18-bit DPI display (in 'mode 6' connection scheme)
6428 + This uses GPIOs 0-9,12-17,20-25 (so no I2C, uart etc.), and activates
6429 + the output 3-3 seconds after the kernel has started.
6430 +Load: dtoverlay=dpi18cpadhi
6431 +Params: <None>
6432 +
6433 +
6434 +Name: dpi24
6435 +Info: Overlay for a generic 24-bit DPI display
6436 + This uses GPIOs 0-27 (so no I2C, uart etc.), and activates the output
6437 + 2-3 seconds after the kernel has started.
6438 +Load: dtoverlay=dpi24
6439 +Params: <None>
6440 +
6441 +
6442 +Name: draws
6443 +Info: Configures the NW Digital Radio DRAWS Hat
6444 +
6445 + The board includes an ADC to measure various board values and also
6446 + provides two analog user inputs on the expansion header. The ADC
6447 + can be configured for various sample rates and gain values to adjust
6448 + the input range. Tables describing the two parameters follow.
6449 +
6450 + ADC Gain Values:
6451 + 0 = +/- 6.144V
6452 + 1 = +/- 4.096V
6453 + 2 = +/- 2.048V
6454 + 3 = +/- 1.024V
6455 + 4 = +/- 0.512V
6456 + 5 = +/- 0.256V
6457 + 6 = +/- 0.256V
6458 + 7 = +/- 0.256V
6459 +
6460 + ADC Datarate Values:
6461 + 0 = 128sps
6462 + 1 = 250sps
6463 + 2 = 490sps
6464 + 3 = 920sps
6465 + 4 = 1600sps (default)
6466 + 5 = 2400sps
6467 + 6 = 3300sps
6468 + 7 = 3300sps
6469 +Load: dtoverlay=draws,<param>=<val>
6470 +Params: draws_adc_ch4_gain Sets the full scale resolution of the ADCs
6471 + input voltage sensor (default 1)
6472 +
6473 + draws_adc_ch4_datarate Sets the datarate of the ADCs input voltage
6474 + sensor
6475 +
6476 + draws_adc_ch5_gain Sets the full scale resolution of the ADCs
6477 + 5V rail voltage sensor (default 1)
6478 +
6479 + draws_adc_ch5_datarate Sets the datarate of the ADCs 4V rail voltage
6480 + sensor
6481 +
6482 + draws_adc_ch6_gain Sets the full scale resolution of the ADCs
6483 + AIN2 input (default 2)
6484 +
6485 + draws_adc_ch6_datarate Sets the datarate of the ADCs AIN2 input
6486 +
6487 + draws_adc_ch7_gain Sets the full scale resolution of the ADCs
6488 + AIN3 input (default 2)
6489 +
6490 + draws_adc_ch7_datarate Sets the datarate of the ADCs AIN3 input
6491 +
6492 + alsaname Name of the ALSA audio device (default "draws")
6493 +
6494 +
6495 +Name: dwc-otg
6496 +Info: Selects the dwc_otg USB controller driver which has fiq support. This
6497 + is the default on all except the Pi Zero which defaults to dwc2.
6498 +Load: dtoverlay=dwc-otg
6499 +Params: <None>
6500 +
6501 +
6502 +Name: dwc2
6503 +Info: Selects the dwc2 USB controller driver
6504 +Load: dtoverlay=dwc2,<param>=<val>
6505 +Params: dr_mode Dual role mode: "host", "peripheral" or "otg"
6506 +
6507 + g-rx-fifo-size Size of rx fifo size in gadget mode
6508 +
6509 + g-np-tx-fifo-size Size of non-periodic tx fifo size in gadget
6510 + mode
6511 +
6512 +
6513 +[ The ds1307-rtc overlay has been deleted. See i2c-rtc. ]
6514 +
6515 +
6516 +Name: edt-ft5406
6517 +Info: Overlay for the EDT FT5406 touchscreen on the CSI/DSI I2C interface.
6518 + This works with the Raspberry Pi 7" touchscreen when not being polled
6519 + by the firmware.
6520 + You MUST use either "disable_touchscreen=1" or "ignore_lcd=1" in
6521 + config.txt to stop the firmware polling the touchscreen.
6522 +Load: dtoverlay=edt-ft5406,<param>=<val>
6523 +Params: sizex Touchscreen size x (default 800)
6524 + sizey Touchscreen size y (default 480)
6525 + invx Touchscreen inverted x axis
6526 + invy Touchscreen inverted y axis
6527 + swapxy Touchscreen swapped x y axis
6528 +
6529 +
6530 +Name: enc28j60
6531 +Info: Overlay for the Microchip ENC28J60 Ethernet Controller on SPI0
6532 +Load: dtoverlay=enc28j60,<param>=<val>
6533 +Params: int_pin GPIO used for INT (default 25)
6534 +
6535 + speed SPI bus speed (default 12000000)
6536 +
6537 +
6538 +Name: enc28j60-spi2
6539 +Info: Overlay for the Microchip ENC28J60 Ethernet Controller on SPI2
6540 +Load: dtoverlay=enc28j60-spi2,<param>=<val>
6541 +Params: int_pin GPIO used for INT (default 39)
6542 +
6543 + speed SPI bus speed (default 12000000)
6544 +
6545 +
6546 +Name: exc3000
6547 +Info: Enables I2C connected EETI EXC3000 multiple touch controller using
6548 + GPIO 4 (pin 7 on GPIO header) for interrupt.
6549 +Load: dtoverlay=exc3000,<param>=<val>
6550 +Params: interrupt GPIO used for interrupt (default 4)
6551 + sizex Touchscreen size x (default 4096)
6552 + sizey Touchscreen size y (default 4096)
6553 + invx Touchscreen inverted x axis
6554 + invy Touchscreen inverted y axis
6555 + swapxy Touchscreen swapped x y axis
6556 +
6557 +
6558 +Name: fe-pi-audio
6559 +Info: Configures the Fe-Pi Audio Sound Card
6560 +Load: dtoverlay=fe-pi-audio
6561 +Params: <None>
6562 +
6563 +
6564 +Name: fsm-demo
6565 +Info: A demonstration of the gpio-fsm driver. The GPIOs are chosen to work
6566 + nicely with a "traffic-light" display of red, amber and green LEDs on
6567 + GPIOs 7, 8 and 25 respectively.
6568 +Load: dtoverlay=fsm-demo,<param>=<val>
6569 +Params: fsm_debug Enable debug logging (default off)
6570 +
6571 +
6572 +Name: ghost-amp
6573 +Info: An overlay for the Ghost amplifier.
6574 +Load: dtoverlay=ghost-amp,<param>=<val>
6575 +Params: fsm_debug Enable debug logging of the GPIO FSM (default
6576 + off)
6577 +
6578 +
6579 +Name: goodix
6580 +Info: Enables I2C connected Goodix gt9271 multiple touch controller using
6581 + GPIOs 4 and 17 (pins 7 and 11 on GPIO header) for interrupt and reset.
6582 +Load: dtoverlay=goodix,<param>=<val>
6583 +Params: interrupt GPIO used for interrupt (default 4)
6584 + reset GPIO used for reset (default 17)
6585 +
6586 +
6587 +Name: googlevoicehat-soundcard
6588 +Info: Configures the Google voiceHAT soundcard
6589 +Load: dtoverlay=googlevoicehat-soundcard
6590 +Params: <None>
6591 +
6592 +
6593 +Name: gpio-fan
6594 +Info: Configure a GPIO pin to control a cooling fan.
6595 +Load: dtoverlay=gpio-fan,<param>=<val>
6596 +Params: gpiopin GPIO used to control the fan (default 12)
6597 + temp Temperature at which the fan switches on, in
6598 + millicelcius (default 55000)
6599 +
6600 +
6601 +Name: gpio-ir
6602 +Info: Use GPIO pin as rc-core style infrared receiver input. The rc-core-
6603 + based gpio_ir_recv driver maps received keys directly to a
6604 + /dev/input/event* device, all decoding is done by the kernel - LIRC is
6605 + not required! The key mapping and other decoding parameters can be
6606 + configured by "ir-keytable" tool.
6607 +Load: dtoverlay=gpio-ir,<param>=<val>
6608 +Params: gpio_pin Input pin number. Default is 18.
6609 +
6610 + gpio_pull Desired pull-up/down state (off, down, up)
6611 + Default is "up".
6612 +
6613 + invert "1" = invert the input (active-low signalling).
6614 + "0" = non-inverted input (active-high
6615 + signalling). Default is "1".
6616 +
6617 + rc-map-name Default rc keymap (can also be changed by
6618 + ir-keytable), defaults to "rc-rc6-mce"
6619 +
6620 +
6621 +Name: gpio-ir-tx
6622 +Info: Use GPIO pin as bit-banged infrared transmitter output.
6623 + This is an alternative to "pwm-ir-tx". gpio-ir-tx doesn't require
6624 + a PWM so it can be used together with onboard analog audio.
6625 +Load: dtoverlay=gpio-ir-tx,<param>=<val>
6626 +Params: gpio_pin Output GPIO (default 18)
6627 +
6628 + invert "1" = invert the output (make it active-low).
6629 + Default is "0" (active-high).
6630 +
6631 +
6632 +Name: gpio-key
6633 +Info: This is a generic overlay for activating GPIO keypresses using
6634 + the gpio-keys library and this dtoverlay. Multiple keys can be
6635 + set up using multiple calls to the overlay for configuring
6636 + additional buttons or joysticks. You can see available keycodes
6637 + at https://github.com/torvalds/linux/blob/v4.12/include/uapi/
6638 + linux/input-event-codes.h#L64
6639 +Load: dtoverlay=gpio-key,<param>=<val>
6640 +Params: gpio GPIO pin to trigger on (default 3)
6641 + active_low When this is 1 (active low), a falling
6642 + edge generates a key down event and a
6643 + rising edge generates a key up event.
6644 + When this is 0 (active high), this is
6645 + reversed. The default is 1 (active low)
6646 + gpio_pull Desired pull-up/down state (off, down, up)
6647 + Default is "up". Note that the default pin
6648 + (GPIO3) has an external pullup
6649 + label Set a label for the key
6650 + keycode Set the key code for the button
6651 +
6652 +
6653 +
6654 +Name: gpio-led
6655 +Info: This is a generic overlay for activating LEDs (or any other component)
6656 + by a GPIO pin. Multiple LEDs can be set up using multiple calls to the
6657 + overlay. While there are many existing methods to activate LEDs on the
6658 + RPi, this method offers some advantages:
6659 + 1) Does not require any userspace programs.
6660 + 2) LEDs can be connected to the kernel's led-trigger framework,
6661 + and drive the LED based on triggers such as cpu load, heartbeat,
6662 + kernel panic, key input, timers and others.
6663 + 3) LED can be tied to the input state of another GPIO pin.
6664 + 4) The LED is setup early during the kernel boot process (useful
6665 + for cpu/heartbeat/panic triggers).
6666 +
6667 + Typical electrical connection is:
6668 + RPI-GPIO.19 -> LED -> 300ohm resister -> RPI-GND
6669 + The GPIO pin number can be changed with the 'gpio=' parameter.
6670 +
6671 + To control an LED from userspace, write a 0 or 1 value:
6672 + echo 1 > /sys/class/leds/myled1/brightness
6673 + The 'myled1' name can be changed with the 'label=' parameter.
6674 +
6675 + To connect the LED to a kernel trigger from userspace:
6676 + echo cpu > /sys/class/leds/myled1/trigger
6677 + echo heartbeat > /sys/class/leds/myled1/trigger
6678 + echo none > /sys/class/leds/myled1/trigger
6679 + To connect the LED to GPIO.26 pin (physical pin 37):
6680 + echo gpio > /sys/class/leds/myled1/trigger
6681 + echo 26 > /sys/class/leds/myled1/gpio
6682 + Available triggers:
6683 + cat /sys/class/leds/myled1/trigger
6684 +
6685 + More information about the Linux kernel LED/Trigger system:
6686 + https://www.kernel.org/doc/Documentation/leds/leds-class.rst
6687 + https://www.kernel.org/doc/Documentation/leds/ledtrig-oneshot.rst
6688 +Load: dtoverlay=gpio-led,<param>=<val>
6689 +Params: gpio GPIO pin connected to the LED (default 19)
6690 + label The label for this LED. It will appear under
6691 + /sys/class/leds/<label> . Default 'myled1'.
6692 + trigger Set the led-trigger to connect to this LED.
6693 + default 'none' (LED is user-controlled).
6694 + Some possible triggers:
6695 + cpu - CPU load (all CPUs)
6696 + cpu0 - CPU load of first CPU.
6697 + mmc - disk activity (all disks)
6698 + panic - turn on on kernel panic
6699 + heartbeat - indicate system health
6700 + gpio - connect to a GPIO input pin (note:
6701 + currently the GPIO PIN can not be set
6702 + using overlay parameters, must be
6703 + done in userspace, see examples above.
6704 + active_low Set to 1 to turn invert the LED control
6705 + (writing 0 to /sys/class/leds/XXX/brightness
6706 + will turn on the GPIO/LED). Default '0'.
6707 +
6708 +
6709 +Name: gpio-no-bank0-irq
6710 +Info: Use this overlay to disable GPIO interrupts for GPIOs in bank 0 (0-27),
6711 + which can be useful for UIO drivers.
6712 + N.B. Using this overlay will trigger a kernel WARN during booting, but
6713 + this can safely be ignored - the system should work as expected.
6714 +Load: dtoverlay=gpio-no-bank0-irq
6715 +Params: <None>
6716 +
6717 +
6718 +Name: gpio-no-irq
6719 +Info: Use this overlay to disable all GPIO interrupts, which can be useful
6720 + for user-space GPIO edge detection systems.
6721 +Load: dtoverlay=gpio-no-irq
6722 +Params: <None>
6723 +
6724 +
6725 +Name: gpio-poweroff
6726 +Info: Drives a GPIO high or low on poweroff (including halt). Using this
6727 + overlay interferes with the normal power-down sequence, preventing the
6728 + kernel from resetting the SoC (a necessary step in a normal power-off
6729 + or reboot). This also disables the ability to trigger a boot by driving
6730 + GPIO3 low.
6731 +
6732 + Users of this overlay are required to provide an external mechanism to
6733 + switch off the power supply when signalled - failure to do so results
6734 + in a kernel BUG, increased power consumption and undefined behaviour.
6735 +Load: dtoverlay=gpio-poweroff,<param>=<val>
6736 +Params: gpiopin GPIO for signalling (default 26)
6737 +
6738 + active_low Set if the power control device requires a
6739 + high->low transition to trigger a power-down.
6740 + Note that this will require the support of a
6741 + custom dt-blob.bin to prevent a power-down
6742 + during the boot process, and that a reboot
6743 + will also cause the pin to go low.
6744 + input Set if the gpio pin should be configured as
6745 + an input.
6746 + export Set to export the configured pin to sysfs
6747 + timeout_ms Specify (in ms) how long the kernel waits for
6748 + power-down before issuing a WARN (default 3000).
6749 +
6750 +
6751 +Name: gpio-shutdown
6752 +Info: Initiates a shutdown when GPIO pin changes. The given GPIO pin
6753 + is configured as an input key that generates KEY_POWER events.
6754 +
6755 + This event is handled by systemd-logind by initiating a
6756 + shutdown. Systemd versions older than 225 need an udev rule
6757 + enable listening to the input device:
6758 +
6759 + ACTION!="REMOVE", SUBSYSTEM=="input", KERNEL=="event*", \
6760 + SUBSYSTEMS=="platform", DRIVERS=="gpio-keys", \
6761 + ATTRS{keys}=="116", TAG+="power-switch"
6762 +
6763 + Alternatively this event can be handled also on systems without
6764 + systemd, just by traditional SysV init daemon. KEY_POWER event
6765 + (keycode 116) needs to be mapped to KeyboardSignal on console
6766 + and then kb::kbrequest inittab action which is triggered by
6767 + KeyboardSignal from console can be configured to issue system
6768 + shutdown. Steps for this configuration are:
6769 +
6770 + Add following lines to the /etc/console-setup/remap.inc file:
6771 +
6772 + # Key Power as special keypress
6773 + keycode 116 = KeyboardSignal
6774 +
6775 + Then add following lines to /etc/inittab file:
6776 +
6777 + # Action on special keypress (Key Power)
6778 + kb::kbrequest:/sbin/shutdown -t1 -a -h -P now
6779 +
6780 + And finally reload configuration by calling following commands:
6781 +
6782 + # dpkg-reconfigure console-setup
6783 + # service console-setup reload
6784 + # init q
6785 +
6786 + This overlay only handles shutdown. After shutdown, the system
6787 + can be powered up again by driving GPIO3 low. The default
6788 + configuration uses GPIO3 with a pullup, so if you connect a
6789 + button between GPIO3 and GND (pin 5 and 6 on the 40-pin header),
6790 + you get a shutdown and power-up button. Please note that
6791 + Raspberry Pi 1 Model B rev 1 uses GPIO1 instead of GPIO3.
6792 +Load: dtoverlay=gpio-shutdown,<param>=<val>
6793 +Params: gpio_pin GPIO pin to trigger on (default 3)
6794 + For Raspberry Pi 1 Model B rev 1 set this
6795 + explicitly to value 1, e.g.:
6796 +
6797 + dtoverlay=gpio-shutdown,gpio_pin=1
6798 +
6799 + active_low When this is 1 (active low), a falling
6800 + edge generates a key down event and a
6801 + rising edge generates a key up event.
6802 + When this is 0 (active high), this is
6803 + reversed. The default is 1 (active low).
6804 +
6805 + gpio_pull Desired pull-up/down state (off, down, up)
6806 + Default is "up".
6807 +
6808 + Note that the default pin (GPIO3) has an
6809 + external pullup. Same applies for GPIO1
6810 + on Raspberry Pi 1 Model B rev 1.
6811 +
6812 + debounce Specify the debounce interval in milliseconds
6813 + (default 100)
6814 +
6815 +
6816 +Name: hd44780-lcd
6817 +Info: Configures an HD44780 compatible LCD display. Uses 4 gpio pins for
6818 + data, 2 gpio pins for enable and register select and 1 optional pin
6819 + for enabling/disabling the backlight display.
6820 +Load: dtoverlay=hd44780-lcd,<param>=<val>
6821 +Params: pin_d4 GPIO pin for data pin D4 (default 6)
6822 +
6823 + pin_d5 GPIO pin for data pin D5 (default 13)
6824 +
6825 + pin_d6 GPIO pin for data pin D6 (default 19)
6826 +
6827 + pin_d7 GPIO pin for data pin D7 (default 26)
6828 +
6829 + pin_en GPIO pin for "Enable" (default 21)
6830 +
6831 + pin_rs GPIO pin for "Register Select" (default 20)
6832 +
6833 + pin_bl Optional pin for enabling/disabling the
6834 + display backlight. (default disabled)
6835 +
6836 + display_height Height of the display in characters
6837 +
6838 + display_width Width of the display in characters
6839 +
6840 +
6841 +Name: hdmi-backlight-hwhack-gpio
6842 +Info: Devicetree overlay for GPIO based backlight on/off capability.
6843 + Use this if you have one of those HDMI displays whose backlight cannot
6844 + be controlled via DPMS over HDMI and plan to do a little soldering to
6845 + use an RPi gpio pin for on/off switching. See:
6846 + https://www.waveshare.com/wiki/7inch_HDMI_LCD_(C)#Backlight_Control
6847 +Load: dtoverlay=hdmi-backlight-hwhack-gpio,<param>=<val>
6848 +Params: gpio_pin GPIO pin used (default 17)
6849 + active_low Set this to 1 if the display backlight is
6850 + switched on when the wire goes low.
6851 + Leave the default (value 0) if the backlight
6852 + expects a high to switch it on.
6853 +
6854 +
6855 +Name: hifiberry-amp
6856 +Info: Configures the HifiBerry Amp and Amp+ audio cards
6857 +Load: dtoverlay=hifiberry-amp
6858 +Params: <None>
6859 +
6860 +
6861 +Name: hifiberry-amp100
6862 +Info: Configures the HifiBerry AMP100 audio card
6863 +Load: dtoverlay=hifiberry-amp100,<param>=<val>
6864 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6865 + Digital volume control. Enable with
6866 + "dtoverlay=hifiberry-amp100,24db_digital_gain"
6867 + (The default behaviour is that the Digital
6868 + volume control is limited to a maximum of
6869 + 0dB. ie. it can attenuate but not provide
6870 + gain. For most users, this will be desired
6871 + as it will prevent clipping. By appending
6872 + the 24dB_digital_gain parameter, the Digital
6873 + volume control will allow up to 24dB of
6874 + gain. If this parameter is enabled, it is the
6875 + responsibility of the user to ensure that
6876 + the Digital volume control is set to a value
6877 + that does not result in clipping/distortion!)
6878 + slave Force DAC+ Pro into slave mode, using Pi as
6879 + master for bit clock and frame clock.
6880 + leds_off If set to 'true' the onboard indicator LEDs
6881 + are switched off at all times.
6882 + auto_mute If set to 'true' the amplifier is automatically
6883 + muted when the DAC is not playing.
6884 + mute_ext_ctl The amplifier's HW mute control is enabled
6885 + in ALSA mixer and set to <val>.
6886 + Will be overwritten by ALSA user settings.
6887 +
6888 +
6889 +Name: hifiberry-dac
6890 +Info: Configures the HifiBerry DAC audio cards
6891 +Load: dtoverlay=hifiberry-dac
6892 +Params: <None>
6893 +
6894 +
6895 +Name: hifiberry-dacplus
6896 +Info: Configures the HifiBerry DAC+ audio card
6897 +Load: dtoverlay=hifiberry-dacplus,<param>=<val>
6898 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6899 + Digital volume control. Enable with
6900 + "dtoverlay=hifiberry-dacplus,24db_digital_gain"
6901 + (The default behaviour is that the Digital
6902 + volume control is limited to a maximum of
6903 + 0dB. ie. it can attenuate but not provide
6904 + gain. For most users, this will be desired
6905 + as it will prevent clipping. By appending
6906 + the 24dB_digital_gain parameter, the Digital
6907 + volume control will allow up to 24dB of
6908 + gain. If this parameter is enabled, it is the
6909 + responsibility of the user to ensure that
6910 + the Digital volume control is set to a value
6911 + that does not result in clipping/distortion!)
6912 + slave Force DAC+ Pro into slave mode, using Pi as
6913 + master for bit clock and frame clock.
6914 + leds_off If set to 'true' the onboard indicator LEDs
6915 + are switched off at all times.
6916 +
6917 +
6918 +Name: hifiberry-dacplusadc
6919 +Info: Configures the HifiBerry DAC+ADC audio card
6920 +Load: dtoverlay=hifiberry-dacplusadc,<param>=<val>
6921 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6922 + Digital volume control. Enable with
6923 + "dtoverlay=hifiberry-dacplus,24db_digital_gain"
6924 + (The default behaviour is that the Digital
6925 + volume control is limited to a maximum of
6926 + 0dB. ie. it can attenuate but not provide
6927 + gain. For most users, this will be desired
6928 + as it will prevent clipping. By appending
6929 + the 24dB_digital_gain parameter, the Digital
6930 + volume control will allow up to 24dB of
6931 + gain. If this parameter is enabled, it is the
6932 + responsibility of the user to ensure that
6933 + the Digital volume control is set to a value
6934 + that does not result in clipping/distortion!)
6935 + slave Force DAC+ Pro into slave mode, using Pi as
6936 + master for bit clock and frame clock.
6937 + leds_off If set to 'true' the onboard indicator LEDs
6938 + are switched off at all times.
6939 +
6940 +
6941 +Name: hifiberry-dacplusadcpro
6942 +Info: Configures the HifiBerry DAC+ADC PRO audio card
6943 +Load: dtoverlay=hifiberry-dacplusadcpro,<param>=<val>
6944 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
6945 + Digital volume control. Enable with
6946 + "dtoverlay=hifiberry-dacplusadcpro,24db_digital_gain"
6947 + (The default behaviour is that the Digital
6948 + volume control is limited to a maximum of
6949 + 0dB. ie. it can attenuate but not provide
6950 + gain. For most users, this will be desired
6951 + as it will prevent clipping. By appending
6952 + the 24dB_digital_gain parameter, the Digital
6953 + volume control will allow up to 24dB of
6954 + gain. If this parameter is enabled, it is the
6955 + responsibility of the user to ensure that
6956 + the Digital volume control is set to a value
6957 + that does not result in clipping/distortion!)
6958 + slave Force DAC+ADC Pro into slave mode, using Pi as
6959 + master for bit clock and frame clock.
6960 + leds_off If set to 'true' the onboard indicator LEDs
6961 + are switched off at all times.
6962 +
6963 +
6964 +Name: hifiberry-dacplusdsp
6965 +Info: Configures the HifiBerry DAC+DSP audio card
6966 +Load: dtoverlay=hifiberry-dacplusdsp
6967 +Params: <None>
6968 +
6969 +
6970 +Name: hifiberry-dacplushd
6971 +Info: Configures the HifiBerry DAC+ HD audio card
6972 +Load: dtoverlay=hifiberry-dacplushd
6973 +Params: <None>
6974 +
6975 +
6976 +Name: hifiberry-digi
6977 +Info: Configures the HifiBerry Digi and Digi+ audio card
6978 +Load: dtoverlay=hifiberry-digi
6979 +Params: <None>
6980 +
6981 +
6982 +Name: hifiberry-digi-pro
6983 +Info: Configures the HifiBerry Digi+ Pro audio card
6984 +Load: dtoverlay=hifiberry-digi-pro
6985 +Params: <None>
6986 +
6987 +
6988 +Name: highperi
6989 +Info: Enables "High Peripheral" mode
6990 +Load: dtoverlay=highperi
6991 +Params: <None>
6992 +
6993 +
6994 +Name: hy28a
6995 +Info: HY28A - 2.8" TFT LCD Display Module by HAOYU Electronics
6996 + Default values match Texy's display shield
6997 +Load: dtoverlay=hy28a,<param>=<val>
6998 +Params: speed Display SPI bus speed
6999 +
7000 + rotate Display rotation {0,90,180,270}
7001 +
7002 + fps Delay between frame updates
7003 +
7004 + debug Debug output level {0-7}
7005 +
7006 + xohms Touchpanel sensitivity (X-plate resistance)
7007 +
7008 + resetgpio GPIO used to reset controller
7009 +
7010 + ledgpio GPIO used to control backlight
7011 +
7012 +
7013 +Name: hy28b
7014 +Info: HY28B - 2.8" TFT LCD Display Module by HAOYU Electronics
7015 + Default values match Texy's display shield
7016 +Load: dtoverlay=hy28b,<param>=<val>
7017 +Params: speed Display SPI bus speed
7018 +
7019 + rotate Display rotation {0,90,180,270}
7020 +
7021 + fps Delay between frame updates
7022 +
7023 + debug Debug output level {0-7}
7024 +
7025 + xohms Touchpanel sensitivity (X-plate resistance)
7026 +
7027 + resetgpio GPIO used to reset controller
7028 +
7029 + ledgpio GPIO used to control backlight
7030 +
7031 +
7032 +Name: hy28b-2017
7033 +Info: HY28B 2017 version - 2.8" TFT LCD Display Module by HAOYU Electronics
7034 + Default values match Texy's display shield
7035 +Load: dtoverlay=hy28b-2017,<param>=<val>
7036 +Params: speed Display SPI bus speed
7037 +
7038 + rotate Display rotation {0,90,180,270}
7039 +
7040 + fps Delay between frame updates
7041 +
7042 + debug Debug output level {0-7}
7043 +
7044 + xohms Touchpanel sensitivity (X-plate resistance)
7045 +
7046 + resetgpio GPIO used to reset controller
7047 +
7048 + ledgpio GPIO used to control backlight
7049 +
7050 +
7051 +Name: i-sabre-q2m
7052 +Info: Configures the Audiophonics I-SABRE Q2M DAC
7053 +Load: dtoverlay=i-sabre-q2m
7054 +Params: <None>
7055 +
7056 +
7057 +Name: i2c-bcm2708
7058 +Info: Fall back to the i2c_bcm2708 driver for the i2c_arm bus.
7059 +Load: dtoverlay=i2c-bcm2708
7060 +Params: <None>
7061 +
7062 +
7063 +Name: i2c-gpio
7064 +Info: Adds support for software i2c controller on gpio pins
7065 +Load: dtoverlay=i2c-gpio,<param>=<val>
7066 +Params: i2c_gpio_sda GPIO used for I2C data (default "23")
7067 +
7068 + i2c_gpio_scl GPIO used for I2C clock (default "24")
7069 +
7070 + i2c_gpio_delay_us Clock delay in microseconds
7071 + (default "2" = ~100kHz)
7072 +
7073 + bus Set to a unique, non-zero value if wanting
7074 + multiple i2c-gpio busses. If set, will be used
7075 + as the preferred bus number (/dev/i2c-<n>). If
7076 + not set, the default value is 0, but the bus
7077 + number will be dynamically assigned - probably
7078 + 3.
7079 +
7080 +
7081 +Name: i2c-mux
7082 +Info: Adds support for a number of I2C bus multiplexers on i2c_arm
7083 +Load: dtoverlay=i2c-mux,<param>=<val>
7084 +Params: pca9542 Select the NXP PCA9542 device
7085 +
7086 + pca9545 Select the NXP PCA9545 device
7087 +
7088 + pca9548 Select the NXP PCA9548 device
7089 +
7090 + addr Change I2C address of the device (default 0x70)
7091 +
7092 +
7093 +[ The i2c-mux-pca9548a overlay has been deleted. See i2c-mux. ]
7094 +
7095 +
7096 +Name: i2c-pwm-pca9685a
7097 +Info: Adds support for an NXP PCA9685A I2C PWM controller on i2c_arm
7098 +Load: dtoverlay=i2c-pwm-pca9685a,<param>=<val>
7099 +Params: addr I2C address of PCA9685A (default 0x40)
7100 +
7101 +
7102 +Name: i2c-rtc
7103 +Info: Adds support for a number of I2C Real Time Clock devices
7104 +Load: dtoverlay=i2c-rtc,<param>=<val>
7105 +Params: abx80x Select one of the ABx80x family:
7106 + AB0801, AB0803, AB0804, AB0805,
7107 + AB1801, AB1803, AB1804, AB1805
7108 +
7109 + bq32000 Select the TI BQ32000 device
7110 +
7111 + ds1307 Select the DS1307 device
7112 +
7113 + ds1339 Select the DS1339 device
7114 +
7115 + ds1340 Select the DS1340 device
7116 +
7117 + ds3231 Select the DS3231 device
7118 +
7119 + m41t62 Select the M41T62 device
7120 +
7121 + mcp7940x Select the MCP7940x device
7122 +
7123 + mcp7941x Select the MCP7941x device
7124 +
7125 + pcf2127 Select the PCF2127 device
7126 +
7127 + pcf2129 Select the PCF2129 device
7128 +
7129 + pcf85063 Select the PCF85063 device
7130 +
7131 + pcf85063a Select the PCF85063A device
7132 +
7133 + pcf8523 Select the PCF8523 device
7134 +
7135 + pcf85363 Select the PCF85363 device
7136 +
7137 + pcf8563 Select the PCF8563 device
7138 +
7139 + rv1805 Select the Micro Crystal RV1805 device
7140 +
7141 + rv3028 Select the Micro Crystal RV3028 device
7142 +
7143 + sd3078 Select the ZXW Shenzhen whwave SD3078 device
7144 +
7145 + s35390a Select the ABLIC S35390A device
7146 +
7147 + i2c0 Choose the I2C0 bus on GPIOs 0&1
7148 +
7149 + i2c_csi_dsi Choose the I2C0 bus on GPIOs 44&45
7150 +
7151 + addr Sets the address for the RTC. Note that the
7152 + device must be configured to use the specified
7153 + address.
7154 +
7155 + trickle-diode-disable Do not use the internal trickle charger diode
7156 + (BQ32000 only)
7157 +
7158 + trickle-diode-type Diode type for trickle charge - "standard" or
7159 + "schottky" (ABx80x and RV1805 only)
7160 +
7161 + trickle-resistor-ohms Resistor value for trickle charge (DS1339,
7162 + ABx80x, RV1805, RV3028)
7163 +
7164 + wakeup-source Specify that the RTC can be used as a wakeup
7165 + source
7166 +
7167 + backup-switchover-mode Backup power supply switch mode. Must be 0 for
7168 + off or 1 for Vdd < VBackup (RV3028 only)
7169 +
7170 +
7171 +Name: i2c-rtc-gpio
7172 +Info: Adds support for a number of I2C Real Time Clock devices
7173 + using the software i2c controller
7174 +Load: dtoverlay=i2c-rtc-gpio,<param>=<val>
7175 +Params: abx80x Select one of the ABx80x family:
7176 + AB0801, AB0803, AB0804, AB0805,
7177 + AB1801, AB1803, AB1804, AB1805
7178 +
7179 + bq32000 Select the TI BQ32000 device
7180 +
7181 + ds1307 Select the DS1307 device
7182 +
7183 + ds1339 Select the DS1339 device
7184 +
7185 + ds1340 Select the DS1340 device
7186 +
7187 + ds3231 Select the DS3231 device
7188 +
7189 + m41t62 Select the M41T62 device
7190 +
7191 + mcp7940x Select the MCP7940x device
7192 +
7193 + mcp7941x Select the MCP7941x device
7194 +
7195 + pcf2127 Select the PCF2127 device
7196 +
7197 + pcf2129 Select the PCF2129 device
7198 +
7199 + pcf85063 Select the PCF85063 device
7200 +
7201 + pcf85063a Select the PCF85063A device
7202 +
7203 + pcf8523 Select the PCF8523 device
7204 +
7205 + pcf85363 Select the PCF85363 device
7206 +
7207 + pcf8563 Select the PCF8563 device
7208 +
7209 + rv1805 Select the Micro Crystal RV1805 device
7210 +
7211 + rv3028 Select the Micro Crystal RV3028 device
7212 +
7213 + sd3078 Select the ZXW Shenzhen whwave SD3078 device
7214 +
7215 + s35390a Select the ABLIC S35390A device
7216 +
7217 + addr Sets the address for the RTC. Note that the
7218 + device must be configured to use the specified
7219 + address.
7220 +
7221 + trickle-diode-disable Do not use the internal trickle charger diode
7222 + (BQ32000 only)
7223 +
7224 + trickle-diode-type Diode type for trickle charge - "standard" or
7225 + "schottky" (ABx80x and RV1805 only)
7226 +
7227 + trickle-resistor-ohms Resistor value for trickle charge (DS1339,
7228 + ABx80x, RV1805, RV3028)
7229 +
7230 + wakeup-source Specify that the RTC can be used as a wakeup
7231 + source
7232 +
7233 + backup-switchover-mode Backup power supply switch mode. Must be 0 for
7234 + off or 1 for Vdd < VBackup (RV3028 only)
7235 +
7236 + i2c_gpio_sda GPIO used for I2C data (default "23")
7237 +
7238 + i2c_gpio_scl GPIO used for I2C clock (default "24")
7239 +
7240 + i2c_gpio_delay_us Clock delay in microseconds
7241 + (default "2" = ~100kHz)
7242 +
7243 +
7244 +Name: i2c-sensor
7245 +Info: Adds support for a number of I2C barometric pressure, temperature,
7246 + light level and chemical sensors on i2c_arm
7247 +Load: dtoverlay=i2c-sensor,<param>=<val>
7248 +Params: addr Set the address for the BH1750, BME280, BME680,
7249 + BMP280, CCS811, DS1621, HDC100X, LM75, SHT3x or
7250 + TMP102
7251 +
7252 + bh1750 Select the Rohm BH1750 ambient light sensor
7253 + Valid addresses 0x23 or 0x5c, default 0x23
7254 +
7255 + bme280 Select the Bosch Sensortronic BME280
7256 + Valid addresses 0x76-0x77, default 0x76
7257 +
7258 + bme680 Select the Bosch Sensortronic BME680
7259 + Valid addresses 0x76-0x77, default 0x76
7260 +
7261 + bmp085 Select the Bosch Sensortronic BMP085
7262 +
7263 + bmp180 Select the Bosch Sensortronic BMP180
7264 +
7265 + bmp280 Select the Bosch Sensortronic BMP280
7266 + Valid addresses 0x76-0x77, default 0x76
7267 +
7268 + ccs811 Select the AMS CCS811 digital gas sensor
7269 + Valid addresses 0x5a-0x5b, default 0x5b
7270 +
7271 + ds1621 Select the Dallas Semiconductors DS1621 temp
7272 + sensor. Valid addresses 0x48-0x4f, default 0x48
7273 +
7274 + hdc100x Select the Texas Instruments HDC100x temp sensor
7275 + Valid addresses 0x40-0x43, default 0x40
7276 +
7277 + htu21 Select the HTU21 temperature and humidity sensor
7278 +
7279 + lm75 Select the Maxim LM75 temperature sensor
7280 + Valid addresses 0x48-0x4f, default 0x4f
7281 +
7282 + lm75addr Deprecated - use addr parameter instead
7283 +
7284 + max17040 Select the Maxim Integrated MAX17040 battery
7285 + monitor
7286 +
7287 + sht3x Select the Sensiron SHT3x temperature and
7288 + humidity sensor. Valid addresses 0x44-0x45,
7289 + default 0x44
7290 +
7291 + si7020 Select the Silicon Labs Si7013/20/21 humidity/
7292 + temperature sensor
7293 +
7294 + sps30 Select the Sensirion SPS30 particulate matter
7295 + sensor. Fixed address 0x69.
7296 +
7297 + sgp30 Select the Sensirion SGP30 VOC sensor.
7298 + Fixed address 0x58.
7299 +
7300 + tmp102 Select the Texas Instruments TMP102 temp sensor
7301 + Valid addresses 0x48-0x4b, default 0x48
7302 +
7303 + tsl4531 Select the AMS TSL4531 digital ambient light
7304 + sensor
7305 +
7306 + veml6070 Select the Vishay VEML6070 ultraviolet light
7307 + sensor
7308 +
7309 +
7310 +Name: i2c0
7311 +Info: Change i2c0 pin usage. Not all pin combinations are usable on all
7312 + platforms - platforms other then Compute Modules can only use this
7313 + to disable transaction combining.
7314 + Do NOT use in conjunction with dtparam=i2c_vc=on. From the 5.4 kernel
7315 + onwards the base DT includes the use of i2c_mux_pinctrl to expose two
7316 + muxings of BSC0 - GPIOs 0&1, and whichever combination is used for the
7317 + camera and display connectors. This overlay disables that mux and
7318 + configures /dev/i2c0 to point at whichever set of pins is requested.
7319 + dtparam=i2c_vc=on will try and enable the mux, so combining the two
7320 + will cause conflicts.
7321 +Load: dtoverlay=i2c0,<param>=<val>
7322 +Params: pins_0_1 Use pins 0 and 1 (default)
7323 + pins_28_29 Use pins 28 and 29
7324 + pins_44_45 Use pins 44 and 45
7325 + pins_46_47 Use pins 46 and 47
7326 + combine Allow transactions to be combined (default
7327 + "yes")
7328 +
7329 +
7330 +Name: i2c0-bcm2708
7331 +Info: Deprecated, legacy version of i2c0.
7332 +Load: <Deprecated>
7333 +
7334 +
7335 +Name: i2c1
7336 +Info: Change i2c1 pin usage. Not all pin combinations are usable on all
7337 + platforms - platforms other then Compute Modules can only use this
7338 + to disable transaction combining.
7339 +Load: dtoverlay=i2c1,<param>=<val>
7340 +Params: pins_2_3 Use pins 2 and 3 (default)
7341 + pins_44_45 Use pins 44 and 45
7342 + combine Allow transactions to be combined (default
7343 + "yes")
7344 +
7345 +
7346 +Name: i2c1-bcm2708
7347 +Info: Deprecated, legacy version of i2c1.
7348 +Load: <Deprecated>
7349 +
7350 +
7351 +Name: i2c3
7352 +Info: Enable the i2c3 bus. BCM2711 only.
7353 +Load: dtoverlay=i2c3,<param>
7354 +Params: pins_2_3 Use GPIOs 2 and 3
7355 + pins_4_5 Use GPIOs 4 and 5 (default)
7356 + baudrate Set the baudrate for the interface (default
7357 + "100000")
7358 +
7359 +
7360 +Name: i2c4
7361 +Info: Enable the i2c4 bus. BCM2711 only.
7362 +Load: dtoverlay=i2c4,<param>
7363 +Params: pins_6_7 Use GPIOs 6 and 7
7364 + pins_8_9 Use GPIOs 8 and 9 (default)
7365 + baudrate Set the baudrate for the interface (default
7366 + "100000")
7367 +
7368 +
7369 +Name: i2c5
7370 +Info: Enable the i2c5 bus. BCM2711 only.
7371 +Load: dtoverlay=i2c5,<param>
7372 +Params: pins_10_11 Use GPIOs 10 and 11
7373 + pins_12_13 Use GPIOs 12 and 13 (default)
7374 + baudrate Set the baudrate for the interface (default
7375 + "100000")
7376 +
7377 +
7378 +Name: i2c6
7379 +Info: Enable the i2c6 bus. BCM2711 only.
7380 +Load: dtoverlay=i2c6,<param>
7381 +Params: pins_0_1 Use GPIOs 0 and 1
7382 + pins_22_23 Use GPIOs 22 and 23 (default)
7383 + baudrate Set the baudrate for the interface (default
7384 + "100000")
7385 +
7386 +
7387 +Name: i2s-gpio28-31
7388 +Info: move I2S function block to GPIO 28 to 31
7389 +Load: dtoverlay=i2s-gpio28-31
7390 +Params: <None>
7391 +
7392 +
7393 +Name: ilitek251x
7394 +Info: Enables I2C connected Ilitek 251x multiple touch controller using
7395 + GPIO 4 (pin 7 on GPIO header) for interrupt.
7396 +Load: dtoverlay=ilitek251x,<param>=<val>
7397 +Params: interrupt GPIO used for interrupt (default 4)
7398 + sizex Touchscreen size x, horizontal resolution of
7399 + touchscreen (in pixels)
7400 + sizey Touchscreen size y, vertical resolution of
7401 + touchscreen (in pixels)
7402 +
7403 +
7404 +Name: imx219
7405 +Info: Sony IMX219 camera module.
7406 + Uses Unicam 1, which is the standard camera connector on most Pi
7407 + variants.
7408 +Load: dtoverlay=imx219,<param>=<val>
7409 +Params: rotation Mounting rotation of the camera sensor (0 or
7410 + 180, default 180)
7411 + orientation Sensor orientation (0 = front, 1 = rear,
7412 + 2 = external, default external)
7413 +
7414 +
7415 +Name: imx290
7416 +Info: Sony IMX290 camera module.
7417 + Uses Unicam 1, which is the standard camera connector on most Pi
7418 + variants. NB This currently uses 4 CSI2 data lanes and therefore will
7419 + only work on a CM.
7420 +Load: dtoverlay=imx290,<param>
7421 +Params: 4lane Enable 4 CSI2 lanes. This requires a Compute
7422 + Module (1, 3, or 4).
7423 + clock-frequency Sets the clock frequency to match that used on
7424 + the board.
7425 + Modules from Vision Components use 37.125MHz
7426 + (the default), whilst those from Innomaker use
7427 + 74.25MHz.
7428 + mono Denote that the module is a mono sensor.
7429 + orientation Sensor orientation (0 = front, 1 = rear,
7430 + 2 = external, default external)
7431 + rotation Mounting rotation of the camera sensor (0 or
7432 + 180, default 0)
7433 +
7434 +
7435 +Name: imx378
7436 +Info: Sony IMX378 camera module.
7437 + Uses Unicam 1, which is the standard camera connector on most Pi
7438 + variants.
7439 +Load: dtoverlay=imx378,<param>=<val>
7440 +Params: rotation Mounting rotation of the camera sensor (0 or
7441 + 180, default 180)
7442 + orientation Sensor orientation (0 = front, 1 = rear,
7443 + 2 = external, default external)
7444 +
7445 +
7446 +Name: imx477
7447 +Info: Sony IMX477 camera module.
7448 + Uses Unicam 1, which is the standard camera connector on most Pi
7449 + variants.
7450 +Load: dtoverlay=imx477,<param>=<val>
7451 +Params: rotation Mounting rotation of the camera sensor (0 or
7452 + 180, default 180)
7453 + orientation Sensor orientation (0 = front, 1 = rear,
7454 + 2 = external, default external)
7455 +
7456 +
7457 +Name: iqaudio-codec
7458 +Info: Configures the IQaudio Codec audio card
7459 +Load: dtoverlay=iqaudio-codec
7460 +Params: <None>
7461 +
7462 +
7463 +Name: iqaudio-dac
7464 +Info: Configures the IQaudio DAC audio card
7465 +Load: dtoverlay=iqaudio-dac,<param>
7466 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
7467 + Digital volume control. Enable with
7468 + "dtoverlay=iqaudio-dac,24db_digital_gain"
7469 + (The default behaviour is that the Digital
7470 + volume control is limited to a maximum of
7471 + 0dB. ie. it can attenuate but not provide
7472 + gain. For most users, this will be desired
7473 + as it will prevent clipping. By appending
7474 + the 24db_digital_gain parameter, the Digital
7475 + volume control will allow up to 24dB of
7476 + gain. If this parameter is enabled, it is the
7477 + responsibility of the user to ensure that
7478 + the Digital volume control is set to a value
7479 + that does not result in clipping/distortion!)
7480 +
7481 +
7482 +Name: iqaudio-dacplus
7483 +Info: Configures the IQaudio DAC+ audio card
7484 +Load: dtoverlay=iqaudio-dacplus,<param>=<val>
7485 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
7486 + Digital volume control. Enable with
7487 + "dtoverlay=iqaudio-dacplus,24db_digital_gain"
7488 + (The default behaviour is that the Digital
7489 + volume control is limited to a maximum of
7490 + 0dB. ie. it can attenuate but not provide
7491 + gain. For most users, this will be desired
7492 + as it will prevent clipping. By appending
7493 + the 24db_digital_gain parameter, the Digital
7494 + volume control will allow up to 24dB of
7495 + gain. If this parameter is enabled, it is the
7496 + responsibility of the user to ensure that
7497 + the Digital volume control is set to a value
7498 + that does not result in clipping/distortion!)
7499 + auto_mute_amp If specified, unmute/mute the IQaudIO amp when
7500 + starting/stopping audio playback.
7501 + unmute_amp If specified, unmute the IQaudIO amp once when
7502 + the DAC driver module loads.
7503 +
7504 +
7505 +Name: iqaudio-digi-wm8804-audio
7506 +Info: Configures the IQAudIO Digi WM8804 audio card
7507 +Load: dtoverlay=iqaudio-digi-wm8804-audio,<param>=<val>
7508 +Params: card_name Override the default, "IQAudIODigi", card name.
7509 + dai_name Override the default, "IQAudIO Digi", dai name.
7510 + dai_stream_name Override the default, "IQAudIO Digi HiFi",
7511 + dai stream name.
7512 +
7513 +
7514 +Name: irs1125
7515 +Info: Infineon irs1125 TOF camera module.
7516 + Uses Unicam 1, which is the standard camera connector on most Pi
7517 + variants.
7518 +Load: dtoverlay=irs1125
7519 +Params: <None>
7520 +
7521 +
7522 +Name: jedec-spi-nor
7523 +Info: Adds support for JEDEC-compliant SPI NOR flash devices. (Note: The
7524 + "jedec,spi-nor" kernel driver was formerly known as "m25p80".)
7525 +Load: dtoverlay=jedec-spi-nor,<param>=<val>
7526 +Params: flash-spi<n>-<m> Enables flash device on SPI<n>, CS#<m>.
7527 + flash-fastr-spi<n>-<m> Enables flash device with fast read capability
7528 + on SPI<n>, CS#<m>.
7529 +
7530 +
7531 +Name: justboom-both
7532 +Info: Simultaneous usage of an justboom-dac and justboom-digi based
7533 + card
7534 +Load: dtoverlay=justboom-both,<param>=<val>
7535 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
7536 + Digital volume control. Enable with
7537 + "dtoverlay=justboom-dac,24db_digital_gain"
7538 + (The default behaviour is that the Digital
7539 + volume control is limited to a maximum of
7540 + 0dB. ie. it can attenuate but not provide
7541 + gain. For most users, this will be desired
7542 + as it will prevent clipping. By appending
7543 + the 24dB_digital_gain parameter, the Digital
7544 + volume control will allow up to 24dB of
7545 + gain. If this parameter is enabled, it is the
7546 + responsibility of the user to ensure that
7547 + the Digital volume control is set to a value
7548 + that does not result in clipping/distortion!)
7549 +
7550 +
7551 +Name: justboom-dac
7552 +Info: Configures the JustBoom DAC HAT, Amp HAT, DAC Zero and Amp Zero audio
7553 + cards
7554 +Load: dtoverlay=justboom-dac,<param>=<val>
7555 +Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
7556 + Digital volume control. Enable with
7557 + "dtoverlay=justboom-dac,24db_digital_gain"
7558 + (The default behaviour is that the Digital
7559 + volume control is limited to a maximum of
7560 + 0dB. ie. it can attenuate but not provide
7561 + gain. For most users, this will be desired
7562 + as it will prevent clipping. By appending
7563 + the 24dB_digital_gain parameter, the Digital
7564 + volume control will allow up to 24dB of
7565 + gain. If this parameter is enabled, it is the
7566 + responsibility of the user to ensure that
7567 + the Digital volume control is set to a value
7568 + that does not result in clipping/distortion!)
7569 +
7570 +
7571 +Name: justboom-digi
7572 +Info: Configures the JustBoom Digi HAT and Digi Zero audio cards
7573 +Load: dtoverlay=justboom-digi
7574 +Params: <None>
7575 +
7576 +
7577 +Name: lirc-rpi
7578 +Info: This overlay has been deprecated and removed - see gpio-ir
7579 +Load: <Deprecated>
7580 +
7581 +
7582 +Name: ltc294x
7583 +Info: Adds support for the ltc294x family of battery gauges
7584 +Load: dtoverlay=ltc294x,<param>=<val>
7585 +Params: ltc2941 Select the ltc2941 device
7586 +
7587 + ltc2942 Select the ltc2942 device
7588 +
7589 + ltc2943 Select the ltc2943 device
7590 +
7591 + ltc2944 Select the ltc2944 device
7592 +
7593 + resistor-sense The sense resistor value in milli-ohms.
7594 + Can be a 32-bit negative value when the battery
7595 + has been connected to the wrong end of the
7596 + resistor.
7597 +
7598 + prescaler-exponent Range and accuracy of the gauge. The value is
7599 + programmed into the chip only if it differs
7600 + from the current setting.
7601 + For LTC2941 only:
7602 + - Default value is 128
7603 + - the exponent is in the range 0-7 (default 7)
7604 + See the datasheet for more information.
7605 +
7606 +
7607 +Name: max98357a
7608 +Info: Configures the Maxim MAX98357A I2S DAC
7609 +Load: dtoverlay=max98357a,<param>=<val>
7610 +Params: no-sdmode Driver does not manage the state of the DAC's
7611 + SD_MODE pin (i.e. chip is always on).
7612 + sdmode-pin integer, GPIO pin connected to the SD_MODE input
7613 + of the DAC (default GPIO4 if parameter omitted).
7614 +
7615 +
7616 +Name: maxtherm
7617 +Info: Configure a MAX6675, MAX31855 or MAX31856 thermocouple as an IIO device.
7618 +
7619 + For devices on spi1 or spi2, the interfaces should be enabled
7620 + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
7621 + The overlay expects to disable the relevant spidev node, so also using
7622 + e.g. cs0_spidev=off is unnecessary.
7623 +
7624 + Example:
7625 + MAX31855 on /dev/spidev0.0
7626 + dtoverlay=maxtherm,spi0-0,max31855
7627 + MAX31856 using a type J thermocouple on /dev/spidev2.1
7628 + dtoverlay=spi2-2cs
7629 + dtoverlay=maxtherm,spi2-1,max31856,type_j
7630 +
7631 +Load: dtoverlay=maxtherm,<param>=<val>
7632 +Params: spi<n>-<m> Configure device at spi<n>, cs<m>
7633 + (boolean, required)
7634 + max6675 Enable support for the MAX6675 (default)
7635 + max31855 Enable support for the MAX31855
7636 + max31855e Enable support for the MAX31855E
7637 + max31855j Enable support for the MAX31855J
7638 + max31855k Enable support for the MAX31855K
7639 + max31855n Enable support for the MAX31855N
7640 + max31855r Enable support for the MAX31855R
7641 + max31855s Enable support for the MAX31855S
7642 + max31855t Enable support for the MAX31855T
7643 + max31856 Enable support for the MAX31856 (with type K)
7644 + type_b Select a type B sensor for max31856
7645 + type_e Select a type E sensor for max31856
7646 + type_j Select a type J sensor for max31856
7647 + type_k Select a type K sensor for max31856
7648 + type_n Select a type N sensor for max31856
7649 + type_r Select a type R sensor for max31856
7650 + type_s Select a type S sensor for max31856
7651 + type_t Select a type T sensor for max31856
7652 +
7653 +
7654 +Name: mbed-dac
7655 +Info: Configures the mbed AudioCODEC (TLV320AIC23B)
7656 +Load: dtoverlay=mbed-dac
7657 +Params: <None>
7658 +
7659 +
7660 +Name: mcp23017
7661 +Info: Configures the MCP23017 I2C GPIO expander
7662 +Load: dtoverlay=mcp23017,<param>=<val>
7663 +Params: gpiopin Gpio pin connected to the INTA output of the
7664 + MCP23017 (default: 4)
7665 +
7666 + addr I2C address of the MCP23017 (default: 0x20)
7667 +
7668 + mcp23008 Configure an MCP23008 instead.
7669 + noints Disable the interrupt GPIO line.
7670 +
7671 +
7672 +Name: mcp23s17
7673 +Info: Configures the MCP23S08/17 SPI GPIO expanders.
7674 + If devices are present on SPI1 or SPI2, those interfaces must be enabled
7675 + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
7676 + If interrupts are enabled for a device on a given CS# on a SPI bus, that
7677 + device must be the only one present on that SPI bus/CS#.
7678 +Load: dtoverlay=mcp23s17,<param>=<val>
7679 +Params: s08-spi<n>-<m>-present 4-bit integer, bitmap indicating MCP23S08
7680 + devices present on SPI<n>, CS#<m>
7681 +
7682 + s17-spi<n>-<m>-present 8-bit integer, bitmap indicating MCP23S17
7683 + devices present on SPI<n>, CS#<m>
7684 +
7685 + s08-spi<n>-<m>-int-gpio integer, enables interrupts on a single
7686 + MCP23S08 device on SPI<n>, CS#<m>, specifies
7687 + the GPIO pin to which INT output of MCP23S08
7688 + is connected.
7689 +
7690 + s17-spi<n>-<m>-int-gpio integer, enables mirrored interrupts on a
7691 + single MCP23S17 device on SPI<n>, CS#<m>,
7692 + specifies the GPIO pin to which either INTA
7693 + or INTB output of MCP23S17 is connected.
7694 +
7695 +
7696 +Name: mcp2515-can0
7697 +Info: Configures the MCP2515 CAN controller on spi0.0
7698 +Load: dtoverlay=mcp2515-can0,<param>=<val>
7699 +Params: oscillator Clock frequency for the CAN controller (Hz)
7700 +
7701 + spimaxfrequency Maximum SPI frequence (Hz)
7702 +
7703 + interrupt GPIO for interrupt signal
7704 +
7705 +
7706 +Name: mcp2515-can1
7707 +Info: Configures the MCP2515 CAN controller on spi0.1
7708 +Load: dtoverlay=mcp2515-can1,<param>=<val>
7709 +Params: oscillator Clock frequency for the CAN controller (Hz)
7710 +
7711 + spimaxfrequency Maximum SPI frequence (Hz)
7712 +
7713 + interrupt GPIO for interrupt signal
7714 +
7715 +
7716 +Name: mcp251xfd
7717 +Info: Configures the MCP251XFD CAN controller family
7718 + For devices on spi1 or spi2, the interfaces should be enabled
7719 + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
7720 +Load: dtoverlay=mcp251xfd,<param>=<val>
7721 +Params: spi<n>-<m> Configure device at spi<n>, cs<m>
7722 + (boolean, required)
7723 +
7724 + oscillator Clock frequency for the CAN controller (Hz)
7725 +
7726 + speed Maximum SPI frequence (Hz)
7727 +
7728 + interrupt GPIO for interrupt signal
7729 +
7730 + rx_interrupt GPIO for RX interrupt signal (nINT1) (optional)
7731 +
7732 + xceiver_enable GPIO for CAN transceiver enable (optional)
7733 +
7734 + xceiver_active_high specifiy if CAN transceiver enable pin is
7735 + active high (optional, default: active low)
7736 +
7737 +
7738 +Name: mcp3008
7739 +Info: Configures MCP3008 A/D converters
7740 + For devices on spi1 or spi2, the interfaces should be enabled
7741 + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
7742 +Load: dtoverlay=mcp3008,<param>[=<val>]
7743 +Params: spi<n>-<m>-present boolean, configure device at spi<n>, cs<m>
7744 + spi<n>-<m>-speed integer, set the spi bus speed for this device
7745 +
7746 +
7747 +Name: mcp3202
7748 +Info: Configures MCP3202 A/D converters
7749 + For devices on spi1 or spi2, the interfaces should be enabled
7750 + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
7751 +Load: dtoverlay=mcp3202,<param>[=<val>]
7752 +Params: spi<n>-<m>-present boolean, configure device at spi<n>, cs<m>
7753 + spi<n>-<m>-speed integer, set the spi bus speed for this device
7754 +
7755 +
7756 +Name: mcp342x
7757 +Info: Overlay for activation of Microchip MCP3421-3428 ADCs over I2C
7758 +Load: dtoverlay=mcp342x,<param>=<val>
7759 +Params: addr I2C bus address of device, for devices with
7760 + addresses that are configurable, e.g. by
7761 + hardware links (default=0x68)
7762 + mcp3421 The device is an MCP3421
7763 + mcp3422 The device is an MCP3422
7764 + mcp3423 The device is an MCP3423
7765 + mcp3424 The device is an MCP3424
7766 + mcp3425 The device is an MCP3425
7767 + mcp3426 The device is an MCP3426
7768 + mcp3427 The device is an MCP3427
7769 + mcp3428 The device is an MCP3428
7770 +
7771 +
7772 +Name: media-center
7773 +Info: Media Center HAT - 2.83" Touch Display + extras by Pi Supply
7774 +Load: dtoverlay=media-center,<param>=<val>
7775 +Params: speed Display SPI bus speed
7776 + rotate Display rotation {0,90,180,270}
7777 + fps Delay between frame updates
7778 + xohms Touchpanel sensitivity (X-plate resistance)
7779 + swapxy Swap x and y axis
7780 + backlight Change backlight GPIO pin {e.g. 12, 18}
7781 + gpio_out_pin GPIO for output (default "17")
7782 + gpio_in_pin GPIO for input (default "18")
7783 + gpio_in_pull Pull up/down/off on the input pin
7784 + (default "down")
7785 + sense Override the IR receive auto-detection logic:
7786 + "0" = force active-high
7787 + "1" = force active-low
7788 + "-1" = use auto-detection
7789 + (default "-1")
7790 + softcarrier Turn the software carrier "on" or "off"
7791 + (default "on")
7792 + invert "on" = invert the output pin (default "off")
7793 + debug "on" = enable additional debug messages
7794 + (default "off")
7795 +
7796 +
7797 +Name: merus-amp
7798 +Info: Configures the merus-amp audio card
7799 +Load: dtoverlay=merus-amp
7800 +Params: <None>
7801 +
7802 +
7803 +Name: midi-uart0
7804 +Info: Configures UART0 (ttyAMA0) so that a requested 38.4kbaud actually gets
7805 + 31.25kbaud, the frequency required for MIDI
7806 +Load: dtoverlay=midi-uart0
7807 +Params: <None>
7808 +
7809 +
7810 +Name: midi-uart1
7811 +Info: Configures UART1 (ttyS0) so that a requested 38.4kbaud actually gets
7812 + 31.25kbaud, the frequency required for MIDI
7813 +Load: dtoverlay=midi-uart1
7814 +Params: <None>
7815 +
7816 +
7817 +Name: midi-uart2
7818 +Info: Configures UART2 (ttyAMA1) so that a requested 38.4kbaud actually gets
7819 + 31.25kbaud, the frequency required for MIDI
7820 +Load: dtoverlay=midi-uart2
7821 +Params: <None>
7822 +
7823 +
7824 +Name: midi-uart3
7825 +Info: Configures UART3 (ttyAMA2) so that a requested 38.4kbaud actually gets
7826 + 31.25kbaud, the frequency required for MIDI
7827 +Load: dtoverlay=midi-uart3
7828 +Params: <None>
7829 +
7830 +
7831 +Name: midi-uart4
7832 +Info: Configures UART4 (ttyAMA3) so that a requested 38.4kbaud actually gets
7833 + 31.25kbaud, the frequency required for MIDI
7834 +Load: dtoverlay=midi-uart4
7835 +Params: <None>
7836 +
7837 +
7838 +Name: midi-uart5
7839 +Info: Configures UART5 (ttyAMA4) so that a requested 38.4kbaud actually gets
7840 + 31.25kbaud, the frequency required for MIDI
7841 +Load: dtoverlay=midi-uart5
7842 +Params: <None>
7843 +
7844 +
7845 +Name: minipitft13
7846 +Info: Overlay for AdaFruit Mini Pi 1.3" TFT via SPI using fbtft driver.
7847 +Load: dtoverlay=minipitft13,<param>=<val>
7848 +Params: speed SPI bus speed (default 32000000)
7849 + rotate Display rotation (0, 90, 180 or 270; default 0)
7850 + width Display width (default 240)
7851 + height Display height (default 240)
7852 + fps Delay between frame updates (default 25)
7853 + debug Debug output level (0-7; default 0)
7854 +
7855 +
7856 +Name: miniuart-bt
7857 +Info: Switch the onboard Bluetooth function on Pi 3B, 3B+, 3A+, 4B and Zero W
7858 + to use the mini-UART (ttyS0) and restore UART0/ttyAMA0 over GPIOs 14 &
7859 + 15. Note that this may reduce the maximum usable baudrate.
7860 + N.B. It is also necessary to edit /lib/systemd/system/hciuart.service
7861 + and replace ttyAMA0 with ttyS0, unless using Raspbian or another
7862 + distribution with udev rules that create /dev/serial0 and /dev/serial1,
7863 + in which case use /dev/serial1 instead because it will always be
7864 + correct. Furthermore, you must also set core_freq and core_freq_min to
7865 + the same value in config.txt or the miniuart will not work.
7866 +Load: dtoverlay=miniuart-bt,<param>=<val>
7867 +Params: krnbt Set to "on" to enable autoprobing of Bluetooth
7868 + driver without need of hciattach/btattach
7869 +
7870 +
7871 +Name: mmc
7872 +Info: Selects the bcm2835-mmc SD/MMC driver, optionally with overclock
7873 +Load: dtoverlay=mmc,<param>=<val>
7874 +Params: overclock_50 Clock (in MHz) to use when the MMC framework
7875 + requests 50MHz
7876 +
7877 +
7878 +Name: mpu6050
7879 +Info: Overlay for i2c connected mpu6050 imu
7880 +Load: dtoverlay=mpu6050,<param>=<val>
7881 +Params: interrupt GPIO pin for interrupt (default 4)
7882 + addr I2C address of the device (default 0x68)
7883 +
7884 +
7885 +Name: mz61581
7886 +Info: MZ61581 display by Tontec
7887 +Load: dtoverlay=mz61581,<param>=<val>
7888 +Params: speed Display SPI bus speed
7889 +
7890 + rotate Display rotation {0,90,180,270}
7891 +
7892 + fps Delay between frame updates
7893 +
7894 + txbuflen Transmit buffer length (default 32768)
7895 +
7896 + debug Debug output level {0-7}
7897 +
7898 + xohms Touchpanel sensitivity (X-plate resistance)
7899 +
7900 +
7901 +Name: ov5647
7902 +Info: Omnivision OV5647 camera module.
7903 + Uses Unicam 1, which is the standard camera connector on most Pi
7904 + variants.
7905 +Load: dtoverlay=ov5647,<param>=<val>
7906 +Params: rotation Mounting rotation of the camera sensor (0 or
7907 + 180, default 0)
7908 + orientation Sensor orientation (0 = front, 1 = rear,
7909 + 2 = external, default external)
7910 +
7911 +
7912 +Name: ov7251
7913 +Info: Omnivision OV7251 camera module.
7914 + Uses Unicam 1, which is the standard camera connector on most Pi
7915 + variants.
7916 +Load: dtoverlay=ov7251,<param>=<val>
7917 +Params: rotation Mounting rotation of the camera sensor (0 or
7918 + 180, default 0)
7919 + orientation Sensor orientation (0 = front, 1 = rear,
7920 + 2 = external, default external)
7921 +
7922 +
7923 +Name: ov9281
7924 +Info: Omnivision OV9281 camera module.
7925 + Uses Unicam 1, which is the standard camera connector on most Pi
7926 + variants.
7927 +Load: dtoverlay=ov9281,<param>=<val>
7928 +Params: rotation Mounting rotation of the camera sensor (0 or
7929 + 180, default 0)
7930 + orientation Sensor orientation (0 = front, 1 = rear,
7931 + 2 = external, default external)
7932 +
7933 +
7934 +Name: papirus
7935 +Info: PaPiRus ePaper Screen by Pi Supply (both HAT and pHAT)
7936 +Load: dtoverlay=papirus,<param>=<val>
7937 +Params: panel Display panel (required):
7938 + 1.44": e1144cs021
7939 + 2.0": e2200cs021
7940 + 2.7": e2271cs021
7941 +
7942 + speed Display SPI bus speed
7943 +
7944 +
7945 +Name: pca953x
7946 +Info: TI PCA953x family of I2C GPIO expanders. Default is for NXP PCA9534.
7947 +Load: dtoverlay=pca953x,<param>=<val>
7948 +Params: addr I2C address of expander. Default 0x20.
7949 + pca6416 Select the NXP PCA6416 (16 bit)
7950 + pca9505 Select the NXP PCA9505 (40 bit)
7951 + pca9535 Select the NXP PCA9535 (16 bit)
7952 + pca9536 Select the NXP PCA9536 or TI PCA9536 (4 bit)
7953 + pca9537 Select the NXP PCA9537 (4 bit)
7954 + pca9538 Select the NXP PCA9538 (8 bit)
7955 + pca9539 Select the NXP PCA9539 (16 bit)
7956 + pca9554 Select the NXP PCA9554 (8 bit)
7957 + pca9555 Select the NXP PCA9555 (16 bit)
7958 + pca9556 Select the NXP PCA9556 (8 bit)
7959 + pca9557 Select the NXP PCA9557 (8 bit)
7960 + pca9574 Select the NXP PCA9574 (8 bit)
7961 + pca9575 Select the NXP PCA9575 (16 bit)
7962 + pca9698 Select the NXP PCA9698 (40 bit)
7963 + pca16416 Select the NXP PCA16416 (16 bit)
7964 + pca16524 Select the NXP PCA16524 (24 bit)
7965 + pca19555a Select the NXP PCA19555A (16 bit)
7966 + max7310 Select the Maxim MAX7310 (8 bit)
7967 + max7312 Select the Maxim MAX7312 (16 bit)
7968 + max7313 Select the Maxim MAX7313 (16 bit)
7969 + max7315 Select the Maxim MAX7315 (8 bit)
7970 + pca6107 Select the TI PCA6107 (8 bit)
7971 + tca6408 Select the TI TCA6408 (8 bit)
7972 + tca6416 Select the TI TCA6416 (16 bit)
7973 + tca6424 Select the TI TCA6424 (24 bit)
7974 + tca9539 Select the TI TCA9539 (16 bit)
7975 + tca9554 Select the TI TCA9554 (8 bit)
7976 + cat9554 Select the Onnn CAT9554 (8 bit)
7977 + pca9654 Select the Onnn PCA9654 (8 bit)
7978 + xra1202 Select the Exar XRA1202 (8 bit)
7979 +
7980 +
7981 +Name: pcie-32bit-dma
7982 +Info: Force PCIe config to support 32bit DMA addresses at the expense of
7983 + having to bounce buffers.
7984 +Load: dtoverlay=pcie-32bit-dma
7985 +Params: <None>
7986 +
7987 +
7988 +[ The pcf2127-rtc overlay has been deleted. See i2c-rtc. ]
7989 +
7990 +
7991 +[ The pcf8523-rtc overlay has been deleted. See i2c-rtc. ]
7992 +
7993 +
7994 +[ The pcf8563-rtc overlay has been deleted. See i2c-rtc. ]
7995 +
7996 +
7997 +Name: pi3-act-led
7998 +Info: This overlay has been renamed act-led, keeping pi3-act-led as an alias
7999 + for backwards compatibility.
8000 +Load: <Deprecated>
8001 +
8002 +
8003 +Name: pi3-disable-bt
8004 +Info: This overlay has been renamed disable-bt, keeping pi3-disable-bt as an
8005 + alias for backwards compatibility.
8006 +Load: <Deprecated>
8007 +
8008 +
8009 +Name: pi3-disable-wifi
8010 +Info: This overlay has been renamed disable-wifi, keeping pi3-disable-wifi as
8011 + an alias for backwards compatibility.
8012 +Load: <Deprecated>
8013 +
8014 +
8015 +Name: pi3-miniuart-bt
8016 +Info: This overlay has been renamed miniuart-bt, keeping pi3-miniuart-bt as
8017 + an alias for backwards compatibility.
8018 +Load: <Deprecated>
8019 +
8020 +
8021 +Name: pibell
8022 +Info: Configures the pibell audio card.
8023 +Load: dtoverlay=pibell,<param>=<val>
8024 +Params: alsaname Set the name as it appears in ALSA (default
8025 + "PiBell")
8026 +
8027 +
8028 +Name: pifacedigital
8029 +Info: Configures the PiFace Digital mcp23s17 GPIO port expander.
8030 +Load: dtoverlay=pifacedigital,<param>=<val>
8031 +Params: spi-present-mask 8-bit integer, bitmap indicating MCP23S17 SPI0
8032 + CS0 address. PiFace Digital supports addresses
8033 + 0-3, which can be configured with JP1 and JP2.
8034 +
8035 +
8036 +Name: pifi-40
8037 +Info: Configures the PiFi 40W stereo amplifier
8038 +Load: dtoverlay=pifi-40
8039 +Params: <None>
8040 +
8041 +
8042 +Name: pifi-dac-hd
8043 +Info: Configures the PiFi DAC HD
8044 +Load: dtoverlay=pifi-dac-hd
8045 +Params: <None>
8046 +
8047 +
8048 +Name: pifi-dac-zero
8049 +Info: Configures the PiFi DAC Zero
8050 +Load: dtoverlay=pifi-dac-zero
8051 +Params: <None>
8052 +
8053 +
8054 +Name: pifi-mini-210
8055 +Info: Configures the PiFi Mini stereo amplifier
8056 +Load: dtoverlay=pifi-mini-210
8057 +Params: <None>
8058 +
8059 +
8060 +Name: piglow
8061 +Info: Configures the PiGlow by pimoroni.com
8062 +Load: dtoverlay=piglow
8063 +Params: <None>
8064 +
8065 +
8066 +Name: piscreen
8067 +Info: PiScreen display by OzzMaker.com
8068 +Load: dtoverlay=piscreen,<param>=<val>
8069 +Params: speed Display SPI bus speed
8070 +
8071 + rotate Display rotation {0,90,180,270}
8072 +
8073 + fps Delay between frame updates
8074 +
8075 + debug Debug output level {0-7}
8076 +
8077 + xohms Touchpanel sensitivity (X-plate resistance)
8078 +
8079 +
8080 +Name: piscreen2r
8081 +Info: PiScreen 2 with resistive TP display by OzzMaker.com
8082 +Load: dtoverlay=piscreen2r,<param>=<val>
8083 +Params: speed Display SPI bus speed
8084 +
8085 + rotate Display rotation {0,90,180,270}
8086 +
8087 + fps Delay between frame updates
8088 +
8089 + debug Debug output level {0-7}
8090 +
8091 + xohms Touchpanel sensitivity (X-plate resistance)
8092 +
8093 +
8094 +Name: pisound
8095 +Info: Configures the Blokas Labs pisound card
8096 +Load: dtoverlay=pisound
8097 +Params: <None>
8098 +
8099 +
8100 +Name: pitft22
8101 +Info: Adafruit PiTFT 2.2" screen
8102 +Load: dtoverlay=pitft22,<param>=<val>
8103 +Params: speed Display SPI bus speed
8104 +
8105 + rotate Display rotation {0,90,180,270}
8106 +
8107 + fps Delay between frame updates
8108 +
8109 + debug Debug output level {0-7}
8110 +
8111 +
8112 +Name: pitft28-capacitive
8113 +Info: Adafruit PiTFT 2.8" capacitive touch screen
8114 +Load: dtoverlay=pitft28-capacitive,<param>=<val>
8115 +Params: speed Display SPI bus speed
8116 +
8117 + rotate Display rotation {0,90,180,270}
8118 +
8119 + fps Delay between frame updates
8120 +
8121 + debug Debug output level {0-7}
8122 +
8123 + touch-sizex Touchscreen size x (default 240)
8124 +
8125 + touch-sizey Touchscreen size y (default 320)
8126 +
8127 + touch-invx Touchscreen inverted x axis
8128 +
8129 + touch-invy Touchscreen inverted y axis
8130 +
8131 + touch-swapxy Touchscreen swapped x y axis
8132 +
8133 +
8134 +Name: pitft28-resistive
8135 +Info: Adafruit PiTFT 2.8" resistive touch screen
8136 +Load: dtoverlay=pitft28-resistive,<param>=<val>
8137 +Params: speed Display SPI bus speed
8138 +
8139 + rotate Display rotation {0,90,180,270}
8140 +
8141 + fps Delay between frame updates
8142 +
8143 + debug Debug output level {0-7}
8144 +
8145 +
8146 +Name: pitft35-resistive
8147 +Info: Adafruit PiTFT 3.5" resistive touch screen
8148 +Load: dtoverlay=pitft35-resistive,<param>=<val>
8149 +Params: speed Display SPI bus speed
8150 +
8151 + rotate Display rotation {0,90,180,270}
8152 +
8153 + fps Delay between frame updates
8154 +
8155 + debug Debug output level {0-7}
8156 +
8157 +
8158 +Name: pps-gpio
8159 +Info: Configures the pps-gpio (pulse-per-second time signal via GPIO).
8160 +Load: dtoverlay=pps-gpio,<param>=<val>
8161 +Params: gpiopin Input GPIO (default "18")
8162 + assert_falling_edge When present, assert is indicated by a falling
8163 + edge, rather than by a rising edge (default
8164 + off)
8165 + capture_clear Generate clear events on the trailing edge
8166 + (default off)
8167 +
8168 +
8169 +Name: pwm
8170 +Info: Configures a single PWM channel
8171 + Legal pin,function combinations for each channel:
8172 + PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
8173 + PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
8174 + N.B.:
8175 + 1) Pin 18 is the only one available on all platforms, and
8176 + it is the one used by the I2S audio interface.
8177 + Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
8178 + 2) The onboard analogue audio output uses both PWM channels.
8179 + 3) So be careful mixing audio and PWM.
8180 + 4) Currently the clock must have been enabled and configured
8181 + by other means.
8182 +Load: dtoverlay=pwm,<param>=<val>
8183 +Params: pin Output pin (default 18) - see table
8184 + func Pin function (default 2 = Alt5) - see above
8185 + clock PWM clock frequency (informational)
8186 +
8187 +
8188 +Name: pwm-2chan
8189 +Info: Configures both PWM channels
8190 + Legal pin,function combinations for each channel:
8191 + PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
8192 + PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
8193 + N.B.:
8194 + 1) Pin 18 is the only one available on all platforms, and
8195 + it is the one used by the I2S audio interface.
8196 + Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
8197 + 2) The onboard analogue audio output uses both PWM channels.
8198 + 3) So be careful mixing audio and PWM.
8199 + 4) Currently the clock must have been enabled and configured
8200 + by other means.
8201 +Load: dtoverlay=pwm-2chan,<param>=<val>
8202 +Params: pin Output pin (default 18) - see table
8203 + pin2 Output pin for other channel (default 19)
8204 + func Pin function (default 2 = Alt5) - see above
8205 + func2 Function for pin2 (default 2 = Alt5)
8206 + clock PWM clock frequency (informational)
8207 +
8208 +
8209 +Name: pwm-ir-tx
8210 +Info: Use GPIO pin as pwm-assisted infrared transmitter output.
8211 + This is an alternative to "gpio-ir-tx". pwm-ir-tx makes use
8212 + of PWM0 to reduce the CPU load during transmission compared to
8213 + gpio-ir-tx which uses bit-banging.
8214 + Legal pin,function combinations are:
8215 + 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
8216 +Load: dtoverlay=pwm-ir-tx,<param>=<val>
8217 +Params: gpio_pin Output GPIO (default 18)
8218 +
8219 + func Pin function (default 2 = Alt5)
8220 +
8221 +
8222 +Name: qca7000
8223 +Info: in-tech's Evaluation Board for PLC Stamp micro
8224 + This uses spi0 and a separate GPIO interrupt to connect the QCA7000.
8225 +Load: dtoverlay=qca7000,<param>=<val>
8226 +Params: int_pin GPIO pin for interrupt signal (default 23)
8227 +
8228 + speed SPI bus speed (default 12 MHz)
8229 +
8230 +
8231 +Name: qca7000-uart0
8232 +Info: in-tech's Evaluation Board for PLC Stamp micro (UART)
8233 + This uses uart0/ttyAMA0 over GPIOs 14 & 15 to connect the QCA7000.
8234 + But it requires disabling of onboard Bluetooth on
8235 + Pi 3B, 3B+, 3A+, 4B and Zero W.
8236 +Load: dtoverlay=qca7000-uart0,<param>=<val>
8237 +Params: baudrate Set the baudrate for the UART (default
8238 + "115200")
8239 +
8240 +
8241 +Name: rotary-encoder
8242 +Info: Overlay for GPIO connected rotary encoder.
8243 +Load: dtoverlay=rotary-encoder,<param>=<val>
8244 +Params: pin_a GPIO connected to rotary encoder channel A
8245 + (default 4).
8246 + pin_b GPIO connected to rotary encoder channel B
8247 + (default 17).
8248 + relative_axis register a relative axis rather than an
8249 + absolute one. Relative axis will only
8250 + generate +1/-1 events on the input device,
8251 + hence no steps need to be passed.
8252 + linux_axis the input subsystem axis to map to this
8253 + rotary encoder. Defaults to 0 (ABS_X / REL_X)
8254 + rollover Automatic rollover when the rotary value
8255 + becomes greater than the specified steps or
8256 + smaller than 0. For absolute axis only.
8257 + steps-per-period Number of steps (stable states) per period.
8258 + The values have the following meaning:
8259 + 1: Full-period mode (default)
8260 + 2: Half-period mode
8261 + 4: Quarter-period mode
8262 + steps Number of steps in a full turnaround of the
8263 + encoder. Only relevant for absolute axis.
8264 + Defaults to 24 which is a typical value for
8265 + such devices.
8266 + wakeup Boolean, rotary encoder can wake up the
8267 + system.
8268 + encoding String, the method used to encode steps.
8269 + Supported are "gray" (the default and more
8270 + common) and "binary".
8271 +
8272 +
8273 +Name: rpi-backlight
8274 +Info: Raspberry Pi official display backlight driver
8275 +Load: dtoverlay=rpi-backlight
8276 +Params: <None>
8277 +
8278 +
8279 +Name: rpi-cirrus-wm5102
8280 +Info: Configures the Cirrus Logic Audio Card
8281 +Load: dtoverlay=rpi-cirrus-wm5102
8282 +Params: <None>
8283 +
8284 +
8285 +Name: rpi-dac
8286 +Info: Configures the RPi DAC audio card
8287 +Load: dtoverlay=rpi-dac
8288 +Params: <None>
8289 +
8290 +
8291 +Name: rpi-display
8292 +Info: RPi-Display - 2.8" Touch Display by Watterott
8293 +Load: dtoverlay=rpi-display,<param>=<val>
8294 +Params: speed Display SPI bus speed
8295 + rotate Display rotation {0,90,180,270}
8296 + fps Delay between frame updates
8297 + debug Debug output level {0-7}
8298 + xohms Touchpanel sensitivity (X-plate resistance)
8299 + swapxy Swap x and y axis
8300 + backlight Change backlight GPIO pin {e.g. 12, 18}
8301 +
8302 +
8303 +Name: rpi-ft5406
8304 +Info: Official Raspberry Pi display touchscreen
8305 +Load: dtoverlay=rpi-ft5406,<param>=<val>
8306 +Params: touchscreen-size-x Touchscreen X resolution (default 800)
8307 + touchscreen-size-y Touchscreen Y resolution (default 600);
8308 + touchscreen-inverted-x Invert touchscreen X coordinates (default 0);
8309 + touchscreen-inverted-y Invert touchscreen Y coordinates (default 0);
8310 + touchscreen-swapped-x-y Swap X and Y cordinates (default 0);
8311 +
8312 +
8313 +Name: rpi-poe
8314 +Info: Raspberry Pi PoE HAT fan
8315 +Load: dtoverlay=rpi-poe,<param>[=<val>]
8316 +Params: poe_fan_temp0 Temperature (in millicelcius) at which the fan
8317 + turns on (default 40000)
8318 + poe_fan_temp0_hyst Temperature delta (in millicelcius) at which
8319 + the fan turns off (default 2000)
8320 + poe_fan_temp1 Temperature (in millicelcius) at which the fan
8321 + speeds up (default 45000)
8322 + poe_fan_temp1_hyst Temperature delta (in millicelcius) at which
8323 + the fan slows down (default 2000)
8324 + poe_fan_temp2 Temperature (in millicelcius) at which the fan
8325 + speeds up (default 50000)
8326 + poe_fan_temp2_hyst Temperature delta (in millicelcius) at which
8327 + the fan slows down (default 2000)
8328 + poe_fan_temp3 Temperature (in millicelcius) at which the fan
8329 + speeds up (default 55000)
8330 + poe_fan_temp3_hyst Temperature delta (in millicelcius) at which
8331 + the fan slows down (default 5000)
8332 +
8333 +
8334 +Name: rpi-poe-plus
8335 +Info: Raspberry Pi PoE+ HAT fan
8336 +Load: dtoverlay=rpi-poe-plus,<param>[=<val>]
8337 +Params: poe_fan_temp0 Temperature (in millicelcius) at which the fan
8338 + turns on (default 40000)
8339 + poe_fan_temp0_hyst Temperature delta (in millicelcius) at which
8340 + the fan turns off (default 2000)
8341 + poe_fan_temp1 Temperature (in millicelcius) at which the fan
8342 + speeds up (default 45000)
8343 + poe_fan_temp1_hyst Temperature delta (in millicelcius) at which
8344 + the fan slows down (default 2000)
8345 + poe_fan_temp2 Temperature (in millicelcius) at which the fan
8346 + speeds up (default 50000)
8347 + poe_fan_temp2_hyst Temperature delta (in millicelcius) at which
8348 + the fan slows down (default 2000)
8349 + poe_fan_temp3 Temperature (in millicelcius) at which the fan
8350 + speeds up (default 55000)
8351 + poe_fan_temp3_hyst Temperature delta (in millicelcius) at which
8352 + the fan slows down (default 5000)
8353 +
8354 +
8355 +Name: rpi-proto
8356 +Info: Configures the RPi Proto audio card
8357 +Load: dtoverlay=rpi-proto
8358 +Params: <None>
8359 +
8360 +
8361 +Name: rpi-sense
8362 +Info: Raspberry Pi Sense HAT
8363 +Load: dtoverlay=rpi-sense
8364 +Params: <None>
8365 +
8366 +
8367 +Name: rpi-tv
8368 +Info: Raspberry Pi TV HAT
8369 +Load: dtoverlay=rpi-tv
8370 +Params: <None>
8371 +
8372 +
8373 +Name: rpivid-v4l2
8374 +Info: Load the V4L2 stateless video decoder driver for the HEVC block,
8375 + disabling the memory mapped devices in the process.
8376 +Load: dtoverlay=rpivid-v4l2
8377 +Params: <None>
8378 +
8379 +
8380 +Name: rra-digidac1-wm8741-audio
8381 +Info: Configures the Red Rocks Audio DigiDAC1 soundcard
8382 +Load: dtoverlay=rra-digidac1-wm8741-audio
8383 +Params: <None>
8384 +
8385 +
8386 +Name: sainsmart18
8387 +Info: Overlay for the SPI-connected Sainsmart 1.8" display (based on the
8388 + ST7735R chip).
8389 +Load: dtoverlay=sainsmart18,<param>=<val>
8390 +Params: rotate Display rotation {0,90,180,270}
8391 + speed SPI bus speed in Hz (default 4000000)
8392 + fps Display frame rate in Hz
8393 + bgr Enable BGR mode (default off)
8394 + debug Debug output level {0-7}
8395 + dc_pin GPIO pin for D/C (default 24)
8396 + reset_pin GPIO pin for RESET (default 25)
8397 +
8398 +
8399 +Name: sc16is750-i2c
8400 +Info: Overlay for the NXP SC16IS750 UART with I2C Interface
8401 + Enables the chip on I2C1 at 0x48 (or the "addr" parameter value). To
8402 + select another address, please refer to table 10 in reference manual.
8403 +Load: dtoverlay=sc16is750-i2c,<param>=<val>
8404 +Params: int_pin GPIO used for IRQ (default 24)
8405 + addr Address (default 0x48)
8406 + xtal On-board crystal frequency (default 14745600)
8407 +
8408 +
8409 +Name: sc16is752-i2c
8410 +Info: Overlay for the NXP SC16IS752 dual UART with I2C Interface
8411 + Enables the chip on I2C1 at 0x48 (or the "addr" parameter value). To
8412 + select another address, please refer to table 10 in reference manual.
8413 +Load: dtoverlay=sc16is752-i2c,<param>=<val>
8414 +Params: int_pin GPIO used for IRQ (default 24)
8415 + addr Address (default 0x48)
8416 + xtal On-board crystal frequency (default 14745600)
8417 +
8418 +
8419 +Name: sc16is752-spi0
8420 +Info: Overlay for the NXP SC16IS752 Dual UART with SPI Interface
8421 + Enables the chip on SPI0.
8422 +Load: dtoverlay=sc16is752-spi0,<param>=<val>
8423 +Params: int_pin GPIO used for IRQ (default 24)
8424 + xtal On-board crystal frequency (default 14745600)
8425 +
8426 +
8427 +Name: sc16is752-spi1
8428 +Info: Overlay for the NXP SC16IS752 Dual UART with SPI Interface
8429 + Enables the chip on SPI1.
8430 + N.B.: spi1 is only accessible on devices with a 40pin header, eg:
8431 + A+, B+, Zero and PI2 B; as well as the Compute Module.
8432 +
8433 +Load: dtoverlay=sc16is752-spi1,<param>=<val>
8434 +Params: int_pin GPIO used for IRQ (default 24)
8435 + xtal On-board crystal frequency (default 14745600)
8436 +
8437 +
8438 +Name: sdhost
8439 +Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock.
8440 + N.B. This overlay is designed for situations where the mmc driver is
8441 + the default, so it disables the other (mmc) interface - this will kill
8442 + WLAN on a Pi3. If this isn't what you want, either use the sdtweak
8443 + overlay or the new sd_* dtparams of the base DTBs.
8444 +Load: dtoverlay=sdhost,<param>=<val>
8445 +Params: overclock_50 Clock (in MHz) to use when the MMC framework
8446 + requests 50MHz
8447 +
8448 + force_pio Disable DMA support (default off)
8449 +
8450 + pio_limit Number of blocks above which to use DMA
8451 + (default 1)
8452 +
8453 + debug Enable debug output (default off)
8454 +
8455 +
8456 +Name: sdio
8457 +Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock,
8458 + and enables SDIO via GPIOs 22-27. An example of use in 1-bit mode is
8459 + "dtoverlay=sdio,bus_width=1,gpios_22_25"
8460 +Load: dtoverlay=sdio,<param>=<val>
8461 +Params: sdio_overclock SDIO Clock (in MHz) to use when the MMC
8462 + framework requests 50MHz
8463 +
8464 + poll_once Disable SDIO-device polling every second
8465 + (default on: polling once at boot-time)
8466 +
8467 + bus_width Set the SDIO host bus width (default 4 bits)
8468 +
8469 + gpios_22_25 Select GPIOs 22-25 for 1-bit mode. Must be used
8470 + with bus_width=1. This replaces the sdio-1bit
8471 + overlay, which is now deprecated.
8472 +
8473 + gpios_34_37 Select GPIOs 34-37 for 1-bit mode. Must be used
8474 + with bus_width=1.
8475 +
8476 + gpios_34_39 Select GPIOs 34-39 for 4-bit mode. Must be used
8477 + with bus_width=4 (the default).
8478 +
8479 +
8480 +Name: sdio-1bit
8481 +Info: This overlay is now deprecated. Use
8482 + "dtoverlay=sdio,bus_width=1,gpios_22_25" instead.
8483 +Load: <Deprecated>
8484 +
8485 +
8486 +Name: sdtweak
8487 +Info: This overlay is now deprecated. Use the sd_* dtparams in the
8488 + base DTB, e.g. "dtoverlay=sdtweak,poll_once" becomes
8489 + "dtparam=sd_poll_once".
8490 +Load: <Deprecated>
8491 +
8492 +
8493 +Name: seeed-can-fd-hat-v1
8494 +Info: Overlay for Seeed Studio CAN BUS FD HAT with two CAN FD
8495 + channels without RTC. Use this overlay if your HAT has no
8496 + battery holder.
8497 + https://www.seeedstudio.com/2-Channel-CAN-BUS-FD-Shield-for-Raspberry-Pi-p-4072.html
8498 +Load: dtoverlay=seeed-can-fd-hat-v1
8499 +Params: <None>
8500 +
8501 +
8502 +Name: seeed-can-fd-hat-v2
8503 +Info: Overlay for Seeed Studio CAN BUS FD HAT with two CAN FD
8504 + channels and an RTC. Use this overlay if your HAT has a
8505 + battery holder.
8506 + https://www.seeedstudio.com/CAN-BUS-FD-HAT-for-Raspberry-Pi-p-4742.html
8507 +Load: dtoverlay=seeed-can-fd-hat-v2
8508 +Params: <None>
8509 +
8510 +
8511 +Name: sh1106-spi
8512 +Info: Overlay for SH1106 OLED via SPI using fbtft staging driver.
8513 +Load: dtoverlay=sh1106-spi,<param>=<val>
8514 +Params: speed SPI bus speed (default 4000000)
8515 + rotate Display rotation (0, 90, 180 or 270; default 0)
8516 + fps Delay between frame updates (default 25)
8517 + debug Debug output level (0-7; default 0)
8518 + dc_pin GPIO pin for D/C (default 24)
8519 + reset_pin GPIO pin for RESET (default 25)
8520 + height Display height (32 or 64; default 64)
8521 +
8522 +
8523 +Name: si446x-spi0
8524 +Info: Overlay for Si446x UHF Transceiver via SPI using si446x driver.
8525 + The driver is currently out-of-tree at
8526 + https://github.com/sunipkmukherjee/silabs.git
8527 +Load: dtoverlay=si446x-spi0,<param>=<val>
8528 +Params: speed SPI bus speed (default 4000000)
8529 + int_pin GPIO pin for interrupts (default 17)
8530 + reset_pin GPIO pin for RESET (default 27)
8531 +
8532 +
8533 +Name: smi
8534 +Info: Enables the Secondary Memory Interface peripheral. Uses GPIOs 2-25!
8535 +Load: dtoverlay=smi
8536 +Params: <None>
8537 +
8538 +
8539 +Name: smi-dev
8540 +Info: Enables the userspace interface for the SMI driver
8541 +Load: dtoverlay=smi-dev
8542 +Params: <None>
8543 +
8544 +
8545 +Name: smi-nand
8546 +Info: Enables access to NAND flash via the SMI interface
8547 +Load: dtoverlay=smi-nand
8548 +Params: <None>
8549 +
8550 +
8551 +Name: spi-gpio35-39
8552 +Info: Move SPI function block to GPIO 35 to 39
8553 +Load: dtoverlay=spi-gpio35-39
8554 +Params: <None>
8555 +
8556 +
8557 +Name: spi-gpio40-45
8558 +Info: Move SPI function block to GPIOs 40 to 45
8559 +Load: dtoverlay=spi-gpio40-45
8560 +Params: <None>
8561 +
8562 +
8563 +Name: spi-rtc
8564 +Info: Adds support for a number of SPI Real Time Clock devices
8565 +Load: dtoverlay=spi-rtc,<param>=<val>
8566 +Params: ds3232 Select the DS3232 device
8567 + ds3234 Select the DS3234 device
8568 + pcf2123 Select the PCF2123 device
8569 +
8570 + spi0_0 Use spi0.0 (default)
8571 + spi0_1 Use spi0.1
8572 + spi1_0 Use spi1.0
8573 + spi1_1 Use spi1.1
8574 + spi2_0 Use spi2.0
8575 + spi2_1 Use spi2.1
8576 + cs_high This device requires an active-high CS
8577 +
8578 +
8579 +Name: spi0-1cs
8580 +Info: Only use one CS pin for SPI0
8581 +Load: dtoverlay=spi0-1cs,<param>=<val>
8582 +Params: cs0_pin GPIO pin for CS0 (default 8)
8583 + no_miso Don't claim and use the MISO pin (9), freeing
8584 + it for other uses.
8585 +
8586 +
8587 +Name: spi0-2cs
8588 +Info: Change the CS pins for SPI0
8589 +Load: dtoverlay=spi0-2cs,<param>=<val>
8590 +Params: cs0_pin GPIO pin for CS0 (default 8)
8591 + cs1_pin GPIO pin for CS1 (default 7)
8592 + no_miso Don't claim and use the MISO pin (9), freeing
8593 + it for other uses.
8594 +
8595 +
8596 +Name: spi0-cs
8597 +Info: This overlay has been renamed spi0-2cs, keeping spi0-cs as an
8598 + alias for backwards compatibility.
8599 +Load: <Deprecated>
8600 +
8601 +
8602 +Name: spi0-hw-cs
8603 +Info: This overlay has been deprecated and removed because it is no longer
8604 + necessary and has been seen to prevent spi0 from working.
8605 +Load: <Deprecated>
8606 +
8607 +
8608 +Name: spi1-1cs
8609 +Info: Enables spi1 with a single chip select (CS) line and associated spidev
8610 + dev node. The gpio pin number for the CS line and spidev device node
8611 + creation are configurable.
8612 + N.B.: spi1 is only accessible on devices with a 40pin header, eg:
8613 + A+, B+, Zero and PI2 B; as well as the Compute Module.
8614 +Load: dtoverlay=spi1-1cs,<param>=<val>
8615 +Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI1_CE0).
8616 + cs0_spidev Set to 'disabled' to stop the creation of a
8617 + userspace device node /dev/spidev1.0 (default
8618 + is 'okay' or enabled).
8619 +
8620 +
8621 +Name: spi1-2cs
8622 +Info: Enables spi1 with two chip select (CS) lines and associated spidev
8623 + dev nodes. The gpio pin numbers for the CS lines and spidev device node
8624 + creation are configurable.
8625 + N.B.: spi1 is only accessible on devices with a 40pin header, eg:
8626 + A+, B+, Zero and PI2 B; as well as the Compute Module.
8627 +Load: dtoverlay=spi1-2cs,<param>=<val>
8628 +Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI1_CE0).
8629 + cs1_pin GPIO pin for CS1 (default 17 - BCM SPI1_CE1).
8630 + cs0_spidev Set to 'disabled' to stop the creation of a
8631 + userspace device node /dev/spidev1.0 (default
8632 + is 'okay' or enabled).
8633 + cs1_spidev Set to 'disabled' to stop the creation of a
8634 + userspace device node /dev/spidev1.1 (default
8635 + is 'okay' or enabled).
8636 +
8637 +
8638 +Name: spi1-3cs
8639 +Info: Enables spi1 with three chip select (CS) lines and associated spidev
8640 + dev nodes. The gpio pin numbers for the CS lines and spidev device node
8641 + creation are configurable.
8642 + N.B.: spi1 is only accessible on devices with a 40pin header, eg:
8643 + A+, B+, Zero and PI2 B; as well as the Compute Module.
8644 +Load: dtoverlay=spi1-3cs,<param>=<val>
8645 +Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI1_CE0).
8646 + cs1_pin GPIO pin for CS1 (default 17 - BCM SPI1_CE1).
8647 + cs2_pin GPIO pin for CS2 (default 16 - BCM SPI1_CE2).
8648 + cs0_spidev Set to 'disabled' to stop the creation of a
8649 + userspace device node /dev/spidev1.0 (default
8650 + is 'okay' or enabled).
8651 + cs1_spidev Set to 'disabled' to stop the creation of a
8652 + userspace device node /dev/spidev1.1 (default
8653 + is 'okay' or enabled).
8654 + cs2_spidev Set to 'disabled' to stop the creation of a
8655 + userspace device node /dev/spidev1.2 (default
8656 + is 'okay' or enabled).
8657 +
8658 +
8659 +Name: spi2-1cs
8660 +Info: Enables spi2 with a single chip select (CS) line and associated spidev
8661 + dev node. The gpio pin number for the CS line and spidev device node
8662 + creation are configurable.
8663 + N.B.: spi2 is only accessible with the Compute Module.
8664 +Load: dtoverlay=spi2-1cs,<param>=<val>
8665 +Params: cs0_pin GPIO pin for CS0 (default 43 - BCM SPI2_CE0).
8666 + cs0_spidev Set to 'disabled' to stop the creation of a
8667 + userspace device node /dev/spidev2.0 (default
8668 + is 'okay' or enabled).
8669 +
8670 +
8671 +Name: spi2-2cs
8672 +Info: Enables spi2 with two chip select (CS) lines and associated spidev
8673 + dev nodes. The gpio pin numbers for the CS lines and spidev device node
8674 + creation are configurable.
8675 + N.B.: spi2 is only accessible with the Compute Module.
8676 +Load: dtoverlay=spi2-2cs,<param>=<val>
8677 +Params: cs0_pin GPIO pin for CS0 (default 43 - BCM SPI2_CE0).
8678 + cs1_pin GPIO pin for CS1 (default 44 - BCM SPI2_CE1).
8679 + cs0_spidev Set to 'disabled' to stop the creation of a
8680 + userspace device node /dev/spidev2.0 (default
8681 + is 'okay' or enabled).
8682 + cs1_spidev Set to 'disabled' to stop the creation of a
8683 + userspace device node /dev/spidev2.1 (default
8684 + is 'okay' or enabled).
8685 +
8686 +
8687 +Name: spi2-3cs
8688 +Info: Enables spi2 with three chip select (CS) lines and associated spidev
8689 + dev nodes. The gpio pin numbers for the CS lines and spidev device node
8690 + creation are configurable.
8691 + N.B.: spi2 is only accessible with the Compute Module.
8692 +Load: dtoverlay=spi2-3cs,<param>=<val>
8693 +Params: cs0_pin GPIO pin for CS0 (default 43 - BCM SPI2_CE0).
8694 + cs1_pin GPIO pin for CS1 (default 44 - BCM SPI2_CE1).
8695 + cs2_pin GPIO pin for CS2 (default 45 - BCM SPI2_CE2).
8696 + cs0_spidev Set to 'disabled' to stop the creation of a
8697 + userspace device node /dev/spidev2.0 (default
8698 + is 'okay' or enabled).
8699 + cs1_spidev Set to 'disabled' to stop the creation of a
8700 + userspace device node /dev/spidev2.1 (default
8701 + is 'okay' or enabled).
8702 + cs2_spidev Set to 'disabled' to stop the creation of a
8703 + userspace device node /dev/spidev2.2 (default
8704 + is 'okay' or enabled).
8705 +
8706 +
8707 +Name: spi3-1cs
8708 +Info: Enables spi3 with a single chip select (CS) line and associated spidev
8709 + dev node. The gpio pin number for the CS line and spidev device node
8710 + creation are configurable. BCM2711 only.
8711 +Load: dtoverlay=spi3-1cs,<param>=<val>
8712 +Params: cs0_pin GPIO pin for CS0 (default 0 - BCM SPI3_CE0).
8713 + cs0_spidev Set to 'off' to prevent the creation of a
8714 + userspace device node /dev/spidev3.0 (default
8715 + is 'on' or enabled).
8716 +
8717 +
8718 +Name: spi3-2cs
8719 +Info: Enables spi3 with two chip select (CS) lines and associated spidev
8720 + dev nodes. The gpio pin numbers for the CS lines and spidev device node
8721 + creation are configurable. BCM2711 only.
8722 +Load: dtoverlay=spi3-2cs,<param>=<val>
8723 +Params: cs0_pin GPIO pin for CS0 (default 0 - BCM SPI3_CE0).
8724 + cs1_pin GPIO pin for CS1 (default 24 - BCM SPI3_CE1).
8725 + cs0_spidev Set to 'off' to prevent the creation of a
8726 + userspace device node /dev/spidev3.0 (default
8727 + is 'on' or enabled).
8728 + cs1_spidev Set to 'off' to prevent the creation of a
8729 + userspace device node /dev/spidev3.1 (default
8730 + is 'on' or enabled).
8731 +
8732 +
8733 +Name: spi4-1cs
8734 +Info: Enables spi4 with a single chip select (CS) line and associated spidev
8735 + dev node. The gpio pin number for the CS line and spidev device node
8736 + creation are configurable. BCM2711 only.
8737 +Load: dtoverlay=spi4-1cs,<param>=<val>
8738 +Params: cs0_pin GPIO pin for CS0 (default 4 - BCM SPI4_CE0).
8739 + cs0_spidev Set to 'off' to prevent the creation of a
8740 + userspace device node /dev/spidev4.0 (default
8741 + is 'on' or enabled).
8742 +
8743 +
8744 +Name: spi4-2cs
8745 +Info: Enables spi4 with two chip select (CS) lines and associated spidev
8746 + dev nodes. The gpio pin numbers for the CS lines and spidev device node
8747 + creation are configurable. BCM2711 only.
8748 +Load: dtoverlay=spi4-2cs,<param>=<val>
8749 +Params: cs0_pin GPIO pin for CS0 (default 4 - BCM SPI4_CE0).
8750 + cs1_pin GPIO pin for CS1 (default 25 - BCM SPI4_CE1).
8751 + cs0_spidev Set to 'off' to prevent the creation of a
8752 + userspace device node /dev/spidev4.0 (default
8753 + is 'on' or enabled).
8754 + cs1_spidev Set to 'off' to prevent the creation of a
8755 + userspace device node /dev/spidev4.1 (default
8756 + is 'on' or enabled).
8757 +
8758 +
8759 +Name: spi5-1cs
8760 +Info: Enables spi5 with a single chip select (CS) line and associated spidev
8761 + dev node. The gpio pin numbers for the CS lines and spidev device node
8762 + creation are configurable. BCM2711 only.
8763 +Load: dtoverlay=spi5-1cs,<param>=<val>
8764 +Params: cs0_pin GPIO pin for CS0 (default 12 - BCM SPI5_CE0).
8765 + cs0_spidev Set to 'off' to prevent the creation of a
8766 + userspace device node /dev/spidev5.0 (default
8767 + is 'on' or enabled).
8768 +
8769 +
8770 +Name: spi5-2cs
8771 +Info: Enables spi5 with two chip select (CS) lines and associated spidev
8772 + dev nodes. The gpio pin numbers for the CS lines and spidev device node
8773 + creation are configurable. BCM2711 only.
8774 +Load: dtoverlay=spi5-2cs,<param>=<val>
8775 +Params: cs0_pin GPIO pin for CS0 (default 12 - BCM SPI5_CE0).
8776 + cs1_pin GPIO pin for CS1 (default 26 - BCM SPI5_CE1).
8777 + cs0_spidev Set to 'off' to prevent the creation of a
8778 + userspace device node /dev/spidev5.0 (default
8779 + is 'on' or enabled).
8780 + cs1_spidev Set to 'off' to prevent the creation of a
8781 + userspace device node /dev/spidev5.1 (default
8782 + is 'on' or enabled).
8783 +
8784 +
8785 +Name: spi6-1cs
8786 +Info: Enables spi6 with a single chip select (CS) line and associated spidev
8787 + dev node. The gpio pin number for the CS line and spidev device node
8788 + creation are configurable. BCM2711 only.
8789 +Load: dtoverlay=spi6-1cs,<param>=<val>
8790 +Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI6_CE0).
8791 + cs0_spidev Set to 'off' to prevent the creation of a
8792 + userspace device node /dev/spidev6.0 (default
8793 + is 'on' or enabled).
8794 +
8795 +
8796 +Name: spi6-2cs
8797 +Info: Enables spi6 with two chip select (CS) lines and associated spidev
8798 + dev nodes. The gpio pin numbers for the CS lines and spidev device node
8799 + creation are configurable. BCM2711 only.
8800 +Load: dtoverlay=spi6-2cs,<param>=<val>
8801 +Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI6_CE0).
8802 + cs1_pin GPIO pin for CS1 (default 27 - BCM SPI6_CE1).
8803 + cs0_spidev Set to 'off' to prevent the creation of a
8804 + userspace device node /dev/spidev6.0 (default
8805 + is 'on' or enabled).
8806 + cs1_spidev Set to 'off' to prevent the creation of a
8807 + userspace device node /dev/spidev6.1 (default
8808 + is 'on' or enabled).
8809 +
8810 +
8811 +Name: ssd1306
8812 +Info: Overlay for activation of SSD1306 over I2C OLED display framebuffer.
8813 +Load: dtoverlay=ssd1306,<param>=<val>
8814 +Params: address Location in display memory of first character.
8815 + (default=0)
8816 + width Width of display. (default=128)
8817 + height Height of display. (default=64)
8818 + offset virtual channel a. (default=0)
8819 + normal Has no effect on displays tested. (default=not
8820 + set)
8821 + sequential Set this if every other scan line is missing.
8822 + (default=not set)
8823 + remapped Set this if display is garbled. (default=not
8824 + set)
8825 + inverted Set this if display is inverted and mirrored.
8826 + (default=not set)
8827 +
8828 + Examples:
8829 + Typical usage for 128x64 display: dtoverlay=ssd1306,inverted
8830 +
8831 + Typical usage for 128x32 display: dtoverlay=ssd1306,inverted,sequential
8832 +
8833 + i2c_baudrate=400000 will speed up the display.
8834 +
8835 + i2c_baudrate=1000000 seems to work even though it's not officially
8836 + supported by the hardware, and is faster still.
8837 +
8838 + For more information refer to the device datasheet at:
8839 + https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
8840 +
8841 +
8842 +Name: ssd1306-spi
8843 +Info: Overlay for SSD1306 OLED via SPI using fbtft staging driver.
8844 +Load: dtoverlay=ssd1306-spi,<param>=<val>
8845 +Params: speed SPI bus speed (default 10000000)
8846 + rotate Display rotation (0, 90, 180 or 270; default 0)
8847 + fps Delay between frame updates (default 25)
8848 + debug Debug output level (0-7; default 0)
8849 + dc_pin GPIO pin for D/C (default 24)
8850 + reset_pin GPIO pin for RESET (default 25)
8851 + height Display height (32 or 64; default 64)
8852 +
8853 +
8854 +Name: ssd1331-spi
8855 +Info: Overlay for SSD1331 OLED via SPI using fbtft staging driver.
8856 +Load: dtoverlay=ssd1331-spi,<param>=<val>
8857 +Params: speed SPI bus speed (default 4500000)
8858 + rotate Display rotation (0, 90, 180 or 270; default 0)
8859 + fps Delay between frame updates (default 25)
8860 + debug Debug output level (0-7; default 0)
8861 + dc_pin GPIO pin for D/C (default 24)
8862 + reset_pin GPIO pin for RESET (default 25)
8863 +
8864 +
8865 +Name: ssd1351-spi
8866 +Info: Overlay for SSD1351 OLED via SPI using fbtft staging driver.
8867 +Load: dtoverlay=ssd1351-spi,<param>=<val>
8868 +Params: speed SPI bus speed (default 4500000)
8869 + rotate Display rotation (0, 90, 180 or 270; default 0)
8870 + fps Delay between frame updates (default 25)
8871 + debug Debug output level (0-7; default 0)
8872 + dc_pin GPIO pin for D/C (default 24)
8873 + reset_pin GPIO pin for RESET (default 25)
8874 +
8875 +
8876 +Name: superaudioboard
8877 +Info: Configures the SuperAudioBoard sound card
8878 +Load: dtoverlay=superaudioboard,<param>=<val>
8879 +Params: gpiopin GPIO pin for codec reset
8880 +
8881 +
8882 +Name: sx150x
8883 +Info: Configures the Semtech SX150X I2C GPIO expanders.
8884 +Load: dtoverlay=sx150x,<param>=<val>
8885 +Params: sx150<x>-<n>-<m> Enables SX150X device on I2C#<n> with slave
8886 + address <m>. <x> may be 1-9. <n> may be 0 or 1.
8887 + Permissible values of <m> (which is denoted in
8888 + hex) depend on the device variant. For SX1501,
8889 + SX1502, SX1504 and SX1505, <m> may be 20 or 21.
8890 + For SX1503 and SX1506, <m> may be 20. For
8891 + SX1507 and SX1509, <m> may be 3E, 3F, 70 or 71.
8892 + For SX1508, <m> may be 20, 21, 22 or 23.
8893 +
8894 + sx150<x>-<n>-<m>-int-gpio
8895 + Integer, enables interrupts on SX150X device on
8896 + I2C#<n> with slave address <m>, specifies
8897 + the GPIO pin to which NINT output of SX150X is
8898 + connected.
8899 +
8900 +
8901 +Name: tc358743
8902 +Info: Toshiba TC358743 HDMI to CSI-2 bridge chip.
8903 + Uses Unicam 1, which is the standard camera connector on most Pi
8904 + variants.
8905 +Load: dtoverlay=tc358743,<param>=<val>
8906 +Params: 4lane Use 4 lanes (only applicable to Compute Modules
8907 + CAM1 connector).
8908 +
8909 + link-frequency Set the link frequency. Only values of 297000000
8910 + (574Mbit/s) and 486000000 (972Mbit/s - default)
8911 + are supported by the driver.
8912 +
8913 +
8914 +Name: tc358743-audio
8915 +Info: Used in combination with the tc358743-fast overlay to route the audio
8916 + from the TC358743 over I2S to the Pi.
8917 + Wiring is LRCK/WFS to GPIO 19, BCK/SCK to GPIO 18, and DATA/SD to GPIO
8918 + 20.
8919 +Load: dtoverlay=tc358743-audio,<param>=<val>
8920 +Params: card-name Override the default, "tc358743", card name.
8921 +
8922 +
8923 +Name: tinylcd35
8924 +Info: 3.5" Color TFT Display by www.tinylcd.com
8925 + Options: Touch, RTC, keypad
8926 +Load: dtoverlay=tinylcd35,<param>=<val>
8927 +Params: speed Display SPI bus speed
8928 +
8929 + rotate Display rotation {0,90,180,270}
8930 +
8931 + fps Delay between frame updates
8932 +
8933 + debug Debug output level {0-7}
8934 +
8935 + touch Enable touch panel
8936 +
8937 + touchgpio Touch controller IRQ GPIO
8938 +
8939 + xohms Touchpanel: Resistance of X-plate in ohms
8940 +
8941 + rtc-pcf PCF8563 Real Time Clock
8942 +
8943 + rtc-ds DS1307 Real Time Clock
8944 +
8945 + keypad Enable keypad
8946 +
8947 + Examples:
8948 + Display with touchpanel, PCF8563 RTC and keypad:
8949 + dtoverlay=tinylcd35,touch,rtc-pcf,keypad
8950 + Old touch display:
8951 + dtoverlay=tinylcd35,touch,touchgpio=3
8952 +
8953 +
8954 +Name: tpm-slb9670
8955 +Info: Enables support for Infineon SLB9670 Trusted Platform Module add-on
8956 + boards, which can be used as a secure key storage and hwrng,
8957 + available as "Iridium SLB9670" by Infineon and "LetsTrust TPM" by pi3g.
8958 +Load: dtoverlay=tpm-slb9670
8959 +Params: <None>
8960 +
8961 +
8962 +Name: uart0
8963 +Info: Change the pin usage of uart0
8964 +Load: dtoverlay=uart0,<param>=<val>
8965 +Params: txd0_pin GPIO pin for TXD0 (14, 32 or 36 - default 14)
8966 +
8967 + rxd0_pin GPIO pin for RXD0 (15, 33 or 37 - default 15)
8968 +
8969 + pin_func Alternative pin function - 4(Alt0) for 14&15,
8970 + 7(Alt3) for 32&33, 6(Alt2) for 36&37
8971 +
8972 +
8973 +Name: uart1
8974 +Info: Change the pin usage of uart1
8975 +Load: dtoverlay=uart1,<param>=<val>
8976 +Params: txd1_pin GPIO pin for TXD1 (14, 32 or 40 - default 14)
8977 +
8978 + rxd1_pin GPIO pin for RXD1 (15, 33 or 41 - default 15)
8979 +
8980 +
8981 +Name: uart2
8982 +Info: Enable uart 2 on GPIOs 0-3. BCM2711 only.
8983 +Load: dtoverlay=uart2,<param>
8984 +Params: ctsrts Enable CTS/RTS on GPIOs 2-3 (default off)
8985 +
8986 +
8987 +Name: uart3
8988 +Info: Enable uart 3 on GPIOs 4-7. BCM2711 only.
8989 +Load: dtoverlay=uart3,<param>
8990 +Params: ctsrts Enable CTS/RTS on GPIOs 6-7 (default off)
8991 +
8992 +
8993 +Name: uart4
8994 +Info: Enable uart 4 on GPIOs 8-11. BCM2711 only.
8995 +Load: dtoverlay=uart4,<param>
8996 +Params: ctsrts Enable CTS/RTS on GPIOs 10-11 (default off)
8997 +
8998 +
8999 +Name: uart5
9000 +Info: Enable uart 5 on GPIOs 12-15. BCM2711 only.
9001 +Load: dtoverlay=uart5,<param>
9002 +Params: ctsrts Enable CTS/RTS on GPIOs 14-15 (default off)
9003 +
9004 +
9005 +Name: udrc
9006 +Info: Configures the NW Digital Radio UDRC Hat
9007 +Load: dtoverlay=udrc,<param>=<val>
9008 +Params: alsaname Name of the ALSA audio device (default "udrc")
9009 +
9010 +
9011 +Name: ugreen-dabboard
9012 +Info: Configures the ugreen-dabboard I2S overlay
9013 + This is a simple overlay based on the simple-audio-card and the dmic
9014 + codec. It has the speciality that it is configured to use the codec
9015 + as a master I2S device. It works for example with the Si468x DAB
9016 + receiver on the uGreen DABBoard.
9017 +Load: dtoverlay=ugreen-dabboard,<param>=<val>
9018 +Params: card-name Override the default, "dabboard", card name.
9019 +
9020 +
9021 +Name: upstream
9022 +Info: Allow usage of downstream .dtb with upstream kernel. Comprises the
9023 + vc4-kms-v3d and dwc2 overlays.
9024 +Load: dtoverlay=upstream
9025 +Params: <None>
9026 +
9027 +
9028 +Name: upstream-aux-interrupt
9029 +Info: This overlay has been deprecated and removed because it is no longer
9030 + necessary.
9031 +Load: <Deprecated>
9032 +
9033 +
9034 +Name: upstream-pi4
9035 +Info: Allow usage of downstream .dtb with upstream kernel on Pi 4. Comprises
9036 + the vc4-kms-v3d-pi4 and dwc2 overlays.
9037 +Load: dtoverlay=upstream-pi4
9038 +Params: <None>
9039 +
9040 +
9041 +Name: vc4-fkms-v3d
9042 +Info: Enable Eric Anholt's DRM VC4 V3D driver on top of the dispmanx
9043 + display stack.
9044 +Load: dtoverlay=vc4-fkms-v3d,<param>
9045 +Params: cma-512 CMA is 512MB (needs 1GB)
9046 + cma-448 CMA is 448MB (needs 1GB)
9047 + cma-384 CMA is 384MB (needs 1GB)
9048 + cma-320 CMA is 320MB (needs 1GB)
9049 + cma-256 CMA is 256MB (needs 1GB)
9050 + cma-192 CMA is 192MB (needs 1GB)
9051 + cma-128 CMA is 128MB
9052 + cma-96 CMA is 96MB
9053 + cma-64 CMA is 64MB
9054 + cma-size CMA size in bytes, 4MB aligned
9055 + cma-default Use upstream's default value
9056 +
9057 +
9058 +Name: vc4-fkms-v3d-pi4
9059 +Info: Enable Eric Anholt's DRM VC4 V3D driver on top of the dispmanx
9060 + display stack.
9061 +Load: dtoverlay=vc4-fkms-v3d-pi4,<param>
9062 +Params: cma-512 CMA is 512MB (needs 1GB)
9063 + cma-448 CMA is 448MB (needs 1GB)
9064 + cma-384 CMA is 384MB (needs 1GB)
9065 + cma-320 CMA is 320MB (needs 1GB)
9066 + cma-256 CMA is 256MB (needs 1GB)
9067 + cma-192 CMA is 192MB (needs 1GB)
9068 + cma-128 CMA is 128MB
9069 + cma-96 CMA is 96MB
9070 + cma-64 CMA is 64MB
9071 + cma-size CMA size in bytes, 4MB aligned
9072 + cma-default Use upstream's default value
9073 +
9074 +
9075 +Name: vc4-kms-dpi-at056tn53v1
9076 +Info: Enable an Innolux 5.6in VGA TFT connected to DPI interface under KMS.
9077 + Requires vc4-kms-v3d to be loaded.
9078 +Load: dtoverlay=vc4-kms-dpi-at056tn53v1
9079 +Params: <None>
9080 +
9081 +
9082 +Name: vc4-kms-dsi-7inch
9083 +Info: Enable the Raspberry Pi DSI 7" screen.
9084 + Includes the edt-ft5406 for the touchscreen element.
9085 + Requires vc4-kms-v3d to be loaded.
9086 +Load: dtoverlay=vc4-kms-dsi-7inch,<param>=<val>
9087 +Params: sizex Touchscreen size x (default 800)
9088 + sizey Touchscreen size y (default 480)
9089 + invx Touchscreen inverted x axis
9090 + invy Touchscreen inverted y axis
9091 + swapxy Touchscreen swapped x y axis
9092 + disable_touch Disables the touch screen overlay driver
9093 +
9094 +
9095 +Name: vc4-kms-dsi-lt070me05000
9096 +Info: Enable a JDI LT070ME05000 DSI display on DSI1.
9097 + Note that this is a 4 lane DSI device, so it will only work on a Compute
9098 + Module.
9099 + Requires vc4-kms-v3d to be loaded.
9100 +Load: dtoverlay=vc4-kms-dsi-lt070me05000,<param>
9101 +Params: reset GPIO for the reset signal (default 17)
9102 + enable GPIO for the enable signal (default 4)
9103 + dcdc-en GPIO for the DC-DC converter enable (default 5)
9104 +
9105 +
9106 +Name: vc4-kms-dsi-lt070me05000-v2
9107 +Info: Enable a JDI LT070ME05000 DSI display on DSI1 using Harlab's V2
9108 + interface board.
9109 + Note that this is a 4 lane DSI device, so it will only work on a Compute
9110 + Module.
9111 + Requires vc4-kms-v3d to be loaded.
9112 +Load: dtoverlay=vc4-kms-dsi-lt070me05000-v2
9113 +Params: <None>
9114 +
9115 +
9116 +Name: vc4-kms-kippah-7inch
9117 +Info: Enable the Adafruit DPI Kippah with the 7" Ontat panel attached.
9118 + Requires vc4-kms-v3d to be loaded.
9119 +Load: dtoverlay=vc4-kms-kippah-7inch
9120 +Params: <None>
9121 +
9122 +
9123 +Name: vc4-kms-v3d
9124 +Info: Enable Eric Anholt's DRM VC4 HDMI/HVS/V3D driver.
9125 +Load: dtoverlay=vc4-kms-v3d,<param>
9126 +Params: cma-512 CMA is 512MB (needs 1GB)
9127 + cma-448 CMA is 448MB (needs 1GB)
9128 + cma-384 CMA is 384MB (needs 1GB)
9129 + cma-320 CMA is 320MB (needs 1GB)
9130 + cma-256 CMA is 256MB (needs 1GB)
9131 + cma-192 CMA is 192MB (needs 1GB)
9132 + cma-128 CMA is 128MB
9133 + cma-96 CMA is 96MB
9134 + cma-64 CMA is 64MB
9135 + cma-size CMA size in bytes, 4MB aligned
9136 + cma-default Use upstream's default value
9137 + audio Enable or disable audio over HDMI (default "on")
9138 + noaudio Disable all HDMI audio (default "off")
9139 + nocomposite Disable the composite video output (default
9140 + "off")
9141 +
9142 +
9143 +Name: vc4-kms-v3d-pi4
9144 +Info: Enable Eric Anholt's DRM VC4 HDMI/HVS/V3D driver for Pi4.
9145 +Load: dtoverlay=vc4-kms-v3d-pi4,<param>
9146 +Params: cma-512 CMA is 512MB
9147 + cma-448 CMA is 448MB
9148 + cma-384 CMA is 384MB
9149 + cma-320 CMA is 320MB
9150 + cma-256 CMA is 256MB
9151 + cma-192 CMA is 192MB
9152 + cma-128 CMA is 128MB
9153 + cma-96 CMA is 96MB
9154 + cma-64 CMA is 64MB
9155 + cma-size CMA size in bytes, 4MB aligned
9156 + cma-default Use upstream's default value
9157 + audio Enable or disable audio over HDMI0 (default
9158 + "on")
9159 + audio1 Enable or disable audio over HDMI1 (default
9160 + "on")
9161 + noaudio Disable all HDMI audio (default "off")
9162 + composite Enable the composite output (disables all other
9163 + outputs)
9164 +
9165 +
9166 +Name: vc4-kms-vga666
9167 +Info: Enable the VGA666 (resistor ladder ADC) for the vc4-kms-v3d driver.
9168 + Requires vc4-kms-v3d to be loaded.
9169 +Load: dtoverlay=vc4-kms-vga666,<param>
9170 +Params: ddc Enables GPIOs 0&1 as the I2C to read the EDID
9171 + from the display. NB These are NOT 5V tolerant
9172 + GPIOs, therefore level shifters are required.
9173 +
9174 +
9175 +Name: vga666
9176 +Info: Overlay for the Fen Logic VGA666 board
9177 + This uses GPIOs 2-21 (so no I2C), and activates the output 2-3 seconds
9178 + after the kernel has started.
9179 + NOT for use with vc4-kms-v3d.
9180 +Load: dtoverlay=vga666
9181 +Params: <None>
9182 +
9183 +
9184 +Name: w1-gpio
9185 +Info: Configures the w1-gpio Onewire interface module.
9186 + Use this overlay if you *don't* need a GPIO to drive an external pullup.
9187 +Load: dtoverlay=w1-gpio,<param>=<val>
9188 +Params: gpiopin GPIO for I/O (default "4")
9189 + pullup Now enabled by default (ignored)
9190 +
9191 +
9192 +Name: w1-gpio-pullup
9193 +Info: Configures the w1-gpio Onewire interface module.
9194 + Use this overlay if you *do* need a GPIO to drive an external pullup.
9195 +Load: dtoverlay=w1-gpio-pullup,<param>=<val>
9196 +Params: gpiopin GPIO for I/O (default "4")
9197 + extpullup GPIO for external pullup (default "5")
9198 + pullup Now enabled by default (ignored)
9199 +
9200 +
9201 +Name: w5500
9202 +Info: Overlay for the Wiznet W5500 Ethernet Controller on SPI0
9203 +Load: dtoverlay=w5500,<param>=<val>
9204 +Params: int_pin GPIO used for INT (default 25)
9205 +
9206 + speed SPI bus speed (default 30000000)
9207 +
9208 + cs SPI bus Chip Select (default 0)
9209 +
9210 +
9211 +Name: wittypi
9212 +Info: Configures the wittypi RTC module.
9213 +Load: dtoverlay=wittypi,<param>=<val>
9214 +Params: led_gpio GPIO for LED (default "17")
9215 + led_trigger Choose which activity the LED tracks (default
9216 + "default-on")
9217 +
9218 +
9219 +Name: wm8960-soundcard
9220 +Info: Overlay for the Waveshare wm8960 soundcard
9221 +Load: dtoverlay=wm8960-soundcard,<param>=<val>
9222 +Params: alsaname Changes the card name in ALSA
9223 + compatible Changes the codec compatibility
9224 +
9225 +
9226 +Troubleshooting
9227 +===============
9228 +
9229 +If you are experiencing problems that you think are DT-related, enable DT
9230 +diagnostic output by adding this to /boot/config.txt:
9231 +
9232 + dtdebug=on
9233 +
9234 +and rebooting. Then run:
9235 +
9236 + sudo vcdbg log msg
9237 +
9238 +and look for relevant messages.
9239 +
9240 +Further reading
9241 +===============
9242 +
9243 +This is only meant to be a quick introduction to the subject of Device Tree on
9244 +Raspberry Pi. There is a more complete explanation here:
9245 +
9246 +http://www.raspberrypi.org/documentation/configuration/device-tree.md
9247 diff --git a/arch/arm/boot/dts/overlays/act-led-overlay.dts b/arch/arm/boot/dts/overlays/act-led-overlay.dts
9248 new file mode 100644
9249 index 000000000000..2f4bbb407f89
9250 --- /dev/null
9251 +++ b/arch/arm/boot/dts/overlays/act-led-overlay.dts
9252 @@ -0,0 +1,27 @@
9253 +/dts-v1/;
9254 +/plugin/;
9255 +
9256 +/* Pi3 uses a GPIO expander to drive the LEDs which can only be accessed
9257 + from the VPU. There is a special driver for this with a separate DT node,
9258 + which has the unfortunate consequence of breaking the act_led_gpio and
9259 + act_led_activelow dtparams.
9260 +
9261 + This overlay changes the GPIO controller back to the standard one and
9262 + restores the dtparams.
9263 +*/
9264 +
9265 +/{
9266 + compatible = "brcm,bcm2835";
9267 +
9268 + fragment@0 {
9269 + target = <&act_led>;
9270 + frag0: __overlay__ {
9271 + gpios = <&gpio 0 0>;
9272 + };
9273 + };
9274 +
9275 + __overrides__ {
9276 + gpio = <&frag0>,"gpios:4";
9277 + activelow = <&frag0>,"gpios:8";
9278 + };
9279 +};
9280 diff --git a/arch/arm/boot/dts/overlays/adafruit18-overlay.dts b/arch/arm/boot/dts/overlays/adafruit18-overlay.dts
9281 new file mode 100644
9282 index 000000000000..e1ce94a8cd3e
9283 --- /dev/null
9284 +++ b/arch/arm/boot/dts/overlays/adafruit18-overlay.dts
9285 @@ -0,0 +1,55 @@
9286 +/*
9287 + * Device Tree overlay for Adafruit 1.8" TFT LCD with ST7735R chip 160x128
9288 + */
9289 +
9290 +/dts-v1/;
9291 +/plugin/;
9292 +
9293 +/ {
9294 + compatible = "brcm,bcm2835";
9295 +
9296 + fragment@0 {
9297 + target = <&spidev0>;
9298 + __overlay__ {
9299 + status = "disabled";
9300 + };
9301 + };
9302 +
9303 + fragment@1 {
9304 + target = <&spi0>;
9305 + __overlay__ {
9306 + /* needed to avoid dtc warning */
9307 + #address-cells = <1>;
9308 + #size-cells = <0>;
9309 + status = "okay";
9310 +
9311 + af18: adafruit18@0 {
9312 + compatible = "fbtft,adafruit18";
9313 + reg = <0>;
9314 + pinctrl-names = "default";
9315 + spi-max-frequency = <40000000>;
9316 + rotate = <90>;
9317 + buswidth = <8>;
9318 + fps = <50>;
9319 + height = <160>;
9320 + width = <128>;
9321 + reset-gpios = <&gpio 25 1>;
9322 + dc-gpios = <&gpio 24 0>;
9323 + led-gpios = <&gpio 18 0>;
9324 + debug = <0>;
9325 + };
9326 + };
9327 + };
9328 +
9329 + __overrides__ {
9330 + green = <&af18>, "compatible=fbtft,adafruit18_green";
9331 + speed = <&af18>,"spi-max-frequency:0";
9332 + rotate = <&af18>,"rotate:0";
9333 + fps = <&af18>,"fps:0";
9334 + bgr = <&af18>,"bgr?";
9335 + debug = <&af18>,"debug:0";
9336 + dc_pin = <&af18>,"dc-gpios:4";
9337 + reset_pin = <&af18>,"reset-gpios:4";
9338 + led_pin = <&af18>,"led-gpios:4";
9339 + };
9340 +};
9341 diff --git a/arch/arm/boot/dts/overlays/adau1977-adc-overlay.dts b/arch/arm/boot/dts/overlays/adau1977-adc-overlay.dts
9342 new file mode 100644
9343 index 000000000000..298488e19156
9344 --- /dev/null
9345 +++ b/arch/arm/boot/dts/overlays/adau1977-adc-overlay.dts
9346 @@ -0,0 +1,40 @@
9347 +// Definitions for ADAU1977 ADC
9348 +/dts-v1/;
9349 +/plugin/;
9350 +
9351 +/ {
9352 + compatible = "brcm,bcm2835";
9353 +
9354 + fragment@0 {
9355 + target = <&i2c>;
9356 +
9357 + __overlay__ {
9358 + #address-cells = <1>;
9359 + #size-cells = <0>;
9360 + status = "okay";
9361 +
9362 + adau1977: codec@11 {
9363 + compatible = "adi,adau1977";
9364 + reg = <0x11>;
9365 + reset-gpios = <&gpio 5 0>;
9366 + AVDD-supply = <&vdd_3v3_reg>;
9367 + };
9368 + };
9369 + };
9370 +
9371 + fragment@1 {
9372 + target = <&i2s>;
9373 + __overlay__ {
9374 + status = "okay";
9375 + };
9376 + };
9377 +
9378 + fragment@2 {
9379 + target = <&sound>;
9380 + __overlay__ {
9381 + compatible = "adi,adau1977-adc";
9382 + i2s-controller = <&i2s>;
9383 + status = "okay";
9384 + };
9385 + };
9386 +};
9387 diff --git a/arch/arm/boot/dts/overlays/adau7002-simple-overlay.dts b/arch/arm/boot/dts/overlays/adau7002-simple-overlay.dts
9388 new file mode 100644
9389 index 000000000000..5fed769d2526
9390 --- /dev/null
9391 +++ b/arch/arm/boot/dts/overlays/adau7002-simple-overlay.dts
9392 @@ -0,0 +1,52 @@
9393 +/dts-v1/;
9394 +/plugin/;
9395 +
9396 +/ {
9397 + compatible = "brcm,bcm2835";
9398 +
9399 + fragment@0 {
9400 + target = <&i2s>;
9401 + __overlay__ {
9402 + status = "okay";
9403 + };
9404 + };
9405 +
9406 + fragment@1 {
9407 + target-path = "/";
9408 + __overlay__ {
9409 + adau7002_codec: adau7002-codec {
9410 + #sound-dai-cells = <0>;
9411 + compatible = "adi,adau7002";
9412 +/* IOVDD-supply = <&supply>;*/
9413 + status = "okay";
9414 + };
9415 + };
9416 + };
9417 +
9418 + fragment@2 {
9419 + target = <&sound>;
9420 + sound_overlay: __overlay__ {
9421 + compatible = "simple-audio-card";
9422 + simple-audio-card,format = "i2s";
9423 + simple-audio-card,name = "adau7002";
9424 + simple-audio-card,bitclock-slave = <&dailink0_slave>;
9425 + simple-audio-card,frame-slave = <&dailink0_slave>;
9426 + simple-audio-card,widgets =
9427 + "Microphone", "Microphone Jack";
9428 + simple-audio-card,routing =
9429 + "PDM_DAT", "Microphone Jack";
9430 + status = "okay";
9431 + simple-audio-card,cpu {
9432 + sound-dai = <&i2s>;
9433 + };
9434 + dailink0_slave: simple-audio-card,codec {
9435 + sound-dai = <&adau7002_codec>;
9436 + };
9437 + };
9438 + };
9439 +
9440 +
9441 + __overrides__ {
9442 + card-name = <&sound_overlay>,"simple-audio-card,name";
9443 + };
9444 +};
9445 diff --git a/arch/arm/boot/dts/overlays/ads1015-overlay.dts b/arch/arm/boot/dts/overlays/ads1015-overlay.dts
9446 new file mode 100644
9447 index 000000000000..dc1764613a8b
9448 --- /dev/null
9449 +++ b/arch/arm/boot/dts/overlays/ads1015-overlay.dts
9450 @@ -0,0 +1,98 @@
9451 +/*
9452 + * 2016 - Erik Sejr
9453 + */
9454 +/dts-v1/;
9455 +/plugin/;
9456 +
9457 +/ {
9458 + compatible = "brcm,bcm2835";
9459 + /* ----------- ADS1015 ------------ */
9460 + fragment@0 {
9461 + target = <&i2c_arm>;
9462 + __overlay__ {
9463 + #address-cells = <1>;
9464 + #size-cells = <0>;
9465 + status = "okay";
9466 + ads1015: ads1015@48 {
9467 + compatible = "ti,ads1015";
9468 + status = "okay";
9469 + #address-cells = <1>;
9470 + #size-cells = <0>;
9471 + reg = <0x48>;
9472 + };
9473 + };
9474 + };
9475 +
9476 + fragment@1 {
9477 + target = <&ads1015>;
9478 + __overlay__ {
9479 + #address-cells = <1>;
9480 + #size-cells = <0>;
9481 + channel_a: channel_a {
9482 + reg = <4>;
9483 + ti,gain = <2>;
9484 + ti,datarate = <4>;
9485 + };
9486 + };
9487 + };
9488 +
9489 + fragment@2 {
9490 + target = <&ads1015>;
9491 + __dormant__ {
9492 + #address-cells = <1>;
9493 + #size-cells = <0>;
9494 + channel_b: channel_b {
9495 + reg = <5>;
9496 + ti,gain = <2>;
9497 + ti,datarate = <4>;
9498 + };
9499 + };
9500 + };
9501 +
9502 + fragment@3 {
9503 + target = <&ads1015>;
9504 + __dormant__ {
9505 + #address-cells = <1>;
9506 + #size-cells = <0>;
9507 + channel_c: channel_c {
9508 + reg = <6>;
9509 + ti,gain = <2>;
9510 + ti,datarate = <4>;
9511 + };
9512 + };
9513 + };
9514 +
9515 + fragment@4 {
9516 + target = <&ads1015>;
9517 + __dormant__ {
9518 + #address-cells = <1>;
9519 + #size-cells = <0>;
9520 + channel_d: channel_d {
9521 + reg = <7>;
9522 + ti,gain = <2>;
9523 + ti,datarate = <4>;
9524 + };
9525 + };
9526 + };
9527 +
9528 + __overrides__ {
9529 + addr = <&ads1015>,"reg:0";
9530 + cha_enable = <0>,"=1";
9531 + cha_cfg = <&channel_a>,"reg:0";
9532 + cha_gain = <&channel_a>,"ti,gain:0";
9533 + cha_datarate = <&channel_a>,"ti,datarate:0";
9534 + chb_enable = <0>,"=2";
9535 + chb_cfg = <&channel_b>,"reg:0";
9536 + chb_gain = <&channel_b>,"ti,gain:0";
9537 + chb_datarate = <&channel_b>,"ti,datarate:0";
9538 + chc_enable = <0>,"=3";
9539 + chc_cfg = <&channel_c>,"reg:0";
9540 + chc_gain = <&channel_c>,"ti,gain:0";
9541 + chc_datarate = <&channel_c>,"ti,datarate:0";
9542 + chd_enable = <0>,"=4";
9543 + chd_cfg = <&channel_d>,"reg:0";
9544 + chd_gain = <&channel_d>,"ti,gain:0";
9545 + chd_datarate = <&channel_d>,"ti,datarate:0";
9546 + };
9547 +
9548 +};
9549 diff --git a/arch/arm/boot/dts/overlays/ads1115-overlay.dts b/arch/arm/boot/dts/overlays/ads1115-overlay.dts
9550 new file mode 100644
9551 index 000000000000..e44ced704ee2
9552 --- /dev/null
9553 +++ b/arch/arm/boot/dts/overlays/ads1115-overlay.dts
9554 @@ -0,0 +1,103 @@
9555 +/*
9556 + * TI ADS1115 multi-channel ADC overlay
9557 + */
9558 +
9559 +/dts-v1/;
9560 +/plugin/;
9561 +
9562 +/ {
9563 + compatible = "brcm,bcm2835";
9564 +
9565 + fragment@0 {
9566 + target = <&i2c_arm>;
9567 + __overlay__ {
9568 + #address-cells = <1>;
9569 + #size-cells = <0>;
9570 + status = "okay";
9571 +
9572 + ads1115: ads1115@48 {
9573 + compatible = "ti,ads1115";
9574 + status = "okay";
9575 + #address-cells = <1>;
9576 + #size-cells = <0>;
9577 + reg = <0x48>;
9578 + };
9579 + };
9580 + };
9581 +
9582 + fragment@1 {
9583 + target = <&ads1115>;
9584 + __dormant__ {
9585 + #address-cells = <1>;
9586 + #size-cells = <0>;
9587 +
9588 + channel_a: channel_a {
9589 + reg = <4>;
9590 + ti,gain = <1>;
9591 + ti,datarate = <7>;
9592 + };
9593 + };
9594 + };
9595 +
9596 + fragment@2 {
9597 + target = <&ads1115>;
9598 + __dormant__ {
9599 + #address-cells = <1>;
9600 + #size-cells = <0>;
9601 +
9602 + channel_b: channel_b {
9603 + reg = <5>;
9604 + ti,gain = <1>;
9605 + ti,datarate = <7>;
9606 + };
9607 + };
9608 + };
9609 +
9610 + fragment@3 {
9611 + target = <&ads1115>;
9612 + __dormant__ {
9613 + #address-cells = <1>;
9614 + #size-cells = <0>;
9615 +
9616 + channel_c: channel_c {
9617 + reg = <6>;
9618 + ti,gain = <1>;
9619 + ti,datarate = <7>;
9620 + };
9621 + };
9622 + };
9623 +
9624 + fragment@4 {
9625 + target = <&ads1115>;
9626 + __dormant__ {
9627 + #address-cells = <1>;
9628 + #size-cells = <0>;
9629 +
9630 + channel_d: channel_d {
9631 + reg = <7>;
9632 + ti,gain = <1>;
9633 + ti,datarate = <7>;
9634 + };
9635 + };
9636 + };
9637 +
9638 + __overrides__ {
9639 + addr = <&ads1115>,"reg:0";
9640 + cha_enable = <0>,"=1";
9641 + cha_cfg = <&channel_a>,"reg:0";
9642 + cha_gain = <&channel_a>,"ti,gain:0";
9643 + cha_datarate = <&channel_a>,"ti,datarate:0";
9644 + chb_enable = <0>,"=2";
9645 + chb_cfg = <&channel_b>,"reg:0";
9646 + chb_gain = <&channel_b>,"ti,gain:0";
9647 + chb_datarate = <&channel_b>,"ti,datarate:0";
9648 + chc_enable = <0>,"=3";
9649 + chc_cfg = <&channel_c>,"reg:0";
9650 + chc_gain = <&channel_c>,"ti,gain:0";
9651 + chc_datarate = <&channel_c>,"ti,datarate:0";
9652 + chd_enable = <0>,"=4";
9653 + chd_cfg = <&channel_d>,"reg:0";
9654 + chd_gain = <&channel_d>,"ti,gain:0";
9655 + chd_datarate = <&channel_d>,"ti,datarate:0";
9656 + };
9657 +};
9658 diff --git a/arch/arm/boot/dts/overlays/ads7846-overlay.dts b/arch/arm/boot/dts/overlays/ads7846-overlay.dts
9659 new file mode 100644
9660 index 000000000000..1c5c9b6bb6ff
9661 --- /dev/null
9662 +++ b/arch/arm/boot/dts/overlays/ads7846-overlay.dts
9663 @@ -0,0 +1,89 @@
9664 +/*
9665 + * Generic Device Tree overlay for the ADS7846 touch controller
9666 + *
9667 + */
9668 +
9669 +/dts-v1/;
9670 +/plugin/;
9671 +
9672 +/ {
9673 + compatible = "brcm,bcm2835";
9674 +
9675 + fragment@0 {
9676 + target = <&spi0>;
9677 + __overlay__ {
9678 + status = "okay";
9679 + };
9680 + };
9681 +
9682 + fragment@1 {
9683 + target = <&spidev0>;
9684 + __overlay__ {
9685 + status = "disabled";
9686 + };
9687 + };
9688 +
9689 + fragment@2 {
9690 + target = <&spidev1>;
9691 + __overlay__ {
9692 + status = "disabled";
9693 + };
9694 + };
9695 +
9696 + fragment@3 {
9697 + target = <&gpio>;
9698 + __overlay__ {
9699 + ads7846_pins: ads7846_pins {
9700 + brcm,pins = <255>; /* illegal default value */
9701 + brcm,function = <0>; /* in */
9702 + brcm,pull = <0>; /* none */
9703 + };
9704 + };
9705 + };
9706 +
9707 + fragment@4 {
9708 + target = <&spi0>;
9709 + __overlay__ {
9710 + /* needed to avoid dtc warning */
9711 + #address-cells = <1>;
9712 + #size-cells = <0>;
9713 +
9714 + ads7846: ads7846@1 {
9715 + compatible = "ti,ads7846";
9716 + reg = <1>;
9717 + pinctrl-names = "default";
9718 + pinctrl-0 = <&ads7846_pins>;
9719 +
9720 + spi-max-frequency = <2000000>;
9721 + interrupts = <255 2>; /* high-to-low edge triggered */
9722 + interrupt-parent = <&gpio>;
9723 + pendown-gpio = <&gpio 255 0>;
9724 +
9725 + /* driver defaults */
9726 + ti,x-min = /bits/ 16 <0>;
9727 + ti,y-min = /bits/ 16 <0>;
9728 + ti,x-max = /bits/ 16 <0x0FFF>;
9729 + ti,y-max = /bits/ 16 <0x0FFF>;
9730 + ti,pressure-min = /bits/ 16 <0>;
9731 + ti,pressure-max = /bits/ 16 <0xFFFF>;
9732 + ti,x-plate-ohms = /bits/ 16 <400>;
9733 + };
9734 + };
9735 + };
9736 + __overrides__ {
9737 + cs = <&ads7846>,"reg:0";
9738 + speed = <&ads7846>,"spi-max-frequency:0";
9739 + penirq = <&ads7846_pins>,"brcm,pins:0", /* REQUIRED */
9740 + <&ads7846>,"interrupts:0",
9741 + <&ads7846>,"pendown-gpio:4";
9742 + penirq_pull = <&ads7846_pins>,"brcm,pull:0";
9743 + swapxy = <&ads7846>,"ti,swap-xy?";
9744 + xmin = <&ads7846>,"ti,x-min;0";
9745 + ymin = <&ads7846>,"ti,y-min;0";
9746 + xmax = <&ads7846>,"ti,x-max;0";
9747 + ymax = <&ads7846>,"ti,y-max;0";
9748 + pmin = <&ads7846>,"ti,pressure-min;0";
9749 + pmax = <&ads7846>,"ti,pressure-max;0";
9750 + xohms = <&ads7846>,"ti,x-plate-ohms;0";
9751 + };
9752 +};
9753 diff --git a/arch/arm/boot/dts/overlays/adv7282m-overlay.dts b/arch/arm/boot/dts/overlays/adv7282m-overlay.dts
9754 new file mode 100644
9755 index 000000000000..5d85dfd0595c
9756 --- /dev/null
9757 +++ b/arch/arm/boot/dts/overlays/adv7282m-overlay.dts
9758 @@ -0,0 +1,65 @@
9759 +// SPDX-License-Identifier: GPL-2.0-only
9760 +// Definitions for Analog Devices ADV7282-M video to CSI2 bridge on VC I2C bus
9761 +/dts-v1/;
9762 +/plugin/;
9763 +
9764 +/{
9765 + compatible = "brcm,bcm2835";
9766 +
9767 + fragment@0 {
9768 + target = <&i2c_csi_dsi>;
9769 + __overlay__ {
9770 + #address-cells = <1>;
9771 + #size-cells = <0>;
9772 + status = "okay";
9773 +
9774 + adv728x: adv728x@21 {
9775 + compatible = "adi,adv7282-m";
9776 + reg = <0x21>;
9777 + status = "okay";
9778 + clock-frequency = <24000000>;
9779 + port {
9780 + adv728x_0: endpoint {
9781 + remote-endpoint = <&csi1_ep>;
9782 + clock-lanes = <0>;
9783 + data-lanes = <1>;
9784 + link-frequencies =
9785 + /bits/ 64 <297000000>;
9786 +
9787 + mclk-frequency = <12000000>;
9788 + };
9789 + };
9790 + };
9791 + };
9792 + };
9793 + fragment@1 {
9794 + target = <&csi1>;
9795 + __overlay__ {
9796 + status = "okay";
9797 +
9798 + port {
9799 + csi1_ep: endpoint {
9800 + remote-endpoint = <&adv728x_0>;
9801 + data-lanes = <1>;
9802 + };
9803 + };
9804 + };
9805 + };
9806 + fragment@2 {
9807 + target = <&i2c0if>;
9808 + __overlay__ {
9809 + status = "okay";
9810 + };
9811 + };
9812 +
9813 + fragment@3 {
9814 + target = <&i2c0mux>;
9815 + __overlay__ {
9816 + status = "okay";
9817 + };
9818 + };
9819 +
9820 + __overrides__ {
9821 + addr = <&adv728x>,"reg:0";
9822 + };
9823 +};
9824 diff --git a/arch/arm/boot/dts/overlays/adv728x-m-overlay.dts b/arch/arm/boot/dts/overlays/adv728x-m-overlay.dts
9825 new file mode 100644
9826 index 000000000000..ea392e886984
9827 --- /dev/null
9828 +++ b/arch/arm/boot/dts/overlays/adv728x-m-overlay.dts
9829 @@ -0,0 +1,37 @@
9830 +// SPDX-License-Identifier: GPL-2.0-only
9831 +// Definitions for Analog Devices ADV728[0|1|2]-M video to CSI2 bridges on VC
9832 +// I2C bus
9833 +
9834 +#include "adv7282m-overlay.dts"
9835 +
9836 +/{
9837 + compatible = "brcm,bcm2835";
9838 +
9839 + // Fragment numbers deliberately high to avoid conflicts with the
9840 + // included adv7282m overlay file.
9841 +
9842 + fragment@101 {
9843 + target = <&adv728x>;
9844 + __dormant__ {
9845 + compatible = "adi,adv7280-m";
9846 + };
9847 + };
9848 + fragment@102 {
9849 + target = <&adv728x>;
9850 + __dormant__ {
9851 + compatible = "adi,adv7281-m";
9852 + };
9853 + };
9854 + fragment@103 {
9855 + target = <&adv728x>;
9856 + __dormant__ {
9857 + compatible = "adi,adv7281-ma";
9858 + };
9859 + };
9860 +
9861 + __overrides__ {
9862 + adv7280m = <0>, "+101";
9863 + adv7281m = <0>, "+102";
9864 + adv7281ma = <0>, "+103";
9865 + };
9866 +};
9867 diff --git a/arch/arm/boot/dts/overlays/akkordion-iqdacplus-overlay.dts b/arch/arm/boot/dts/overlays/akkordion-iqdacplus-overlay.dts
9868 new file mode 100644
9869 index 000000000000..82f9b3734fb1
9870 --- /dev/null
9871 +++ b/arch/arm/boot/dts/overlays/akkordion-iqdacplus-overlay.dts
9872 @@ -0,0 +1,49 @@
9873 +// Definitions for Digital Dreamtime Akkordion using IQaudIO DAC+ or DACZero
9874 +/dts-v1/;
9875 +/plugin/;
9876 +
9877 +/ {
9878 + compatible = "brcm,bcm2835";
9879 +
9880 + fragment@0 {
9881 + target = <&i2s>;
9882 + __overlay__ {
9883 + status = "okay";
9884 + };
9885 + };
9886 +
9887 + fragment@1 {
9888 + target = <&i2c1>;
9889 + __overlay__ {
9890 + #address-cells = <1>;
9891 + #size-cells = <0>;
9892 + status = "okay";
9893 +
9894 + pcm5122@4c {
9895 + #sound-dai-cells = <0>;
9896 + compatible = "ti,pcm5122";
9897 + reg = <0x4c>;
9898 + AVDD-supply = <&vdd_3v3_reg>;
9899 + DVDD-supply = <&vdd_3v3_reg>;
9900 + CPVDD-supply = <&vdd_3v3_reg>;
9901 + status = "okay";
9902 + };
9903 + };
9904 + };
9905 +
9906 + fragment@2 {
9907 + target = <&sound>;
9908 + frag2: __overlay__ {
9909 + compatible = "iqaudio,iqaudio-dac";
9910 + card_name = "Akkordion";
9911 + dai_name = "IQaudIO DAC";
9912 + dai_stream_name = "IQaudIO DAC HiFi";
9913 + i2s-controller = <&i2s>;
9914 + status = "okay";
9915 + };
9916 + };
9917 +
9918 + __overrides__ {
9919 + 24db_digital_gain = <&frag2>,"iqaudio,24db_digital_gain?";
9920 + };
9921 +};
9922 diff --git a/arch/arm/boot/dts/overlays/allo-boss-dac-pcm512x-audio-overlay.dts b/arch/arm/boot/dts/overlays/allo-boss-dac-pcm512x-audio-overlay.dts
9923 new file mode 100644
9924 index 000000000000..873cb2fab52b
9925 --- /dev/null
9926 +++ b/arch/arm/boot/dts/overlays/allo-boss-dac-pcm512x-audio-overlay.dts
9927 @@ -0,0 +1,59 @@
9928 +/*
9929 + * Definitions for Allo Boss DAC board
9930 + */
9931 +
9932 +/dts-v1/;
9933 +/plugin/;
9934 +
9935 +/ {
9936 + compatible = "brcm,bcm2835";
9937 +
9938 + fragment@0 {
9939 + target-path = "/";
9940 + __overlay__ {
9941 + boss_osc: boss_osc {
9942 + compatible = "allo,dac-clk";
9943 + #clock-cells = <0>;
9944 + };
9945 + };
9946 + };
9947 +
9948 + fragment@1 {
9949 + target = <&i2s>;
9950 + __overlay__ {
9951 + status = "okay";
9952 + };
9953 + };
9954 +
9955 + fragment@2 {
9956 + target = <&i2c1>;
9957 + __overlay__ {
9958 + #address-cells = <1>;
9959 + #size-cells = <0>;
9960 + status = "okay";
9961 +
9962 + pcm5122@4d {
9963 + #sound-dai-cells = <0>;
9964 + compatible = "ti,pcm5122";
9965 + clocks = <&boss_osc>;
9966 + reg = <0x4d>;
9967 + status = "okay";
9968 + };
9969 + };
9970 + };
9971 +
9972 + fragment@3 {
9973 + target = <&sound>;
9974 + boss_dac: __overlay__ {
9975 + compatible = "allo,boss-dac";
9976 + i2s-controller = <&i2s>;
9977 + mute-gpios = <&gpio 6 1>;
9978 + status = "okay";
9979 + };
9980 + };
9981 +
9982 + __overrides__ {
9983 + 24db_digital_gain = <&boss_dac>,"allo,24db_digital_gain?";
9984 + slave = <&boss_dac>,"allo,slave?";
9985 + };
9986 +};
9987 diff --git a/arch/arm/boot/dts/overlays/allo-boss2-dac-audio-overlay.dts b/arch/arm/boot/dts/overlays/allo-boss2-dac-audio-overlay.dts
9988 new file mode 100644
9989 index 000000000000..a6adfb495eb9
9990 --- /dev/null
9991 +++ b/arch/arm/boot/dts/overlays/allo-boss2-dac-audio-overlay.dts
9992 @@ -0,0 +1,57 @@
9993 +/* * Definitions for Allo Boss2 DAC boards
9994 + */
9995 +
9996 +/dts-v1/;
9997 +/plugin/;
9998 +
9999 +/ {
10000 + compatible = "brcm,bcm2835";
10001 +
10002 + fragment@0 {
10003 + target = <&i2s>;
10004 + __overlay__ {
10005 + #sound-dai-cells = <0>;
10006 + status = "okay";
10007 + cpu_port: port {
10008 + cpu_endpoint: endpoint {
10009 + remote-endpoint = <&codec_endpoint>;
10010 + bitclock-master = <&codec_endpoint>;
10011 + frame-master = <&codec_endpoint>;
10012 + dai-format = "i2s";
10013 + };
10014 + };
10015 + };
10016 + };
10017 +
10018 + fragment@1 {
10019 + target = <&i2c1>;
10020 + __overlay__ {
10021 + #address-cells = <1>;
10022 + #size-cells = <0>;
10023 + status = "okay";
10024 + allo-cs43130@30 {
10025 + #sound-dai-cells = <0>;
10026 + compatible = "allo,allo-cs43198";
10027 + clock44-gpio = <&gpio 5 0>;
10028 + clock48-gpio = <&gpio 6 0>;
10029 + reg = <0x30>;
10030 + port {
10031 + codec_endpoint: endpoint {
10032 + remote-endpoint = <&cpu_endpoint>;
10033 + };
10034 + };
10035 + };
10036 + };
10037 + };
10038 +
10039 + fragment@2 {
10040 + target = <&sound>;
10041 + boss2_dac: __overlay__ {
10042 + compatible = "audio-graph-card";
10043 + label = "Allo Boss2";
10044 + dais = <&cpu_port>;
10045 + status = "okay";
10046 + };
10047 + };
10048 +};
10049 +
10050 diff --git a/arch/arm/boot/dts/overlays/allo-digione-overlay.dts b/arch/arm/boot/dts/overlays/allo-digione-overlay.dts
10051 new file mode 100644
10052 index 000000000000..ea018ace34d4
10053 --- /dev/null
10054 +++ b/arch/arm/boot/dts/overlays/allo-digione-overlay.dts
10055 @@ -0,0 +1,44 @@
10056 +// Definitions for Allo DigiOne
10057 +/dts-v1/;
10058 +/plugin/;
10059 +
10060 +/ {
10061 + compatible = "brcm,bcm2835";
10062 +
10063 + fragment@0 {
10064 + target = <&i2s>;
10065 + __overlay__ {
10066 + status = "okay";
10067 + };
10068 + };
10069 +
10070 + fragment@1 {
10071 + target = <&i2c1>;
10072 + __overlay__ {
10073 + #address-cells = <1>;
10074 + #size-cells = <0>;
10075 + status = "okay";
10076 +
10077 + wm8804@3b {
10078 + #sound-dai-cells = <0>;
10079 + compatible = "wlf,wm8804";
10080 + reg = <0x3b>;
10081 + PVDD-supply = <&vdd_3v3_reg>;
10082 + DVDD-supply = <&vdd_3v3_reg>;
10083 + status = "okay";
10084 + wlf,reset-gpio = <&gpio 17 0>;
10085 + };
10086 + };
10087 + };
10088 +
10089 + fragment@2 {
10090 + target = <&sound>;
10091 + __overlay__ {
10092 + compatible = "allo,allo-digione";
10093 + i2s-controller = <&i2s>;
10094 + status = "okay";
10095 + clock44-gpio = <&gpio 5 0>;
10096 + clock48-gpio = <&gpio 6 0>;
10097 + };
10098 + };
10099 +};
10100 diff --git a/arch/arm/boot/dts/overlays/allo-katana-dac-audio-overlay.dts b/arch/arm/boot/dts/overlays/allo-katana-dac-audio-overlay.dts
10101 new file mode 100644
10102 index 000000000000..b25fd681f09f
10103 --- /dev/null
10104 +++ b/arch/arm/boot/dts/overlays/allo-katana-dac-audio-overlay.dts
10105 @@ -0,0 +1,57 @@
10106 +/*
10107 + * Definitions for Allo Katana DAC boards
10108 + */
10109 +
10110 +/dts-v1/;
10111 +/plugin/;
10112 +
10113 +/ {
10114 + compatible = "brcm,bcm2835";
10115 +
10116 + fragment@0 {
10117 + target = <&i2s>;
10118 + __overlay__ {
10119 + #sound-dai-cells = <0>;
10120 + status = "okay";
10121 + cpu_port: port {
10122 + cpu_endpoint: endpoint {
10123 + remote-endpoint = <&codec_endpoint>;
10124 + bitclock-master = <&codec_endpoint>;
10125 + frame-master = <&codec_endpoint>;
10126 + dai-format = "i2s";
10127 + };
10128 + };
10129 + };
10130 + };
10131 +
10132 + fragment@1 {
10133 + target = <&i2c1>;
10134 + __overlay__ {
10135 + #address-cells = <1>;
10136 + #size-cells = <0>;
10137 + status = "okay";
10138 +
10139 + allo-katana-codec@30 {
10140 + #sound-dai-cells = <0>;
10141 + compatible = "allo,allo-katana-codec";
10142 + reg = <0x30>;
10143 + port {
10144 + codec_endpoint: endpoint {
10145 + remote-endpoint = <&cpu_endpoint>;
10146 + };
10147 + };
10148 + };
10149 + };
10150 + };
10151 +
10152 + fragment@2 {
10153 + target = <&sound>;
10154 + katana_dac: __overlay__ {
10155 + compatible = "audio-graph-card";
10156 + label = "Allo Katana";
10157 + dais = <&cpu_port>;
10158 + status = "okay";
10159 + };
10160 + };
10161 +};
10162 +
10163 diff --git a/arch/arm/boot/dts/overlays/allo-piano-dac-pcm512x-audio-overlay.dts b/arch/arm/boot/dts/overlays/allo-piano-dac-pcm512x-audio-overlay.dts
10164 new file mode 100644
10165 index 000000000000..bfc66da6295a
10166 --- /dev/null
10167 +++ b/arch/arm/boot/dts/overlays/allo-piano-dac-pcm512x-audio-overlay.dts
10168 @@ -0,0 +1,54 @@
10169 +/*
10170 + * Definitions for Allo Piano DAC (2.0/2.1) boards
10171 + *
10172 + * NB. The Piano DAC 2.1 board contains 2x TI PCM5142 DAC's. One DAC is stereo
10173 + * (left/right) and the other provides a subwoofer output, using DSP on the
10174 + * chip for digital high/low pass crossover.
10175 + * The initial support for this hardware, that doesn't require any codec driver
10176 + * modifications, uses only one DAC chip for stereo (left/right) output, the
10177 + * chip with 0x4c slave address. The other chip at 0x4d is currently ignored!
10178 + */
10179 +
10180 +/dts-v1/;
10181 +/plugin/;
10182 +
10183 +/ {
10184 + compatible = "brcm,bcm2835";
10185 +
10186 + fragment@0 {
10187 + target = <&i2s>;
10188 + __overlay__ {
10189 + status = "okay";
10190 + };
10191 + };
10192 +
10193 + fragment@1 {
10194 + target = <&i2c1>;
10195 + __overlay__ {
10196 + #address-cells = <1>;
10197 + #size-cells = <0>;
10198 + status = "okay";
10199 +
10200 + pcm5142@4c {
10201 + #sound-dai-cells = <0>;
10202 + compatible = "ti,pcm5142";
10203 + reg = <0x4c>;
10204 + status = "okay";
10205 + };
10206 + };
10207 + };
10208 +
10209 + fragment@2 {
10210 + target = <&sound>;
10211 + piano_dac: __overlay__ {
10212 + compatible = "allo,piano-dac";
10213 + i2s-controller = <&i2s>;
10214 + status = "okay";
10215 + };
10216 + };
10217 +
10218 + __overrides__ {
10219 + 24db_digital_gain =
10220 + <&piano_dac>,"allo,24db_digital_gain?";
10221 + };
10222 +};
10223 diff --git a/arch/arm/boot/dts/overlays/allo-piano-dac-plus-pcm512x-audio-overlay.dts b/arch/arm/boot/dts/overlays/allo-piano-dac-plus-pcm512x-audio-overlay.dts
10224 new file mode 100644
10225 index 000000000000..d47a35def4f7
10226 --- /dev/null
10227 +++ b/arch/arm/boot/dts/overlays/allo-piano-dac-plus-pcm512x-audio-overlay.dts
10228 @@ -0,0 +1,57 @@
10229 +// Definitions for Piano DAC
10230 +/dts-v1/;
10231 +/plugin/;
10232 +
10233 +/ {
10234 + compatible = "brcm,bcm2835";
10235 +
10236 + fragment@0 {
10237 + target = <&i2s>;
10238 + __overlay__ {
10239 + status = "okay";
10240 + };
10241 + };
10242 +
10243 + fragment@1 {
10244 + target = <&i2c1>;
10245 + __overlay__ {
10246 + #address-cells = <1>;
10247 + #size-cells = <0>;
10248 + status = "okay";
10249 +
10250 + allo_pcm5122_4c: pcm5122@4c {
10251 + #sound-dai-cells = <0>;
10252 + compatible = "ti,pcm5122";
10253 + reg = <0x4c>;
10254 + sound-name-prefix = "Main";
10255 + status = "okay";
10256 + };
10257 + allo_pcm5122_4d: pcm5122@4d {
10258 + #sound-dai-cells = <0>;
10259 + compatible = "ti,pcm5122";
10260 + reg = <0x4d>;
10261 + sound-name-prefix = "Sub";
10262 + status = "okay";
10263 + };
10264 + };
10265 + };
10266 +
10267 + fragment@2 {
10268 + target = <&sound>;
10269 + piano_dac: __overlay__ {
10270 + compatible = "allo,piano-dac-plus";
10271 + audio-codec = <&allo_pcm5122_4c &allo_pcm5122_4d>;
10272 + i2s-controller = <&i2s>;
10273 + mute1-gpios = <&gpio 6 1>;
10274 + mute2-gpios = <&gpio 25 1>;
10275 + status = "okay";
10276 + };
10277 + };
10278 +
10279 + __overrides__ {
10280 + 24db_digital_gain =
10281 + <&piano_dac>,"allo,24db_digital_gain?";
10282 + glb_mclk =
10283 + <&piano_dac>,"allo,glb_mclk?";
10284 + };
10285 +};
10286 diff --git a/arch/arm/boot/dts/overlays/anyspi-overlay.dts b/arch/arm/boot/dts/overlays/anyspi-overlay.dts
10287 new file mode 100755
10288 index 000000000000..87523dcca318
10289 --- /dev/null
10290 +++ b/arch/arm/boot/dts/overlays/anyspi-overlay.dts
10291 @@ -0,0 +1,205 @@
10292 +/*
10293 + * Universal device tree overlay for SPI devices
10294 + */
10295 +
10296 +/dts-v1/;
10297 +/plugin/;
10298 +
10299 +/ {
10300 + compatible = "brcm,bcm2835";
10301 +
10302 + fragment@0 {
10303 + target = <&spidev0>;
10304 + __dormant__ {
10305 + status = "disabled";
10306 + };
10307 + };
10308 +
10309 + fragment@1 {
10310 + target = <&spidev1>;
10311 + __dormant__ {
10312 + status = "disabled";
10313 + };
10314 + };
10315 +
10316 + fragment@2 {
10317 + target-path = "spi1/spidev@0";
10318 + __dormant__ {
10319 + status = "disabled";
10320 + };
10321 + };
10322 +
10323 + fragment@3 {
10324 + target-path = "spi1/spidev@1";
10325 + __dormant__ {
10326 + status = "disabled";
10327 + };
10328 + };
10329 +
10330 + fragment@4 {
10331 + target-path = "spi1/spidev@2";
10332 + __dormant__ {
10333 + status = "disabled";
10334 + };
10335 + };
10336 +
10337 + fragment@5 {
10338 + target-path = "spi2/spidev@0";
10339 + __dormant__ {
10340 + status = "disabled";
10341 + };
10342 + };
10343 +
10344 + fragment@6 {
10345 + target-path = "spi2/spidev@1";
10346 + __dormant__ {
10347 + status = "disabled";
10348 + };
10349 + };
10350 +
10351 + fragment@7 {
10352 + target-path = "spi2/spidev@2";
10353 + __dormant__ {
10354 + status = "disabled";
10355 + };
10356 + };
10357 +
10358 + fragment@8 {
10359 + target = <&spi0>;
10360 + __dormant__ {
10361 + status = "okay";
10362 + #address-cells = <1>;
10363 + #size-cells = <0>;
10364 +
10365 + anyspi_00: anyspi@0 {
10366 + reg = <0>;
10367 + spi-max-frequency = <500000>;
10368 + };
10369 + };
10370 + };
10371 +
10372 + fragment@9 {
10373 + target = <&spi0>;
10374 + __dormant__ {
10375 + status = "okay";
10376 + #address-cells = <1>;
10377 + #size-cells = <0>;
10378 +
10379 + anyspi_01: anyspi@1 {
10380 + reg = <1>;
10381 + spi-max-frequency = <500000>;
10382 + };
10383 + };
10384 + };
10385 +
10386 + fragment@10 {
10387 + target = <&spi1>;
10388 + __dormant__ {
10389 + status = "okay";
10390 + #address-cells = <1>;
10391 + #size-cells = <0>;
10392 +
10393 + anyspi_10: anyspi@0 {
10394 + reg = <0>;
10395 + spi-max-frequency = <500000>;
10396 + };
10397 + };
10398 + };
10399 +
10400 + fragment@11 {
10401 + target = <&spi1>;
10402 + __dormant__ {
10403 + status = "okay";
10404 + #address-cells = <1>;
10405 + #size-cells = <0>;
10406 +
10407 + anyspi_11: anyspi@1 {
10408 + reg = <1>;
10409 + spi-max-frequency = <500000>;
10410 + };
10411 + };
10412 + };
10413 +
10414 + fragment@12 {
10415 + target = <&spi1>;
10416 + __dormant__ {
10417 + status = "okay";
10418 + #address-cells = <1>;
10419 + #size-cells = <0>;
10420 +
10421 + anyspi_12: anyspi@2 {
10422 + reg = <2>;
10423 + spi-max-frequency = <500000>;
10424 + };
10425 + };
10426 + };
10427 +
10428 + fragment@13 {
10429 + target = <&spi2>;
10430 + __dormant__ {
10431 + status = "okay";
10432 + #address-cells = <1>;
10433 + #size-cells = <0>;
10434 +
10435 + anyspi_20: anyspi@0 {
10436 + reg = <0>;
10437 + spi-max-frequency = <500000>;
10438 + };
10439 + };
10440 + };
10441 +
10442 + fragment@14 {
10443 + target = <&spi2>;
10444 + __dormant__ {
10445 + status = "okay";
10446 + #address-cells = <1>;
10447 + #size-cells = <0>;
10448 +
10449 + anyspi_21: anyspi@1 {
10450 + reg = <1>;
10451 + spi-max-frequency = <500000>;
10452 + };
10453 + };
10454 + };
10455 +
10456 + fragment@15 {
10457 + target = <&spi2>;
10458 + __dormant__ {
10459 + status = "okay";
10460 + #address-cells = <1>;
10461 + #size-cells = <0>;
10462 +
10463 + anyspi_22: anyspi@2 {
10464 + reg = <2>;
10465 + spi-max-frequency = <500000>;
10466 + };
10467 + };
10468 + };
10469 +
10470 + __overrides__ {
10471 + spi0-0 = <0>, "+0+8";
10472 + spi0-1 = <0>, "+1+9";
10473 + spi1-0 = <0>, "+2+10";
10474 + spi1-1 = <0>, "+3+11";
10475 + spi1-2 = <0>, "+4+12";
10476 + spi2-0 = <0>, "+5+13";
10477 + spi2-1 = <0>, "+6+14";
10478 + spi2-2 = <0>, "+7+15";
10479 + dev = <&anyspi_00>,"compatible",
10480 + <&anyspi_01>,"compatible",
10481 + <&anyspi_10>,"compatible",
10482 + <&anyspi_11>,"compatible",
10483 + <&anyspi_12>,"compatible",
10484 + <&anyspi_20>,"compatible",
10485 + <&anyspi_21>,"compatible",
10486 + <&anyspi_22>,"compatible";
10487 + speed = <&anyspi_00>, "spi-max-frequency:0",
10488 + <&anyspi_01>, "spi-max-frequency:0",
10489 + <&anyspi_10>, "spi-max-frequency:0",
10490 + <&anyspi_11>, "spi-max-frequency:0",
10491 + <&anyspi_12>, "spi-max-frequency:0",
10492 + <&anyspi_20>, "spi-max-frequency:0",
10493 + <&anyspi_21>, "spi-max-frequency:0",
10494 + <&anyspi_22>, "spi-max-frequency:0";
10495 + };
10496 +};
10497 diff --git a/arch/arm/boot/dts/overlays/apds9960-overlay.dts b/arch/arm/boot/dts/overlays/apds9960-overlay.dts
10498 new file mode 100644
10499 index 000000000000..c216932278ab
10500 --- /dev/null
10501 +++ b/arch/arm/boot/dts/overlays/apds9960-overlay.dts
10502 @@ -0,0 +1,57 @@
10503 +// Definitions for APDS-9960 ambient light and gesture sensor
10504 +
10505 +/dts-v1/;
10506 +/plugin/;
10507 +
10508 +/ {
10509 + compatible = "brcm,bcm2835";
10510 +
10511 + fragment@0 {
10512 + target = <&i2c1>;
10513 + __overlay__ {
10514 + status = "okay";
10515 + };
10516 + };
10517 +
10518 + fragment@1 {
10519 + target = <&gpio>;
10520 + __overlay__ {
10521 + apds9960_pins: apds9960_pins@39 {
10522 + brcm,pins = <4>;
10523 + brcm,function = <0>;
10524 + };
10525 + };
10526 + };
10527 +
10528 + fragment@2 {
10529 + target = <&i2c1>;
10530 + __overlay__ {
10531 + #address-cells = <1>;
10532 + #size-cells = <0>;
10533 +
10534 + apds9960: apds@39 {
10535 + compatible = "avago,apds9960";
10536 + reg = <0x39>;
10537 + status = "okay";
10538 + };
10539 + };
10540 + };
10541 +
10542 + fragment@3 {
10543 + target = <&i2c1>;
10544 + __overlay__ {
10545 + apds9960_irq: apds@39 {
10546 + #interrupt-cells=<2>;
10547 + interrupt-parent = <&gpio>;
10548 + interrupts = <4 1>;
10549 + };
10550 + };
10551 + };
10552 +
10553 + __overrides__ {
10554 + gpiopin = <&apds9960_pins>,"brcm,pins:0",
10555 + <&apds9960_irq>,"interrupts:0";
10556 + noints = <0>,"!1!3";
10557 + };
10558 +};
10559 +
10560 diff --git a/arch/arm/boot/dts/overlays/applepi-dac-overlay.dts b/arch/arm/boot/dts/overlays/applepi-dac-overlay.dts
10561 new file mode 100644
10562 index 000000000000..4769296ec9d6
10563 --- /dev/null
10564 +++ b/arch/arm/boot/dts/overlays/applepi-dac-overlay.dts
10565 @@ -0,0 +1,57 @@
10566 +/dts-v1/;
10567 +/plugin/;
10568 +
10569 +/ {
10570 + compatible = "brcm,bcm2835";
10571 +
10572 + fragment@0 {
10573 + target = <&sound>;
10574 + __overlay__ {
10575 + compatible = "simple-audio-card";
10576 + simple-audio-card,name = "ApplePi-DAC";
10577 +
10578 + status = "okay";
10579 +
10580 + playback_link: simple-audio-card,dai-link@1 {
10581 + format = "i2s";
10582 +
10583 + p_cpu_dai: cpu {
10584 + sound-dai = <&i2s>;
10585 + dai-tdm-slot-num = <2>;
10586 + dai-tdm-slot-width = <32>;
10587 + };
10588 +
10589 + p_codec_dai: codec {
10590 + sound-dai = <&codec_out>;
10591 + };
10592 + };
10593 + };
10594 + };
10595 +
10596 + fragment@1 {
10597 + target-path = "/";
10598 + __overlay__ {
10599 + codec_out: pcm1794a-codec {
10600 + #sound-dai-cells = <0>;
10601 + compatible = "ti,pcm1794a";
10602 + status = "okay";
10603 + };
10604 + };
10605 + };
10606 +
10607 + fragment@2 {
10608 + target = <&i2s>;
10609 + __overlay__ {
10610 + #sound-dai-cells = <0>;
10611 + status = "okay";
10612 + };
10613 + };
10614 +};
10615 +
10616 +/*
10617 + Written by: Leonid Ayzenshtat
10618 + Company: Orchard Audio (www.orchardaudio.com)
10619 +
10620 + compile with:
10621 + dtc -@ -H epapr -O dtb -o ApplePi-DAC.dtbo -W no-unit_address_vs_reg ApplePi-DAC.dts
10622 +*/
10623 diff --git a/arch/arm/boot/dts/overlays/at86rf233-overlay.dts b/arch/arm/boot/dts/overlays/at86rf233-overlay.dts
10624 new file mode 100644
10625 index 000000000000..5a3f4571ee78
10626 --- /dev/null
10627 +++ b/arch/arm/boot/dts/overlays/at86rf233-overlay.dts
10628 @@ -0,0 +1,57 @@
10629 +/dts-v1/;
10630 +/plugin/;
10631 +
10632 +/* Overlay for Atmel AT86RF233 IEEE 802.15.4 WPAN transceiver on spi0.0 */
10633 +
10634 +/ {
10635 + compatible = "brcm,bcm2835";
10636 +
10637 + fragment@0 {
10638 + target = <&spi0>;
10639 + __overlay__ {
10640 + #address-cells = <1>;
10641 + #size-cells = <0>;
10642 +
10643 + status = "okay";
10644 +
10645 + lowpan0: at86rf233@0 {
10646 + compatible = "atmel,at86rf233";
10647 + reg = <0>;
10648 + interrupt-parent = <&gpio>;
10649 + interrupts = <23 4>; /* active high */
10650 + reset-gpio = <&gpio 24 1>;
10651 + sleep-gpio = <&gpio 25 1>;
10652 + spi-max-frequency = <3000000>;
10653 + xtal-trim = /bits/ 8 <0xf>;
10654 + };
10655 + };
10656 + };
10657 +
10658 + fragment@1 {
10659 + target = <&spidev0>;
10660 + __overlay__ {
10661 + status = "disabled";
10662 + };
10663 + };
10664 +
10665 + fragment@2 {
10666 + target = <&gpio>;
10667 + __overlay__ {
10668 + lowpan0_pins: lowpan0_pins {
10669 + brcm,pins = <23 24 25>;
10670 + brcm,function = <0 1 1>; /* in out out */
10671 + };
10672 + };
10673 + };
10674 +
10675 + __overrides__ {
10676 + interrupt = <&lowpan0>, "interrupts:0",
10677 + <&lowpan0_pins>, "brcm,pins:0";
10678 + reset = <&lowpan0>, "reset-gpio:4",
10679 + <&lowpan0_pins>, "brcm,pins:4";
10680 + sleep = <&lowpan0>, "sleep-gpio:4",
10681 + <&lowpan0_pins>, "brcm,pins:8";
10682 + speed = <&lowpan0>, "spi-max-frequency:0";
10683 + trim = <&lowpan0>, "xtal-trim.0";
10684 + };
10685 +};
10686 diff --git a/arch/arm/boot/dts/overlays/audioinjector-addons-overlay.dts b/arch/arm/boot/dts/overlays/audioinjector-addons-overlay.dts
10687 new file mode 100644
10688 index 000000000000..57a66eac8e9b
10689 --- /dev/null
10690 +++ b/arch/arm/boot/dts/overlays/audioinjector-addons-overlay.dts
10691 @@ -0,0 +1,60 @@
10692 +// Definitions for audioinjector.net audio add on soundcard
10693 +/dts-v1/;
10694 +/plugin/;
10695 +
10696 +/ {
10697 + compatible = "brcm,bcm2835";
10698 +
10699 + fragment@0 {
10700 + target = <&i2s>;
10701 + __overlay__ {
10702 + status = "okay";
10703 + };
10704 + };
10705 +
10706 + fragment@1 {
10707 + target-path = "/";
10708 + __overlay__ {
10709 + cs42448_mclk: codec-mclk {
10710 + compatible = "fixed-clock";
10711 + #clock-cells = <0>;
10712 + clock-frequency = <49152000>;
10713 + };
10714 + };
10715 + };
10716 +
10717 + fragment@2 {
10718 + target = <&i2c1>;
10719 + __overlay__ {
10720 + #address-cells = <1>;
10721 + #size-cells = <0>;
10722 + status = "okay";
10723 +
10724 + cs42448: cs42448@48 {
10725 + #sound-dai-cells = <0>;
10726 + compatible = "cirrus,cs42448";
10727 + reg = <0x48>;
10728 + clocks = <&cs42448_mclk>;
10729 + clock-names = "mclk";
10730 + status = "okay";
10731 + };
10732 + };
10733 + };
10734 +
10735 + fragment@3 {
10736 + target = <&sound>;
10737 + snd: __overlay__ {
10738 + compatible = "ai,audioinjector-octo-soundcard";
10739 + mult-gpios = <&gpio 27 0>, <&gpio 22 0>, <&gpio 23 0>,
10740 + <&gpio 24 0>;
10741 + reset-gpios = <&gpio 5 0>;
10742 + i2s-controller = <&i2s>;
10743 + codec = <&cs42448>;
10744 + status = "okay";
10745 + };
10746 + };
10747 +
10748 + __overrides__ {
10749 + non-stop-clocks = <&snd>, "non-stop-clocks?";
10750 + };
10751 +};
10752 diff --git a/arch/arm/boot/dts/overlays/audioinjector-isolated-soundcard-overlay.dts b/arch/arm/boot/dts/overlays/audioinjector-isolated-soundcard-overlay.dts
10753 new file mode 100644
10754 index 000000000000..63e05cf9665d
10755 --- /dev/null
10756 +++ b/arch/arm/boot/dts/overlays/audioinjector-isolated-soundcard-overlay.dts
10757 @@ -0,0 +1,55 @@
10758 +// Definitions for audioinjector.net audio isolated soundcard
10759 +/dts-v1/;
10760 +/plugin/;
10761 +
10762 +/ {
10763 + compatible = "brcm,bcm2835";
10764 +
10765 + fragment@0 {
10766 + target = <&i2s>;
10767 + __overlay__ {
10768 + status = "okay";
10769 + };
10770 + };
10771 +
10772 + fragment@1 {
10773 + target-path = "/";
10774 + __overlay__ {
10775 + cs4272_mclk: codec-mclk {
10776 + compatible = "fixed-clock";
10777 + #clock-cells = <0>;
10778 + clock-frequency = <24576000>;
10779 + };
10780 + };
10781 + };
10782 +
10783 + fragment@2 {
10784 + target = <&i2c1>;
10785 + __overlay__ {
10786 + #address-cells = <1>;
10787 + #size-cells = <0>;
10788 + status = "okay";
10789 +
10790 + cs4272: cs4271@10 {
10791 + #sound-dai-cells = <0>;
10792 + compatible = "cirrus,cs4271";
10793 + reg = <0x10>;
10794 + reset-gpio = <&gpio 5 0>;
10795 + clocks = <&cs4272_mclk>;
10796 + clock-names = "mclk";
10797 + status = "okay";
10798 + };
10799 + };
10800 + };
10801 +
10802 + fragment@3 {
10803 + target = <&sound>;
10804 + snd: __overlay__ {
10805 + compatible = "ai,audioinjector-isolated-soundcard";
10806 + mute-gpios = <&gpio 17 0>;
10807 + i2s-controller = <&i2s>;
10808 + codec = <&cs4272>;
10809 + status = "okay";
10810 + };
10811 + };
10812 +};
10813 diff --git a/arch/arm/boot/dts/overlays/audioinjector-ultra-overlay.dts b/arch/arm/boot/dts/overlays/audioinjector-ultra-overlay.dts
10814 new file mode 100644
10815 index 000000000000..fb4a4678a17a
10816 --- /dev/null
10817 +++ b/arch/arm/boot/dts/overlays/audioinjector-ultra-overlay.dts
10818 @@ -0,0 +1,71 @@
10819 +// Definitions for audioinjector.net audio add on soundcard
10820 +/dts-v1/;
10821 +/plugin/;
10822 +
10823 +/ {
10824 + compatible = "brcm,bcm2835";
10825 +
10826 + fragment@0 {
10827 + target = <&i2s>;
10828 + __overlay__ {
10829 + status = "okay";
10830 + };
10831 + };
10832 +
10833 + fragment@1 {
10834 + target = <&i2c1>;
10835 + __overlay__ {
10836 + #address-cells = <1>;
10837 + #size-cells = <0>;
10838 + status = "okay";
10839 +
10840 + cs4265: cs4265@4e {
10841 + #sound-dai-cells = <0>;
10842 + compatible = "cirrus,cs4265";
10843 + reg = <0x4e>;
10844 + reset-gpios = <&gpio 5 0>;
10845 + status = "okay";
10846 + };
10847 + };
10848 + };
10849 +
10850 + fragment@2 {
10851 + target = <&sound>;
10852 + __overlay__ {
10853 + compatible = "simple-audio-card";
10854 + i2s-controller = <&i2s>;
10855 + status = "okay";
10856 +
10857 + simple-audio-card,name = "audioinjector-ultra";
10858 +
10859 + simple-audio-card,widgets =
10860 + "Line", "OUTPUTS",
10861 + "Line", "INPUTS";
10862 +
10863 + simple-audio-card,routing =
10864 + "OUTPUTS","LINEOUTL",
10865 + "OUTPUTS","LINEOUTR",
10866 + "OUTPUTS","SPDIFOUT",
10867 + "LINEINL","INPUTS",
10868 + "LINEINR","INPUTS",
10869 + "MICL","INPUTS",
10870 + "MICR","INPUTS";
10871 +
10872 + simple-audio-card,format = "i2s";
10873 +
10874 + simple-audio-card,bitclock-master = <&sound_master>;
10875 + simple-audio-card,frame-master = <&sound_master>;
10876 +
10877 + simple-audio-card,cpu {
10878 + sound-dai = <&i2s>;
10879 + dai-tdm-slot-num = <2>;
10880 + dai-tdm-slot-width = <32>;
10881 + };
10882 +
10883 + sound_master: simple-audio-card,codec {
10884 + sound-dai = <&cs4265>;
10885 + system-clock-frequency = <12288000>;
10886 + };
10887 + };
10888 + };
10889 +};
10890 diff --git a/arch/arm/boot/dts/overlays/audioinjector-wm8731-audio-overlay.dts b/arch/arm/boot/dts/overlays/audioinjector-wm8731-audio-overlay.dts
10891 new file mode 100644
10892 index 000000000000..68f4427d86c3
10893 --- /dev/null
10894 +++ b/arch/arm/boot/dts/overlays/audioinjector-wm8731-audio-overlay.dts
10895 @@ -0,0 +1,39 @@
10896 +// Definitions for audioinjector.net audio add on soundcard
10897 +/dts-v1/;
10898 +/plugin/;
10899 +
10900 +/ {
10901 + compatible = "brcm,bcm2835";
10902 +
10903 + fragment@0 {
10904 + target = <&i2s>;
10905 + __overlay__ {
10906 + status = "okay";
10907 + };
10908 + };
10909 +
10910 + fragment@1 {
10911 + target = <&i2c1>;
10912 + __overlay__ {
10913 + #address-cells = <1>;
10914 + #size-cells = <0>;
10915 + status = "okay";
10916 +
10917 + wm8731@1a {
10918 + #sound-dai-cells = <0>;
10919 + compatible = "wlf,wm8731";
10920 + reg = <0x1a>;
10921 + status = "okay";
10922 + };
10923 + };
10924 + };
10925 +
10926 + fragment@2 {
10927 + target = <&sound>;
10928 + __overlay__ {
10929 + compatible = "ai,audioinjector-pi-soundcard";
10930 + i2s-controller = <&i2s>;
10931 + status = "okay";
10932 + };
10933 + };
10934 +};
10935 diff --git a/arch/arm/boot/dts/overlays/audiosense-pi-overlay.dts b/arch/arm/boot/dts/overlays/audiosense-pi-overlay.dts
10936 new file mode 100644
10937 index 000000000000..81af26374d92
10938 --- /dev/null
10939 +++ b/arch/arm/boot/dts/overlays/audiosense-pi-overlay.dts
10940 @@ -0,0 +1,82 @@
10941 +// Definitions for audiosense add on soundcard
10942 +/dts-v1/;
10943 +/plugin/;
10944 +#include <dt-bindings/pinctrl/bcm2835.h>
10945 +#include <dt-bindings/gpio/gpio.h>
10946 +
10947 +/ {
10948 + compatible = "brcm,bcm2835";
10949 +
10950 + fragment@0 {
10951 + target = <&i2s>;
10952 + __overlay__ {
10953 + status = "okay";
10954 + };
10955 + };
10956 +
10957 + fragment@1 {
10958 + target-path = "/";
10959 + __overlay__ {
10960 + codec_reg_1v8: codec-reg-1v8 {
10961 + compatible = "regulator-fixed";
10962 + regulator-name = "tlv320aic3204_1v8";
10963 + regulator-min-microvolt = <1800000>;
10964 + regulator-max-microvolt = <1800000>;
10965 + regulator-always-on;
10966 + };
10967 +
10968 + /* audio external oscillator */
10969 + codec_osc: codec_osc {
10970 + compatible = "fixed-clock";
10971 + #clock-cells = <0>;
10972 + clock-frequency = <12000000>; /* 12 MHz */
10973 + };
10974 + };
10975 + };
10976 +
10977 + fragment@2 {
10978 + target = <&gpio>;
10979 + __overlay__ {
10980 + codec_rst: codec-rst {
10981 + brcm,pins = <26>;
10982 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
10983 + };
10984 + };
10985 + };
10986 +
10987 + fragment@3 {
10988 + target = <&i2c1>;
10989 + __overlay__ {
10990 + #address-cells = <1>;
10991 + #size-cells = <0>;
10992 + status = "okay";
10993 +
10994 + codec: tlv320aic32x4@18 {
10995 + #sound-dai-cells = <0>;
10996 + compatible = "ti,tlv320aic32x4";
10997 + reg = <0x18>;
10998 +
10999 + clocks = <&codec_osc>;
11000 + clock-names = "mclk";
11001 +
11002 + iov-supply = <&vdd_3v3_reg>;
11003 + ldoin-supply = <&vdd_3v3_reg>;
11004 +
11005 + gpio-controller;
11006 + #gpio-cells = <2>;
11007 + reset-gpios = <&gpio 26 GPIO_ACTIVE_HIGH>;
11008 +
11009 + status = "okay";
11010 + };
11011 + };
11012 + };
11013 +
11014 + fragment@4 {
11015 + target = <&sound>;
11016 + __overlay__ {
11017 + compatible = "as,audiosense-pi";
11018 + i2s-controller = <&i2s>;
11019 + status = "okay";
11020 + };
11021 + };
11022 +};
11023 diff --git a/arch/arm/boot/dts/overlays/audremap-overlay.dts b/arch/arm/boot/dts/overlays/audremap-overlay.dts
11024 new file mode 100644
11025 index 000000000000..7324890ead86
11026 --- /dev/null
11027 +++ b/arch/arm/boot/dts/overlays/audremap-overlay.dts
11028 @@ -0,0 +1,42 @@
11029 +/dts-v1/;
11030 +/plugin/;
11031 +
11032 +/ {
11033 + compatible = "brcm,bcm2835";
11034 +
11035 + fragment@0 {
11036 + target = <&audio_pins>;
11037 + frag0: __overlay__ {
11038 + };
11039 + };
11040 +
11041 + fragment@1 {
11042 + target = <&audio_pins>;
11043 + __overlay__ {
11044 + brcm,pins = < 12 13 >;
11045 + brcm,function = < 4 >; /* alt0 alt0 */
11046 + };
11047 + };
11048 +
11049 + fragment@2 {
11050 + target = <&audio_pins>;
11051 + __dormant__ {
11052 + brcm,pins = < 18 19 >;
11053 + brcm,function = < 2 >; /* alt5 alt5 */
11054 + };
11055 + };
11056 +
11057 + fragment@3 {
11058 + target = <&audio>;
11059 + __overlay__ {
11060 + brcm,disable-headphones = <0>;
11061 + };
11062 + };
11063 +
11064 + __overrides__ {
11065 + swap_lr = <&frag0>, "swap_lr?";
11066 + enable_jack = <&frag0>, "enable_jack?";
11067 + pins_12_13 = <0>,"+1-2";
11068 + pins_18_19 = <0>,"-1+2";
11069 + };
11070 +};
11071 diff --git a/arch/arm/boot/dts/overlays/balena-fin-overlay.dts b/arch/arm/boot/dts/overlays/balena-fin-overlay.dts
11072 new file mode 100644
11073 index 000000000000..e7ead7cdf5f5
11074 --- /dev/null
11075 +++ b/arch/arm/boot/dts/overlays/balena-fin-overlay.dts
11076 @@ -0,0 +1,125 @@
11077 +/dts-v1/;
11078 +/plugin/;
11079 +
11080 +#include <dt-bindings/gpio/gpio.h>
11081 +
11082 +/{
11083 + compatible = "brcm,bcm2835";
11084 +
11085 + fragment@0 {
11086 + target = <&mmcnr>;
11087 + __overlay__ {
11088 + pinctrl-names = "default";
11089 + pinctrl-0 = <&sdio_pins>;
11090 + bus-width = <4>;
11091 + brcm,overclock-50 = <35>;
11092 + status = "okay";
11093 + };
11094 + };
11095 +
11096 + fragment@1 {
11097 + target = <&gpio>;
11098 + __overlay__ {
11099 + sdio_pins: sdio_pins {
11100 + brcm,pins = <34 35 36 37 38 39>;
11101 + brcm,function = <7>; /* ALT3 = SD1 */
11102 + brcm,pull = <0 2 2 2 2 2>;
11103 + };
11104 +
11105 + power_ctrl_pins: power_ctrl_pins {
11106 + brcm,pins = <40>;
11107 + brcm,function = <1>; // out
11108 + };
11109 + };
11110 + };
11111 +
11112 + fragment@2 {
11113 + target-path = "/";
11114 + __overlay__ {
11115 + // We should switch to mmc-pwrseq-sd8787 after making it
11116 + // compatible with sd8887
11117 + // Currently that module requires two GPIOs to function since it
11118 + // targets a slightly different chip
11119 + power_ctrl: power_ctrl {
11120 + compatible = "gpio-poweroff";
11121 + gpios = <&gpio 40 1>;
11122 + force;
11123 + pinctrl-names = "default";
11124 + pinctrl-0 = <&power_ctrl_pins>;
11125 + };
11126 +
11127 + i2c_soft: i2c@0 {
11128 + compatible = "i2c-gpio";
11129 + gpios = <&gpio 43 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN) /* sda */
11130 + &gpio 42 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN) /* scl */>;
11131 + i2c-gpio,delay-us = <5>;
11132 + i2c-gpio,scl-open-drain;
11133 + i2c-gpio,sda-open-drain;
11134 + #address-cells = <1>;
11135 + #size-cells = <0>;
11136 + };
11137 +
11138 + sd8xxx-wlan {
11139 + drvdbg = <0x6>;
11140 + drv_mode = <0x1>;
11141 + cfg80211_wext = <0xf>;
11142 + sta_name = "wlan";
11143 + wfd_name = "p2p";
11144 + cal_data_cfg = "none";
11145 + };
11146 + };
11147 + };
11148 +
11149 + fragment@3 {
11150 + target = <&i2c_soft>;
11151 + __overlay__ {
11152 + #address-cells = <1>;
11153 + #size-cells = <0>;
11154 + status = "okay";
11155 +
11156 + gpio_expander: gpio_expander@20 {
11157 + compatible = "nxp,pca9554";
11158 + gpio-controller;
11159 + #gpio-cells = <2>;
11160 + reg = <0x20>;
11161 + status = "okay";
11162 + };
11163 +
11164 + // rtc clock
11165 + ds1307: ds1307@68 {
11166 + compatible = "dallas,ds1307";
11167 + reg = <0x68>;
11168 + status = "okay";
11169 + };
11170 +
11171 + // RGB LEDs (>= v1.1.0)
11172 + pca9633: pca9633@62 {
11173 + compatible = "nxp,pca9633";
11174 + reg = <0x62>;
11175 + #address-cells = <1>;
11176 + #size-cells = <0>;
11177 +
11178 + red@0 {
11179 + label = "red";
11180 + reg = <0>;
11181 + linux,default-trigger = "none";
11182 + };
11183 + green@1 {
11184 + label = "green";
11185 + reg = <1>;
11186 + linux,default-trigger = "none";
11187 + };
11188 + blue@2 {
11189 + label = "blue";
11190 + reg = <2>;
11191 + linux,default-trigger = "none";
11192 + };
11193 + unused@3 {
11194 + label = "unused";
11195 + reg = <3>;
11196 + linux,default-trigger = "none";
11197 + };
11198 + };
11199 + };
11200 + };
11201 +};
11202 diff --git a/arch/arm/boot/dts/overlays/cap1106-overlay.dts b/arch/arm/boot/dts/overlays/cap1106-overlay.dts
11203 new file mode 100644
11204 index 000000000000..0a585e725f84
11205 --- /dev/null
11206 +++ b/arch/arm/boot/dts/overlays/cap1106-overlay.dts
11207 @@ -0,0 +1,52 @@
11208 +// Overlay for cap1106 from Microchip Semiconductor
11209 +// add CONFIG_KEYBOARD_CAP11XX=y
11210 +
11211 +/dts-v1/;
11212 +/plugin/;
11213 +
11214 +/ {
11215 + compatible = "brcm,bcm2835";
11216 + fragment@0 {
11217 + target = <&i2c1>;
11218 + __overlay__{
11219 + status = "okay";
11220 + cap1106: cap1106@28 {
11221 + compatible = "microchip,cap1106";
11222 + pinctrl-0 = <&cap1106_pins>;
11223 + pinctrl-names = "default";
11224 + interrupt-parent = <&gpio>;
11225 + interrupts = <4 2>;
11226 + reg = <0x28>;
11227 + autorepeat;
11228 + microchip,sensor-gain = <2>;
11229 +
11230 + linux,keycodes = <2>, /* KEY_1 */
11231 + <3>, /* KEY_2 */
11232 + <4>, /* KEY_3 */
11233 + <5>, /* KEY_4 */
11234 + <6>, /* KEY_5 */
11235 + <7>; /* KEY_6 */
11236 +
11237 + #address-cells = <1>;
11238 + #size-cells = <0>;
11239 + status = "okay";
11240 +
11241 + };
11242 + };
11243 + };
11244 + fragment@1 {
11245 + target = <&gpio>;
11246 + __overlay__ {
11247 + cap1106_pins: cap1106_pins {
11248 + brcm,pins = <4>;
11249 + brcm,function = <0>; /* in */
11250 + brcm,pull = <0>; /* none */
11251 + };
11252 + };
11253 + };
11254 +
11255 + __overrides__ {
11256 + int_pin = <&cap1106>, "interrupts:0",
11257 + <&cap1106_pins>, "brcm,pins:0";
11258 + };
11259 +};
11260 diff --git a/arch/arm/boot/dts/overlays/chipdip-dac-overlay.dts b/arch/arm/boot/dts/overlays/chipdip-dac-overlay.dts
11261 new file mode 100644
11262 index 000000000000..09c7417b4707
11263 --- /dev/null
11264 +++ b/arch/arm/boot/dts/overlays/chipdip-dac-overlay.dts
11265 @@ -0,0 +1,46 @@
11266 +/*
11267 + * Device Tree overlay for ChipDip DAC
11268 + */
11269 +
11270 +/dts-v1/;
11271 +/plugin/;
11272 +
11273 +/ {
11274 + compatible = "brcm,bcm2835";
11275 +
11276 + fragment@0 {
11277 + target = <&i2s>;
11278 + __overlay__ {
11279 + status = "okay";
11280 + };
11281 + };
11282 +
11283 + fragment@1 {
11284 + target-path = "/";
11285 + __overlay__ {
11286 + spdif-transmitter {
11287 + #address-cells = <0>;
11288 + #size-cells = <0>;
11289 + #sound-dai-cells = <0>;
11290 + compatible = "linux,spdif-dit";
11291 + status = "okay";
11292 + };
11293 + };
11294 + };
11295 +
11296 + fragment@2 {
11297 + target = <&sound>;
11298 + __overlay__ {
11299 + compatible = "chipdip,chipdip-dac";
11300 + i2s-controller = <&i2s>;
11301 + sr0-gpios = <&gpio 5 0>;
11302 + sr1-gpios = <&gpio 6 0>;
11303 + sr2-gpios = <&gpio 12 0>;
11304 + res0-gpios = <&gpio 24 0>;
11305 + res1-gpios = <&gpio 27 0>;
11306 + mute-gpios = <&gpio 4 0>;
11307 + sdwn-gpios = <&gpio 13 0>;
11308 + status = "okay";
11309 + };
11310 + };
11311 +};
11312 diff --git a/arch/arm/boot/dts/overlays/cma-overlay.dts b/arch/arm/boot/dts/overlays/cma-overlay.dts
11313 new file mode 100644
11314 index 000000000000..1d87c599f909
11315 --- /dev/null
11316 +++ b/arch/arm/boot/dts/overlays/cma-overlay.dts
11317 @@ -0,0 +1,36 @@
11318 +/*
11319 + * cma.dts
11320 + */
11321 +
11322 +/dts-v1/;
11323 +/plugin/;
11324 +
11325 +/ {
11326 + compatible = "brcm,bcm2835";
11327 +
11328 + fragment@0 {
11329 + target = <&cma>;
11330 + frag0: __overlay__ {
11331 + /*
11332 + * The default size when using this overlay is 256 MB
11333 + * and should be kept as is for backwards
11334 + * compatibility.
11335 + */
11336 + size = <0x10000000>;
11337 + };
11338 + };
11339 +
11340 + __overrides__ {
11341 + cma-512 = <&frag0>,"size:0=",<0x20000000>;
11342 + cma-448 = <&frag0>,"size:0=",<0x1c000000>;
11343 + cma-384 = <&frag0>,"size:0=",<0x18000000>;
11344 + cma-320 = <&frag0>,"size:0=",<0x14000000>;
11345 + cma-256 = <&frag0>,"size:0=",<0x10000000>;
11346 + cma-192 = <&frag0>,"size:0=",<0xC000000>;
11347 + cma-128 = <&frag0>,"size:0=",<0x8000000>;
11348 + cma-96 = <&frag0>,"size:0=",<0x6000000>;
11349 + cma-64 = <&frag0>,"size:0=",<0x4000000>;
11350 + cma-size = <&frag0>,"size:0"; /* in bytes, 4MB aligned */
11351 + cma-default = <0>,"-0";
11352 + };
11353 +};
11354 diff --git a/arch/arm/boot/dts/overlays/dht11-overlay.dts b/arch/arm/boot/dts/overlays/dht11-overlay.dts
11355 new file mode 100644
11356 index 000000000000..6feeeb402493
11357 --- /dev/null
11358 +++ b/arch/arm/boot/dts/overlays/dht11-overlay.dts
11359 @@ -0,0 +1,41 @@
11360 +/*
11361 + * Overlay for the DHT11/21/22 humidity/temperature sensor modules.
11362 + */
11363 +/dts-v1/;
11364 +/plugin/;
11365 +
11366 +/ {
11367 + compatible = "brcm,bcm2835";
11368 +
11369 + fragment@0 {
11370 + target-path = "/";
11371 + __overlay__ {
11372 +
11373 + dht11: dht11@0 {
11374 + compatible = "dht11";
11375 + pinctrl-names = "default";
11376 + pinctrl-0 = <&dht11_pins>;
11377 + gpios = <&gpio 4 0>;
11378 + status = "okay";
11379 + };
11380 + };
11381 + };
11382 +
11383 + fragment@1 {
11384 + target = <&gpio>;
11385 + __overlay__ {
11386 + dht11_pins: dht11_pins@0 {
11387 + brcm,pins = <4>;
11388 + brcm,function = <0>; // in
11389 + brcm,pull = <0>; // off
11390 + };
11391 + };
11392 + };
11393 +
11394 + __overrides__ {
11395 + gpiopin = <&dht11_pins>,"brcm,pins:0",
11396 + <&dht11_pins>, "reg:0",
11397 + <&dht11>,"gpios:4",
11398 + <&dht11>,"reg:0";
11399 + };
11400 +};
11401 diff --git a/arch/arm/boot/dts/overlays/dionaudio-loco-overlay.dts b/arch/arm/boot/dts/overlays/dionaudio-loco-overlay.dts
11402 new file mode 100644
11403 index 000000000000..d863e5c167cc
11404 --- /dev/null
11405 +++ b/arch/arm/boot/dts/overlays/dionaudio-loco-overlay.dts
11406 @@ -0,0 +1,39 @@
11407 +// Definitions for Dion Audio LOCO DAC-AMP
11408 +
11409 +/*
11410 + * PCM5242 DAC (in hardware mode) and TPA3118 AMP.
11411 + */
11412 +
11413 +/dts-v1/;
11414 +/plugin/;
11415 +
11416 +/ {
11417 + compatible = "brcm,bcm2835";
11418 +
11419 + fragment@0 {
11420 + target = <&i2s>;
11421 + __overlay__ {
11422 + status = "okay";
11423 + };
11424 + };
11425 +
11426 + fragment@1 {
11427 + target-path = "/";
11428 + __overlay__ {
11429 + pcm5102a-codec {
11430 + #sound-dai-cells = <0>;
11431 + compatible = "ti,pcm5102a";
11432 + status = "okay";
11433 + };
11434 + };
11435 + };
11436 +
11437 + fragment@2 {
11438 + target = <&sound>;
11439 + __overlay__ {
11440 + compatible = "dionaudio,loco-pcm5242-tpa3118";
11441 + i2s-controller = <&i2s>;
11442 + status = "okay";
11443 + };
11444 + };
11445 +};
11446 diff --git a/arch/arm/boot/dts/overlays/dionaudio-loco-v2-overlay.dts b/arch/arm/boot/dts/overlays/dionaudio-loco-v2-overlay.dts
11447 new file mode 100644
11448 index 000000000000..dfb8922a654b
11449 --- /dev/null
11450 +++ b/arch/arm/boot/dts/overlays/dionaudio-loco-v2-overlay.dts
11451 @@ -0,0 +1,49 @@
11452 +/*
11453 + * Definitions for Dion Audio LOCO-V2 DAC-AMP
11454 + * eg. dtoverlay=dionaudio-loco-v2
11455 + *
11456 + * PCM5242 DAC (in software mode) and TPA3255 AMP.
11457 + */
11458 +
11459 +/dts-v1/;
11460 +/plugin/;
11461 +
11462 +/ {
11463 + compatible = "brcm,bcm2835";
11464 +
11465 + fragment@0 {
11466 + target = <&sound>;
11467 + frag0: __overlay__ {
11468 + compatible = "dionaudio,dionaudio-loco-v2";
11469 + i2s-controller = <&i2s>;
11470 + status = "okay";
11471 + };
11472 + };
11473 +
11474 + fragment@1 {
11475 + target = <&i2s>;
11476 + __overlay__ {
11477 + status = "okay";
11478 + };
11479 + };
11480 +
11481 + fragment@2 {
11482 + target = <&i2c1>;
11483 + __overlay__ {
11484 + #address-cells = <1>;
11485 + #size-cells = <0>;
11486 + status = "okay";
11487 +
11488 + pcm5122@4c {
11489 + #sound-dai-cells = <0>;
11490 + compatible = "ti,pcm5122";
11491 + reg = <0x4d>;
11492 + status = "okay";
11493 + };
11494 + };
11495 + };
11496 +
11497 + __overrides__ {
11498 + 24db_digital_gain = <&frag0>,"dionaudio,24db_digital_gain?";
11499 + };
11500 +};
11501 diff --git a/arch/arm/boot/dts/overlays/disable-bt-overlay.dts b/arch/arm/boot/dts/overlays/disable-bt-overlay.dts
11502 new file mode 100644
11503 index 000000000000..d5a66e5d76a9
11504 --- /dev/null
11505 +++ b/arch/arm/boot/dts/overlays/disable-bt-overlay.dts
11506 @@ -0,0 +1,64 @@
11507 +/dts-v1/;
11508 +/plugin/;
11509 +
11510 +/* Disable Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15.
11511 + To disable the systemd service that initialises the modem so it doesn't use
11512 + the UART:
11513 +
11514 + sudo systemctl disable hciuart
11515 +*/
11516 +
11517 +#include <dt-bindings/gpio/gpio.h>
11518 +
11519 +/{
11520 + compatible = "brcm,bcm2835";
11521 +
11522 + fragment@0 {
11523 + target = <&uart1>;
11524 + __overlay__ {
11525 + status = "disabled";
11526 + };
11527 + };
11528 +
11529 + fragment@1 {
11530 + target = <&uart0>;
11531 + __overlay__ {
11532 + pinctrl-names = "default";
11533 + pinctrl-0 = <&uart0_pins>;
11534 + status = "okay";
11535 + };
11536 + };
11537 +
11538 + fragment@2 {
11539 + target = <&bt>;
11540 + __overlay__ {
11541 + status = "disabled";
11542 + };
11543 + };
11544 +
11545 + fragment@3 {
11546 + target = <&uart0_pins>;
11547 + __overlay__ {
11548 + brcm,pins;
11549 + brcm,function;
11550 + brcm,pull;
11551 + };
11552 + };
11553 +
11554 + fragment@4 {
11555 + target = <&bt_pins>;
11556 + __overlay__ {
11557 + brcm,pins;
11558 + brcm,function;
11559 + brcm,pull;
11560 + };
11561 + };
11562 +
11563 + fragment@5 {
11564 + target-path = "/aliases";
11565 + __overlay__ {
11566 + serial0 = "/soc/serial@7e201000";
11567 + serial1 = "/soc/serial@7e215040";
11568 + };
11569 + };
11570 +};
11571 diff --git a/arch/arm/boot/dts/overlays/disable-wifi-overlay.dts b/arch/arm/boot/dts/overlays/disable-wifi-overlay.dts
11572 new file mode 100644
11573 index 000000000000..75e046463900
11574 --- /dev/null
11575 +++ b/arch/arm/boot/dts/overlays/disable-wifi-overlay.dts
11576 @@ -0,0 +1,20 @@
11577 +/dts-v1/;
11578 +/plugin/;
11579 +
11580 +/{
11581 + compatible = "brcm,bcm2835";
11582 +
11583 + fragment@0 {
11584 + target = <&mmc>;
11585 + __overlay__ {
11586 + status = "disabled";
11587 + };
11588 + };
11589 +
11590 + fragment@1 {
11591 + target = <&mmcnr>;
11592 + __overlay__ {
11593 + status = "disabled";
11594 + };
11595 + };
11596 +};
11597 diff --git a/arch/arm/boot/dts/overlays/dpi18-overlay.dts b/arch/arm/boot/dts/overlays/dpi18-overlay.dts
11598 new file mode 100644
11599 index 000000000000..4abe5be744db
11600 --- /dev/null
11601 +++ b/arch/arm/boot/dts/overlays/dpi18-overlay.dts
11602 @@ -0,0 +1,39 @@
11603 +/dts-v1/;
11604 +/plugin/;
11605 +
11606 +/{
11607 + compatible = "brcm,bcm2835";
11608 +
11609 + // There is no DPI driver module, but we need a platform device
11610 + // node (that doesn't already use pinctrl) to hang the pinctrl
11611 + // reference on - leds will do
11612 +
11613 + fragment@0 {
11614 + target = <&fb>;
11615 + __overlay__ {
11616 + pinctrl-names = "default";
11617 + pinctrl-0 = <&dpi18_pins>;
11618 + };
11619 + };
11620 +
11621 + fragment@1 {
11622 + target = <&vc4>;
11623 + __overlay__ {
11624 + pinctrl-names = "default";
11625 + pinctrl-0 = <&dpi18_pins>;
11626 + };
11627 + };
11628 +
11629 + fragment@2 {
11630 + target = <&gpio>;
11631 + __overlay__ {
11632 + dpi18_pins: dpi18_pins {
11633 + brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
11634 + 12 13 14 15 16 17 18 19 20
11635 + 21>;
11636 + brcm,function = <6>; /* alt2 */
11637 + brcm,pull = <0>; /* no pull */
11638 + };
11639 + };
11640 + };
11641 +};
11642 diff --git a/arch/arm/boot/dts/overlays/dpi18cpadhi-overlay.dts b/arch/arm/boot/dts/overlays/dpi18cpadhi-overlay.dts
11643 new file mode 100644
11644 index 000000000000..50c88a1ed299
11645 --- /dev/null
11646 +++ b/arch/arm/boot/dts/overlays/dpi18cpadhi-overlay.dts
11647 @@ -0,0 +1,26 @@
11648 +/*
11649 + * dpi18cpadhi-overlay.dts
11650 + */
11651 +
11652 +/dts-v1/;
11653 +/plugin/;
11654 +
11655 +/{
11656 + compatible = "brcm,bcm2835";
11657 +
11658 + fragment@0 {
11659 + target = <&fb>;
11660 + __overlay__ {
11661 + pinctrl-names = "default";
11662 + pinctrl-0 = <&dpi_18bit_cpadhi_gpio0>;
11663 + };
11664 + };
11665 +
11666 + fragment@1 {
11667 + target = <&vc4>;
11668 + __overlay__ {
11669 + pinctrl-names = "default";
11670 + pinctrl-0 = <&dpi_18bit_cpadhi_gpio0>;
11671 + };
11672 + };
11673 +};
11674 diff --git a/arch/arm/boot/dts/overlays/dpi24-overlay.dts b/arch/arm/boot/dts/overlays/dpi24-overlay.dts
11675 new file mode 100644
11676 index 000000000000..44335cc81277
11677 --- /dev/null
11678 +++ b/arch/arm/boot/dts/overlays/dpi24-overlay.dts
11679 @@ -0,0 +1,39 @@
11680 +/dts-v1/;
11681 +/plugin/;
11682 +
11683 +/{
11684 + compatible = "brcm,bcm2835";
11685 +
11686 + // There is no DPI driver module, but we need a platform device
11687 + // node (that doesn't already use pinctrl) to hang the pinctrl
11688 + // reference on - leds will do
11689 +
11690 + fragment@0 {
11691 + target = <&fb>;
11692 + __overlay__ {
11693 + pinctrl-names = "default";
11694 + pinctrl-0 = <&dpi24_pins>;
11695 + };
11696 + };
11697 +
11698 + fragment@1 {
11699 + target = <&vc4>;
11700 + __overlay__ {
11701 + pinctrl-names = "default";
11702 + pinctrl-0 = <&dpi24_pins>;
11703 + };
11704 + };
11705 +
11706 + fragment@2 {
11707 + target = <&gpio>;
11708 + __overlay__ {
11709 + dpi24_pins: dpi24_pins {
11710 + brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
11711 + 12 13 14 15 16 17 18 19 20
11712 + 21 22 23 24 25 26 27>;
11713 + brcm,function = <6>; /* alt2 */
11714 + brcm,pull = <0>; /* no pull */
11715 + };
11716 + };
11717 + };
11718 +};
11719 diff --git a/arch/arm/boot/dts/overlays/draws-overlay.dts b/arch/arm/boot/dts/overlays/draws-overlay.dts
11720 new file mode 100644
11721 index 000000000000..d18187d7f343
11722 --- /dev/null
11723 +++ b/arch/arm/boot/dts/overlays/draws-overlay.dts
11724 @@ -0,0 +1,208 @@
11725 +#include <dt-bindings/clock/bcm2835.h>
11726 +/*
11727 + * Device tree overlay for the DRAWS Hardware
11728 + */
11729 +
11730 +/dts-v1/;
11731 +/plugin/;
11732 +
11733 +/ {
11734 + compatible = "brcm,bcm2835";
11735 + fragment@0 {
11736 + target = <&i2s>;
11737 + __overlay__ {
11738 + status = "okay";
11739 + };
11740 + };
11741 +
11742 + fragment@1 {
11743 + target-path = "/";
11744 + __overlay__ {
11745 + regulators {
11746 + compatible = "simple-bus";
11747 + #address-cells = <1>;
11748 + #size-cells = <0>;
11749 +
11750 + udrc0_ldoin: udrc0_ldoin {
11751 + compatible = "regulator-fixed";
11752 + regulator-name = "ldoin";
11753 + regulator-min-microvolt = <3300000>;
11754 + regulator-max-microvolt = <3300000>;
11755 + regulator-always-on;
11756 + };
11757 +
11758 + sc16is752_clk: sc16is752_draws_clk {
11759 + compatible = "fixed-clock";
11760 + #clock-cells = <0>;
11761 + clock-frequency = <1843200>;
11762 + };
11763 + };
11764 +
11765 + pps: pps {
11766 + compatible = "pps-gpio";
11767 + pinctrl-names = "default";
11768 + pinctrl-0 = <&pps_pins>;
11769 + gpios = <&gpio 7 0>;
11770 + status = "okay";
11771 + };
11772 +
11773 + iio-hwmon {
11774 + compatible = "iio-hwmon";
11775 + status = "okay";
11776 + io-channels = <&tla2024 4>, <&tla2024 5>, <&tla2024 6>,
11777 + <&tla2024 7>;
11778 + };
11779 + };
11780 + };
11781 +
11782 + fragment@2 {
11783 + target = <&i2c_arm>;
11784 + __overlay__ {
11785 + #address-cells = <1>;
11786 + #size-cells = <0>;
11787 + status = "okay";
11788 +
11789 + tlv320aic32x4: tlv320aic32x4@18 {
11790 + compatible = "ti,tlv320aic32x4";
11791 + reg = <0x18>;
11792 + #sound-dai-cells = <0>;
11793 + status = "okay";
11794 +
11795 + clocks = <&clocks BCM2835_CLOCK_GP0>;
11796 + clock-names = "mclk";
11797 + assigned-clocks = <&clocks BCM2835_CLOCK_GP0>;
11798 + assigned-clock-rates = <25000000>;
11799 +
11800 + pinctrl-names = "default";
11801 + pinctrl-0 = <&gpclk0_pin &aic3204_reset>;
11802 +
11803 + reset-gpios = <&gpio 13 0>;
11804 +
11805 + iov-supply = <&udrc0_ldoin>;
11806 + ldoin-supply = <&udrc0_ldoin>;
11807 + };
11808 +
11809 + sc16is752: sc16is752@50 {
11810 + compatible = "nxp,sc16is752";
11811 + reg = <0x50>;
11812 + clocks = <&sc16is752_clk>;
11813 + interrupt-parent = <&gpio>;
11814 + interrupts = <17 2>; /* IRQ_TYPE_EDGE_FALLING */
11815 +
11816 + pinctrl-names = "default";
11817 + pinctrl-0 = <&sc16is752_irq>;
11818 + };
11819 +
11820 + tla2024: tla2024@48 {
11821 + compatible = "ti,ads1015";
11822 + reg = <0x48>;
11823 + #address-cells = <1>;
11824 + #size-cells = <0>;
11825 + #io-channel-cells = <1>;
11826 +
11827 + adc_ch4: channel@4 {
11828 + reg = <4>;
11829 + ti,gain = <1>;
11830 + ti,datarate = <4>;
11831 + };
11832 +
11833 + adc_ch5: channel@5 {
11834 + reg = <5>;
11835 + ti,gain = <1>;
11836 + ti,datarate = <4>;
11837 + };
11838 +
11839 + adc_ch6: channel@6 {
11840 + reg = <6>;
11841 + ti,gain = <2>;
11842 + ti,datarate = <4>;
11843 + };
11844 +
11845 + adc_ch7: channel@7 {
11846 + reg = <7>;
11847 + ti,gain = <2>;
11848 + ti,datarate = <4>;
11849 + };
11850 + };
11851 + };
11852 + };
11853 +
11854 + fragment@3 {
11855 + target = <&sound>;
11856 + snd: __overlay__ {
11857 + compatible = "simple-audio-card";
11858 + i2s-controller = <&i2s>;
11859 + status = "okay";
11860 +
11861 + simple-audio-card,name = "draws";
11862 + simple-audio-card,format = "i2s";
11863 +
11864 + simple-audio-card,bitclock-master = <&dailink0_master>;
11865 + simple-audio-card,frame-master = <&dailink0_master>;
11866 +
11867 + simple-audio-card,widgets =
11868 + "Line", "Line In",
11869 + "Line", "Line Out";
11870 +
11871 + simple-audio-card,routing =
11872 + "IN1_R", "Line In",
11873 + "IN1_L", "Line In",
11874 + "CM_L", "Line In",
11875 + "CM_R", "Line In",
11876 + "Line Out", "LOR",
11877 + "Line Out", "LOL";
11878 +
11879 + dailink0_master: simple-audio-card,cpu {
11880 + sound-dai = <&i2s>;
11881 + };
11882 +
11883 + simple-audio-card,codec {
11884 + sound-dai = <&tlv320aic32x4>;
11885 + };
11886 + };
11887 + };
11888 +
11889 + fragment@4 {
11890 + target = <&gpio>;
11891 + __overlay__ {
11892 + gpclk0_pin: gpclk0_pin {
11893 + brcm,pins = <4>;
11894 + brcm,function = <4>;
11895 + };
11896 +
11897 + aic3204_reset: aic3204_reset {
11898 + brcm,pins = <13>;
11899 + brcm,function = <1>;
11900 + brcm,pull = <1>;
11901 + };
11902 +
11903 + aic3204_gpio: aic3204_gpio {
11904 + brcm,pins = <26>;
11905 + };
11906 +
11907 + sc16is752_irq: sc16is752_irq {
11908 + brcm,pins = <17>;
11909 + brcm,function = <0>;
11910 + brcm,pull = <2>;
11911 + };
11912 +
11913 + pps_pins: pps_pins {
11914 + brcm,pins = <7>;
11915 + brcm,function = <0>;
11916 + brcm,pull = <0>;
11917 + };
11918 + };
11919 + };
11920 +
11921 + __overrides__ {
11922 + draws_adc_ch4_gain = <&adc_ch4>,"ti,gain:0";
11923 + draws_adc_ch4_datarate = <&adc_ch4>,"ti,datarate:0";
11924 + draws_adc_ch5_gain = <&adc_ch5>,"ti,gain:0";
11925 + draws_adc_ch5_datarate = <&adc_ch5>,"ti,datarate:0";
11926 + draws_adc_ch6_gain = <&adc_ch6>,"ti,gain:0";
11927 + draws_adc_ch6_datarate = <&adc_ch6>,"ti,datarate:0";
11928 + draws_adc_ch7_gain = <&adc_ch7>,"ti,gain:0";
11929 + draws_adc_ch7_datarate = <&adc_ch7>,"ti,datarate:0";
11930 + alsaname = <&snd>, "simple-audio-card,name";
11931 + };
11932 +};
11933 diff --git a/arch/arm/boot/dts/overlays/dwc-otg-overlay.dts b/arch/arm/boot/dts/overlays/dwc-otg-overlay.dts
11934 new file mode 100644
11935 index 000000000000..78c5e9f85048
11936 --- /dev/null
11937 +++ b/arch/arm/boot/dts/overlays/dwc-otg-overlay.dts
11938 @@ -0,0 +1,14 @@
11939 +/dts-v1/;
11940 +/plugin/;
11941 +
11942 +/{
11943 + compatible = "brcm,bcm2835";
11944 +
11945 + fragment@0 {
11946 + target = <&usb>;
11947 + __overlay__ {
11948 + compatible = "brcm,bcm2708-usb";
11949 + status = "okay";
11950 + };
11951 + };
11952 +};
11953 diff --git a/arch/arm/boot/dts/overlays/dwc2-overlay.dts b/arch/arm/boot/dts/overlays/dwc2-overlay.dts
11954 new file mode 100644
11955 index 000000000000..0d83e344ad97
11956 --- /dev/null
11957 +++ b/arch/arm/boot/dts/overlays/dwc2-overlay.dts
11958 @@ -0,0 +1,26 @@
11959 +/dts-v1/;
11960 +/plugin/;
11961 +
11962 +/{
11963 + compatible = "brcm,bcm2835";
11964 +
11965 + fragment@0 {
11966 + target = <&usb>;
11967 + #address-cells = <1>;
11968 + #size-cells = <1>;
11969 + dwc2_usb: __overlay__ {
11970 + compatible = "brcm,bcm2835-usb";
11971 + dr_mode = "otg";
11972 + g-np-tx-fifo-size = <32>;
11973 + g-rx-fifo-size = <558>;
11974 + g-tx-fifo-size = <512 512 512 512 512 256 256>;
11975 + status = "okay";
11976 + };
11977 + };
11978 +
11979 + __overrides__ {
11980 + dr_mode = <&dwc2_usb>, "dr_mode";
11981 + g-np-tx-fifo-size = <&dwc2_usb>,"g-np-tx-fifo-size:0";
11982 + g-rx-fifo-size = <&dwc2_usb>,"g-rx-fifo-size:0";
11983 + };
11984 +};
11985 diff --git a/arch/arm/boot/dts/overlays/edt-ft5406-overlay.dts b/arch/arm/boot/dts/overlays/edt-ft5406-overlay.dts
11986 new file mode 100644
11987 index 000000000000..f82b4d0e5047
11988 --- /dev/null
11989 +++ b/arch/arm/boot/dts/overlays/edt-ft5406-overlay.dts
11990 @@ -0,0 +1,10 @@
11991 +/*
11992 + * Device Tree overlay for EDT 5406 touchscreen controller, as used on the
11993 + * Raspberry Pi 7" panel
11994 + *
11995 + */
11996 +
11997 +/dts-v1/;
11998 +/plugin/;
11999 +
12000 +#include "edt-ft5406.dtsi"
12001 diff --git a/arch/arm/boot/dts/overlays/edt-ft5406.dtsi b/arch/arm/boot/dts/overlays/edt-ft5406.dtsi
12002 new file mode 100644
12003 index 000000000000..0473ff17f19f
12004 --- /dev/null
12005 +++ b/arch/arm/boot/dts/overlays/edt-ft5406.dtsi
12006 @@ -0,0 +1,55 @@
12007 +/*
12008 + * Device Tree overlay for an EDT FT5406 touchscreen
12009 + *
12010 + * Note that this is included from vc4-kms-dsi-7inch, hence the
12011 + * fragment numbers not starting at 0.
12012 + */
12013 +
12014 +/ {
12015 + compatible = "brcm,bcm2835";
12016 +
12017 + fragment@10 {
12018 + target = <&ft5406>;
12019 + __overlay__ {
12020 + touchscreen-inverted-x;
12021 + };
12022 + };
12023 +
12024 + fragment@11 {
12025 + target = <&ft5406>;
12026 + __overlay__ {
12027 + touchscreen-inverted-y;
12028 + };
12029 + };
12030 +
12031 + fragment@12 {
12032 + target = <&i2c_csi_dsi>;
12033 + __overlay__ {
12034 + #address-cells = <1>;
12035 + #size-cells = <0>;
12036 + status = "okay";
12037 + ft5406: ts@38 {
12038 + compatible = "edt,edt-ft5406";
12039 + reg = <0x38>;
12040 +
12041 + touchscreen-size-x = < 800 >;
12042 + touchscreen-size-y = < 480 >;
12043 + };
12044 + };
12045 + };
12046 +
12047 + fragment@13 {
12048 + target = <&i2c0if>;
12049 + __overlay__ {
12050 + status = "okay";
12051 + };
12052 + };
12053 +
12054 + __overrides__ {
12055 + sizex = <&ft5406>,"touchscreen-size-x:0";
12056 + sizey = <&ft5406>,"touchscreen-size-y:0";
12057 + invx = <0>, "-10";
12058 + invy = <0>, "-11";
12059 + swapxy = <&ft5406>,"touchscreen-swapped-x-y?";
12060 + };
12061 +};
12062 diff --git a/arch/arm/boot/dts/overlays/enc28j60-overlay.dts b/arch/arm/boot/dts/overlays/enc28j60-overlay.dts
12063 new file mode 100644
12064 index 000000000000..7af5c2e607ea
12065 --- /dev/null
12066 +++ b/arch/arm/boot/dts/overlays/enc28j60-overlay.dts
12067 @@ -0,0 +1,53 @@
12068 +// Overlay for the Microchip ENC28J60 Ethernet Controller
12069 +/dts-v1/;
12070 +/plugin/;
12071 +
12072 +/ {
12073 + compatible = "brcm,bcm2835";
12074 +
12075 + fragment@0 {
12076 + target = <&spi0>;
12077 + __overlay__ {
12078 + /* needed to avoid dtc warning */
12079 + #address-cells = <1>;
12080 + #size-cells = <0>;
12081 +
12082 + status = "okay";
12083 +
12084 + eth1: enc28j60@0{
12085 + compatible = "microchip,enc28j60";
12086 + reg = <0>; /* CE0 */
12087 + pinctrl-names = "default";
12088 + pinctrl-0 = <&eth1_pins>;
12089 + interrupt-parent = <&gpio>;
12090 + interrupts = <25 0x2>; /* falling edge */
12091 + spi-max-frequency = <12000000>;
12092 + status = "okay";
12093 + };
12094 + };
12095 + };
12096 +
12097 + fragment@1 {
12098 + target = <&spidev0>;
12099 + __overlay__ {
12100 + status = "disabled";
12101 + };
12102 + };
12103 +
12104 + fragment@2 {
12105 + target = <&gpio>;
12106 + __overlay__ {
12107 + eth1_pins: eth1_pins {
12108 + brcm,pins = <25>;
12109 + brcm,function = <0>; /* in */
12110 + brcm,pull = <0>; /* none */
12111 + };
12112 + };
12113 + };
12114 +
12115 + __overrides__ {
12116 + int_pin = <&eth1>, "interrupts:0",
12117 + <&eth1_pins>, "brcm,pins:0";
12118 + speed = <&eth1>, "spi-max-frequency:0";
12119 + };
12120 +};
12121 diff --git a/arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts b/arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts
12122 new file mode 100644
12123 index 000000000000..17cb5b8fa485
12124 --- /dev/null
12125 +++ b/arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts
12126 @@ -0,0 +1,47 @@
12127 +// Overlay for the Microchip ENC28J60 Ethernet Controller - SPI2 Compute Module
12128 +// Interrupt pin: 39
12129 +/dts-v1/;
12130 +/plugin/;
12131 +
12132 +/ {
12133 + compatible = "brcm,bcm2835";
12134 +
12135 + fragment@0 {
12136 + target = <&spi2>;
12137 + __overlay__ {
12138 + /* needed to avoid dtc warning */
12139 + #address-cells = <1>;
12140 + #size-cells = <0>;
12141 +
12142 + status = "okay";
12143 +
12144 + eth1: enc28j60@0{
12145 + compatible = "microchip,enc28j60";
12146 + reg = <0>; /* CE0 */
12147 + pinctrl-names = "default";
12148 + pinctrl-0 = <&eth1_pins>;
12149 + interrupt-parent = <&gpio>;
12150 + interrupts = <39 0x2>; /* falling edge */
12151 + spi-max-frequency = <12000000>;
12152 + status = "okay";
12153 + };
12154 + };
12155 + };
12156 +
12157 + fragment@1 {
12158 + target = <&gpio>;
12159 + __overlay__ {
12160 + eth1_pins: eth1_pins {
12161 + brcm,pins = <39>;
12162 + brcm,function = <0>; /* in */
12163 + brcm,pull = <0>; /* none */
12164 + };
12165 + };
12166 + };
12167 +
12168 + __overrides__ {
12169 + int_pin = <&eth1>, "interrupts:0",
12170 + <&eth1_pins>, "brcm,pins:0";
12171 + speed = <&eth1>, "spi-max-frequency:0";
12172 + };
12173 +};
12174 diff --git a/arch/arm/boot/dts/overlays/exc3000-overlay.dts b/arch/arm/boot/dts/overlays/exc3000-overlay.dts
12175 new file mode 100644
12176 index 000000000000..6f087fb20661
12177 --- /dev/null
12178 +++ b/arch/arm/boot/dts/overlays/exc3000-overlay.dts
12179 @@ -0,0 +1,48 @@
12180 +// Device tree overlay for I2C connected EETI EXC3000 multiple touch controller
12181 +/dts-v1/;
12182 +/plugin/;
12183 +
12184 +/ {
12185 + compatible = "brcm,bcm2835";
12186 +
12187 + fragment@0 {
12188 + target = <&gpio>;
12189 + __overlay__ {
12190 + exc3000_pins: exc3000_pins {
12191 + brcm,pins = <4>; // interrupt
12192 + brcm,function = <0>; // in
12193 + brcm,pull = <2>; // pull-up
12194 + };
12195 + };
12196 + };
12197 +
12198 + fragment@1 {
12199 + target = <&i2c1>;
12200 + __overlay__ {
12201 + #address-cells = <1>;
12202 + #size-cells = <0>;
12203 + status = "okay";
12204 +
12205 + exc3000: exc3000@2a {
12206 + compatible = "eeti,exc3000";
12207 + reg = <0x2a>;
12208 + pinctrl-names = "default";
12209 + pinctrl-0 = <&exc3000_pins>;
12210 + interrupt-parent = <&gpio>;
12211 + interrupts = <4 8>; // active low level-sensitive
12212 + touchscreen-size-x = <4096>;
12213 + touchscreen-size-y = <4096>;
12214 + };
12215 + };
12216 + };
12217 +
12218 + __overrides__ {
12219 + interrupt = <&exc3000_pins>,"brcm,pins:0",
12220 + <&exc3000>,"interrupts:0";
12221 + sizex = <&exc3000>,"touchscreen-size-x:0";
12222 + sizey = <&exc3000>,"touchscreen-size-y:0";
12223 + invx = <&exc3000>,"touchscreen-inverted-x?";
12224 + invy = <&exc3000>,"touchscreen-inverted-y?";
12225 + swapxy = <&exc3000>,"touchscreen-swapped-x-y?";
12226 + };
12227 +};
12228 diff --git a/arch/arm/boot/dts/overlays/fe-pi-audio-overlay.dts b/arch/arm/boot/dts/overlays/fe-pi-audio-overlay.dts
12229 new file mode 100644
12230 index 000000000000..743f14ae5768
12231 --- /dev/null
12232 +++ b/arch/arm/boot/dts/overlays/fe-pi-audio-overlay.dts
12233 @@ -0,0 +1,70 @@
12234 +// Definitions for Fe-Pi Audio
12235 +/dts-v1/;
12236 +/plugin/;
12237 +
12238 +/ {
12239 + compatible = "brcm,bcm2835";
12240 +
12241 + fragment@0 {
12242 + target-path = "/";
12243 + __overlay__ {
12244 + sgtl5000_mclk: sgtl5000_mclk {
12245 + compatible = "fixed-clock";
12246 + #clock-cells = <0>;
12247 + clock-frequency = <12288000>;
12248 + clock-output-names = "sgtl5000-mclk";
12249 + };
12250 + };
12251 + };
12252 +
12253 + fragment@1 {
12254 + target = <&soc>;
12255 + __overlay__ {
12256 + reg_1v8: reg_1v8@0 {
12257 + compatible = "regulator-fixed";
12258 + regulator-name = "1V8";
12259 + regulator-min-microvolt = <1800000>;
12260 + regulator-max-microvolt = <1800000>;
12261 + regulator-always-on;
12262 + };
12263 + };
12264 + };
12265 +
12266 + fragment@2 {
12267 + target = <&i2c1>;
12268 + __overlay__ {
12269 + #address-cells = <1>;
12270 + #size-cells = <0>;
12271 + status = "okay";
12272 +
12273 + sgtl5000@0a {
12274 + #sound-dai-cells = <0>;
12275 + compatible = "fsl,sgtl5000";
12276 + reg = <0x0a>;
12277 + clocks = <&sgtl5000_mclk>;
12278 + micbias-resistor-k-ohms = <2>;
12279 + micbias-voltage-m-volts = <3000>;
12280 + VDDA-supply = <&vdd_3v3_reg>;
12281 + VDDIO-supply = <&vdd_3v3_reg>;
12282 + VDDD-supply = <&reg_1v8>;
12283 + status = "okay";
12284 + };
12285 + };
12286 + };
12287 +
12288 + fragment@3 {
12289 + target = <&i2s>;
12290 + __overlay__ {
12291 + status = "okay";
12292 + };
12293 + };
12294 +
12295 + fragment@4 {
12296 + target = <&sound>;
12297 + __overlay__ {
12298 + compatible = "fe-pi,fe-pi-audio";
12299 + i2s-controller = <&i2s>;
12300 + status = "okay";
12301 + };
12302 + };
12303 +};
12304 diff --git a/arch/arm/boot/dts/overlays/fsm-demo-overlay.dts b/arch/arm/boot/dts/overlays/fsm-demo-overlay.dts
12305 new file mode 100644
12306 index 000000000000..e9944f5cd258
12307 --- /dev/null
12308 +++ b/arch/arm/boot/dts/overlays/fsm-demo-overlay.dts
12309 @@ -0,0 +1,104 @@
12310 +// Demo overlay for the gpio-fsm driver
12311 +/dts-v1/;
12312 +/plugin/;
12313 +
12314 +#include <dt-bindings/gpio/gpio-fsm.h>
12315 +
12316 +#define BUTTON1 GF_IP(0)
12317 +#define BUTTON2 GF_SW(0)
12318 +#define RED GF_OP(0) // GPIO7
12319 +#define AMBER GF_OP(1) // GPIO8
12320 +#define GREEN GF_OP(2) // GPIO25
12321 +
12322 +/{
12323 + compatible = "brcm,bcm2835";
12324 +
12325 + fragment@0 {
12326 + target-path = "/";
12327 + __overlay__ {
12328 + fsm_demo: fsm-demo {
12329 + compatible = "rpi,gpio-fsm";
12330 +
12331 + debug = <0>;
12332 + gpio-controller;
12333 + #gpio-cells = <2>;
12334 + num-swgpios = <1>;
12335 + gpio-line-names = "button2";
12336 + input-gpios = <&gpio 6 1>; // BUTTON1 (active-low)
12337 + output-gpios = <&gpio 7 0>, // RED
12338 + <&gpio 8 0>, // AMBER
12339 + <&gpio 25 0>; // GREEN
12340 + shutdown-timeout-ms = <2000>;
12341 +
12342 + start {
12343 + start_state;
12344 + set = <RED 1>, <AMBER 0>, <GREEN 0>;
12345 + start2 = <GF_DELAY 250>;
12346 + };
12347 +
12348 + start2 {
12349 + set = <RED 0>, <AMBER 1>;
12350 + go = <GF_DELAY 250>;
12351 + };
12352 +
12353 + go {
12354 + set = <RED 0>, <AMBER 0>, <GREEN 1>;
12355 + ready_wait = <BUTTON1 0>;
12356 + shutdown1 = <GF_SHUTDOWN 0>;
12357 + };
12358 +
12359 + ready_wait {
12360 + // Clear the soft GPIO
12361 + set = <BUTTON2 0>;
12362 + ready = <GF_DELAY 1000>;
12363 + shutdown1 = <GF_SHUTDOWN 0>;
12364 + };
12365 +
12366 + ready {
12367 + stopping = <BUTTON1 1>, <BUTTON2 1>;
12368 + shutdown1 = <GF_SHUTDOWN 0>;
12369 + };
12370 +
12371 + stopping {
12372 + set = <GREEN 0>, <AMBER 1>;
12373 + stopped = <GF_DELAY 1000>;
12374 + };
12375 +
12376 + stopped {
12377 + set = <AMBER 0>, <RED 1>;
12378 + get_set = <GF_DELAY 3000>;
12379 + shutdown1 = <GF_SHUTDOWN 0>;
12380 + };
12381 +
12382 + get_set {
12383 + set = <AMBER 1>;
12384 + go = <GF_DELAY 1000>;
12385 + };
12386 +
12387 + shutdown1 {
12388 + set = <RED 0>, <AMBER 0>, <GREEN 1>;
12389 + shutdown2 = <GF_SHUTDOWN 250>;
12390 + };
12391 +
12392 + shutdown2 {
12393 + set = <AMBER 1>, <GREEN 0>;
12394 + shutdown3 = <GF_SHUTDOWN 250>;
12395 + };
12396 +
12397 + shutdown3 {
12398 + set = <RED 1>, <AMBER 0>;
12399 + shutdown4 = <GF_SHUTDOWN 250>;
12400 + };
12401 +
12402 + shutdown4 {
12403 + shutdown_state;
12404 + set = <RED 0>, <AMBER 0>, <GREEN 0>;
12405 + };
12406 + };
12407 + };
12408 + };
12409 +
12410 + __overrides__ {
12411 + fsm_debug = <&fsm_demo>,"debug:0";
12412 + };
12413 +};
12414 diff --git a/arch/arm/boot/dts/overlays/ghost-amp-overlay.dts b/arch/arm/boot/dts/overlays/ghost-amp-overlay.dts
12415 new file mode 100644
12416 index 000000000000..7509e00679c8
12417 --- /dev/null
12418 +++ b/arch/arm/boot/dts/overlays/ghost-amp-overlay.dts
12419 @@ -0,0 +1,145 @@
12420 +// Overlay for the PCM5122-based Ghost amplifier using gpio-fsm
12421 +/dts-v1/;
12422 +/plugin/;
12423 +
12424 +#include <dt-bindings/gpio/gpio-fsm.h>
12425 +
12426 +#define ENABLE GF_SW(0)
12427 +#define FAULT GF_IP(0) // GPIO5
12428 +#define RELAY1 GF_OP(0) // GPIO22
12429 +#define RELAY2 GF_OP(1) // GPIO23
12430 +#define RELAYSSR GF_OP(2) // GPIO24
12431 +
12432 +/ {
12433 + compatible = "brcm,bcm2835";
12434 +
12435 + fragment@0 {
12436 + target = <&i2s>;
12437 + __overlay__ {
12438 + status = "okay";
12439 + };
12440 + };
12441 +
12442 + fragment@1 {
12443 + target = <&i2c1>;
12444 + __overlay__ {
12445 + #address-cells = <1>;
12446 + #size-cells = <0>;
12447 + status = "okay";
12448 +
12449 + pcm5122@4c {
12450 + #sound-dai-cells = <0>;
12451 + compatible = "ti,pcm5122";
12452 + reg = <0x4c>;
12453 + AVDD-supply = <&vdd_3v3_reg>;
12454 + DVDD-supply = <&vdd_3v3_reg>;
12455 + CPVDD-supply = <&vdd_3v3_reg>;
12456 + status = "okay";
12457 + };
12458 + };
12459 + };
12460 +
12461 + fragment@2 {
12462 + target = <&sound>;
12463 + iqaudio_dac: __overlay__ {
12464 + compatible = "iqaudio,iqaudio-dac";
12465 + i2s-controller = <&i2s>;
12466 + mute-gpios = <&amp 0 0>;
12467 + iqaudio-dac,auto-mute-amp;
12468 + status = "okay";
12469 + };
12470 + };
12471 +
12472 + fragment@3 {
12473 + target-path = "/";
12474 + __overlay__ {
12475 + amp: ghost-amp {
12476 + compatible = "rpi,gpio-fsm";
12477 + pinctrl-names = "default";
12478 + pinctrl-0 = <&ghost_amp_pins>;
12479 +
12480 + debug = <0>;
12481 + gpio-controller;
12482 + #gpio-cells = <2>;
12483 + num-swgpios = <1>;
12484 + gpio-line-names = "enable";
12485 + input-gpios = <&gpio 5 1>; // FAULT (active low)
12486 + output-gpios = <&gpio 22 0>, // RELAY1
12487 + <&gpio 23 0>, // RELAY2
12488 + <&gpio 24 0>; // RELAYSSR
12489 + shutdown-timeout-ms = <1000>;
12490 +
12491 + amp_off {
12492 + start_state;
12493 + shutdown_state;
12494 +
12495 + set = <RELAYSSR 0>,
12496 + <RELAY2 0>,
12497 + <RELAY1 0>;
12498 + amp_on_1 = <ENABLE 1>;
12499 + fault = <FAULT 1>;
12500 + };
12501 +
12502 + amp_on_1 {
12503 + set = <RELAY1 1>;
12504 + amp_on_2 = <GF_DELAY 1000>;
12505 + amp_off = <GF_SHUTDOWN 0>;
12506 + fault = <FAULT 1>;
12507 + };
12508 +
12509 + amp_on_2 {
12510 + set = <RELAY2 1>;
12511 + amp_on_wait = <ENABLE 0>;
12512 + amp_on = <GF_DELAY 1>;
12513 + fault = <FAULT 1>;
12514 + };
12515 +
12516 + amp_on {
12517 + set = <RELAYSSR 1>;
12518 + amp_on_wait = <ENABLE 0>;
12519 + fault = <FAULT 1>;
12520 + };
12521 +
12522 + amp_on_wait {
12523 + set = <RELAYSSR 0>;
12524 + amp_off_1 = <GF_DELAY (30*60*1000)>,
12525 + <GF_SHUTDOWN 0>;
12526 + amp_on = <ENABLE 1>;
12527 + fault = <FAULT 1>;
12528 + };
12529 +
12530 + amp_off_1 {
12531 + set = <RELAY2 0>;
12532 + amp_on = <ENABLE 1>;
12533 + amp_off = <GF_DELAY 100>;
12534 + fault = <FAULT 1>;
12535 + };
12536 +
12537 + // Keep this a distinct state to prevent
12538 + // changes and for the diagnostic output
12539 + fault {
12540 + set = <RELAYSSR 0>,
12541 + <RELAY2 0>,
12542 + <RELAY1 0>;
12543 + amp_off = <FAULT 0>;
12544 + shutdown_state;
12545 + };
12546 + };
12547 + };
12548 + };
12549 +
12550 + fragment@4 {
12551 + target = <&gpio>;
12552 + __overlay__ {
12553 + ghost_amp_pins: ghost_amp_pins {
12554 + brcm,pins = <5 22 23 24>;
12555 + brcm,function = <0 1 1 1>; /* in out out out */
12556 + brcm,pull = <2 0 0 0>; /* up none none none */
12557 + };
12558 + };
12559 + };
12560 +
12561 + __overrides__ {
12562 + fsm_debug = <&amp>,"debug:0";
12563 + };
12564 +};
12565 diff --git a/arch/arm/boot/dts/overlays/goodix-overlay.dts b/arch/arm/boot/dts/overlays/goodix-overlay.dts
12566 new file mode 100644
12567 index 000000000000..8571527de49a
12568 --- /dev/null
12569 +++ b/arch/arm/boot/dts/overlays/goodix-overlay.dts
12570 @@ -0,0 +1,46 @@
12571 +// Device tree overlay for I2C connected Goodix gt9271 multiple touch controller
12572 +/dts-v1/;
12573 +/plugin/;
12574 +
12575 +/ {
12576 + compatible = "brcm,bcm2835";
12577 +
12578 + fragment@0 {
12579 + target = <&gpio>;
12580 + __overlay__ {
12581 + goodix_pins: goodix_pins {
12582 + brcm,pins = <4 17>; // interrupt and reset
12583 + brcm,function = <0 0>; // in
12584 + brcm,pull = <2 2>; // pull-up
12585 + };
12586 + };
12587 + };
12588 +
12589 + fragment@1 {
12590 + target = <&i2c1>;
12591 + __overlay__ {
12592 + #address-cells = <1>;
12593 + #size-cells = <0>;
12594 + status = "okay";
12595 +
12596 + gt9271: gt9271@14 {
12597 + compatible = "goodix,gt9271";
12598 + reg = <0x14>;
12599 + pinctrl-names = "default";
12600 + pinctrl-0 = <&goodix_pins>;
12601 + interrupt-parent = <&gpio>;
12602 + interrupts = <4 2>; // high-to-low edge triggered
12603 + irq-gpios = <&gpio 4 0>; // Pin7 on GPIO header
12604 + reset-gpios = <&gpio 17 0>; // Pin11 on GPIO header
12605 + };
12606 + };
12607 + };
12608 +
12609 + __overrides__ {
12610 + interrupt = <&goodix_pins>,"brcm,pins:0",
12611 + <&gt9271>,"interrupts:0",
12612 + <&gt9271>,"irq-gpios:4";
12613 + reset = <&goodix_pins>,"brcm,pins:4",
12614 + <&gt9271>,"reset-gpios:4";
12615 + };
12616 +};
12617 diff --git a/arch/arm/boot/dts/overlays/googlevoicehat-soundcard-overlay.dts b/arch/arm/boot/dts/overlays/googlevoicehat-soundcard-overlay.dts
12618 new file mode 100644
12619 index 000000000000..e443be1f9a0e
12620 --- /dev/null
12621 +++ b/arch/arm/boot/dts/overlays/googlevoicehat-soundcard-overlay.dts
12622 @@ -0,0 +1,49 @@
12623 +// Definitions for Google voiceHAT v1 soundcard overlay
12624 +/dts-v1/;
12625 +/plugin/;
12626 +
12627 +/ {
12628 + compatible = "brcm,bcm2835";
12629 +
12630 + fragment@0 {
12631 + target = <&i2s>;
12632 + __overlay__ {
12633 + status = "okay";
12634 + };
12635 + };
12636 +
12637 + fragment@1 {
12638 + target = <&gpio>;
12639 + __overlay__ {
12640 + googlevoicehat_pins: googlevoicehat_pins {
12641 + brcm,pins = <16>;
12642 + brcm,function = <1>; /* out */
12643 + brcm,pull = <0>; /* up */
12644 + };
12645 + };
12646 + };
12647 +
12648 +
12649 + fragment@2 {
12650 + target-path = "/";
12651 + __overlay__ {
12652 + voicehat-codec {
12653 + #sound-dai-cells = <0>;
12654 + compatible = "google,voicehat";
12655 + pinctrl-names = "default";
12656 + pinctrl-0 = <&googlevoicehat_pins>;
12657 + sdmode-gpios= <&gpio 16 0>;
12658 + status = "okay";
12659 + };
12660 + };
12661 + };
12662 +
12663 + fragment@3 {
12664 + target = <&sound>;
12665 + __overlay__ {
12666 + compatible = "googlevoicehat,googlevoicehat-soundcard";
12667 + i2s-controller = <&i2s>;
12668 + status = "okay";
12669 + };
12670 + };
12671 +};
12672 diff --git a/arch/arm/boot/dts/overlays/gpio-fan-overlay.dts b/arch/arm/boot/dts/overlays/gpio-fan-overlay.dts
12673 new file mode 100644
12674 index 000000000000..77a7bbb41e3b
12675 --- /dev/null
12676 +++ b/arch/arm/boot/dts/overlays/gpio-fan-overlay.dts
12677 @@ -0,0 +1,79 @@
12678 +/*
12679 + * Overlay for the Raspberry Pi GPIO Fan @ BCM GPIO12.
12680 + * References:
12681 + * - https://www.raspberrypi.org/forums/viewtopic.php?f=107&p=1367135#p1365084
12682 + *
12683 + * Optional parameters:
12684 + * - "gpiopin" - BCM number of the pin driving the fan, default 12 (GPIO12);
12685 + * - "temp" - CPU temperature at which fan is started in millicelsius, default 55000;
12686 + *
12687 + * Requires:
12688 + * - kernel configurations: CONFIG_SENSORS_GPIO_FAN=m;
12689 + * - kernel rebuild;
12690 + * - N-MOSFET connected to gpiopin, 2N7002-[https://en.wikipedia.org/wiki/2N7000];
12691 + * - DC Fan connected to N-MOSFET Drain terminal, a 12V fan is working fine and quite silently;
12692 + * [https://www.tme.eu/en/details/ee40101s1-999-a/dc12v-fans/sunon/ee40101s1-1000u-999/]
12693 + *
12694 + * ┌─────────────────────┐
12695 + * │Fan negative terminal│
12696 + * └┬────────────────────┘
12697 + * │D
12698 + * G │──┘
12699 + * [GPIO12]──────┤ │<─┐ 2N7002
12700 + * │──┤
12701 + * │S
12702 + * ─┴─
12703 + * GND
12704 + *
12705 + * Build:
12706 + * - `sudo dtc -W no-unit_address_vs_reg -@ -I dts -O dtb -o /boot/overlays/gpio-fan.dtbo gpio-fan-overlay.dts`
12707 + * Activate:
12708 + * - sudo nano /boot/config.txt add "dtoverlay=gpio-fan" or "dtoverlay=gpio-fan,gpiopin=12,temp=45000"
12709 + * or
12710 + * - sudo sh -c 'printf "\n# Enable PI GPIO-Fan Default\ndtoverlay=gpio-fan\n" >> /boot/config.txt'
12711 + * - sudo sh -c 'printf "\n# Enable PI GPIO-Fan Custom\ndtoverlay=gpio-fan,gpiopin=12,temp=45000\n" >> /boot/config.txt'
12712 + *
12713 + */
12714 +/dts-v1/;
12715 +/plugin/;
12716 +
12717 +/ {
12718 + compatible = "brcm,bcm2835";
12719 +
12720 + fragment@0 {
12721 + target-path = "/";
12722 + __overlay__ {
12723 + fan0: gpio-fan@0 {
12724 + compatible = "gpio-fan";
12725 + gpios = <&gpio 12 0>;
12726 + gpio-fan,speed-map = <0 0>,
12727 + <5000 1>;
12728 + #cooling-cells = <2>;
12729 + };
12730 + };
12731 + };
12732 +
12733 + fragment@1 {
12734 + target = <&cpu_thermal>;
12735 + polling-delay = <2000>; /* milliseconds */
12736 + __overlay__ {
12737 + trips {
12738 + cpu_hot: trip-point@0 {
12739 + temperature = <55000>; /* (millicelsius) Fan started at 55°C */
12740 + hysteresis = <10000>; /* (millicelsius) Fan stopped at 45°C */
12741 + type = "active";
12742 + };
12743 + };
12744 + cooling-maps {
12745 + map0 {
12746 + trip = <&cpu_hot>;
12747 + cooling-device = <&fan0 1 1>;
12748 + };
12749 + };
12750 + };
12751 + };
12752 + __overrides__ {
12753 + gpiopin = <&fan0>,"gpios:4", <&fan0>,"brcm,pins:0";
12754 + temp = <&cpu_hot>,"temperature:0";
12755 + };
12756 +};
12757 diff --git a/arch/arm/boot/dts/overlays/gpio-ir-overlay.dts b/arch/arm/boot/dts/overlays/gpio-ir-overlay.dts
12758 new file mode 100644
12759 index 000000000000..162b6ce07dc9
12760 --- /dev/null
12761 +++ b/arch/arm/boot/dts/overlays/gpio-ir-overlay.dts
12762 @@ -0,0 +1,49 @@
12763 +// Definitions for ir-gpio module
12764 +/dts-v1/;
12765 +/plugin/;
12766 +
12767 +/ {
12768 + compatible = "brcm,bcm2835";
12769 +
12770 + fragment@0 {
12771 + target-path = "/";
12772 + __overlay__ {
12773 + gpio_ir: ir-receiver@12 {
12774 + compatible = "gpio-ir-receiver";
12775 + pinctrl-names = "default";
12776 + pinctrl-0 = <&gpio_ir_pins>;
12777 +
12778 + // pin number, high or low
12779 + gpios = <&gpio 18 1>;
12780 +
12781 + // parameter for keymap name
12782 + linux,rc-map-name = "rc-rc6-mce";
12783 +
12784 + status = "okay";
12785 + };
12786 + };
12787 + };
12788 +
12789 + fragment@1 {
12790 + target = <&gpio>;
12791 + __overlay__ {
12792 + gpio_ir_pins: gpio_ir_pins@12 {
12793 + brcm,pins = <18>; // pin 18
12794 + brcm,function = <0>; // in
12795 + brcm,pull = <2>; // up
12796 + };
12797 + };
12798 + };
12799 +
12800 + __overrides__ {
12801 + // parameters
12802 + gpio_pin = <&gpio_ir>,"gpios:4", // pin number
12803 + <&gpio_ir>,"reg:0",
12804 + <&gpio_ir_pins>,"brcm,pins:0",
12805 + <&gpio_ir_pins>,"reg:0";
12806 + gpio_pull = <&gpio_ir_pins>,"brcm,pull:0"; // pull-up/down state
12807 + invert = <&gpio_ir>,"gpios:8"; // 0 = active high input
12808 +
12809 + rc-map-name = <&gpio_ir>,"linux,rc-map-name"; // default rc map
12810 + };
12811 +};
12812 diff --git a/arch/arm/boot/dts/overlays/gpio-ir-tx-overlay.dts b/arch/arm/boot/dts/overlays/gpio-ir-tx-overlay.dts
12813 new file mode 100644
12814 index 000000000000..3625431b7560
12815 --- /dev/null
12816 +++ b/arch/arm/boot/dts/overlays/gpio-ir-tx-overlay.dts
12817 @@ -0,0 +1,36 @@
12818 +/dts-v1/;
12819 +/plugin/;
12820 +
12821 +/ {
12822 + compatible = "brcm,bcm2835";
12823 +
12824 + fragment@0 {
12825 + target = <&gpio>;
12826 + __overlay__ {
12827 + gpio_ir_tx_pins: gpio_ir_tx_pins@12 {
12828 + brcm,pins = <18>;
12829 + brcm,function = <1>; // out
12830 + };
12831 + };
12832 + };
12833 +
12834 + fragment@1 {
12835 + target-path = "/";
12836 + __overlay__ {
12837 + gpio_ir_tx: gpio-ir-transmitter@12 {
12838 + compatible = "gpio-ir-tx";
12839 + pinctrl-names = "default";
12840 + pinctrl-0 = <&gpio_ir_tx_pins>;
12841 + gpios = <&gpio 18 0>;
12842 + };
12843 + };
12844 + };
12845 +
12846 + __overrides__ {
12847 + gpio_pin = <&gpio_ir_tx>, "gpios:4", // pin number
12848 + <&gpio_ir_tx>, "reg:0",
12849 + <&gpio_ir_tx_pins>, "brcm,pins:0",
12850 + <&gpio_ir_tx_pins>, "reg:0";
12851 + invert = <&gpio_ir_tx>, "gpios:8"; // 1 = active low
12852 + };
12853 +};
12854 diff --git a/arch/arm/boot/dts/overlays/gpio-key-overlay.dts b/arch/arm/boot/dts/overlays/gpio-key-overlay.dts
12855 new file mode 100644
12856 index 000000000000..2e7253d1d0ab
12857 --- /dev/null
12858 +++ b/arch/arm/boot/dts/overlays/gpio-key-overlay.dts
12859 @@ -0,0 +1,48 @@
12860 +// Definitions for gpio-key module
12861 +/dts-v1/;
12862 +/plugin/;
12863 +
12864 +/ {
12865 + compatible = "brcm,bcm2835";
12866 +
12867 + fragment@0 {
12868 + // Configure the gpio pin controller
12869 + target = <&gpio>;
12870 + __overlay__ {
12871 + pin_state: button_pins@0 {
12872 + brcm,pins = <3>; // gpio number
12873 + brcm,function = <0>; // 0 = input, 1 = output
12874 + brcm,pull = <2>; // 0 = none, 1 = pull down, 2 = pull up
12875 + };
12876 + };
12877 + };
12878 + fragment@1 {
12879 + target-path = "/";
12880 + __overlay__ {
12881 + button: button@0 {
12882 + compatible = "gpio-keys";
12883 + pinctrl-names = "default";
12884 + pinctrl-0 = <&pin_state>;
12885 + status = "okay";
12886 +
12887 + key: key {
12888 + linux,code = <116>;
12889 + gpios = <&gpio 3 1>;
12890 + label = "KEY_POWER";
12891 + };
12892 + };
12893 + };
12894 + };
12895 +
12896 + __overrides__ {
12897 + gpio = <&key>,"gpios:4",
12898 + <&button>,"reg:0",
12899 + <&pin_state>,"brcm,pins:0",
12900 + <&pin_state>,"reg:0";
12901 + label = <&key>,"label";
12902 + keycode = <&key>,"linux,code:0";
12903 + gpio_pull = <&pin_state>,"brcm,pull:0";
12904 + active_low = <&key>,"gpios:8";
12905 + };
12906 +
12907 +};
12908 diff --git a/arch/arm/boot/dts/overlays/gpio-led-overlay.dts b/arch/arm/boot/dts/overlays/gpio-led-overlay.dts
12909 new file mode 100755
12910 index 000000000000..d8e9d53f1b61
12911 --- /dev/null
12912 +++ b/arch/arm/boot/dts/overlays/gpio-led-overlay.dts
12913 @@ -0,0 +1,97 @@
12914 +// SPDX-License-Identifier: GPL-2.0-or-later
12915 +/*
12916 + * gpio-led - generic connection of kernel's LED framework to the RPI's GPIO.
12917 + * Copyright (C) 2021 House Gordon Software Company Ltd. <assafgordon@gmail.com>
12918 + *
12919 + * Based on information from:
12920 + * https://mjoldfield.com/atelier/2017/03/rpi-devicetree.html
12921 + * https://www.raspberrypi.org/documentation/configuration/device-tree.md
12922 + * https://www.kernel.org/doc/html/latest/leds/index.html
12923 + *
12924 + * compile with:
12925 + * dtc -@ -Hepapr -I dts -O dtb -o gpio-led.dtbo gpio-led-overlay.dts
12926 + *
12927 + * There will be some warnings (can be ignored):
12928 + * Warning (label_is_string): /__overrides__:label: property is not a string
12929 + * Warning (unit_address_vs_reg): /fragment@0/__overlay__/led_pins@0:
12930 + * node has a unit name, but no reg property
12931 + * Warning (unit_address_vs_reg): /fragment@1/__overlay__/leds@0:
12932 + * node has a unit name, but no reg property
12933 + * Warning (gpios_property): /__overrides__: Missing property
12934 + * '#gpio-cells' in node /fragment@1/__overlay__/leds@0/led
12935 + * or bad phandle (referred from gpio[0])
12936 + *
12937 + * Typical electrical connection is:
12938 + * RPI-GPIO.19 -> LED -> 300ohm resister -> RPI-GND
12939 + * The GPIO pin number can be changed with the 'gpio=' parameter.
12940 + *
12941 + * Test from user-space with:
12942 + * # if nothing is shown, the overlay file isn't found in /boot/overlays
12943 + * dtoverlay -a | grep gpio-led
12944 + *
12945 + * # Load the overlay
12946 + * dtoverlay gpio-led label=moo gpio=19
12947 + *
12948 + * # if nothing is shown, the overlay wasn't loaded successfully
12949 + * dtoverlay -l | grep gpio-led
12950 + *
12951 + * echo 1 > /sys/class/leds/moo/brightness
12952 + * echo 0 > /sys/class/leds/moo/brightness
12953 + * echo cpu > /sys/class/leds/moo/trigger
12954 + * echo heartbeat > /sys/class/leds/moo/trigger
12955 + *
12956 + * # unload the overlay
12957 + * dtoverlay -r gpio-led
12958 + *
12959 + * To load in /boot/config.txt add lines such as:
12960 + * dtoverlay=gpio-led,gpio=19,label=heart,trigger=heartbeat
12961 + * dtoverlay=gpio-led,gpio=26,label=brain,trigger=cpu
12962 + */
12963 +
12964 +/dts-v1/;
12965 +/plugin/;
12966 +
12967 +/ {
12968 + compatible = "brcm,bcm2835";
12969 +
12970 + fragment@0 {
12971 + // Configure the gpio pin controller
12972 + target = <&gpio>;
12973 + __overlay__ {
12974 + led_pin: led_pins@19 {
12975 + brcm,pins = <19>; // gpio number
12976 + brcm,function = <1>; // 0 = input, 1 = output
12977 + brcm,pull = <0>; // 0 = none, 1 = pull down, 2 = pull up
12978 + };
12979 + };
12980 + };
12981 + fragment@1 {
12982 + target-path = "/";
12983 + __overlay__ {
12984 + leds: leds@0 {
12985 + compatible = "gpio-leds";
12986 + pinctrl-names = "default";
12987 + pinctrl-0 = <&led_pin>;
12988 + status = "okay";
12989 +
12990 + led: led {
12991 + label = "myled1";
12992 + gpios = <&gpio 19 0>;
12993 + linux,default-trigger = "none";
12994 + };
12995 + };
12996 + };
12997 + };
12998 +
12999 + __overrides__ {
13000 + gpio = <&led>,"gpios:4",
13001 + <&leds>,"reg:0",
13002 + <&led_pin>,"brcm,pins:0",
13003 + <&led_pin>,"reg:0";
13004 + label = <&led>,"label";
13005 + active_low = <&led>,"gpios:8";
13006 + trigger = <&led>,"linux,default-trigger";
13007 + };
13008 +
13009 +};
13010 +
13011 diff --git a/arch/arm/boot/dts/overlays/gpio-no-bank0-irq-overlay.dts b/arch/arm/boot/dts/overlays/gpio-no-bank0-irq-overlay.dts
13012 new file mode 100755
13013 index 000000000000..96cbe80820b7
13014 --- /dev/null
13015 +++ b/arch/arm/boot/dts/overlays/gpio-no-bank0-irq-overlay.dts
13016 @@ -0,0 +1,14 @@
13017 +/dts-v1/;
13018 +/plugin/;
13019 +
13020 +/ {
13021 + compatible = "brcm,bcm2835";
13022 +
13023 + fragment@0 {
13024 + // Configure the gpio pin controller
13025 + target = <&gpio>;
13026 + __overlay__ {
13027 + interrupts = <255 255>, <2 18>;
13028 + };
13029 + };
13030 +};
13031 diff --git a/arch/arm/boot/dts/overlays/gpio-no-irq-overlay.dts b/arch/arm/boot/dts/overlays/gpio-no-irq-overlay.dts
13032 new file mode 100644
13033 index 000000000000..55f9bff3a8f6
13034 --- /dev/null
13035 +++ b/arch/arm/boot/dts/overlays/gpio-no-irq-overlay.dts
13036 @@ -0,0 +1,14 @@
13037 +/dts-v1/;
13038 +/plugin/;
13039 +
13040 +/ {
13041 + compatible = "brcm,bcm2835";
13042 +
13043 + fragment@0 {
13044 + // Configure the gpio pin controller
13045 + target = <&gpio>;
13046 + __overlay__ {
13047 + interrupts;
13048 + };
13049 + };
13050 +};
13051 diff --git a/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts b/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts
13052 new file mode 100644
13053 index 000000000000..416aa2bc797a
13054 --- /dev/null
13055 +++ b/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts
13056 @@ -0,0 +1,37 @@
13057 +// Definitions for gpio-poweroff module
13058 +/dts-v1/;
13059 +/plugin/;
13060 +
13061 +/ {
13062 + compatible = "brcm,bcm2835";
13063 +
13064 + fragment@0 {
13065 + target-path = "/";
13066 + __overlay__ {
13067 + power_ctrl: power_ctrl {
13068 + compatible = "gpio-poweroff";
13069 + gpios = <&gpio 26 0>;
13070 + force;
13071 + };
13072 + };
13073 + };
13074 +
13075 + fragment@1 {
13076 + target = <&gpio>;
13077 + __overlay__ {
13078 + power_ctrl_pins: power_ctrl_pins {
13079 + brcm,pins = <26>;
13080 + brcm,function = <1>; // out
13081 + };
13082 + };
13083 + };
13084 +
13085 + __overrides__ {
13086 + gpiopin = <&power_ctrl>,"gpios:4",
13087 + <&power_ctrl_pins>,"brcm,pins:0";
13088 + active_low = <&power_ctrl>,"gpios:8";
13089 + input = <&power_ctrl>,"input?";
13090 + export = <&power_ctrl>,"export?";
13091 + timeout_ms = <&power_ctrl>,"timeout-ms:0";
13092 + };
13093 +};
13094 diff --git a/arch/arm/boot/dts/overlays/gpio-shutdown-overlay.dts b/arch/arm/boot/dts/overlays/gpio-shutdown-overlay.dts
13095 new file mode 100644
13096 index 000000000000..da148064aedd
13097 --- /dev/null
13098 +++ b/arch/arm/boot/dts/overlays/gpio-shutdown-overlay.dts
13099 @@ -0,0 +1,86 @@
13100 +// Definitions for gpio-poweroff module
13101 +/dts-v1/;
13102 +/plugin/;
13103 +
13104 +// This overlay sets up an input device that generates KEY_POWER events
13105 +// when a given GPIO pin changes. It defaults to using GPIO3, which can
13106 +// also be used to wake up (start) the Rpi again after shutdown.
13107 +// Raspberry Pi 1 Model B rev 1 can be wake up only by GPIO1 pin, so for
13108 +// these boards change default GPIO pin to 1 via gpio_pin parameter. Since
13109 +// wakeup is active-low, this defaults to active-low with a pullup
13110 +// enabled, but all of this can be changed using overlay parameters (but
13111 +// note that GPIO3 has an external pullup on at least some boards).
13112 +
13113 +/ {
13114 + compatible = "brcm,bcm2835";
13115 +
13116 + fragment@0 {
13117 + // Configure the gpio pin controller
13118 + target = <&gpio>;
13119 + __overlay__ {
13120 + // Define a pinctrl state, that sets up the gpio
13121 + // as an input with a pullup enabled. This does
13122 + // not take effect by itself, only when referenced
13123 + // by a "pinctrl client", as is done below. See:
13124 + // https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
13125 + // https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/brcm,bcm2835-gpio.txt
13126 + pin_state: shutdown_button_pins@3 {
13127 + brcm,pins = <3>; // gpio number
13128 + brcm,function = <0>; // 0 = input, 1 = output
13129 + brcm,pull = <2>; // 0 = none, 1 = pull down, 2 = pull up
13130 + };
13131 + };
13132 + };
13133 + fragment@1 {
13134 + // Add a new device to the /soc devicetree node
13135 + target-path = "/soc";
13136 + __overlay__ {
13137 + shutdown_button: shutdown_button@3 {
13138 + // Let the gpio-keys driver handle this device. See:
13139 + // https://www.kernel.org/doc/Documentation/devicetree/bindings/input/gpio-keys.txt
13140 + compatible = "gpio-keys";
13141 +
13142 + // Declare a single pinctrl state (referencing the one declared above) and name it
13143 + // default, so it is activated automatically.
13144 + pinctrl-names = "default";
13145 + pinctrl-0 = <&pin_state>;
13146 +
13147 + // Enable this device
13148 + status = "okay";
13149 +
13150 + // Define a single key, called "shutdown" that monitors the gpio and sends KEY_POWER
13151 + // (keycode 116, see
13152 + // https://github.com/torvalds/linux/blob/v4.12/include/uapi/linux/input-event-codes.h#L190)
13153 + button: shutdown {
13154 + label = "shutdown";
13155 + linux,code = <116>; // KEY_POWER
13156 + gpios = <&gpio 3 1>;
13157 + debounce-interval = <100>; // ms
13158 + };
13159 + };
13160 + };
13161 + };
13162 +
13163 + // This defines parameters that can be specified when loading
13164 + // the overlay. Each foo = line specifies one parameter, named
13165 + // foo. The rest of the specification gives properties where the
13166 + // parameter value is inserted into (changing the values above
13167 + // or adding new ones).
13168 + __overrides__ {
13169 + // Allow overriding the GPIO number.
13170 + gpio_pin = <&button>,"gpios:4",
13171 + <&shutdown_button>,"reg:0",
13172 + <&pin_state>,"reg:0",
13173 + <&pin_state>,"brcm,pins:0";
13174 +
13175 + // Allow changing the internal pullup/down state. 0 = none, 1 = pulldown, 2 = pullup
13176 + // Note that GPIO3 and GPIO2 are the I2c pins and have an external pullup (at least
13177 + // on some boards). Same applies for GPIO1 on Raspberry Pi 1 Model B rev 1.
13178 + gpio_pull = <&pin_state>,"brcm,pull:0";
13179 +
13180 + // Allow setting the active_low flag. 0 = active high, 1 = active low
13181 + active_low = <&button>,"gpios:8";
13182 + debounce = <&button>,"debounce-interval:0";
13183 + };
13184 +
13185 +};
13186 diff --git a/arch/arm/boot/dts/overlays/hd44780-lcd-overlay.dts b/arch/arm/boot/dts/overlays/hd44780-lcd-overlay.dts
13187 new file mode 100644
13188 index 000000000000..ee726669ff51
13189 --- /dev/null
13190 +++ b/arch/arm/boot/dts/overlays/hd44780-lcd-overlay.dts
13191 @@ -0,0 +1,46 @@
13192 +/dts-v1/;
13193 +/plugin/;
13194 +
13195 +/ {
13196 + compatible = "brcm,bcm2835";
13197 +
13198 + fragment@0 {
13199 + target-path = "/";
13200 + __overlay__ {
13201 + lcd_screen: auxdisplay {
13202 + compatible = "hit,hd44780";
13203 +
13204 + data-gpios = <&gpio 6 0>,
13205 + <&gpio 13 0>,
13206 + <&gpio 19 0>,
13207 + <&gpio 26 0>;
13208 + enable-gpios = <&gpio 21 0>;
13209 + rs-gpios = <&gpio 20 0>;
13210 +
13211 + display-height-chars = <2>;
13212 + display-width-chars = <16>;
13213 + };
13214 +
13215 + };
13216 + };
13217 +
13218 + fragment@1 {
13219 + target = <&lcd_screen>;
13220 + __dormant__ {
13221 + backlight-gpios = <&gpio 12 0>;
13222 + };
13223 + };
13224 +
13225 + __overrides__ {
13226 + pin_d4 = <&lcd_screen>,"data-gpios:4";
13227 + pin_d5 = <&lcd_screen>,"data-gpios:16";
13228 + pin_d6 = <&lcd_screen>,"data-gpios:28";
13229 + pin_d7 = <&lcd_screen>,"data-gpios:40";
13230 + pin_en = <&lcd_screen>,"enable-gpios:4";
13231 + pin_rs = <&lcd_screen>,"rs-gpios:4";
13232 + pin_bl = <0>,"+1", <&lcd_screen>,"backlight-gpios:4";
13233 + display_height = <&lcd_screen>,"display-height-chars:0";
13234 + display_width = <&lcd_screen>,"display-width-chars:0";
13235 + };
13236 +
13237 +};
13238 diff --git a/arch/arm/boot/dts/overlays/hdmi-backlight-hwhack-gpio-overlay.dts b/arch/arm/boot/dts/overlays/hdmi-backlight-hwhack-gpio-overlay.dts
13239 new file mode 100644
13240 index 000000000000..50b9a2665c80
13241 --- /dev/null
13242 +++ b/arch/arm/boot/dts/overlays/hdmi-backlight-hwhack-gpio-overlay.dts
13243 @@ -0,0 +1,47 @@
13244 +/*
13245 + * Devicetree overlay for GPIO based backlight on/off capability.
13246 + *
13247 + * Use this if you have one of those HDMI displays whose backlight cannot be
13248 + * controlled via DPMS over HDMI and plan to do a little soldering to use an
13249 + * RPi gpio pin for on/off switching.
13250 + *
13251 + * See: https://www.waveshare.com/wiki/7inch_HDMI_LCD_(C)#Backlight_Control
13252 + *
13253 + */
13254 +/dts-v1/;
13255 +/plugin/;
13256 +
13257 +/ {
13258 + compatible = "brcm,bcm2835";
13259 +
13260 + fragment@1 {
13261 + target = <&gpio>;
13262 + __overlay__ {
13263 + hdmi_backlight_hwhack_gpio_pins: hdmi_backlight_hwhack_gpio_pins {
13264 + brcm,pins = <17>;
13265 + brcm,function = <1>; /* out */
13266 + };
13267 + };
13268 + };
13269 +
13270 + fragment@2 {
13271 + target-path = "/";
13272 + __overlay__ {
13273 + hdmi_backlight_hwhack_gpio: hdmi_backlight_hwhack_gpio {
13274 + compatible = "gpio-backlight";
13275 +
13276 + pinctrl-names = "default";
13277 + pinctrl-0 = <&hdmi_backlight_hwhack_gpio_pins>;
13278 +
13279 + gpios = <&gpio 17 0>;
13280 + default-on;
13281 + };
13282 + };
13283 + };
13284 +
13285 + __overrides__ {
13286 + gpio_pin = <&hdmi_backlight_hwhack_gpio>,"gpios:4",
13287 + <&hdmi_backlight_hwhack_gpio_pins>,"brcm,pins:0";
13288 + active_low = <&hdmi_backlight_hwhack_gpio>,"gpios:8";
13289 + };
13290 +};
13291 diff --git a/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
13292 new file mode 100644
13293 index 000000000000..142518ab348b
13294 --- /dev/null
13295 +++ b/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
13296 @@ -0,0 +1,39 @@
13297 +// Definitions for HiFiBerry Amp/Amp+
13298 +/dts-v1/;
13299 +/plugin/;
13300 +
13301 +/ {
13302 + compatible = "brcm,bcm2835";
13303 +
13304 + fragment@0 {
13305 + target = <&i2s>;
13306 + __overlay__ {
13307 + status = "okay";
13308 + };
13309 + };
13310 +
13311 + fragment@1 {
13312 + target = <&i2c1>;
13313 + __overlay__ {
13314 + #address-cells = <1>;
13315 + #size-cells = <0>;
13316 + status = "okay";
13317 +
13318 + tas5713@1b {
13319 + #sound-dai-cells = <0>;
13320 + compatible = "ti,tas5713";
13321 + reg = <0x1b>;
13322 + status = "okay";
13323 + };
13324 + };
13325 + };
13326 +
13327 + fragment@2 {
13328 + target = <&sound>;
13329 + __overlay__ {
13330 + compatible = "hifiberry,hifiberry-amp";
13331 + i2s-controller = <&i2s>;
13332 + status = "okay";
13333 + };
13334 + };
13335 +};
13336 diff --git a/arch/arm/boot/dts/overlays/hifiberry-amp100-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-amp100-overlay.dts
13337 new file mode 100644
13338 index 000000000000..ebdef55d6110
13339 --- /dev/null
13340 +++ b/arch/arm/boot/dts/overlays/hifiberry-amp100-overlay.dts
13341 @@ -0,0 +1,64 @@
13342 +// Definitions for HiFiBerry AMP100
13343 +/dts-v1/;
13344 +/plugin/;
13345 +
13346 +/ {
13347 + compatible = "brcm,bcm2835";
13348 +
13349 + fragment@0 {
13350 + target-path = "/";
13351 + __overlay__ {
13352 + dacpro_osc: dacpro_osc {
13353 + compatible = "hifiberry,dacpro-clk";
13354 + #clock-cells = <0>;
13355 + };
13356 + };
13357 + };
13358 +
13359 + fragment@1 {
13360 + target = <&i2s>;
13361 + __overlay__ {
13362 + status = "okay";
13363 + };
13364 + };
13365 +
13366 + fragment@2 {
13367 + target = <&i2c1>;
13368 + __overlay__ {
13369 + #address-cells = <1>;
13370 + #size-cells = <0>;
13371 + status = "okay";
13372 +
13373 + pcm5122@4d {
13374 + #sound-dai-cells = <0>;
13375 + compatible = "ti,pcm5122";
13376 + reg = <0x4d>;
13377 + clocks = <&dacpro_osc>;
13378 + AVDD-supply = <&vdd_3v3_reg>;
13379 + DVDD-supply = <&vdd_3v3_reg>;
13380 + CPVDD-supply = <&vdd_3v3_reg>;
13381 + status = "okay";
13382 + };
13383 + };
13384 + };
13385 +
13386 + fragment@3 {
13387 + target = <&sound>;
13388 + hifiberry_dacplus: __overlay__ {
13389 + compatible = "hifiberry,hifiberry-dacplus";
13390 + i2s-controller = <&i2s>;
13391 + status = "okay";
13392 + mute-gpio = <&gpio 4 0>;
13393 + reset-gpio = <&gpio 17 0x11>;
13394 + };
13395 + };
13396 +
13397 + __overrides__ {
13398 + 24db_digital_gain =
13399 + <&hifiberry_dacplus>,"hifiberry,24db_digital_gain?";
13400 + slave = <&hifiberry_dacplus>,"hifiberry-dacplus,slave?";
13401 + leds_off = <&hifiberry_dacplus>,"hifiberry-dacplus,leds_off?";
13402 + mute_ext_ctl = <&hifiberry_dacplus>,"hifiberry-dacplus,mute_ext_ctl:0";
13403 + auto_mute = <&hifiberry_dacplus>,"hifiberry-dacplus,auto_mute?";
13404 + };
13405 +};
13406 diff --git a/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
13407 new file mode 100644
13408 index 000000000000..ea8a6c8f36c0
13409 --- /dev/null
13410 +++ b/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
13411 @@ -0,0 +1,34 @@
13412 +// Definitions for HiFiBerry DAC
13413 +/dts-v1/;
13414 +/plugin/;
13415 +
13416 +/ {
13417 + compatible = "brcm,bcm2835";
13418 +
13419 + fragment@0 {
13420 + target = <&i2s>;
13421 + __overlay__ {
13422 + status = "okay";
13423 + };
13424 + };
13425 +
13426 + fragment@1 {
13427 + target-path = "/";
13428 + __overlay__ {
13429 + pcm5102a-codec {
13430 + #sound-dai-cells = <0>;
13431 + compatible = "ti,pcm5102a";
13432 + status = "okay";
13433 + };
13434 + };
13435 + };
13436 +
13437 + fragment@2 {
13438 + target = <&sound>;
13439 + __overlay__ {
13440 + compatible = "hifiberry,hifiberry-dac";
13441 + i2s-controller = <&i2s>;
13442 + status = "okay";
13443 + };
13444 + };
13445 +};
13446 diff --git a/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
13447 new file mode 100644
13448 index 000000000000..ff19015ba656
13449 --- /dev/null
13450 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
13451 @@ -0,0 +1,65 @@
13452 +// Definitions for HiFiBerry DAC+
13453 +/dts-v1/;
13454 +/plugin/;
13455 +
13456 +/ {
13457 + compatible = "brcm,bcm2835";
13458 +
13459 + fragment@0 {
13460 + target-path = "/";
13461 + __overlay__ {
13462 + dacpro_osc: dacpro_osc {
13463 + compatible = "hifiberry,dacpro-clk";
13464 + #clock-cells = <0>;
13465 + };
13466 + };
13467 + };
13468 +
13469 + fragment@1 {
13470 + target = <&i2s>;
13471 + __overlay__ {
13472 + status = "okay";
13473 + };
13474 + };
13475 +
13476 + fragment@2 {
13477 + target = <&i2c1>;
13478 + __overlay__ {
13479 + #address-cells = <1>;
13480 + #size-cells = <0>;
13481 + status = "okay";
13482 +
13483 + pcm5122@4d {
13484 + #sound-dai-cells = <0>;
13485 + compatible = "ti,pcm5122";
13486 + reg = <0x4d>;
13487 + clocks = <&dacpro_osc>;
13488 + AVDD-supply = <&vdd_3v3_reg>;
13489 + DVDD-supply = <&vdd_3v3_reg>;
13490 + CPVDD-supply = <&vdd_3v3_reg>;
13491 + status = "okay";
13492 + };
13493 + hpamp: hpamp@60 {
13494 + compatible = "ti,tpa6130a2";
13495 + reg = <0x60>;
13496 + status = "disabled";
13497 + };
13498 + };
13499 + };
13500 +
13501 + fragment@3 {
13502 + target = <&sound>;
13503 + hifiberry_dacplus: __overlay__ {
13504 + compatible = "hifiberry,hifiberry-dacplus";
13505 + i2s-controller = <&i2s>;
13506 + status = "okay";
13507 + };
13508 + };
13509 +
13510 + __overrides__ {
13511 + 24db_digital_gain =
13512 + <&hifiberry_dacplus>,"hifiberry,24db_digital_gain?";
13513 + slave = <&hifiberry_dacplus>,"hifiberry-dacplus,slave?";
13514 + leds_off = <&hifiberry_dacplus>,"hifiberry-dacplus,leds_off?";
13515 + };
13516 +};
13517 diff --git a/arch/arm/boot/dts/overlays/hifiberry-dacplusadc-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-dacplusadc-overlay.dts
13518 new file mode 100644
13519 index 000000000000..540563dec10f
13520 --- /dev/null
13521 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplusadc-overlay.dts
13522 @@ -0,0 +1,72 @@
13523 +// Definitions for HiFiBerry DAC+ADC
13524 +/dts-v1/;
13525 +/plugin/;
13526 +
13527 +/ {
13528 + compatible = "brcm,bcm2835";
13529 +
13530 + fragment@0 {
13531 + target-path = "/";
13532 + __overlay__ {
13533 + dacpro_osc: dacpro_osc {
13534 + compatible = "hifiberry,dacpro-clk";
13535 + #clock-cells = <0>;
13536 + };
13537 + };
13538 + };
13539 +
13540 + fragment@1 {
13541 + target = <&i2s>;
13542 + __overlay__ {
13543 + status = "okay";
13544 + };
13545 + };
13546 +
13547 + fragment@2 {
13548 + target = <&i2c1>;
13549 + __overlay__ {
13550 + #address-cells = <1>;
13551 + #size-cells = <0>;
13552 + status = "okay";
13553 +
13554 + pcm_codec: pcm5122@4d {
13555 + #sound-dai-cells = <0>;
13556 + compatible = "ti,pcm5122";
13557 + reg = <0x4d>;
13558 + clocks = <&dacpro_osc>;
13559 + AVDD-supply = <&vdd_3v3_reg>;
13560 + DVDD-supply = <&vdd_3v3_reg>;
13561 + CPVDD-supply = <&vdd_3v3_reg>;
13562 + status = "okay";
13563 + };
13564 + };
13565 + };
13566 +
13567 + fragment@3 {
13568 + target-path = "/";
13569 + __overlay__ {
13570 + dmic {
13571 + #sound-dai-cells = <0>;
13572 + compatible = "dmic-codec";
13573 + num-channels = <2>;
13574 + status = "okay";
13575 + };
13576 + };
13577 + };
13578 +
13579 + fragment@4 {
13580 + target = <&sound>;
13581 + hifiberry_dacplusadc: __overlay__ {
13582 + compatible = "hifiberry,hifiberry-dacplusadc";
13583 + i2s-controller = <&i2s>;
13584 + status = "okay";
13585 + };
13586 + };
13587 +
13588 + __overrides__ {
13589 + 24db_digital_gain =
13590 + <&hifiberry_dacplusadc>,"hifiberry,24db_digital_gain?";
13591 + slave = <&hifiberry_dacplusadc>,"hifiberry-dacplusadc,slave?";
13592 + leds_off = <&hifiberry_dacplusadc>,"hifiberry-dacplusadc,leds_off?";
13593 + };
13594 +};
13595 diff --git a/arch/arm/boot/dts/overlays/hifiberry-dacplusadcpro-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-dacplusadcpro-overlay.dts
13596 new file mode 100644
13597 index 000000000000..cafa2ccd7ff7
13598 --- /dev/null
13599 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplusadcpro-overlay.dts
13600 @@ -0,0 +1,65 @@
13601 +// Definitions for HiFiBerry DAC+ADC PRO
13602 +/dts-v1/;
13603 +/plugin/;
13604 +
13605 +/ {
13606 + compatible = "brcm,bcm2835";
13607 +
13608 + fragment@0 {
13609 + target-path = "/";
13610 + __overlay__ {
13611 + dacpro_osc: dacpro_osc {
13612 + compatible = "hifiberry,dacpro-clk";
13613 + #clock-cells = <0>;
13614 + };
13615 + };
13616 + };
13617 +
13618 + fragment@1 {
13619 + target = <&i2s>;
13620 + __overlay__ {
13621 + status = "okay";
13622 + };
13623 + };
13624 +
13625 + fragment@2 {
13626 + target = <&i2c1>;
13627 + __overlay__ {
13628 + #address-cells = <1>;
13629 + #size-cells = <0>;
13630 + status = "okay";
13631 +
13632 + hb_dac: pcm5122@4d {
13633 + #sound-dai-cells = <0>;
13634 + compatible = "ti,pcm5122";
13635 + reg = <0x4d>;
13636 + clocks = <&dacpro_osc>;
13637 + status = "okay";
13638 + };
13639 + hb_adc: pcm186x@4a {
13640 + #sound-dai-cells = <0>;
13641 + compatible = "ti,pcm1863";
13642 + reg = <0x4a>;
13643 + clocks = <&dacpro_osc>;
13644 + status = "okay";
13645 + };
13646 + };
13647 + };
13648 +
13649 + fragment@3 {
13650 + target = <&sound>;
13651 + hifiberry_dacplusadcpro: __overlay__ {
13652 + compatible = "hifiberry,hifiberry-dacplusadcpro";
13653 + audio-codec = <&hb_dac &hb_adc>;
13654 + i2s-controller = <&i2s>;
13655 + status = "okay";
13656 + };
13657 + };
13658 +
13659 + __overrides__ {
13660 + 24db_digital_gain =
13661 + <&hifiberry_dacplusadcpro>,"hifiberry-dacplusadcpro,24db_digital_gain?";
13662 + slave = <&hifiberry_dacplusadcpro>,"hifiberry-dacplusadcpro,slave?";
13663 + leds_off = <&hifiberry_dacplusadcpro>,"hifiberry-dacplusadcpro,leds_off?";
13664 + };
13665 +};
13666 diff --git a/arch/arm/boot/dts/overlays/hifiberry-dacplusdsp-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-dacplusdsp-overlay.dts
13667 new file mode 100644
13668 index 000000000000..63432e8b983f
13669 --- /dev/null
13670 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplusdsp-overlay.dts
13671 @@ -0,0 +1,34 @@
13672 +// Definitions for hifiberry DAC+DSP soundcard overlay
13673 +/dts-v1/;
13674 +/plugin/;
13675 +
13676 +/ {
13677 + compatible = "brcm,bcm2835";
13678 +
13679 + fragment@0 {
13680 + target = <&i2s>;
13681 + __overlay__ {
13682 + status = "okay";
13683 + };
13684 + };
13685 +
13686 + fragment@1 {
13687 + target-path = "/";
13688 + __overlay__ {
13689 + dacplusdsp-codec {
13690 + #sound-dai-cells = <0>;
13691 + compatible = "hifiberry,dacplusdsp";
13692 + status = "okay";
13693 + };
13694 + };
13695 + };
13696 +
13697 + fragment@2 {
13698 + target = <&sound>;
13699 + __overlay__ {
13700 + compatible = "hifiberrydacplusdsp,hifiberrydacplusdsp-soundcard";
13701 + i2s-controller = <&i2s>;
13702 + status = "okay";
13703 + };
13704 + };
13705 +};
13706 diff --git a/arch/arm/boot/dts/overlays/hifiberry-dacplushd-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-dacplushd-overlay.dts
13707 new file mode 100644
13708 index 000000000000..c5583e010339
13709 --- /dev/null
13710 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplushd-overlay.dts
13711 @@ -0,0 +1,106 @@
13712 +// Definitions for HiFiBerry DAC+ HD
13713 +/dts-v1/;
13714 +/plugin/;
13715 +
13716 +#include <dt-bindings/gpio/gpio.h>
13717 +
13718 +/ {
13719 + compatible = "brcm,bcm2835";
13720 +
13721 + fragment@0 {
13722 + target-path = "/";
13723 + __overlay__ {
13724 + dachd_osc: pll_dachd_osc {
13725 + compatible = "hifiberry,dachd-clk";
13726 + #clock-cells = <0>;
13727 + };
13728 + };
13729 + };
13730 +
13731 + fragment@1 {
13732 + target = <&i2s>;
13733 + __overlay__ {
13734 + status = "okay";
13735 + };
13736 + };
13737 +
13738 + fragment@2 {
13739 + target = <&i2c1>;
13740 + __overlay__ {
13741 + #address-cells = <1>;
13742 + #size-cells = <0>;
13743 + status = "okay";
13744 +
13745 + pcm1792a@4c {
13746 + compatible = "ti,pcm1792a";
13747 + #sound-dai-cells = <0>;
13748 + #clock-cells = <0>;
13749 + clocks = <&dachd_osc>;
13750 + reg = <0x4c>;
13751 + status = "okay";
13752 + };
13753 + pll: pll@62 {
13754 + compatible = "hifiberry,dachd-clk";
13755 + #clock-cells = <0>;
13756 + reg = <0x62>;
13757 + clocks = <&dachd_osc>;
13758 + status = "okay";
13759 + common_pll_regs = [
13760 + 02 53 03 00 07 20 0F 00
13761 + 10 0D 11 1D 12 0D 13 8C
13762 + 14 8C 15 8C 16 8C 17 8C
13763 + 18 2A 1C 00 1D 0F 1F 00
13764 + 2A 00 2C 00 2F 00 30 00
13765 + 31 00 32 00 34 00 37 00
13766 + 38 00 39 00 3A 00 3B 01
13767 + 3E 00 3F 00 40 00 41 00
13768 + 5A 00 5B 00 95 00 96 00
13769 + 97 00 98 00 99 00 9A 00
13770 + 9B 00 A2 00 A3 00 A4 00
13771 + B7 92 ];
13772 + 192k_pll_regs = [
13773 + 1A 0C 1B 35 1E F0 20 09
13774 + 21 50 2B 02 2D 10 2E 40
13775 + 33 01 35 22 36 80 3C 22
13776 + 3D 46 ];
13777 + 96k_pll_regs = [
13778 + 1A 0C 1B 35 1E F0 20 09
13779 + 21 50 2B 02 2D 10 2E 40
13780 + 33 01 35 47 36 00 3C 32
13781 + 3D 46 ];
13782 + 48k_pll_regs = [
13783 + 1A 0C 1B 35 1E F0 20 09
13784 + 21 50 2B 02 2D 10 2E 40
13785 + 33 01 35 90 36 00 3C 42
13786 + 3D 46 ];
13787 + 176k4_pll_regs = [
13788 + 1A 3D 1B 09 1E F3 20 13
13789 + 21 75 2B 04 2D 11 2E E0
13790 + 33 02 35 25 36 C0 3C 22
13791 + 3D 7A ];
13792 + 88k2_pll_regs = [
13793 + 1A 3D 1B 09 1E F3 20 13
13794 + 21 75 2B 04 2D 11 2E E0
13795 + 33 01 35 4D 36 80 3C 32
13796 + 3D 7A ];
13797 + 44k1_pll_regs = [
13798 + 1A 3D 1B 09 1E F3 20 13
13799 + 21 75 2B 04 2D 11 2E E0
13800 + 33 01 35 9D 36 00 3C 42
13801 + 3D 7A ];
13802 + };
13803 + };
13804 + };
13805 +
13806 + fragment@3 {
13807 + target = <&sound>;
13808 + __overlay__ {
13809 + compatible = "hifiberry,hifiberry-dacplushd";
13810 + i2s-controller = <&i2s>;
13811 + clocks = <&pll 0>;
13812 + reset-gpio = <&gpio 16 GPIO_ACTIVE_LOW>;
13813 + status = "okay";
13814 + };
13815 + };
13816 +
13817 +};
13818 diff --git a/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
13819 new file mode 100644
13820 index 000000000000..a2309a50e8d8
13821 --- /dev/null
13822 +++ b/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
13823 @@ -0,0 +1,41 @@
13824 +// Definitions for HiFiBerry Digi
13825 +/dts-v1/;
13826 +/plugin/;
13827 +
13828 +/ {
13829 + compatible = "brcm,bcm2835";
13830 +
13831 + fragment@0 {
13832 + target = <&i2s>;
13833 + __overlay__ {
13834 + status = "okay";
13835 + };
13836 + };
13837 +
13838 + fragment@1 {
13839 + target = <&i2c1>;
13840 + __overlay__ {
13841 + #address-cells = <1>;
13842 + #size-cells = <0>;
13843 + status = "okay";
13844 +
13845 + wm8804@3b {
13846 + #sound-dai-cells = <0>;
13847 + compatible = "wlf,wm8804";
13848 + reg = <0x3b>;
13849 + PVDD-supply = <&vdd_3v3_reg>;
13850 + DVDD-supply = <&vdd_3v3_reg>;
13851 + status = "okay";
13852 + };
13853 + };
13854 + };
13855 +
13856 + fragment@2 {
13857 + target = <&sound>;
13858 + __overlay__ {
13859 + compatible = "hifiberry,hifiberry-digi";
13860 + i2s-controller = <&i2s>;
13861 + status = "okay";
13862 + };
13863 + };
13864 +};
13865 diff --git a/arch/arm/boot/dts/overlays/hifiberry-digi-pro-overlay.dts b/arch/arm/boot/dts/overlays/hifiberry-digi-pro-overlay.dts
13866 new file mode 100644
13867 index 000000000000..83de602e76ba
13868 --- /dev/null
13869 +++ b/arch/arm/boot/dts/overlays/hifiberry-digi-pro-overlay.dts
13870 @@ -0,0 +1,43 @@
13871 +// Definitions for HiFiBerry Digi Pro
13872 +/dts-v1/;
13873 +/plugin/;
13874 +
13875 +/ {
13876 + compatible = "brcm,bcm2835";
13877 +
13878 + fragment@0 {
13879 + target = <&i2s>;
13880 + __overlay__ {
13881 + status = "okay";
13882 + };
13883 + };
13884 +
13885 + fragment@1 {
13886 + target = <&i2c1>;
13887 + __overlay__ {
13888 + #address-cells = <1>;
13889 + #size-cells = <0>;
13890 + status = "okay";
13891 +
13892 + wm8804@3b {
13893 + #sound-dai-cells = <0>;
13894 + compatible = "wlf,wm8804";
13895 + reg = <0x3b>;
13896 + PVDD-supply = <&vdd_3v3_reg>;
13897 + DVDD-supply = <&vdd_3v3_reg>;
13898 + status = "okay";
13899 + };
13900 + };
13901 + };
13902 +
13903 + fragment@2 {
13904 + target = <&sound>;
13905 + __overlay__ {
13906 + compatible = "hifiberry,hifiberry-digi";
13907 + i2s-controller = <&i2s>;
13908 + status = "okay";
13909 + clock44-gpio = <&gpio 5 0>;
13910 + clock48-gpio = <&gpio 6 0>;
13911 + };
13912 + };
13913 +};
13914 diff --git a/arch/arm/boot/dts/overlays/highperi-overlay.dts b/arch/arm/boot/dts/overlays/highperi-overlay.dts
13915 new file mode 100644
13916 index 000000000000..46cb76c2d34f
13917 --- /dev/null
13918 +++ b/arch/arm/boot/dts/overlays/highperi-overlay.dts
13919 @@ -0,0 +1,63 @@
13920 +/*
13921 + * highperi.dts
13922 + */
13923 +
13924 +/dts-v1/;
13925 +/plugin/;
13926 +
13927 +/ {
13928 + compatible = "brcm,bcm2711";
13929 +
13930 + fragment@0 {
13931 + target = <&soc>;
13932 + #address-cells = <2>;
13933 + #size-cells = <1>;
13934 +
13935 + __overlay__ {
13936 + #address-cells = <1>;
13937 + #size-cells = <1>;
13938 + ranges = <0x7c000000 0x4 0x7c000000 0x04000000>,
13939 + <0x40000000 0x4 0xc0000000 0x00800000>;
13940 + };
13941 + };
13942 +
13943 + fragment@1 {
13944 + target = <&scb>;
13945 + #address-cells = <2>;
13946 + #size-cells = <1>;
13947 +
13948 + __overlay__ {
13949 + #address-cells = <2>;
13950 + #size-cells = <2>;
13951 + ranges = <0x0 0x7c000000 0x4 0x7c000000 0x0 0x04000000>,
13952 + <0x0 0x40000000 0x4 0xc0000000 0x0 0x00800000>,
13953 + <0x6 0x00000000 0x6 0x00000000 0x0 0x40000000>;
13954 + dma-ranges = <0x0 0x00000000 0x0 0x00000000 0x2 0x00000000>;
13955 + };
13956 + };
13957 +
13958 + fragment@2 {
13959 + target = <&v3dbus>;
13960 + #address-cells = <2>;
13961 + #size-cells = <1>;
13962 +
13963 + __overlay__ {
13964 + #address-cells = <1>;
13965 + #size-cells = <2>;
13966 + ranges = <0x7c500000 0x4 0x7c500000 0x0 0x03300000>,
13967 + <0x40000000 0x4 0xc0000000 0x0 0x00800000>;
13968 + };
13969 + };
13970 +
13971 + fragment@3 {
13972 + target = <&emmc2bus>;
13973 + #address-cells = <2>;
13974 + #size-cells = <1>;
13975 +
13976 + __overlay__ {
13977 + #address-cells = <2>;
13978 + #size-cells = <1>;
13979 + ranges = <0x0 0x7e000000 0x4 0x7e000000 0x01800000>;
13980 + };
13981 + };
13982 +};
13983 diff --git a/arch/arm/boot/dts/overlays/hy28a-overlay.dts b/arch/arm/boot/dts/overlays/hy28a-overlay.dts
13984 new file mode 100644
13985 index 000000000000..5843a5e9c86a
13986 --- /dev/null
13987 +++ b/arch/arm/boot/dts/overlays/hy28a-overlay.dts
13988 @@ -0,0 +1,93 @@
13989 +/*
13990 + * Device Tree overlay for HY28A display
13991 + *
13992 + */
13993 +
13994 +/dts-v1/;
13995 +/plugin/;
13996 +
13997 +/ {
13998 + compatible = "brcm,bcm2835";
13999 +
14000 + fragment@0 {
14001 + target = <&spi0>;
14002 + __overlay__ {
14003 + status = "okay";
14004 + };
14005 + };
14006 +
14007 + fragment@1 {
14008 + target = <&spidev0>;
14009 + __overlay__ {
14010 + status = "disabled";
14011 + };
14012 + };
14013 +
14014 + fragment@2 {
14015 + target = <&spidev1>;
14016 + __overlay__ {
14017 + status = "disabled";
14018 + };
14019 + };
14020 +
14021 + fragment@3 {
14022 + target = <&gpio>;
14023 + __overlay__ {
14024 + hy28a_pins: hy28a_pins {
14025 + brcm,pins = <17 25 18>;
14026 + brcm,function = <0 1 1>; /* in out out */
14027 + };
14028 + };
14029 + };
14030 +
14031 + fragment@4 {
14032 + target = <&spi0>;
14033 + __overlay__ {
14034 + /* needed to avoid dtc warning */
14035 + #address-cells = <1>;
14036 + #size-cells = <0>;
14037 +
14038 + hy28a: hy28a@0{
14039 + compatible = "ilitek,ili9320";
14040 + reg = <0>;
14041 + pinctrl-names = "default";
14042 + pinctrl-0 = <&hy28a_pins>;
14043 +
14044 + spi-max-frequency = <32000000>;
14045 + spi-cpol;
14046 + spi-cpha;
14047 + rotate = <270>;
14048 + bgr;
14049 + fps = <50>;
14050 + buswidth = <8>;
14051 + startbyte = <0x70>;
14052 + reset-gpios = <&gpio 25 1>;
14053 + led-gpios = <&gpio 18 1>;
14054 + debug = <0>;
14055 + };
14056 +
14057 + hy28a_ts: hy28a-ts@1 {
14058 + compatible = "ti,ads7846";
14059 + reg = <1>;
14060 +
14061 + spi-max-frequency = <2000000>;
14062 + interrupts = <17 2>; /* high-to-low edge triggered */
14063 + interrupt-parent = <&gpio>;
14064 + pendown-gpio = <&gpio 17 0>;
14065 + ti,x-plate-ohms = /bits/ 16 <100>;
14066 + ti,pressure-max = /bits/ 16 <255>;
14067 + };
14068 + };
14069 + };
14070 + __overrides__ {
14071 + speed = <&hy28a>,"spi-max-frequency:0";
14072 + rotate = <&hy28a>,"rotate:0";
14073 + fps = <&hy28a>,"fps:0";
14074 + debug = <&hy28a>,"debug:0";
14075 + xohms = <&hy28a_ts>,"ti,x-plate-ohms;0";
14076 + resetgpio = <&hy28a>,"reset-gpios:4",
14077 + <&hy28a_pins>, "brcm,pins:4";
14078 + ledgpio = <&hy28a>,"led-gpios:4",
14079 + <&hy28a_pins>, "brcm,pins:8";
14080 + };
14081 +};
14082 diff --git a/arch/arm/boot/dts/overlays/hy28b-2017-overlay.dts b/arch/arm/boot/dts/overlays/hy28b-2017-overlay.dts
14083 new file mode 100644
14084 index 000000000000..95bfb1eadc20
14085 --- /dev/null
14086 +++ b/arch/arm/boot/dts/overlays/hy28b-2017-overlay.dts
14087 @@ -0,0 +1,152 @@
14088 +/*
14089 + * Device Tree overlay for HY28b display shield by Texy.
14090 + * Modified for 2017 version with ILI9325 D chip
14091 + */
14092 +
14093 +/dts-v1/;
14094 +/plugin/;
14095 +
14096 +/ {
14097 + compatible = "brcm,bcm2835";
14098 +
14099 + fragment@0 {
14100 + target = <&spi0>;
14101 + __overlay__ {
14102 + status = "okay";
14103 + };
14104 + };
14105 +
14106 + fragment@1 {
14107 + target = <&spidev0>;
14108 + __overlay__ {
14109 + status = "disabled";
14110 + };
14111 + };
14112 +
14113 + fragment@2 {
14114 + target = <&spidev1>;
14115 + __overlay__ {
14116 + status = "disabled";
14117 + };
14118 + };
14119 +
14120 + fragment@3 {
14121 + target = <&gpio>;
14122 + __overlay__ {
14123 + hy28b_pins: hy28b_pins {
14124 + brcm,pins = <17 25 18>;
14125 + brcm,function = <0 1 1>; /* in out out */
14126 + };
14127 + };
14128 + };
14129 +
14130 + fragment@4 {
14131 + target = <&spi0>;
14132 + __overlay__ {
14133 + /* needed to avoid dtc warning */
14134 + #address-cells = <1>;
14135 + #size-cells = <0>;
14136 +
14137 + hy28b: hy28b@0{
14138 + compatible = "ilitek,ili9325";
14139 + reg = <0>;
14140 + pinctrl-names = "default";
14141 + pinctrl-0 = <&hy28b_pins>;
14142 +
14143 + spi-max-frequency = <48000000>;
14144 + spi-cpol;
14145 + spi-cpha;
14146 + rotate = <270>;
14147 + bgr;
14148 + fps = <50>;
14149 + buswidth = <8>;
14150 + startbyte = <0x70>;
14151 + reset-gpios = <&gpio 25 1>;
14152 + led-gpios = <&gpio 18 1>;
14153 +
14154 + init = <0x10000e5 0x78F0
14155 + 0x1000001 0x0100
14156 + 0x1000002 0x0700
14157 + 0x1000003 0x1030
14158 + 0x1000004 0x0000
14159 + 0x1000008 0x0207
14160 + 0x1000009 0x0000
14161 + 0x100000a 0x0000
14162 + 0x100000c 0x0000
14163 + 0x100000d 0x0000
14164 + 0x100000f 0x0000
14165 + 0x1000010 0x0000
14166 + 0x1000011 0x0007
14167 + 0x1000012 0x0000
14168 + 0x1000013 0x0000
14169 + 0x1000007 0x0001
14170 + 0x2000032
14171 + 0x2000032
14172 + 0x2000032
14173 + 0x2000032
14174 + 0x1000010 0x1090
14175 + 0x1000011 0x0227
14176 + 0x2000032
14177 + 0x1000012 0x001f
14178 + 0x2000032
14179 + 0x1000013 0x1500
14180 + 0x1000029 0x0027
14181 + 0x100002b 0x000d
14182 + 0x2000032
14183 + 0x1000020 0x0000
14184 + 0x1000021 0x0000
14185 + 0x2000032
14186 + 0x1000030 0x0000
14187 + 0x1000031 0x0707
14188 + 0x1000032 0x0307
14189 + 0x1000035 0x0200
14190 + 0x1000036 0x0008
14191 + 0x1000037 0x0004
14192 + 0x1000038 0x0000
14193 + 0x1000039 0x0707
14194 + 0x100003c 0x0002
14195 + 0x100003d 0x1d04
14196 + 0x1000050 0x0000
14197 + 0x1000051 0x00ef
14198 + 0x1000052 0x0000
14199 + 0x1000053 0x013f
14200 + 0x1000060 0xa700
14201 + 0x1000061 0x0001
14202 + 0x100006a 0x0000
14203 + 0x1000080 0x0000
14204 + 0x1000081 0x0000
14205 + 0x1000082 0x0000
14206 + 0x1000083 0x0000
14207 + 0x1000084 0x0000
14208 + 0x1000085 0x0000
14209 + 0x1000090 0x0010
14210 + 0x1000092 0x0600
14211 + 0x1000007 0x0133>;
14212 + debug = <0>;
14213 + };
14214 +
14215 + hy28b_ts: hy28b-ts@1 {
14216 + compatible = "ti,ads7846";
14217 + reg = <1>;
14218 +
14219 + spi-max-frequency = <2000000>;
14220 + interrupts = <17 2>; /* high-to-low edge triggered */
14221 + interrupt-parent = <&gpio>;
14222 + pendown-gpio = <&gpio 17 0>;
14223 + ti,x-plate-ohms = /bits/ 16 <100>;
14224 + ti,pressure-max = /bits/ 16 <255>;
14225 + };
14226 + };
14227 + };
14228 + __overrides__ {
14229 + speed = <&hy28b>,"spi-max-frequency:0";
14230 + rotate = <&hy28b>,"rotate:0";
14231 + fps = <&hy28b>,"fps:0";
14232 + debug = <&hy28b>,"debug:0";
14233 + xohms = <&hy28b_ts>,"ti,x-plate-ohms;0";
14234 + resetgpio = <&hy28b>,"reset-gpios:4",
14235 + <&hy28b_pins>, "brcm,pins:4";
14236 + ledgpio = <&hy28b>,"led-gpios:4",
14237 + <&hy28b_pins>, "brcm,pins:8";
14238 + };
14239 +};
14240 diff --git a/arch/arm/boot/dts/overlays/hy28b-overlay.dts b/arch/arm/boot/dts/overlays/hy28b-overlay.dts
14241 new file mode 100644
14242 index 000000000000..9edd0848d555
14243 --- /dev/null
14244 +++ b/arch/arm/boot/dts/overlays/hy28b-overlay.dts
14245 @@ -0,0 +1,148 @@
14246 +/*
14247 + * Device Tree overlay for HY28b display shield by Texy
14248 + *
14249 + */
14250 +
14251 +/dts-v1/;
14252 +/plugin/;
14253 +
14254 +/ {
14255 + compatible = "brcm,bcm2835";
14256 +
14257 + fragment@0 {
14258 + target = <&spi0>;
14259 + __overlay__ {
14260 + status = "okay";
14261 + };
14262 + };
14263 +
14264 + fragment@1 {
14265 + target = <&spidev0>;
14266 + __overlay__ {
14267 + status = "disabled";
14268 + };
14269 + };
14270 +
14271 + fragment@2 {
14272 + target = <&spidev1>;
14273 + __overlay__ {
14274 + status = "disabled";
14275 + };
14276 + };
14277 +
14278 + fragment@3 {
14279 + target = <&gpio>;
14280 + __overlay__ {
14281 + hy28b_pins: hy28b_pins {
14282 + brcm,pins = <17 25 18>;
14283 + brcm,function = <0 1 1>; /* in out out */
14284 + };
14285 + };
14286 + };
14287 +
14288 + fragment@4 {
14289 + target = <&spi0>;
14290 + __overlay__ {
14291 + /* needed to avoid dtc warning */
14292 + #address-cells = <1>;
14293 + #size-cells = <0>;
14294 +
14295 + hy28b: hy28b@0{
14296 + compatible = "ilitek,ili9325";
14297 + reg = <0>;
14298 + pinctrl-names = "default";
14299 + pinctrl-0 = <&hy28b_pins>;
14300 +
14301 + spi-max-frequency = <48000000>;
14302 + spi-cpol;
14303 + spi-cpha;
14304 + rotate = <270>;
14305 + bgr;
14306 + fps = <50>;
14307 + buswidth = <8>;
14308 + startbyte = <0x70>;
14309 + reset-gpios = <&gpio 25 1>;
14310 + led-gpios = <&gpio 18 1>;
14311 +
14312 + gamma = "04 1F 4 7 7 0 7 7 6 0\n0F 00 1 7 4 0 0 0 6 7";
14313 +
14314 + init = <0x10000e7 0x0010
14315 + 0x1000000 0x0001
14316 + 0x1000001 0x0100
14317 + 0x1000002 0x0700
14318 + 0x1000003 0x1030
14319 + 0x1000004 0x0000
14320 + 0x1000008 0x0207
14321 + 0x1000009 0x0000
14322 + 0x100000a 0x0000
14323 + 0x100000c 0x0001
14324 + 0x100000d 0x0000
14325 + 0x100000f 0x0000
14326 + 0x1000010 0x0000
14327 + 0x1000011 0x0007
14328 + 0x1000012 0x0000
14329 + 0x1000013 0x0000
14330 + 0x2000032
14331 + 0x1000010 0x1590
14332 + 0x1000011 0x0227
14333 + 0x2000032
14334 + 0x1000012 0x009c
14335 + 0x2000032
14336 + 0x1000013 0x1900
14337 + 0x1000029 0x0023
14338 + 0x100002b 0x000e
14339 + 0x2000032
14340 + 0x1000020 0x0000
14341 + 0x1000021 0x0000
14342 + 0x2000032
14343 + 0x1000050 0x0000
14344 + 0x1000051 0x00ef
14345 + 0x1000052 0x0000
14346 + 0x1000053 0x013f
14347 + 0x1000060 0xa700
14348 + 0x1000061 0x0001
14349 + 0x100006a 0x0000
14350 + 0x1000080 0x0000
14351 + 0x1000081 0x0000
14352 + 0x1000082 0x0000
14353 + 0x1000083 0x0000
14354 + 0x1000084 0x0000
14355 + 0x1000085 0x0000
14356 + 0x1000090 0x0010
14357 + 0x1000092 0x0000
14358 + 0x1000093 0x0003
14359 + 0x1000095 0x0110
14360 + 0x1000097 0x0000
14361 + 0x1000098 0x0000
14362 + 0x1000007 0x0133
14363 + 0x1000020 0x0000
14364 + 0x1000021 0x0000
14365 + 0x2000064>;
14366 + debug = <0>;
14367 + };
14368 +
14369 + hy28b_ts: hy28b-ts@1 {
14370 + compatible = "ti,ads7846";
14371 + reg = <1>;
14372 +
14373 + spi-max-frequency = <2000000>;
14374 + interrupts = <17 2>; /* high-to-low edge triggered */
14375 + interrupt-parent = <&gpio>;
14376 + pendown-gpio = <&gpio 17 0>;
14377 + ti,x-plate-ohms = /bits/ 16 <100>;
14378 + ti,pressure-max = /bits/ 16 <255>;
14379 + };
14380 + };
14381 + };
14382 + __overrides__ {
14383 + speed = <&hy28b>,"spi-max-frequency:0";
14384 + rotate = <&hy28b>,"rotate:0";
14385 + fps = <&hy28b>,"fps:0";
14386 + debug = <&hy28b>,"debug:0";
14387 + xohms = <&hy28b_ts>,"ti,x-plate-ohms;0";
14388 + resetgpio = <&hy28b>,"reset-gpios:4",
14389 + <&hy28b_pins>, "brcm,pins:4";
14390 + ledgpio = <&hy28b>,"led-gpios:4",
14391 + <&hy28b_pins>, "brcm,pins:8";
14392 + };
14393 +};
14394 diff --git a/arch/arm/boot/dts/overlays/i-sabre-q2m-overlay.dts b/arch/arm/boot/dts/overlays/i-sabre-q2m-overlay.dts
14395 new file mode 100644
14396 index 000000000000..0c4cff354674
14397 --- /dev/null
14398 +++ b/arch/arm/boot/dts/overlays/i-sabre-q2m-overlay.dts
14399 @@ -0,0 +1,39 @@
14400 +// Definitions for I-Sabre Q2M
14401 +/dts-v1/;
14402 +/plugin/;
14403 +
14404 +/ {
14405 + compatible = "brcm,bcm2835";
14406 +
14407 + fragment@0 {
14408 + target = <&sound>;
14409 + frag0: __overlay__ {
14410 + compatible = "audiophonics,i-sabre-q2m";
14411 + i2s-controller = <&i2s>;
14412 + status = "okay";
14413 + };
14414 + };
14415 +
14416 + fragment@1 {
14417 + target = <&i2s>;
14418 + __overlay__ {
14419 + status = "okay";
14420 + };
14421 + };
14422 +
14423 + fragment@2 {
14424 + target = <&i2c1>;
14425 + __overlay__ {
14426 + #address-cells = <1>;
14427 + #size-cells = <0>;
14428 + status = "okay";
14429 +
14430 + i-sabre-codec@48 {
14431 + #sound-dai-cells = <0>;
14432 + compatible = "audiophonics,i-sabre-codec";
14433 + reg = <0x48>;
14434 + status = "okay";
14435 + };
14436 + };
14437 + };
14438 +};
14439 diff --git a/arch/arm/boot/dts/overlays/i2c-bcm2708-overlay.dts b/arch/arm/boot/dts/overlays/i2c-bcm2708-overlay.dts
14440 new file mode 100644
14441 index 000000000000..8204b6b3aef8
14442 --- /dev/null
14443 +++ b/arch/arm/boot/dts/overlays/i2c-bcm2708-overlay.dts
14444 @@ -0,0 +1,13 @@
14445 +/dts-v1/;
14446 +/plugin/;
14447 +
14448 +/{
14449 + compatible = "brcm,bcm2835";
14450 +
14451 + fragment@0 {
14452 + target = <&i2c_arm>;
14453 + __overlay__ {
14454 + compatible = "brcm,bcm2708-i2c";
14455 + };
14456 + };
14457 +};
14458 diff --git a/arch/arm/boot/dts/overlays/i2c-gpio-overlay.dts b/arch/arm/boot/dts/overlays/i2c-gpio-overlay.dts
14459 new file mode 100644
14460 index 000000000000..63231b5d7c0c
14461 --- /dev/null
14462 +++ b/arch/arm/boot/dts/overlays/i2c-gpio-overlay.dts
14463 @@ -0,0 +1,47 @@
14464 +// Overlay for i2c_gpio bitbanging host bus.
14465 +/dts-v1/;
14466 +/plugin/;
14467 +
14468 +#include <dt-bindings/gpio/gpio.h>
14469 +
14470 +/ {
14471 + compatible = "brcm,bcm2835";
14472 +
14473 + fragment@0 {
14474 + target-path = "/";
14475 +
14476 + __overlay__ {
14477 + i2c_gpio: i2c@0 {
14478 + reg = <0xffffffff>;
14479 + compatible = "i2c-gpio";
14480 + gpios = <&gpio 23 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN) /* sda */
14481 + &gpio 24 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN) /* scl */
14482 + >;
14483 + i2c-gpio,delay-us = <2>; /* ~100 kHz */
14484 + #address-cells = <1>;
14485 + #size-cells = <0>;
14486 + };
14487 + };
14488 + };
14489 +
14490 + fragment@1 {
14491 + target-path = "/aliases";
14492 + __overlay__ {
14493 + i2c_gpio = "/i2c@0";
14494 + };
14495 + };
14496 +
14497 + fragment@2 {
14498 + target-path = "/__symbols__";
14499 + __overlay__ {
14500 + i2c_gpio = "/i2c@0";
14501 + };
14502 + };
14503 +
14504 + __overrides__ {
14505 + i2c_gpio_sda = <&i2c_gpio>,"gpios:4";
14506 + i2c_gpio_scl = <&i2c_gpio>,"gpios:16";
14507 + i2c_gpio_delay_us = <&i2c_gpio>,"i2c-gpio,delay-us:0";
14508 + bus = <&i2c_gpio>, "reg:0";
14509 + };
14510 +};
14511 diff --git a/arch/arm/boot/dts/overlays/i2c-mux-overlay.dts b/arch/arm/boot/dts/overlays/i2c-mux-overlay.dts
14512 new file mode 100644
14513 index 000000000000..112aed91ecb2
14514 --- /dev/null
14515 +++ b/arch/arm/boot/dts/overlays/i2c-mux-overlay.dts
14516 @@ -0,0 +1,139 @@
14517 +// Umbrella I2C Mux overlay
14518 +
14519 +/dts-v1/;
14520 +/plugin/;
14521 +
14522 +/{
14523 + compatible = "brcm,bcm2835";
14524 +
14525 + fragment@0 {
14526 + target = <&i2c_arm>;
14527 + __dormant__ {
14528 + #address-cells = <1>;
14529 + #size-cells = <0>;
14530 + status = "okay";
14531 +
14532 + pca9542: mux@70 {
14533 + compatible = "nxp,pca9542";
14534 + reg = <0x70>;
14535 + #address-cells = <1>;
14536 + #size-cells = <0>;
14537 +
14538 + i2c@0 {
14539 + #address-cells = <1>;
14540 + #size-cells = <0>;
14541 + reg = <0>;
14542 + };
14543 + i2c@1 {
14544 + #address-cells = <1>;
14545 + #size-cells = <0>;
14546 + reg = <1>;
14547 + };
14548 + };
14549 + };
14550 + };
14551 +
14552 + fragment@1 {
14553 + target = <&i2c_arm>;
14554 + __dormant__ {
14555 + #address-cells = <1>;
14556 + #size-cells = <0>;
14557 + status = "okay";
14558 +
14559 + pca9545: mux@70 {
14560 + compatible = "nxp,pca9545";
14561 + reg = <0x70>;
14562 + #address-cells = <1>;
14563 + #size-cells = <0>;
14564 +
14565 + i2c@0 {
14566 + #address-cells = <1>;
14567 + #size-cells = <0>;
14568 + reg = <0>;
14569 + };
14570 + i2c@1 {
14571 + #address-cells = <1>;
14572 + #size-cells = <0>;
14573 + reg = <1>;
14574 + };
14575 + i2c@2 {
14576 + #address-cells = <1>;
14577 + #size-cells = <0>;
14578 + reg = <2>;
14579 + };
14580 + i2c@3 {
14581 + #address-cells = <1>;
14582 + #size-cells = <0>;
14583 + reg = <3>;
14584 + };
14585 + };
14586 + };
14587 + };
14588 +
14589 + fragment@2 {
14590 + target = <&i2c_arm>;
14591 + __dormant__ {
14592 + #address-cells = <1>;
14593 + #size-cells = <0>;
14594 + status = "okay";
14595 +
14596 + pca9548: mux@70 {
14597 + compatible = "nxp,pca9548";
14598 + reg = <0x70>;
14599 + #address-cells = <1>;
14600 + #size-cells = <0>;
14601 +
14602 + i2c@0 {
14603 + #address-cells = <1>;
14604 + #size-cells = <0>;
14605 + reg = <0>;
14606 + };
14607 + i2c@1 {
14608 + #address-cells = <1>;
14609 + #size-cells = <0>;
14610 + reg = <1>;
14611 + };
14612 + i2c@2 {
14613 + #address-cells = <1>;
14614 + #size-cells = <0>;
14615 + reg = <2>;
14616 + };
14617 + i2c@3 {
14618 + #address-cells = <1>;
14619 + #size-cells = <0>;
14620 + reg = <3>;
14621 + };
14622 + i2c@4 {
14623 + #address-cells = <1>;
14624 + #size-cells = <0>;
14625 + reg = <4>;
14626 + };
14627 + i2c@5 {
14628 + #address-cells = <1>;
14629 + #size-cells = <0>;
14630 + reg = <5>;
14631 + };
14632 + i2c@6 {
14633 + #address-cells = <1>;
14634 + #size-cells = <0>;
14635 + reg = <6>;
14636 + };
14637 + i2c@7 {
14638 + #address-cells = <1>;
14639 + #size-cells = <0>;
14640 + reg = <7>;
14641 + };
14642 + };
14643 + };
14644 + };
14645 +
14646 + __overrides__ {
14647 + pca9542 = <0>, "+0";
14648 + pca9545 = <0>, "+1";
14649 + pca9548 = <0>, "+2";
14650 +
14651 + addr = <&pca9542>,"reg:0",
14652 + <&pca9545>,"reg:0",
14653 + <&pca9548>,"reg:0";
14654 + };
14655 +};
14656 diff --git a/arch/arm/boot/dts/overlays/i2c-pwm-pca9685a-overlay.dts b/arch/arm/boot/dts/overlays/i2c-pwm-pca9685a-overlay.dts
14657 new file mode 100644
14658 index 000000000000..9bb16465a50e
14659 --- /dev/null
14660 +++ b/arch/arm/boot/dts/overlays/i2c-pwm-pca9685a-overlay.dts
14661 @@ -0,0 +1,26 @@
14662 +// Definitions for NXP PCA9685A I2C PWM controller on ARM I2C bus.
14663 +/dts-v1/;
14664 +/plugin/;
14665 +
14666 +/{
14667 + compatible = "brcm,bcm2835";
14668 +
14669 + fragment@0 {
14670 + target = <&i2c_arm>;
14671 + __overlay__ {
14672 + #address-cells = <1>;
14673 + #size-cells = <0>;
14674 + status = "okay";
14675 +
14676 + pca: pca@40 {
14677 + compatible = "nxp,pca9685-pwm";
14678 + #pwm-cells = <2>;
14679 + reg = <0x40>;
14680 + status = "okay";
14681 + };
14682 + };
14683 + };
14684 + __overrides__ {
14685 + addr = <&pca>,"reg:0";
14686 + };
14687 +};
14688 diff --git a/arch/arm/boot/dts/overlays/i2c-rtc-common.dtsi b/arch/arm/boot/dts/overlays/i2c-rtc-common.dtsi
14689 new file mode 100644
14690 index 000000000000..7f749fc2d802
14691 --- /dev/null
14692 +++ b/arch/arm/boot/dts/overlays/i2c-rtc-common.dtsi
14693 @@ -0,0 +1,323 @@
14694 +// Definitions for several I2C based Real Time Clocks
14695 +
14696 +/ {
14697 + compatible = "brcm,bcm2835";
14698 +
14699 + fragment@0 {
14700 + target = <&i2cbus>;
14701 + __dormant__ {
14702 + #address-cells = <1>;
14703 + #size-cells = <0>;
14704 +
14705 + abx80x: abx80x@69 {
14706 + compatible = "abracon,abx80x";
14707 + reg = <0x69>;
14708 + abracon,tc-diode = "standard";
14709 + abracon,tc-resistor = <0>;
14710 + };
14711 + };
14712 + };
14713 +
14714 + fragment@1 {
14715 + target = <&i2cbus>;
14716 + __dormant__ {
14717 + #address-cells = <1>;
14718 + #size-cells = <0>;
14719 +
14720 + ds1307: ds1307@68 {
14721 + compatible = "dallas,ds1307";
14722 + reg = <0x68>;
14723 + };
14724 + };
14725 + };
14726 +
14727 + fragment@2 {
14728 + target = <&i2cbus>;
14729 + __dormant__ {
14730 + #address-cells = <1>;
14731 + #size-cells = <0>;
14732 +
14733 + ds1339: ds1339@68 {
14734 + compatible = "dallas,ds1339";
14735 + trickle-resistor-ohms = <0>;
14736 + reg = <0x68>;
14737 + };
14738 + };
14739 + };
14740 +
14741 + fragment@3 {
14742 + target = <&i2cbus>;
14743 + __dormant__ {
14744 + #address-cells = <1>;
14745 + #size-cells = <0>;
14746 +
14747 + ds3231: ds3231@68 {
14748 + compatible = "maxim,ds3231";
14749 + reg = <0x68>;
14750 + };
14751 + };
14752 + };
14753 +
14754 + fragment@4 {
14755 + target = <&i2cbus>;
14756 + __dormant__ {
14757 + #address-cells = <1>;
14758 + #size-cells = <0>;
14759 +
14760 + mcp7940x: mcp7940x@6f {
14761 + compatible = "microchip,mcp7940x";
14762 + reg = <0x6f>;
14763 + };
14764 + };
14765 + };
14766 +
14767 + fragment@5 {
14768 + target = <&i2cbus>;
14769 + __dormant__ {
14770 + #address-cells = <1>;
14771 + #size-cells = <0>;
14772 +
14773 + mcp7941x: mcp7941x@6f {
14774 + compatible = "microchip,mcp7941x";
14775 + reg = <0x6f>;
14776 + };
14777 + };
14778 + };
14779 +
14780 + fragment@6 {
14781 + target = <&i2cbus>;
14782 + __dormant__ {
14783 + #address-cells = <1>;
14784 + #size-cells = <0>;
14785 +
14786 + pcf2127@51 {
14787 + compatible = "nxp,pcf2127";
14788 + reg = <0x51>;
14789 + };
14790 + };
14791 + };
14792 +
14793 + fragment@7 {
14794 + target = <&i2cbus>;
14795 + __dormant__ {
14796 + #address-cells = <1>;
14797 + #size-cells = <0>;
14798 +
14799 + pcf8523: pcf8523@68 {
14800 + compatible = "nxp,pcf8523";
14801 + reg = <0x68>;
14802 + };
14803 + };
14804 + };
14805 +
14806 + fragment@8 {
14807 + target = <&i2cbus>;
14808 + __dormant__ {
14809 + #address-cells = <1>;
14810 + #size-cells = <0>;
14811 +
14812 + pcf8563: pcf8563@51 {
14813 + compatible = "nxp,pcf8563";
14814 + reg = <0x51>;
14815 + };
14816 + };
14817 + };
14818 +
14819 + fragment@9 {
14820 + target = <&i2cbus>;
14821 + __dormant__ {
14822 + #address-cells = <1>;
14823 + #size-cells = <0>;
14824 +
14825 + m41t62: m41t62@68 {
14826 + compatible = "st,m41t62";
14827 + reg = <0x68>;
14828 + };
14829 + };
14830 + };
14831 +
14832 + fragment@10 {
14833 + target = <&i2cbus>;
14834 + __dormant__ {
14835 + #address-cells = <1>;
14836 + #size-cells = <0>;
14837 +
14838 + rv3028: rv3028@52 {
14839 + compatible = "microcrystal,rv3028";
14840 + reg = <0x52>;
14841 + };
14842 + };
14843 + };
14844 +
14845 + fragment@11 {
14846 + target = <&i2cbus>;
14847 + __dormant__ {
14848 + #address-cells = <1>;
14849 + #size-cells = <0>;
14850 +
14851 + pcf2129@51 {
14852 + compatible = "nxp,pcf2129";
14853 + reg = <0x51>;
14854 + };
14855 + };
14856 + };
14857 +
14858 + fragment@12 {
14859 + target = <&i2cbus>;
14860 + __dormant__ {
14861 + #address-cells = <1>;
14862 + #size-cells = <0>;
14863 +
14864 + pcf85363@51 {
14865 + compatible = "nxp,pcf85363";
14866 + reg = <0x51>;
14867 + };
14868 + };
14869 + };
14870 +
14871 + fragment@13 {
14872 + target = <&i2cbus>;
14873 + __dormant__ {
14874 + #address-cells = <1>;
14875 + #size-cells = <0>;
14876 +
14877 + rv1805: rv1805@69 {
14878 + compatible = "microcrystal,rv1805";
14879 + reg = <0x69>;
14880 + abracon,tc-diode = "standard";
14881 + abracon,tc-resistor = <0>;
14882 + };
14883 + };
14884 + };
14885 +
14886 + fragment@14 {
14887 + target = <&i2cbus>;
14888 + __dormant__ {
14889 + #address-cells = <1>;
14890 + #size-cells = <0>;
14891 +
14892 + sd3078: sd3078@32 {
14893 + compatible = "whwave,sd3078";
14894 + reg = <0x32>;
14895 + };
14896 + };
14897 + };
14898 +
14899 + fragment@15 {
14900 + target = <&i2cbus>;
14901 + __dormant__ {
14902 + #address-cells = <1>;
14903 + #size-cells = <0>;
14904 +
14905 + pcf85063@51 {
14906 + compatible = "nxp,pcf85063";
14907 + reg = <0x51>;
14908 + };
14909 + };
14910 + };
14911 +
14912 + fragment@16 {
14913 + target = <&i2cbus>;
14914 + __dormant__ {
14915 + #address-cells = <1>;
14916 + #size-cells = <0>;
14917 +
14918 + pcf85063a@51 {
14919 + compatible = "nxp,pcf85063a";
14920 + reg = <0x51>;
14921 + };
14922 + };
14923 + };
14924 +
14925 + fragment@17 {
14926 + target = <&i2cbus>;
14927 + __dormant__ {
14928 + #address-cells = <1>;
14929 + #size-cells = <0>;
14930 +
14931 + ds1340: ds1340@68 {
14932 + compatible = "dallas,ds1340";
14933 + trickle-resistor-ohms = <0>;
14934 + reg = <0x68>;
14935 + };
14936 + };
14937 + };
14938 +
14939 + fragment@18 {
14940 + target = <&i2cbus>;
14941 + __dormant__ {
14942 + #address-cells = <1>;
14943 + #size-cells = <0>;
14944 +
14945 + s35390a: s35390a@30 {
14946 + compatible = "ablic,s35390a";
14947 + reg = <0x30>;
14948 + };
14949 + };
14950 + };
14951 +
14952 + fragment@19 {
14953 + target = <&i2cbus>;
14954 + __dormant__ {
14955 + #address-cells = <1>;
14956 + #size-cells = <0>;
14957 +
14958 + bq32000: bq32000@68 {
14959 + compatible = "ti,bq32000";
14960 + trickle-resistor-ohms = <0>;
14961 + reg = <0x68>;
14962 + };
14963 + };
14964 + };
14965 +
14966 +
14967 + __overrides__ {
14968 + abx80x = <0>,"+0";
14969 + ds1307 = <0>,"+1";
14970 + ds1339 = <0>,"+2";
14971 + ds1340 = <0>,"+17";
14972 + ds3231 = <0>,"+3";
14973 + mcp7940x = <0>,"+4";
14974 + mcp7941x = <0>,"+5";
14975 + pcf2127 = <0>,"+6";
14976 + pcf8523 = <0>,"+7";
14977 + pcf8563 = <0>,"+8";
14978 + m41t62 = <0>,"+9";
14979 + rv3028 = <0>,"+10";
14980 + pcf2129 = <0>,"+11";
14981 + pcf85363 = <0>,"+12";
14982 + rv1805 = <0>,"+13";
14983 + sd3078 = <0>,"+14";
14984 + pcf85063 = <0>,"+15";
14985 + pcf85063a = <0>,"+16";
14986 + s35390a = <0>,"+18";
14987 + bq32000 = <0>,"+19";
14988 +
14989 + addr = <&abx80x>, "reg:0",
14990 + <&ds1307>, "reg:0",
14991 + <&ds1339>, "reg:0",
14992 + <&ds3231>, "reg:0",
14993 + <&mcp7940x>, "reg:0",
14994 + <&mcp7941x>, "reg:0",
14995 + <&pcf8523>, "reg:0",
14996 + <&pcf8563>, "reg:0",
14997 + <&m41t62>, "reg:0",
14998 + <&rv1805>, "reg:0",
14999 + <&s35390a>, "reg:0";
15000 + trickle-diode-disable = <&bq32000>,"trickle-diode-disable?";
15001 + trickle-diode-type = <&abx80x>,"abracon,tc-diode",
15002 + <&rv1805>,"abracon,tc-diode";
15003 + trickle-resistor-ohms = <&ds1339>,"trickle-resistor-ohms:0",
15004 + <&ds1340>,"trickle-resistor-ohms:0",
15005 + <&abx80x>,"abracon,tc-resistor:0",
15006 + <&rv3028>,"trickle-resistor-ohms:0",
15007 + <&rv1805>,"abracon,tc-resistor:0",
15008 + <&bq32000>,"abracon,tc-resistor:0";
15009 + backup-switchover-mode = <&rv3028>,"backup-switchover-mode:0";
15010 + wakeup-source = <&ds1339>,"wakeup-source?",
15011 + <&ds3231>,"wakeup-source?",
15012 + <&mcp7940x>,"wakeup-source?",
15013 + <&mcp7941x>,"wakeup-source?",
15014 + <&m41t62>,"wakeup-source?";
15015 + };
15016 +};
15017 diff --git a/arch/arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts b/arch/arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts
15018 new file mode 100644
15019 index 000000000000..c83480c1c327
15020 --- /dev/null
15021 +++ b/arch/arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts
15022 @@ -0,0 +1,31 @@
15023 +// Definitions for several I2C based Real Time Clocks
15024 +// Available through i2c-gpio
15025 +/dts-v1/;
15026 +/plugin/;
15027 +
15028 +#include <dt-bindings/gpio/gpio.h>
15029 +
15030 +#include "i2c-rtc-common.dtsi"
15031 +
15032 +/ {
15033 + fragment@100 {
15034 + target-path = "/";
15035 + __overlay__ {
15036 + i2cbus: i2c-gpio-rtc@0 {
15037 + compatible = "i2c-gpio";
15038 + gpios = <&gpio 23 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN) /* sda */
15039 + &gpio 24 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN) /* scl */
15040 + >;
15041 + i2c-gpio,delay-us = <2>; /* ~100 kHz */
15042 + #address-cells = <1>;
15043 + #size-cells = <0>;
15044 + };
15045 + };
15046 + };
15047 +
15048 + __overrides__ {
15049 + i2c_gpio_sda = <&i2cbus>,"gpios:4";
15050 + i2c_gpio_scl = <&i2cbus>,"gpios:16";
15051 + i2c_gpio_delay_us = <&i2cbus>,"i2c-gpio,delay-us:0";
15052 + };
15053 +};
15054 diff --git a/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts b/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
15055 new file mode 100644
15056 index 000000000000..1eae9e1a5c96
15057 --- /dev/null
15058 +++ b/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
15059 @@ -0,0 +1,34 @@
15060 +// Definitions for several I2C based Real Time Clocks
15061 +/dts-v1/;
15062 +/plugin/;
15063 +
15064 +#include "i2c-rtc-common.dtsi"
15065 +
15066 +/ {
15067 + frag100: fragment@100 {
15068 + target = <&i2c_arm>;
15069 + i2cbus: __overlay__ {
15070 + status = "okay";
15071 + };
15072 + };
15073 +
15074 + fragment@101 {
15075 + target = <&i2c0if>;
15076 + __dormant__ {
15077 + status = "okay";
15078 + };
15079 + };
15080 +
15081 + fragment@102 {
15082 + target = <&i2c0mux>;
15083 + __dormant__ {
15084 + status = "okay";
15085 + };
15086 + };
15087 +
15088 + __overrides__ {
15089 + i2c0 = <&frag100>, "target:0=",<&i2c0>;
15090 + i2c_csi_dsi = <&frag100>, "target:0=",<&i2c_csi_dsi>,
15091 + <0>,"+101+102";
15092 + };
15093 +};
15094 diff --git a/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts b/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
15095 new file mode 100755
15096 index 000000000000..b05b0fa91942
15097 --- /dev/null
15098 +++ b/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
15099 @@ -0,0 +1,320 @@
15100 +// Definitions for I2C based sensors using the Industrial IO or HWMON interface.
15101 +/dts-v1/;
15102 +/plugin/;
15103 +
15104 +/ {
15105 + compatible = "brcm,bcm2835";
15106 +
15107 + fragment@0 {
15108 + target = <&i2c_arm>;
15109 + __dormant__ {
15110 + #address-cells = <1>;
15111 + #size-cells = <0>;
15112 + status = "okay";
15113 +
15114 + bme280: bme280@76 {
15115 + compatible = "bosch,bme280";
15116 + reg = <0x76>;
15117 + status = "okay";
15118 + };
15119 + };
15120 + };
15121 +
15122 + fragment@1 {
15123 + target = <&i2c_arm>;
15124 + __dormant__ {
15125 + #address-cells = <1>;
15126 + #size-cells = <0>;
15127 + status = "okay";
15128 +
15129 + bmp085: bmp085@77 {
15130 + compatible = "bosch,bmp085";
15131 + reg = <0x77>;
15132 + default-oversampling = <3>;
15133 + status = "okay";
15134 + };
15135 + };
15136 + };
15137 +
15138 + fragment@2 {
15139 + target = <&i2c_arm>;
15140 + __dormant__ {
15141 + #address-cells = <1>;
15142 + #size-cells = <0>;
15143 + status = "okay";
15144 +
15145 + bmp180: bmp180@77 {
15146 + compatible = "bosch,bmp180";
15147 + reg = <0x77>;
15148 + status = "okay";
15149 + };
15150 + };
15151 + };
15152 +
15153 + fragment@3 {
15154 + target = <&i2c_arm>;
15155 + __dormant__ {
15156 + #address-cells = <1>;
15157 + #size-cells = <0>;
15158 + status = "okay";
15159 +
15160 + bmp280: bmp280@76 {
15161 + compatible = "bosch,bmp280";
15162 + reg = <0x76>;
15163 + status = "okay";
15164 + };
15165 + };
15166 + };
15167 +
15168 + fragment@4 {
15169 + target = <&i2c_arm>;
15170 + __dormant__ {
15171 + #address-cells = <1>;
15172 + #size-cells = <0>;
15173 + status = "okay";
15174 +
15175 + htu21: htu21@40 {
15176 + compatible = "htu21";
15177 + reg = <0x40>;
15178 + status = "okay";
15179 + };
15180 + };
15181 + };
15182 +
15183 + fragment@5 {
15184 + target = <&i2c_arm>;
15185 + __dormant__ {
15186 + #address-cells = <1>;
15187 + #size-cells = <0>;
15188 + status = "okay";
15189 +
15190 + lm75: lm75@4f {
15191 + compatible = "lm75";
15192 + reg = <0x4f>;
15193 + status = "okay";
15194 + };
15195 + };
15196 + };
15197 +
15198 + fragment@6 {
15199 + target = <&i2c_arm>;
15200 + __dormant__ {
15201 + #address-cells = <1>;
15202 + #size-cells = <0>;
15203 + status = "okay";
15204 +
15205 + si7020: si7020@40 {
15206 + compatible = "si7020";
15207 + reg = <0x40>;
15208 + status = "okay";
15209 + };
15210 + };
15211 + };
15212 +
15213 + fragment@7 {
15214 + target = <&i2c_arm>;
15215 + __dormant__ {
15216 + #address-cells = <1>;
15217 + #size-cells = <0>;
15218 + status = "okay";
15219 +
15220 + tmp102: tmp102@48 {
15221 + compatible = "ti,tmp102";
15222 + reg = <0x48>;
15223 + status = "okay";
15224 + };
15225 + };
15226 + };
15227 +
15228 + fragment@8 {
15229 + target = <&i2c_arm>;
15230 + __dormant__ {
15231 + #address-cells = <1>;
15232 + #size-cells = <0>;
15233 + status = "okay";
15234 +
15235 + hdc100x: hdc100x@40 {
15236 + compatible = "hdc100x";
15237 + reg = <0x40>;
15238 + status = "okay";
15239 + };
15240 + };
15241 + };
15242 +
15243 + fragment@9 {
15244 + target = <&i2c_arm>;
15245 + __dormant__ {
15246 + #address-cells = <1>;
15247 + #size-cells = <0>;
15248 + status = "okay";
15249 +
15250 + tsl4531: tsl4531@29 {
15251 + compatible = "tsl4531";
15252 + reg = <0x29>;
15253 + status = "okay";
15254 + };
15255 + };
15256 + };
15257 +
15258 + fragment@10 {
15259 + target = <&i2c_arm>;
15260 + __dormant__ {
15261 + #address-cells = <1>;
15262 + #size-cells = <0>;
15263 + status = "okay";
15264 +
15265 + veml6070: veml6070@38 {
15266 + compatible = "veml6070";
15267 + reg = <0x38>;
15268 + status = "okay";
15269 + };
15270 + };
15271 + };
15272 +
15273 + fragment@11 {
15274 + target = <&i2c_arm>;
15275 + __dormant__ {
15276 + #address-cells = <1>;
15277 + #size-cells = <0>;
15278 + status = "okay";
15279 +
15280 + sht3x: sht3x@44 {
15281 + compatible = "sht3x";
15282 + reg = <0x44>;
15283 + status = "okay";
15284 + };
15285 + };
15286 + };
15287 +
15288 + fragment@12 {
15289 + target = <&i2c_arm>;
15290 + __dormant__ {
15291 + #address-cells = <1>;
15292 + #size-cells = <0>;
15293 + status = "okay";
15294 +
15295 + ds1621: ds1621@48 {
15296 + compatible = "ds1621";
15297 + reg = <0x48>;
15298 + status = "okay";
15299 + };
15300 + };
15301 + };
15302 +
15303 + fragment@13 {
15304 + target = <&i2c_arm>;
15305 + __dormant__ {
15306 + #address-cells = <1>;
15307 + #size-cells = <0>;
15308 + status = "okay";
15309 +
15310 + max17040: max17040@36 {
15311 + compatible = "maxim,max17040";
15312 + reg = <0x36>;
15313 + status = "okay";
15314 + };
15315 + };
15316 + };
15317 +
15318 + fragment@14 {
15319 + target = <&i2c_arm>;
15320 + __dormant__ {
15321 + #address-cells = <1>;
15322 + #size-cells = <0>;
15323 + status = "okay";
15324 +
15325 + bme680: bme680@76 {
15326 + compatible = "bosch,bme680";
15327 + reg = <0x76>;
15328 + status = "okay";
15329 + };
15330 + };
15331 + };
15332 +
15333 + fragment@15 {
15334 + target = <&i2c_arm>;
15335 + __dormant__ {
15336 + #address-cells = <1>;
15337 + #size-cells = <0>;
15338 + status = "okay";
15339 +
15340 + sps30: sps30@69 {
15341 + compatible = "sensirion,sps30";
15342 + reg = <0x69>;
15343 + status = "okay";
15344 + };
15345 + };
15346 + };
15347 +
15348 + fragment@16 {
15349 + target = <&i2c_arm>;
15350 + __dormant__ {
15351 + #address-cells = <1>;
15352 + #size-cells = <0>;
15353 + status = "okay";
15354 +
15355 + sgp30: sgp30@58 {
15356 + compatible = "sensirion,sgp30";
15357 + reg = <0x58>;
15358 + status = "okay";
15359 + };
15360 + };
15361 + };
15362 +
15363 + fragment@17 {
15364 + target = <&i2c_arm>;
15365 + __dormant__ {
15366 + #address-cells = <1>;
15367 + #size-cells = <0>;
15368 + status = "okay";
15369 +
15370 + ccs811: ccs811@5b {
15371 + compatible = "ccs811";
15372 + reg = <0x5b>;
15373 + status = "okay";
15374 + };
15375 + };
15376 + };
15377 +
15378 + fragment@18 {
15379 + target = <&i2c_arm>;
15380 + __dormant__ {
15381 + #address-cells = <1>;
15382 + #size-cells = <0>;
15383 + status = "okay";
15384 +
15385 + bh1750: bh1750@23 {
15386 + compatible = "bh1750";
15387 + reg = <0x23>;
15388 + status = "okay";
15389 + };
15390 + };
15391 + };
15392 +
15393 + __overrides__ {
15394 + addr = <&bme280>,"reg:0", <&bmp280>,"reg:0", <&tmp102>,"reg:0",
15395 + <&lm75>,"reg:0", <&hdc100x>,"reg:0", <&sht3x>,"reg:0",
15396 + <&ds1621>,"reg:0", <&bme680>,"reg:0", <&ccs811>,"reg:0",
15397 + <&bh1750>,"reg:0";
15398 + bme280 = <0>,"+0";
15399 + bmp085 = <0>,"+1";
15400 + bmp180 = <0>,"+2";
15401 + bmp280 = <0>,"+3";
15402 + htu21 = <0>,"+4";
15403 + lm75 = <0>,"+5";
15404 + lm75addr = <&lm75>,"reg:0";
15405 + si7020 = <0>,"+6";
15406 + tmp102 = <0>,"+7";
15407 + hdc100x = <0>,"+8";
15408 + tsl4531 = <0>,"+9";
15409 + veml6070 = <0>,"+10";
15410 + sht3x = <0>,"+11";
15411 + ds1621 = <0>,"+12";
15412 + max17040 = <0>,"+13";
15413 + bme680 = <0>,"+14";
15414 + sps30 = <0>,"+15";
15415 + sgp30 = <0>,"+16";
15416 + ccs811 = <0>, "+17";
15417 + bh1750 = <0>, "+18";
15418 + };
15419 +};
15420 diff --git a/arch/arm/boot/dts/overlays/i2c0-overlay.dts b/arch/arm/boot/dts/overlays/i2c0-overlay.dts
15421 new file mode 100644
15422 index 000000000000..46bf1bf2dc5c
15423 --- /dev/null
15424 +++ b/arch/arm/boot/dts/overlays/i2c0-overlay.dts
15425 @@ -0,0 +1,83 @@
15426 +/dts-v1/;
15427 +/plugin/;
15428 +
15429 +/{
15430 + compatible = "brcm,bcm2835";
15431 +
15432 + fragment@0 {
15433 + target = <&i2c0if>;
15434 + __overlay__ {
15435 + status = "okay";
15436 + pinctrl-names = "default";
15437 + pinctrl-0 = <&i2c0_pins>;
15438 + };
15439 + };
15440 +
15441 + fragment@1 {
15442 + target = <&i2c0_pins>;
15443 + pins1: __overlay__ {
15444 + brcm,pins = <0 1>;
15445 + brcm,function = <4>; /* alt0 */
15446 + };
15447 + };
15448 +
15449 + fragment@2 {
15450 + target = <&i2c0_pins>;
15451 + pins2: __dormant__ {
15452 + brcm,pins = <28 29>;
15453 + brcm,function = <4>; /* alt0 */
15454 + };
15455 + };
15456 +
15457 + fragment@3 {
15458 + target = <&i2c0_pins>;
15459 + pins3: __dormant__ {
15460 + brcm,pins = <44 45>;
15461 + brcm,function = <5>; /* alt1 */
15462 + };
15463 + };
15464 +
15465 + fragment@4 {
15466 + target = <&i2c0_pins>;
15467 + pins4: __dormant__ {
15468 + brcm,pins = <46 47>;
15469 + brcm,function = <4>; /* alt0 */
15470 + };
15471 + };
15472 +
15473 + fragment@5 {
15474 + target = <&i2c0>;
15475 + __dormant__ {
15476 + compatible = "brcm,bcm2708-i2c";
15477 + };
15478 + };
15479 +
15480 + fragment@6 {
15481 + target = <&i2c0mux>;
15482 + __overlay__ {
15483 + status = "disabled";
15484 + };
15485 + };
15486 +
15487 + fragment@7 {
15488 + target-path = "/aliases";
15489 + __overlay__ {
15490 + i2c0 = "/soc/i2c@7e205000";
15491 + };
15492 + };
15493 +
15494 + fragment@8 {
15495 + target-path = "/__symbols__";
15496 + __overlay__ {
15497 + i2c0 = "/soc/i2c@7e205000";
15498 + };
15499 + };
15500 +
15501 + __overrides__ {
15502 + pins_0_1 = <0>,"+1-2-3-4";
15503 + pins_28_29 = <0>,"-1+2-3-4";
15504 + pins_44_45 = <0>,"-1-2+3-4";
15505 + pins_46_47 = <0>,"-1-2-3+4";
15506 + combine = <0>, "!5";
15507 + };
15508 +};
15509 diff --git a/arch/arm/boot/dts/overlays/i2c1-overlay.dts b/arch/arm/boot/dts/overlays/i2c1-overlay.dts
15510 new file mode 100644
15511 index 000000000000..addaed73e665
15512 --- /dev/null
15513 +++ b/arch/arm/boot/dts/overlays/i2c1-overlay.dts
15514 @@ -0,0 +1,44 @@
15515 +/dts-v1/;
15516 +/plugin/;
15517 +
15518 +/{
15519 + compatible = "brcm,bcm2835";
15520 +
15521 + fragment@0 {
15522 + target = <&i2c1>;
15523 + __overlay__ {
15524 + status = "okay";
15525 + pinctrl-names = "default";
15526 + pinctrl-0 = <&i2c1_pins>;
15527 + };
15528 + };
15529 +
15530 + fragment@1 {
15531 + target = <&i2c1_pins>;
15532 + pins1: __overlay__ {
15533 + brcm,pins = <2 3>;
15534 + brcm,function = <4>; /* alt 0 */
15535 + };
15536 + };
15537 +
15538 + fragment@2 {
15539 + target = <&i2c1_pins>;
15540 + pins2: __dormant__ {
15541 + brcm,pins = <44 45>;
15542 + brcm,function = <6>; /* alt 2 */
15543 + };
15544 + };
15545 +
15546 + fragment@3 {
15547 + target = <&i2c1>;
15548 + __dormant__ {
15549 + compatible = "brcm,bcm2708-i2c";
15550 + };
15551 + };
15552 +
15553 + __overrides__ {
15554 + pins_2_3 = <0>,"=1!2";
15555 + pins_44_45 = <0>,"!1=2";
15556 + combine = <0>, "!3";
15557 + };
15558 +};
15559 diff --git a/arch/arm/boot/dts/overlays/i2c3-overlay.dts b/arch/arm/boot/dts/overlays/i2c3-overlay.dts
15560 new file mode 100644
15561 index 000000000000..e24a1df21f99
15562 --- /dev/null
15563 +++ b/arch/arm/boot/dts/overlays/i2c3-overlay.dts
15564 @@ -0,0 +1,36 @@
15565 +/dts-v1/;
15566 +/plugin/;
15567 +
15568 +/{
15569 + compatible = "brcm,bcm2711";
15570 +
15571 + fragment@0 {
15572 + target = <&i2c3>;
15573 + frag0: __overlay__ {
15574 + status = "okay";
15575 + pinctrl-names = "default";
15576 + pinctrl-0 = <&i2c3_pins>;
15577 + clock-frequency = <100000>;
15578 + };
15579 + };
15580 +
15581 + fragment@1 {
15582 + target = <&i2c3_pins>;
15583 + __dormant__ {
15584 + brcm,pins = <2 3>;
15585 + };
15586 + };
15587 +
15588 + fragment@2 {
15589 + target = <&i2c3_pins>;
15590 + __overlay__ {
15591 + brcm,pins = <4 5>;
15592 + };
15593 + };
15594 +
15595 + __overrides__ {
15596 + pins_2_3 = <0>,"=1!2";
15597 + pins_4_5 = <0>,"!1=2";
15598 + baudrate = <&frag0>, "clock-frequency:0";
15599 + };
15600 +};
15601 diff --git a/arch/arm/boot/dts/overlays/i2c4-overlay.dts b/arch/arm/boot/dts/overlays/i2c4-overlay.dts
15602 new file mode 100644
15603 index 000000000000..14c7f4d1da4c
15604 --- /dev/null
15605 +++ b/arch/arm/boot/dts/overlays/i2c4-overlay.dts
15606 @@ -0,0 +1,36 @@
15607 +/dts-v1/;
15608 +/plugin/;
15609 +
15610 +/{
15611 + compatible = "brcm,bcm2711";
15612 +
15613 + fragment@0 {
15614 + target = <&i2c4>;
15615 + frag0: __overlay__ {
15616 + status = "okay";
15617 + pinctrl-names = "default";
15618 + pinctrl-0 = <&i2c4_pins>;
15619 + clock-frequency = <100000>;
15620 + };
15621 + };
15622 +
15623 + fragment@1 {
15624 + target = <&i2c4_pins>;
15625 + __dormant__ {
15626 + brcm,pins = <6 7>;
15627 + };
15628 + };
15629 +
15630 + fragment@2 {
15631 + target = <&i2c4_pins>;
15632 + __overlay__ {
15633 + brcm,pins = <8 9>;
15634 + };
15635 + };
15636 +
15637 + __overrides__ {
15638 + pins_6_7 = <0>,"=1!2";
15639 + pins_8_9 = <0>,"!1=2";
15640 + baudrate = <&frag0>, "clock-frequency:0";
15641 + };
15642 +};
15643 diff --git a/arch/arm/boot/dts/overlays/i2c5-overlay.dts b/arch/arm/boot/dts/overlays/i2c5-overlay.dts
15644 new file mode 100644
15645 index 000000000000..7953621112de
15646 --- /dev/null
15647 +++ b/arch/arm/boot/dts/overlays/i2c5-overlay.dts
15648 @@ -0,0 +1,36 @@
15649 +/dts-v1/;
15650 +/plugin/;
15651 +
15652 +/{
15653 + compatible = "brcm,bcm2711";
15654 +
15655 + fragment@0 {
15656 + target = <&i2c5>;
15657 + frag0: __overlay__ {
15658 + status = "okay";
15659 + pinctrl-names = "default";
15660 + pinctrl-0 = <&i2c5_pins>;
15661 + clock-frequency = <100000>;
15662 + };
15663 + };
15664 +
15665 + fragment@1 {
15666 + target = <&i2c5_pins>;
15667 + __dormant__ {
15668 + brcm,pins = <10 11>;
15669 + };
15670 + };
15671 +
15672 + fragment@2 {
15673 + target = <&i2c5_pins>;
15674 + __overlay__ {
15675 + brcm,pins = <12 13>;
15676 + };
15677 + };
15678 +
15679 + __overrides__ {
15680 + pins_10_11 = <0>,"=1!2";
15681 + pins_12_13 = <0>,"!1=2";
15682 + baudrate = <&frag0>, "clock-frequency:0";
15683 + };
15684 +};
15685 diff --git a/arch/arm/boot/dts/overlays/i2c6-overlay.dts b/arch/arm/boot/dts/overlays/i2c6-overlay.dts
15686 new file mode 100644
15687 index 000000000000..555305a7ee1f
15688 --- /dev/null
15689 +++ b/arch/arm/boot/dts/overlays/i2c6-overlay.dts
15690 @@ -0,0 +1,36 @@
15691 +/dts-v1/;
15692 +/plugin/;
15693 +
15694 +/{
15695 + compatible = "brcm,bcm2711";
15696 +
15697 + fragment@0 {
15698 + target = <&i2c6>;
15699 + frag0: __overlay__ {
15700 + status = "okay";
15701 + pinctrl-names = "default";
15702 + pinctrl-0 = <&i2c6_pins>;
15703 + clock-frequency = <100000>;
15704 + };
15705 + };
15706 +
15707 + fragment@1 {
15708 + target = <&i2c6_pins>;
15709 + __dormant__ {
15710 + brcm,pins = <0 1>;
15711 + };
15712 + };
15713 +
15714 + fragment@2 {
15715 + target = <&i2c6_pins>;
15716 + __overlay__ {
15717 + brcm,pins = <22 23>;
15718 + };
15719 + };
15720 +
15721 + __overrides__ {
15722 + pins_0_1 = <0>,"=1!2";
15723 + pins_22_23 = <0>,"!1=2";
15724 + baudrate = <&frag0>, "clock-frequency:0";
15725 + };
15726 +};
15727 diff --git a/arch/arm/boot/dts/overlays/i2s-gpio28-31-overlay.dts b/arch/arm/boot/dts/overlays/i2s-gpio28-31-overlay.dts
15728 new file mode 100644
15729 index 000000000000..cf43094c6ff4
15730 --- /dev/null
15731 +++ b/arch/arm/boot/dts/overlays/i2s-gpio28-31-overlay.dts
15732 @@ -0,0 +1,18 @@
15733 +/*
15734 + * Device tree overlay to move i2s to gpio 28 to 31 on CM
15735 + */
15736 +
15737 +/dts-v1/;
15738 +/plugin/;
15739 +
15740 +/ {
15741 + compatible = "brcm,bcm2835";
15742 +
15743 + fragment@0 {
15744 + target = <&i2s_pins>;
15745 + __overlay__ {
15746 + brcm,pins = <28 29 30 31>;
15747 + brcm,function = <6>; /* alt2 */
15748 + };
15749 + };
15750 +};
15751 diff --git a/arch/arm/boot/dts/overlays/ilitek251x-overlay.dts b/arch/arm/boot/dts/overlays/ilitek251x-overlay.dts
15752 new file mode 100644
15753 index 000000000000..551aba591d26
15754 --- /dev/null
15755 +++ b/arch/arm/boot/dts/overlays/ilitek251x-overlay.dts
15756 @@ -0,0 +1,45 @@
15757 +// Device tree overlay for I2C connected Ilitek multiple touch controller
15758 +/dts-v1/;
15759 +/plugin/;
15760 +
15761 + / {
15762 + compatible = "brcm,bcm2835";
15763 +
15764 + fragment@0 {
15765 + target = <&gpio>;
15766 + __overlay__ {
15767 + ili251x_pins: ili251x_pins {
15768 + brcm,pins = <4>; // interrupt
15769 + brcm,function = <0>; // in
15770 + brcm,pull = <2>; // pull-up //
15771 + };
15772 + };
15773 + };
15774 +
15775 + fragment@1 {
15776 + target = <&i2c1>;
15777 + __overlay__ {
15778 + #address-cells = <1>;
15779 + #size-cells = <0>;
15780 + status = "okay";
15781 +
15782 + ili251x: ili251x@41 {
15783 + compatible = "ilitek,ili251x";
15784 + reg = <0x41>;
15785 + pinctrl-names = "default";
15786 + pinctrl-0 = <&ili251x_pins>;
15787 + interrupt-parent = <&gpio>;
15788 + interrupts = <4 8>; // high-to-low edge triggered
15789 + touchscreen-size-x = <16384>;
15790 + touchscreen-size-y = <9600>;
15791 + };
15792 + };
15793 + };
15794 +
15795 + __overrides__ {
15796 + interrupt = <&ili251x_pins>,"brcm,pins:0",
15797 + <&ili251x>,"interrupts:0";
15798 + sizex = <&ili251x>,"touchscreen-size-x:0";
15799 + sizey = <&ili251x>,"touchscreen-size-y:0";
15800 + };
15801 +};
15802 diff --git a/arch/arm/boot/dts/overlays/imx219-overlay.dts b/arch/arm/boot/dts/overlays/imx219-overlay.dts
15803 new file mode 100644
15804 index 000000000000..0c065bf09f54
15805 --- /dev/null
15806 +++ b/arch/arm/boot/dts/overlays/imx219-overlay.dts
15807 @@ -0,0 +1,115 @@
15808 +// SPDX-License-Identifier: GPL-2.0-only
15809 +// Definitions for IMX219 camera module on VC I2C bus
15810 +/dts-v1/;
15811 +/plugin/;
15812 +
15813 +#include <dt-bindings/gpio/gpio.h>
15814 +
15815 +/{
15816 + compatible = "brcm,bcm2835";
15817 +
15818 + fragment@0 {
15819 + target = <&i2c_csi_dsi>;
15820 + __overlay__ {
15821 + #address-cells = <1>;
15822 + #size-cells = <0>;
15823 + status = "okay";
15824 +
15825 + imx219: imx219@10 {
15826 + compatible = "sony,imx219";
15827 + reg = <0x10>;
15828 + status = "okay";
15829 +
15830 + clocks = <&imx219_clk>;
15831 + clock-names = "xclk";
15832 +
15833 + VANA-supply = <&cam1_reg>; /* 2.8v */
15834 + VDIG-supply = <&imx219_vdig>; /* 1.8v */
15835 + VDDL-supply = <&imx219_vddl>; /* 1.2v */
15836 +
15837 + rotation = <180>;
15838 + orientation = <2>;
15839 +
15840 + port {
15841 + imx219_0: endpoint {
15842 + remote-endpoint = <&csi1_ep>;
15843 + clock-lanes = <0>;
15844 + data-lanes = <1 2>;
15845 + clock-noncontinuous;
15846 + link-frequencies =
15847 + /bits/ 64 <456000000>;
15848 + };
15849 + };
15850 + };
15851 + };
15852 + };
15853 +
15854 + fragment@1 {
15855 + target = <&csi1>;
15856 + __overlay__ {
15857 + status = "okay";
15858 +
15859 + port {
15860 + csi1_ep: endpoint {
15861 + remote-endpoint = <&imx219_0>;
15862 + clock-lanes = <0>;
15863 + data-lanes = <1 2>;
15864 + clock-noncontinuous;
15865 + };
15866 + };
15867 + };
15868 + };
15869 +
15870 + fragment@2 {
15871 + target = <&i2c0if>;
15872 + __overlay__ {
15873 + status = "okay";
15874 + };
15875 + };
15876 +
15877 + fragment@3 {
15878 + target-path="/";
15879 + __overlay__ {
15880 + imx219_vdig: fixedregulator@1 {
15881 + compatible = "regulator-fixed";
15882 + regulator-name = "imx219_vdig";
15883 + regulator-min-microvolt = <1800000>;
15884 + regulator-max-microvolt = <1800000>;
15885 + };
15886 + imx219_vddl: fixedregulator@2 {
15887 + compatible = "regulator-fixed";
15888 + regulator-name = "imx219_vddl";
15889 + regulator-min-microvolt = <1200000>;
15890 + regulator-max-microvolt = <1200000>;
15891 + };
15892 +
15893 + imx219_clk: camera-clk {
15894 + compatible = "fixed-clock";
15895 + #clock-cells = <0>;
15896 + clock-frequency = <24000000>;
15897 + };
15898 + };
15899 + };
15900 +
15901 + fragment@4 {
15902 + target = <&i2c0mux>;
15903 + __overlay__ {
15904 + status = "okay";
15905 + };
15906 + };
15907 +
15908 + fragment@5 {
15909 + target = <&cam1_reg>;
15910 + __overlay__ {
15911 + status = "okay";
15912 + regulator-name = "imx219_vana";
15913 + regulator-min-microvolt = <2800000>;
15914 + regulator-max-microvolt = <2800000>;
15915 + };
15916 + };
15917 +
15918 + __overrides__ {
15919 + rotation = <&imx219>,"rotation:0";
15920 + orientation = <&imx219>,"orientation:0";
15921 + };
15922 +};
15923 diff --git a/arch/arm/boot/dts/overlays/imx290-overlay.dts b/arch/arm/boot/dts/overlays/imx290-overlay.dts
15924 new file mode 100644
15925 index 000000000000..e536aa7f9e33
15926 --- /dev/null
15927 +++ b/arch/arm/boot/dts/overlays/imx290-overlay.dts
15928 @@ -0,0 +1,32 @@
15929 +// SPDX-License-Identifier: GPL-2.0-only
15930 +// Definitions for IMX290 camera module on VC I2C bus
15931 +/dts-v1/;
15932 +/plugin/;
15933 +
15934 +#include <dt-bindings/gpio/gpio.h>
15935 +#include "imx290_327-overlay.dtsi"
15936 +
15937 +/{
15938 + compatible = "brcm,bcm2835";
15939 +
15940 + // Fragment numbers deliberately high to avoid conflicts with the
15941 + // included imx290_327 overlay file.
15942 +
15943 + fragment@101 {
15944 + target = <&imx290>;
15945 + __overlay__ {
15946 + compatible = "sony,imx290";
15947 + };
15948 + };
15949 +
15950 + fragment@102 {
15951 + target = <&imx290>;
15952 + __dormant__ {
15953 + compatible = "sony,imx290-mono";
15954 + };
15955 + };
15956 +
15957 + __overrides__ {
15958 + mono = <0>, "-101+102";
15959 + };
15960 +};
15961 diff --git a/arch/arm/boot/dts/overlays/imx290_327-overlay.dtsi b/arch/arm/boot/dts/overlays/imx290_327-overlay.dtsi
15962 new file mode 100644
15963 index 000000000000..d4a5ed6dbbcf
15964 --- /dev/null
15965 +++ b/arch/arm/boot/dts/overlays/imx290_327-overlay.dtsi
15966 @@ -0,0 +1,144 @@
15967 +// SPDX-License-Identifier: GPL-2.0-only
15968 +// Partial definitions for IMX290 or IMX327 camera module on VC I2C bus
15969 +// The compatible string should be set in an overlay that then includes this one
15970 +/dts-v1/;
15971 +/plugin/;
15972 +
15973 +#include <dt-bindings/gpio/gpio.h>
15974 +
15975 +/{
15976 + compatible = "brcm,bcm2835";
15977 +
15978 + fragment@0 {
15979 + target = <&i2c_csi_dsi>;
15980 + __overlay__ {
15981 + #address-cells = <1>;
15982 + #size-cells = <0>;
15983 + status = "okay";
15984 +
15985 + imx290: imx290@1a {
15986 + reg = <0x1a>;
15987 + status = "okay";
15988 +
15989 + clocks = <&imx290_clk>;
15990 + clock-names = "xclk";
15991 + clock-frequency = <37125000>;
15992 +
15993 + rotation = <0>;
15994 + orientation = <2>;
15995 +
15996 + vdda-supply = <&cam1_reg>; /* 2.8v */
15997 + vdddo-supply = <&imx290_vdddo>; /* 1.8v */
15998 + vddd-supply = <&imx290_vddd>; /* 1.5v */
15999 +
16000 + port {
16001 + imx290_0: endpoint {
16002 + remote-endpoint = <&csi1_ep>;
16003 + clock-lanes = <0>;
16004 + };
16005 + };
16006 + };
16007 + };
16008 + };
16009 +
16010 + fragment@1 {
16011 + target = <&csi1>;
16012 + __overlay__ {
16013 + status = "okay";
16014 +
16015 + port {
16016 + csi1_ep: endpoint {
16017 + remote-endpoint = <&imx290_0>;
16018 + };
16019 + };
16020 + };
16021 + };
16022 +
16023 + fragment@2 {
16024 + target = <&i2c0if>;
16025 + __overlay__ {
16026 + status = "okay";
16027 + };
16028 + };
16029 +
16030 + fragment@3 {
16031 + target-path="/";
16032 + __overlay__ {
16033 + imx290_vdddo: fixedregulator@1 {
16034 + compatible = "regulator-fixed";
16035 + regulator-name = "imx290_vdddo";
16036 + regulator-min-microvolt = <1800000>;
16037 + regulator-max-microvolt = <1800000>;
16038 + };
16039 + imx290_vddd: fixedregulator@2 {
16040 + compatible = "regulator-fixed";
16041 + regulator-name = "imx290_vddd";
16042 + regulator-min-microvolt = <1500000>;
16043 + regulator-max-microvolt = <1500000>;
16044 + };
16045 +
16046 + imx290_clk: camera-clk {
16047 + compatible = "fixed-clock";
16048 + #clock-cells = <0>;
16049 + clock-frequency = <37125000>;
16050 + };
16051 + };
16052 + };
16053 +
16054 + fragment@4 {
16055 + target = <&i2c0mux>;
16056 + __overlay__ {
16057 + status = "okay";
16058 + };
16059 + };
16060 +
16061 + fragment@5 {
16062 + target = <&cam1_reg>;
16063 + __overlay__ {
16064 + status = "okay";
16065 + regulator-name = "imx290_vdda";
16066 + regulator-min-microvolt = <2800000>;
16067 + regulator-max-microvolt = <2800000>;
16068 + };
16069 + };
16070 +
16071 + fragment@6 {
16072 + target = <&imx290_0>;
16073 + __overlay__ {
16074 + data-lanes = <1 2>;
16075 + link-frequencies =
16076 + /bits/ 64 <445500000 297000000>;
16077 + };
16078 + };
16079 +
16080 + fragment@7 {
16081 + target = <&imx290_0>;
16082 + __dormant__ {
16083 + data-lanes = <1 2 3 4>;
16084 + link-frequencies =
16085 + /bits/ 64 <222750000 148500000>;
16086 + };
16087 + };
16088 +
16089 + fragment@8 {
16090 + target = <&csi1_ep>;
16091 + __overlay__ {
16092 + data-lanes = <1 2>;
16093 + };
16094 + };
16095 +
16096 + fragment@9 {
16097 + target = <&csi1_ep>;
16098 + __dormant__ {
16099 + data-lanes = <1 2 3 4>;
16100 + };
16101 + };
16102 +
16103 + __overrides__ {
16104 + 4lane = <0>, "-6+7-8+9";
16105 + clock-frequency = <&imx290_clk>,"clock-frequency:0",
16106 + <&imx290>,"clock-frequency:0";
16107 + rotation = <&imx290>,"rotation:0";
16108 + orientation = <&imx290>,"orientation:0";
16109 + };
16110 +};
16111 diff --git a/arch/arm/boot/dts/overlays/imx378-overlay.dts b/arch/arm/boot/dts/overlays/imx378-overlay.dts
16112 new file mode 100644
16113 index 000000000000..74c7288d12f5
16114 --- /dev/null
16115 +++ b/arch/arm/boot/dts/overlays/imx378-overlay.dts
16116 @@ -0,0 +1,10 @@
16117 +// SPDX-License-Identifier: GPL-2.0-only
16118 +// Definitions for IMX378 camera module on VC I2C bus
16119 +/dts-v1/;
16120 +/plugin/;
16121 +
16122 +#include "imx477_378-overlay.dtsi"
16123 +
16124 +&imx477 {
16125 + compatible = "sony,imx378";
16126 +};
16127 diff --git a/arch/arm/boot/dts/overlays/imx477-overlay.dts b/arch/arm/boot/dts/overlays/imx477-overlay.dts
16128 new file mode 100644
16129 index 000000000000..ca315d120e6b
16130 --- /dev/null
16131 +++ b/arch/arm/boot/dts/overlays/imx477-overlay.dts
16132 @@ -0,0 +1,10 @@
16133 +// SPDX-License-Identifier: GPL-2.0-only
16134 +// Definitions for IMX477 camera module on VC I2C bus
16135 +/dts-v1/;
16136 +/plugin/;
16137 +
16138 +#include "imx477_378-overlay.dtsi"
16139 +
16140 +&imx477 {
16141 + compatible = "sony,imx477";
16142 +};
16143 diff --git a/arch/arm/boot/dts/overlays/imx477_378-overlay.dtsi b/arch/arm/boot/dts/overlays/imx477_378-overlay.dtsi
16144 new file mode 100644
16145 index 000000000000..bb9a9acdbbd7
16146 --- /dev/null
16147 +++ b/arch/arm/boot/dts/overlays/imx477_378-overlay.dtsi
16148 @@ -0,0 +1,110 @@
16149 +// SPDX-License-Identifier: GPL-2.0-only
16150 +// Definitions for IMX477 camera module on VC I2C bus
16151 +
16152 +/{
16153 + compatible = "brcm,bcm2835";
16154 +
16155 + fragment@0 {
16156 + target = <&i2c_csi_dsi>;
16157 + __overlay__ {
16158 + #address-cells = <1>;
16159 + #size-cells = <0>;
16160 + status = "okay";
16161 +
16162 + imx477: imx477@1a {
16163 + reg = <0x1a>;
16164 + status = "okay";
16165 +
16166 + clocks = <&imx477_clk>;
16167 + clock-names = "xclk";
16168 +
16169 + VANA-supply = <&cam1_reg>; /* 2.8v */
16170 + VDIG-supply = <&imx477_vdig>; /* 1.05v */
16171 + VDDL-supply = <&imx477_vddl>; /* 1.8v */
16172 +
16173 + rotation = <180>;
16174 + orientation = <2>;
16175 +
16176 + port {
16177 + imx477_0: endpoint {
16178 + remote-endpoint = <&csi1_ep>;
16179 + clock-lanes = <0>;
16180 + data-lanes = <1 2>;
16181 + clock-noncontinuous;
16182 + link-frequencies =
16183 + /bits/ 64 <450000000>;
16184 + };
16185 + };
16186 + };
16187 + };
16188 + };
16189 +
16190 + fragment@1 {
16191 + target = <&csi1>;
16192 + __overlay__ {
16193 + status = "okay";
16194 +
16195 + port {
16196 + csi1_ep: endpoint {
16197 + remote-endpoint = <&imx477_0>;
16198 + clock-lanes = <0>;
16199 + data-lanes = <1 2>;
16200 + clock-noncontinuous;
16201 + };
16202 + };
16203 + };
16204 + };
16205 +
16206 + fragment@2 {
16207 + target = <&i2c0if>;
16208 + __overlay__ {
16209 + status = "okay";
16210 + };
16211 + };
16212 +
16213 + fragment@3 {
16214 + target-path="/";
16215 + __overlay__ {
16216 + imx477_vdig: fixedregulator@0 {
16217 + compatible = "regulator-fixed";
16218 + regulator-name = "imx477_vdig";
16219 + regulator-min-microvolt = <1050000>;
16220 + regulator-max-microvolt = <1050000>;
16221 + };
16222 + imx477_vddl: fixedregulator@1 {
16223 + compatible = "regulator-fixed";
16224 + regulator-name = "imx477_vddl";
16225 + regulator-min-microvolt = <1800000>;
16226 + regulator-max-microvolt = <1800000>;
16227 + };
16228 + imx477_clk: camera-clk {
16229 + compatible = "fixed-clock";
16230 + #clock-cells = <0>;
16231 + clock-frequency = <24000000>;
16232 + };
16233 + };
16234 + };
16235 +
16236 + fragment@4 {
16237 + target = <&i2c0mux>;
16238 + __overlay__ {
16239 + status = "okay";
16240 + };
16241 + };
16242 +
16243 + fragment@5 {
16244 + target = <&cam1_reg>;
16245 + __overlay__ {
16246 + status = "okay";
16247 + regulator-name = "imx477_vana";
16248 + startup-delay-us = <300000>;
16249 + regulator-min-microvolt = <2800000>;
16250 + regulator-max-microvolt = <2800000>;
16251 + };
16252 + };
16253 +
16254 + __overrides__ {
16255 + rotation = <&imx477>,"rotation:0";
16256 + orientation = <&imx477>,"orientation:0";
16257 + };
16258 +};
16259 diff --git a/arch/arm/boot/dts/overlays/iqaudio-codec-overlay.dts b/arch/arm/boot/dts/overlays/iqaudio-codec-overlay.dts
16260 new file mode 100644
16261 index 000000000000..9110f5d34298
16262 --- /dev/null
16263 +++ b/arch/arm/boot/dts/overlays/iqaudio-codec-overlay.dts
16264 @@ -0,0 +1,42 @@
16265 +// Definitions for IQaudIO CODEC
16266 +/dts-v1/;
16267 +/plugin/;
16268 +
16269 +/ {
16270 + compatible = "brcm,bcm2835";
16271 +
16272 + fragment@0 {
16273 + target = <&i2s>;
16274 + __overlay__ {
16275 + status = "okay";
16276 + };
16277 + };
16278 +
16279 + fragment@1 {
16280 + target = <&i2c1>;
16281 + __overlay__ {
16282 + #address-cells = <1>;
16283 + #size-cells = <0>;
16284 + status = "okay";
16285 +
16286 + da2713@1a {
16287 + #sound-dai-cells = <0>;
16288 + compatible = "dlg,da7213";
16289 + reg = <0x1a>;
16290 + status = "okay";
16291 + };
16292 + };
16293 + };
16294 +
16295 + fragment@2 {
16296 + target = <&sound>;
16297 + iqaudio_dac: __overlay__ {
16298 + compatible = "iqaudio,iqaudio-codec";
16299 + i2s-controller = <&i2s>;
16300 + status = "okay";
16301 + };
16302 + };
16303 +
16304 + __overrides__ {
16305 + };
16306 +};
16307 diff --git a/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts b/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
16308 new file mode 100644
16309 index 000000000000..24073cadd0ef
16310 --- /dev/null
16311 +++ b/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
16312 @@ -0,0 +1,46 @@
16313 +// Definitions for IQaudIO DAC
16314 +/dts-v1/;
16315 +/plugin/;
16316 +
16317 +/ {
16318 + compatible = "brcm,bcm2835";
16319 +
16320 + fragment@0 {
16321 + target = <&i2s>;
16322 + __overlay__ {
16323 + status = "okay";
16324 + };
16325 + };
16326 +
16327 + fragment@1 {
16328 + target = <&i2c1>;
16329 + __overlay__ {
16330 + #address-cells = <1>;
16331 + #size-cells = <0>;
16332 + status = "okay";
16333 +
16334 + pcm5122@4c {
16335 + #sound-dai-cells = <0>;
16336 + compatible = "ti,pcm5122";
16337 + reg = <0x4c>;
16338 + AVDD-supply = <&vdd_3v3_reg>;
16339 + DVDD-supply = <&vdd_3v3_reg>;
16340 + CPVDD-supply = <&vdd_3v3_reg>;
16341 + status = "okay";
16342 + };
16343 + };
16344 + };
16345 +
16346 + fragment@2 {
16347 + target = <&sound>;
16348 + frag2: __overlay__ {
16349 + compatible = "iqaudio,iqaudio-dac";
16350 + i2s-controller = <&i2s>;
16351 + status = "okay";
16352 + };
16353 + };
16354 +
16355 + __overrides__ {
16356 + 24db_digital_gain = <&frag2>,"iqaudio,24db_digital_gain?";
16357 + };
16358 +};
16359 diff --git a/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts b/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
16360 new file mode 100644
16361 index 000000000000..7c70b25e58d7
16362 --- /dev/null
16363 +++ b/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
16364 @@ -0,0 +1,49 @@
16365 +// Definitions for IQaudIO DAC+
16366 +/dts-v1/;
16367 +/plugin/;
16368 +
16369 +/ {
16370 + compatible = "brcm,bcm2835";
16371 +
16372 + fragment@0 {
16373 + target = <&i2s>;
16374 + __overlay__ {
16375 + status = "okay";
16376 + };
16377 + };
16378 +
16379 + fragment@1 {
16380 + target = <&i2c1>;
16381 + __overlay__ {
16382 + #address-cells = <1>;
16383 + #size-cells = <0>;
16384 + status = "okay";
16385 +
16386 + pcm5122@4c {
16387 + #sound-dai-cells = <0>;
16388 + compatible = "ti,pcm5122";
16389 + reg = <0x4c>;
16390 + AVDD-supply = <&vdd_3v3_reg>;
16391 + DVDD-supply = <&vdd_3v3_reg>;
16392 + CPVDD-supply = <&vdd_3v3_reg>;
16393 + status = "okay";
16394 + };
16395 + };
16396 + };
16397 +
16398 + fragment@2 {
16399 + target = <&sound>;
16400 + iqaudio_dac: __overlay__ {
16401 + compatible = "iqaudio,iqaudio-dac";
16402 + i2s-controller = <&i2s>;
16403 + mute-gpios = <&gpio 22 0>;
16404 + status = "okay";
16405 + };
16406 + };
16407 +
16408 + __overrides__ {
16409 + 24db_digital_gain = <&iqaudio_dac>,"iqaudio,24db_digital_gain?";
16410 + auto_mute_amp = <&iqaudio_dac>,"iqaudio-dac,auto-mute-amp?";
16411 + unmute_amp = <&iqaudio_dac>,"iqaudio-dac,unmute-amp?";
16412 + };
16413 +};
16414 diff --git a/arch/arm/boot/dts/overlays/iqaudio-digi-wm8804-audio-overlay.dts b/arch/arm/boot/dts/overlays/iqaudio-digi-wm8804-audio-overlay.dts
16415 new file mode 100644
16416 index 000000000000..ee54095c869b
16417 --- /dev/null
16418 +++ b/arch/arm/boot/dts/overlays/iqaudio-digi-wm8804-audio-overlay.dts
16419 @@ -0,0 +1,47 @@
16420 +// Definitions for IQAudIO Digi WM8804 audio board
16421 +/dts-v1/;
16422 +/plugin/;
16423 +
16424 +/ {
16425 + compatible = "brcm,bcm2835";
16426 +
16427 + fragment@0 {
16428 + target = <&i2s>;
16429 + __overlay__ {
16430 + status = "okay";
16431 + };
16432 + };
16433 +
16434 + fragment@1 {
16435 + target = <&i2c1>;
16436 + __overlay__ {
16437 + #address-cells = <1>;
16438 + #size-cells = <0>;
16439 + status = "okay";
16440 +
16441 + wm8804@3b {
16442 + #sound-dai-cells = <0>;
16443 + compatible = "wlf,wm8804";
16444 + reg = <0x3b>;
16445 + status = "okay";
16446 + DVDD-supply = <&vdd_3v3_reg>;
16447 + PVDD-supply = <&vdd_3v3_reg>;
16448 + };
16449 + };
16450 + };
16451 +
16452 + fragment@2 {
16453 + target = <&sound>;
16454 + wm8804_digi: __overlay__ {
16455 + compatible = "iqaudio,wm8804-digi";
16456 + i2s-controller = <&i2s>;
16457 + status = "okay";
16458 + };
16459 + };
16460 +
16461 + __overrides__ {
16462 + card_name = <&wm8804_digi>,"wm8804-digi,card-name";
16463 + dai_name = <&wm8804_digi>,"wm8804-digi,dai-name";
16464 + dai_stream_name = <&wm8804_digi>,"wm8804-digi,dai-stream-name";
16465 + };
16466 +};
16467 diff --git a/arch/arm/boot/dts/overlays/irs1125-overlay.dts b/arch/arm/boot/dts/overlays/irs1125-overlay.dts
16468 new file mode 100644
16469 index 000000000000..e926e18e71fc
16470 --- /dev/null
16471 +++ b/arch/arm/boot/dts/overlays/irs1125-overlay.dts
16472 @@ -0,0 +1,85 @@
16473 +// SPDX-License-Identifier: GPL-2.0-only
16474 +// Definitions for IRS1125 camera module on VC I2C bus
16475 +/dts-v1/;
16476 +/plugin/;
16477 +
16478 +/{
16479 + compatible = "brcm,bcm2835";
16480 +
16481 + fragment@0 {
16482 + target = <&i2c_csi_dsi>;
16483 + __overlay__ {
16484 + #address-cells = <1>;
16485 + #size-cells = <0>;
16486 + status = "okay";
16487 +
16488 + irs1125: irs1125@3D {
16489 + compatible = "infineon,irs1125";
16490 + reg = <0x3D>;
16491 + status = "okay";
16492 +
16493 + pwdn-gpios = <&gpio 5 0>;
16494 + clocks = <&irs1125_clk>;
16495 +
16496 + port {
16497 + irs1125_0: endpoint {
16498 + remote-endpoint = <&csi1_ep>;
16499 + clock-lanes = <0>;
16500 + data-lanes = <1 2>;
16501 + clock-noncontinuous;
16502 + link-frequencies =
16503 + /bits/ 64 <297000000>;
16504 + };
16505 + };
16506 + };
16507 + };
16508 + };
16509 +
16510 + fragment@1 {
16511 + target = <&csi1>;
16512 + __overlay__ {
16513 + status = "okay";
16514 +
16515 + port {
16516 + csi1_ep: endpoint {
16517 + remote-endpoint = <&irs1125_0>;
16518 + data-lanes = <1 2>;
16519 + clock-noncontinuous;
16520 + };
16521 + };
16522 + };
16523 + };
16524 +
16525 + fragment@2 {
16526 + target = <&i2c0if>;
16527 + __overlay__ {
16528 + status = "okay";
16529 + };
16530 + };
16531 +
16532 + fragment@3 {
16533 + target = <&i2c0mux>;
16534 + __overlay__ {
16535 + status = "okay";
16536 + };
16537 + };
16538 +
16539 + fragment@4 {
16540 + target-path="/__overrides__";
16541 + __overlay__ {
16542 + cam0-pwdn-ctrl = <&irs1125>,"pwdn-gpios:0";
16543 + cam0-pwdn = <&irs1125>,"pwdn-gpios:4";
16544 + };
16545 + };
16546 +
16547 + fragment@5 {
16548 + target-path = "/";
16549 + __overlay__ {
16550 + irs1125_clk: camera-clk {
16551 + compatible = "fixed-clock";
16552 + #clock-cells = <0>;
16553 + clock-frequency = <26000000>;
16554 + };
16555 + };
16556 + };
16557 +};
16558 diff --git a/arch/arm/boot/dts/overlays/jedec-spi-nor-overlay.dts b/arch/arm/boot/dts/overlays/jedec-spi-nor-overlay.dts
16559 new file mode 100644
16560 index 000000000000..585c7dbcdf7f
16561 --- /dev/null
16562 +++ b/arch/arm/boot/dts/overlays/jedec-spi-nor-overlay.dts
16563 @@ -0,0 +1,309 @@
16564 +// Overlay for JEDEC SPI-NOR Flash Devices (aka m25p80)
16565 +
16566 +// dtparams:
16567 +// flash-spi<n>-<m> - Enables flash device on SPI<n>, CS#<m>.
16568 +// flash-fastr-spi<n>-<m> - Enables flash device with fast read capability on SPI<n>, CS#<m>.
16569 +//
16570 +// If devices are present on SPI1 or SPI2, those interfaces must be enabled with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
16571 +//
16572 +// Example: A single flash device with fast read capability on SPI0, CS#0:
16573 +// dtoverlay=jedec-spi-nor:flash-fastr-spi0-0
16574 +
16575 +/dts-v1/;
16576 +/plugin/;
16577 +
16578 +/ {
16579 + compatible = "brcm,bcm2835";
16580 +
16581 + // disable spi-dev on spi0.0
16582 + fragment@0 {
16583 + target = <&spidev0>;
16584 + __dormant__ {
16585 + status = "disabled";
16586 + };
16587 + };
16588 +
16589 + // disable spi-dev on spi0.1
16590 + fragment@1 {
16591 + target = <&spidev1>;
16592 + __dormant__ {
16593 + status = "disabled";
16594 + };
16595 + };
16596 +
16597 + // disable spi-dev on spi1.0
16598 + fragment@2 {
16599 + target-path = "spi1/spidev@0";
16600 + __dormant__ {
16601 + status = "disabled";
16602 + };
16603 + };
16604 +
16605 + // disable spi-dev on spi1.1
16606 + fragment@3 {
16607 + target-path = "spi1/spidev@1";
16608 + __dormant__ {
16609 + status = "disabled";
16610 + };
16611 + };
16612 +
16613 + // disable spi-dev on spi1.2
16614 + fragment@4 {
16615 + target-path = "spi1/spidev@2";
16616 + __dormant__ {
16617 + status = "disabled";
16618 + };
16619 + };
16620 +
16621 + // disable spi-dev on spi2.0
16622 + fragment@5 {
16623 + target-path = "spi2/spidev@0";
16624 + __dormant__ {
16625 + status = "disabled";
16626 + };
16627 + };
16628 +
16629 + // disable spi-dev on spi2.1
16630 + fragment@6 {
16631 + target-path = "spi2/spidev@1";
16632 + __dormant__ {
16633 + status = "disabled";
16634 + };
16635 + };
16636 +
16637 + // disable spi-dev on spi2.2
16638 + fragment@7 {
16639 + target-path = "spi2/spidev@2";
16640 + __dormant__ {
16641 + status = "disabled";
16642 + };
16643 + };
16644 +
16645 + // enable flash on spi0.0
16646 + fragment@8 {
16647 + target = <&spi0>;
16648 + __dormant__ {
16649 + status = "okay";
16650 + #address-cells = <1>;
16651 + #size-cells = <0>;
16652 + spi_nor_00: spi_nor@0 {
16653 + #address-cells = <1>;
16654 + #size-cells = <1>;
16655 + compatible = "jedec,spi-nor";
16656 + reg = <0>;
16657 + spi-max-frequency = <500000>;
16658 + };
16659 + };
16660 + };
16661 +
16662 + // enable flash on spi0.1
16663 + fragment@9 {
16664 + target = <&spi0>;
16665 + __dormant__ {
16666 + status = "okay";
16667 + #address-cells = <1>;
16668 + #size-cells = <0>;
16669 + spi_nor_01: spi_nor@1 {
16670 + #address-cells = <1>;
16671 + #size-cells = <1>;
16672 + compatible = "jedec,spi-nor";
16673 + reg = <1>;
16674 + spi-max-frequency = <500000>;
16675 + };
16676 + };
16677 + };
16678 +
16679 + // enable flash on spi1.0
16680 + fragment@10 {
16681 + target = <&spi1>;
16682 + __dormant__ {
16683 + status = "okay";
16684 + #address-cells = <1>;
16685 + #size-cells = <0>;
16686 + spi_nor_10: spi_nor@0 {
16687 + #address-cells = <1>;
16688 + #size-cells = <1>;
16689 + compatible = "jedec,spi-nor";
16690 + reg = <0>;
16691 + spi-max-frequency = <500000>;
16692 + };
16693 + };
16694 + };
16695 +
16696 + // enable flash on spi1.1
16697 + fragment@11 {
16698 + target = <&spi1>;
16699 + __dormant__ {
16700 + status = "okay";
16701 + #address-cells = <1>;
16702 + #size-cells = <0>;
16703 + spi_nor_11: spi_nor@1 {
16704 + #address-cells = <1>;
16705 + #size-cells = <1>;
16706 + compatible = "jedec,spi-nor";
16707 + reg = <1>;
16708 + spi-max-frequency = <500000>;
16709 + };
16710 + };
16711 + };
16712 +
16713 + // enable flash on spi1.2
16714 + fragment@12 {
16715 + target = <&spi1>;
16716 + __dormant__ {
16717 + status = "okay";
16718 + #address-cells = <1>;
16719 + #size-cells = <0>;
16720 + spi_nor_12: spi_nor@2 {
16721 + #address-cells = <1>;
16722 + #size-cells = <1>;
16723 + compatible = "jedec,spi-nor";
16724 + reg = <2>;
16725 + spi-max-frequency = <500000>;
16726 + };
16727 + };
16728 + };
16729 +
16730 + // enable flash on spi2.0
16731 + fragment@13 {
16732 + target = <&spi2>;
16733 + __dormant__ {
16734 + status = "okay";
16735 + #address-cells = <1>;
16736 + #size-cells = <0>;
16737 + spi_nor_20: spi_nor@0 {
16738 + #address-cells = <1>;
16739 + #size-cells = <1>;
16740 + compatible = "jedec,spi-nor";
16741 + reg = <0>;
16742 + spi-max-frequency = <500000>;
16743 + };
16744 + };
16745 + };
16746 +
16747 + // enable flash on spi2.1
16748 + fragment@14 {
16749 + target = <&spi2>;
16750 + __dormant__ {
16751 + status = "okay";
16752 + #address-cells = <1>;
16753 + #size-cells = <0>;
16754 + spi_nor_21: spi_nor@1 {
16755 + #address-cells = <1>;
16756 + #size-cells = <1>;
16757 + compatible = "jedec,spi-nor";
16758 + reg = <1>;
16759 + spi-max-frequency = <500000>;
16760 + };
16761 + };
16762 + };
16763 +
16764 + // enable flash on spi2.2
16765 + fragment@15 {
16766 + target = <&spi2>;
16767 + __dormant__ {
16768 + status = "okay";
16769 + #address-cells = <1>;
16770 + #size-cells = <0>;
16771 + spi_nor_22: spi_nor@2 {
16772 + #address-cells = <1>;
16773 + #size-cells = <1>;
16774 + compatible = "jedec,spi-nor";
16775 + reg = <2>;
16776 + spi-max-frequency = <500000>;
16777 + };
16778 + };
16779 + };
16780 +
16781 + // Enable fast read for device on spi0.0.
16782 + // Use default active low interrupt signalling.
16783 + fragment@16 {
16784 + target = <&spi_nor_00>;
16785 + __dormant__ {
16786 + m25p,fast-read;
16787 + };
16788 + };
16789 +
16790 + // Enable fast read for device on spi0.1.
16791 + // Use default active low interrupt signalling.
16792 + fragment@17 {
16793 + target = <&spi_nor_01>;
16794 + __dormant__ {
16795 + m25p,fast-read;
16796 + };
16797 + };
16798 +
16799 + // Enable fast read for device on spi1.0.
16800 + // Use default active low interrupt signalling.
16801 + fragment@18 {
16802 + target = <&spi_nor_10>;
16803 + __dormant__ {
16804 + m25p,fast-read;
16805 + };
16806 + };
16807 +
16808 + // Enable fast read for device on spi1.1.
16809 + // Use default active low interrupt signalling.
16810 + fragment@19 {
16811 + target = <&spi_nor_11>;
16812 + __dormant__ {
16813 + m25p,fast-read;
16814 + };
16815 + };
16816 +
16817 + // Enable fast read for device on spi1.2.
16818 + // Use default active low interrupt signalling.
16819 + fragment@20 {
16820 + target = <&spi_nor_12>;
16821 + __dormant__ {
16822 + m25p,fast-read;
16823 + };
16824 + };
16825 +
16826 + // Enable fast read for device on spi2.0.
16827 + // Use default active low interrupt signalling.
16828 + fragment@21 {
16829 + target = <&spi_nor_20>;
16830 + __dormant__ {
16831 + m25p,fast-read;
16832 + };
16833 + };
16834 +
16835 + // Enable fast read for device on spi2.1.
16836 + // Use default active low interrupt signalling.
16837 + fragment@22 {
16838 + target = <&spi_nor_21>;
16839 + __dormant__ {
16840 + m25p,fast-read;
16841 + };
16842 + };
16843 +
16844 + // Enable fast read for device on spi2.2.
16845 + // Use default active low interrupt signalling.
16846 + fragment@23 {
16847 + target = <&spi_nor_22>;
16848 + __dormant__ {
16849 + m25p,fast-read;
16850 + };
16851 + };
16852 +
16853 + __overrides__ {
16854 + flash-spi0-0 = <0>,"+0+8";
16855 + flash-spi0-1 = <0>,"+1+9";
16856 + flash-spi1-0 = <0>,"+2+10";
16857 + flash-spi1-1 = <0>,"+3+11";
16858 + flash-spi1-2 = <0>,"+4+12";
16859 + flash-spi2-0 = <0>,"+5+13";
16860 + flash-spi2-1 = <0>,"+6+14";
16861 + flash-spi2-2 = <0>,"+7+15";
16862 + flash-fastr-spi0-0 = <0>,"+0+8+16";
16863 + flash-fastr-spi0-1 = <0>,"+1+9+17";
16864 + flash-fastr-spi1-0 = <0>,"+2+10+18";
16865 + flash-fastr-spi1-1 = <0>,"+3+11+19";
16866 + flash-fastr-spi1-2 = <0>,"+4+12+20";
16867 + flash-fastr-spi2-0 = <0>,"+5+13+21";
16868 + flash-fastr-spi2-1 = <0>,"+6+14+22";
16869 + flash-fastr-spi2-2 = <0>,"+7+15+23";
16870 + };
16871 +};
16872 +
16873 diff --git a/arch/arm/boot/dts/overlays/justboom-both-overlay.dts b/arch/arm/boot/dts/overlays/justboom-both-overlay.dts
16874 new file mode 100644
16875 index 000000000000..9c42670631c0
16876 --- /dev/null
16877 +++ b/arch/arm/boot/dts/overlays/justboom-both-overlay.dts
16878 @@ -0,0 +1,65 @@
16879 +// SPDX-License-Identifier: GPL-2.0
16880 +// Definitions for JustBoom Both (Digi+DAC)
16881 +/dts-v1/;
16882 +/plugin/;
16883 +
16884 +/ {
16885 + compatible = "brcm,bcm2835";
16886 +
16887 + fragment@0 {
16888 + target = <&i2s>;
16889 + __overlay__ {
16890 + status = "okay";
16891 + };
16892 + };
16893 +
16894 + fragment@1 {
16895 + target = <&i2c1>;
16896 + __overlay__ {
16897 + #address-cells = <1>;
16898 + #size-cells = <0>;
16899 + status = "okay";
16900 +
16901 + wm8804@3b {
16902 + #sound-dai-cells = <0>;
16903 + compatible = "wlf,wm8804";
16904 + reg = <0x3b>;
16905 + PVDD-supply = <&vdd_3v3_reg>;
16906 + DVDD-supply = <&vdd_3v3_reg>;
16907 + status = "okay";
16908 + };
16909 + };
16910 + };
16911 +
16912 + fragment@2 {
16913 + target = <&i2c1>;
16914 + __overlay__ {
16915 + #address-cells = <1>;
16916 + #size-cells = <0>;
16917 + status = "okay";
16918 +
16919 + pcm5122@4d {
16920 + #sound-dai-cells = <0>;
16921 + compatible = "ti,pcm5122";
16922 + reg = <0x4d>;
16923 + AVDD-supply = <&vdd_3v3_reg>;
16924 + DVDD-supply = <&vdd_3v3_reg>;
16925 + CPVDD-supply = <&vdd_3v3_reg>;
16926 + status = "okay";
16927 + };
16928 + };
16929 + };
16930 +
16931 + fragment@3 {
16932 + target = <&sound>;
16933 + frag3: __overlay__ {
16934 + compatible = "justboom,justboom-both";
16935 + i2s-controller = <&i2s>;
16936 + status = "okay";
16937 + };
16938 + };
16939 +
16940 + __overrides__ {
16941 + 24db_digital_gain = <&frag3>,"justboom,24db_digital_gain?";
16942 + };
16943 +};
16944 diff --git a/arch/arm/boot/dts/overlays/justboom-dac-overlay.dts b/arch/arm/boot/dts/overlays/justboom-dac-overlay.dts
16945 new file mode 100644
16946 index 000000000000..d00515dca419
16947 --- /dev/null
16948 +++ b/arch/arm/boot/dts/overlays/justboom-dac-overlay.dts
16949 @@ -0,0 +1,46 @@
16950 +// Definitions for JustBoom DAC
16951 +/dts-v1/;
16952 +/plugin/;
16953 +
16954 +/ {
16955 + compatible = "brcm,bcm2835";
16956 +
16957 + fragment@0 {
16958 + target = <&i2s>;
16959 + __overlay__ {
16960 + status = "okay";
16961 + };
16962 + };
16963 +
16964 + fragment@1 {
16965 + target = <&i2c1>;
16966 + __overlay__ {
16967 + #address-cells = <1>;
16968 + #size-cells = <0>;
16969 + status = "okay";
16970 +
16971 + pcm5122@4d {
16972 + #sound-dai-cells = <0>;
16973 + compatible = "ti,pcm5122";
16974 + reg = <0x4d>;
16975 + AVDD-supply = <&vdd_3v3_reg>;
16976 + DVDD-supply = <&vdd_3v3_reg>;
16977 + CPVDD-supply = <&vdd_3v3_reg>;
16978 + status = "okay";
16979 + };
16980 + };
16981 + };
16982 +
16983 + fragment@2 {
16984 + target = <&sound>;
16985 + frag2: __overlay__ {
16986 + compatible = "justboom,justboom-dac";
16987 + i2s-controller = <&i2s>;
16988 + status = "okay";
16989 + };
16990 + };
16991 +
16992 + __overrides__ {
16993 + 24db_digital_gain = <&frag2>,"justboom,24db_digital_gain?";
16994 + };
16995 +};
16996 diff --git a/arch/arm/boot/dts/overlays/justboom-digi-overlay.dts b/arch/arm/boot/dts/overlays/justboom-digi-overlay.dts
16997 new file mode 100644
16998 index 000000000000..e73336029c54
16999 --- /dev/null
17000 +++ b/arch/arm/boot/dts/overlays/justboom-digi-overlay.dts
17001 @@ -0,0 +1,41 @@
17002 +// Definitions for JustBoom Digi
17003 +/dts-v1/;
17004 +/plugin/;
17005 +
17006 +/ {
17007 + compatible = "brcm,bcm2835";
17008 +
17009 + fragment@0 {
17010 + target = <&i2s>;
17011 + __overlay__ {
17012 + status = "okay";
17013 + };
17014 + };
17015 +
17016 + fragment@1 {
17017 + target = <&i2c1>;
17018 + __overlay__ {
17019 + #address-cells = <1>;
17020 + #size-cells = <0>;
17021 + status = "okay";
17022 +
17023 + wm8804@3b {
17024 + #sound-dai-cells = <0>;
17025 + compatible = "wlf,wm8804";
17026 + reg = <0x3b>;
17027 + PVDD-supply = <&vdd_3v3_reg>;
17028 + DVDD-supply = <&vdd_3v3_reg>;
17029 + status = "okay";
17030 + };
17031 + };
17032 + };
17033 +
17034 + fragment@2 {
17035 + target = <&sound>;
17036 + __overlay__ {
17037 + compatible = "justboom,justboom-digi";
17038 + i2s-controller = <&i2s>;
17039 + status = "okay";
17040 + };
17041 + };
17042 +};
17043 diff --git a/arch/arm/boot/dts/overlays/ltc294x-overlay.dts b/arch/arm/boot/dts/overlays/ltc294x-overlay.dts
17044 new file mode 100644
17045 index 000000000000..6d971f3649ca
17046 --- /dev/null
17047 +++ b/arch/arm/boot/dts/overlays/ltc294x-overlay.dts
17048 @@ -0,0 +1,86 @@
17049 +/dts-v1/;
17050 +/plugin/;
17051 +
17052 +
17053 +/ {
17054 + compatible = "brcm,bcm2835";
17055 +
17056 + fragment@0 {
17057 + target = <&i2c_arm>;
17058 + __dormant__ {
17059 + #address-cells = <1>;
17060 + #size-cells = <0>;
17061 + status = "okay";
17062 +
17063 + ltc2941: ltc2941@64 {
17064 + compatible = "lltc,ltc2941";
17065 + reg = <0x64>;
17066 + lltc,resistor-sense = <50>;
17067 + lltc,prescaler-exponent = <7>;
17068 + };
17069 + };
17070 + };
17071 +
17072 + fragment@1 {
17073 + target = <&i2c_arm>;
17074 + __dormant__ {
17075 + #address-cells = <1>;
17076 + #size-cells = <0>;
17077 + status = "okay";
17078 +
17079 + ltc2942: ltc2942@64 {
17080 + compatible = "lltc,ltc2942";
17081 + reg = <0x64>;
17082 + lltc,resistor-sense = <50>;
17083 + lltc,prescaler-exponent = <7>;
17084 + };
17085 + };
17086 + };
17087 +
17088 + fragment@2 {
17089 + target = <&i2c_arm>;
17090 + __dormant__ {
17091 + #address-cells = <1>;
17092 + #size-cells = <0>;
17093 + status = "okay";
17094 +
17095 + ltc2943: ltc2943@64 {
17096 + compatible = "lltc,ltc2943";
17097 + reg = <0x64>;
17098 + lltc,resistor-sense = <50>;
17099 + lltc,prescaler-exponent = <7>;
17100 + };
17101 + };
17102 + };
17103 +
17104 + fragment@3 {
17105 + target = <&i2c_arm>;
17106 + __dormant__ {
17107 + #address-cells = <1>;
17108 + #size-cells = <0>;
17109 + status = "okay";
17110 +
17111 + ltc2944: ltc2944@64 {
17112 + compatible = "lltc,ltc2944";
17113 + reg = <0x64>;
17114 + lltc,resistor-sense = <50>;
17115 + lltc,prescaler-exponent = <7>;
17116 + };
17117 + };
17118 + };
17119 +
17120 + __overrides__ {
17121 + ltc2941 = <0>,"+0";
17122 + ltc2942 = <0>,"+1";
17123 + ltc2943 = <0>,"+2";
17124 + ltc2944 = <0>,"+3";
17125 + resistor-sense = <&ltc2941>, "lltc,resistor-sense:0",
17126 + <&ltc2942>, "lltc,resistor-sense:0",
17127 + <&ltc2943>, "lltc,resistor-sense:0",
17128 + <&ltc2944>, "lltc,resistor-sense:0";
17129 + prescaler-exponent = <&ltc2941>, "lltc,prescaler-exponent:0",
17130 + <&ltc2942>, "lltc,prescaler-exponent:0",
17131 + <&ltc2943>, "lltc,prescaler-exponent:0",
17132 + <&ltc2944>, "lltc,prescaler-exponent:0";
17133 + };
17134 +};
17135 diff --git a/arch/arm/boot/dts/overlays/max98357a-overlay.dts b/arch/arm/boot/dts/overlays/max98357a-overlay.dts
17136 new file mode 100644
17137 index 000000000000..9e2afb05b7cb
17138 --- /dev/null
17139 +++ b/arch/arm/boot/dts/overlays/max98357a-overlay.dts
17140 @@ -0,0 +1,84 @@
17141 +// Overlay for Maxim MAX98357A audio DAC
17142 +
17143 +// dtparams:
17144 +// no-sdmode - SD_MODE pin not managed by driver.
17145 +// sdmode-pin - Specify GPIO pin to which SD_MODE is connected (default 4).
17146 +
17147 +/dts-v1/;
17148 +/plugin/;
17149 +
17150 +/ {
17151 + compatible = "brcm,bcm2835";
17152 +
17153 + /* Enable I2S */
17154 + fragment@0 {
17155 + target = <&i2s>;
17156 + __overlay__ {
17157 + status = "okay";
17158 + };
17159 + };
17160 +
17161 + /* DAC whose SD_MODE pin is managed by driver (via GPIO pin) */
17162 + fragment@1 {
17163 + target-path = "/";
17164 + __overlay__ {
17165 + max98357a_dac: max98357a {
17166 + compatible = "maxim,max98357a";
17167 + #sound-dai-cells = <0>;
17168 + sdmode-gpios = <&gpio 4 0>; /* 2nd word overwritten by sdmode-pin parameter */
17169 + status = "okay";
17170 + };
17171 + };
17172 + };
17173 +
17174 + /* DAC whose SD_MODE pin is not managed by driver */
17175 + fragment@2 {
17176 + target-path = "/";
17177 + __dormant__ {
17178 + max98357a_nsd: max98357a {
17179 + compatible = "maxim,max98357a";
17180 + #sound-dai-cells = <0>;
17181 + status = "okay";
17182 + };
17183 + };
17184 + };
17185 +
17186 + /* Soundcard connecting I2S to DAC with SD_MODE */
17187 + fragment@3 {
17188 + target = <&sound>;
17189 + __overlay__ {
17190 + compatible = "simple-audio-card";
17191 + simple-audio-card,format = "i2s";
17192 + simple-audio-card,name = "MAX98357A";
17193 + status = "okay";
17194 + simple-audio-card,cpu {
17195 + sound-dai = <&i2s>;
17196 + };
17197 + simple-audio-card,codec {
17198 + sound-dai = <&max98357a_dac>;
17199 + };
17200 + };
17201 + };
17202 +
17203 + /* Soundcard connecting I2S to DAC without SD_MODE */
17204 + fragment@4 {
17205 + target = <&sound>;
17206 + __dormant__ {
17207 + compatible = "simple-audio-card";
17208 + simple-audio-card,format = "i2s";
17209 + simple-audio-card,name = "MAX98357A";
17210 + status = "okay";
17211 + simple-audio-card,cpu {
17212 + sound-dai = <&i2s>;
17213 + };
17214 + simple-audio-card,codec {
17215 + sound-dai = <&max98357a_nsd>;
17216 + };
17217 + };
17218 + };
17219 +
17220 + __overrides__ {
17221 + no-sdmode = <0>,"-1+2-3+4";
17222 + sdmode-pin = <&max98357a_dac>,"sdmode-gpios:4";
17223 + };
17224 +};
17225 diff --git a/arch/arm/boot/dts/overlays/maxtherm-overlay.dts b/arch/arm/boot/dts/overlays/maxtherm-overlay.dts
17226 new file mode 100644
17227 index 000000000000..9964e246c14f
17228 --- /dev/null
17229 +++ b/arch/arm/boot/dts/overlays/maxtherm-overlay.dts
17230 @@ -0,0 +1,186 @@
17231 +/*
17232 + * Universal device tree overlay for SPI devices
17233 + */
17234 +
17235 +/dts-v1/;
17236 +/plugin/;
17237 +
17238 +#include <dt-bindings/iio/temperature/thermocouple.h>
17239 +
17240 +/ {
17241 + compatible = "brcm,bcm2835";
17242 +
17243 + fragment@0 {
17244 + target = <&spidev0>;
17245 + __dormant__ {
17246 + status = "disabled";
17247 + };
17248 + };
17249 +
17250 + fragment@1 {
17251 + target = <&spidev1>;
17252 + __dormant__ {
17253 + status = "disabled";
17254 + };
17255 + };
17256 +
17257 + fragment@2 {
17258 + target-path = "spi1/spidev@0";
17259 + __dormant__ {
17260 + status = "disabled";
17261 + };
17262 + };
17263 +
17264 + fragment@3 {
17265 + target-path = "spi1/spidev@1";
17266 + __dormant__ {
17267 + status = "disabled";
17268 + };
17269 + };
17270 +
17271 + fragment@4 {
17272 + target-path = "spi1/spidev@2";
17273 + __dormant__ {
17274 + status = "disabled";
17275 + };
17276 + };
17277 +
17278 + fragment@5 {
17279 + target-path = "spi2/spidev@0";
17280 + __dormant__ {
17281 + status = "disabled";
17282 + };
17283 + };
17284 +
17285 + fragment@6 {
17286 + target-path = "spi2/spidev@1";
17287 + __dormant__ {
17288 + status = "disabled";
17289 + };
17290 + };
17291 +
17292 + fragment@7 {
17293 + target-path = "spi2/spidev@2";
17294 + __dormant__ {
17295 + status = "disabled";
17296 + };
17297 + };
17298 +
17299 + maxfrag: fragment@8 {
17300 + target = <&spi0>;
17301 + __overlay__ {
17302 + status = "okay";
17303 + #address-cells = <1>;
17304 + #size-cells = <0>;
17305 +
17306 + max: maxtherm@0 {
17307 + compatible = "maxim,max6675";
17308 + reg = <0>;
17309 + spi-max-frequency = <500000>;
17310 + };
17311 + };
17312 + };
17313 +
17314 + fragment@9 {
17315 + target = <&max>;
17316 + __dormant__ {
17317 + compatible = "maxim,max31855e", "maxim,max31855";
17318 + };
17319 + };
17320 +
17321 + fragment@10 {
17322 + target = <&max>;
17323 + __dormant__ {
17324 + compatible = "maxim,max31855j", "maxim,max31855";
17325 + };
17326 + };
17327 +
17328 + fragment@11 {
17329 + target = <&max>;
17330 + __dormant__ {
17331 + compatible = "maxim,max31855k", "maxim,max31855";
17332 + };
17333 + };
17334 +
17335 + fragment@12 {
17336 + target = <&max>;
17337 + __dormant__ {
17338 + compatible = "maxim,max31855n", "maxim,max31855";
17339 + };
17340 + };
17341 +
17342 + fragment@13 {
17343 + target = <&max>;
17344 + __dormant__ {
17345 + compatible = "maxim,max31855r", "maxim,max31855";
17346 + };
17347 + };
17348 +
17349 + fragment@14 {
17350 + target = <&max>;
17351 + __dormant__ {
17352 + compatible = "maxim,max31855s", "maxim,max31855";
17353 + };
17354 + };
17355 +
17356 + fragment@15 {
17357 + target = <&max>;
17358 + __dormant__ {
17359 + compatible = "maxim,max31855t", "maxim,max31855";
17360 + };
17361 + };
17362 +
17363 + fragment@16 {
17364 + target = <&max>;
17365 + __dormant__ {
17366 + compatible = "maxim,max31856";
17367 + spi-cpha;
17368 + thermocouple-type = <THERMOCOUPLE_TYPE_K>;
17369 + };
17370 + };
17371 +
17372 + __overrides__ {
17373 + spi0-0 = <0>, "+0",
17374 + <&maxfrag>,"target:0=",<&spi0>,
17375 + <&max>,"reg:0=0";
17376 + spi0-1 = <0>, "+1",
17377 + <&maxfrag>,"target:0=",<&spi0>,
17378 + <&max>,"reg:0=1";
17379 + spi1-0 = <0>, "+2",
17380 + <&maxfrag>,"target:0=",<&spi1>,
17381 + <&max>,"reg:0=0";
17382 + spi1-1 = <0>, "+3",
17383 + <&maxfrag>,"target:0=",<&spi1>,
17384 + <&max>,"reg:0=1";
17385 + spi1-2 = <0>, "+4",
17386 + <&maxfrag>,"target:0=",<&spi1>,
17387 + <&max>,"reg:0=2";
17388 + spi2-0 = <0>, "+5",
17389 + <&maxfrag>,"target:0=",<&spi2>,
17390 + <&max>,"reg:0=0";
17391 + spi2-1 = <0>, "+6",
17392 + <&maxfrag>,"target:0=",<&spi2>,
17393 + <&max>,"reg:0=1";
17394 + spi2-2 = <0>, "+7",
17395 + <&maxfrag>,"target:0=",<&spi2>,
17396 + <&max>,"reg:0=2";
17397 + max6675 = <&max>,"compatible=maxim,max6675";
17398 + max31855 = <&max>,"compatible=maxim,max31855";
17399 + max31855e = <0>,"+9";
17400 + max31855j = <0>,"+10";
17401 + max31855k = <0>,"+11";
17402 + max31855n = <0>,"+12";
17403 + max31855r = <0>,"+13";
17404 + max31855s = <0>,"+14";
17405 + max31855t = <0>,"+15";
17406 + max31856 = <0>,"+16";
17407 + type_b = <&max>,"thermocouple-type:0=",<THERMOCOUPLE_TYPE_B>;
17408 + type_e = <&max>,"thermocouple-type:0=",<THERMOCOUPLE_TYPE_E>;
17409 + type_j = <&max>,"thermocouple-type:0=",<THERMOCOUPLE_TYPE_J>;
17410 + type_k = <&max>,"thermocouple-type:0=",<THERMOCOUPLE_TYPE_K>;
17411 + type_n = <&max>,"thermocouple-type:0=",<THERMOCOUPLE_TYPE_N>;
17412 + type_r = <&max>,"thermocouple-type:0=",<THERMOCOUPLE_TYPE_R>;
17413 + type_s = <&max>,"thermocouple-type:0=",<THERMOCOUPLE_TYPE_S>;
17414 + type_t = <&max>,"thermocouple-type:0=",<THERMOCOUPLE_TYPE_T>;
17415 + };
17416 +};
17417 diff --git a/arch/arm/boot/dts/overlays/mbed-dac-overlay.dts b/arch/arm/boot/dts/overlays/mbed-dac-overlay.dts
17418 new file mode 100644
17419 index 000000000000..840dd9b31db4
17420 --- /dev/null
17421 +++ b/arch/arm/boot/dts/overlays/mbed-dac-overlay.dts
17422 @@ -0,0 +1,64 @@
17423 +// Definitions for mbed DAC
17424 +/dts-v1/;
17425 +/plugin/;
17426 +
17427 +/ {
17428 + compatible = "brcm,bcm2835";
17429 +
17430 + fragment@0 {
17431 + target = <&i2s>;
17432 + __overlay__ {
17433 + status = "okay";
17434 + };
17435 + };
17436 +
17437 + fragment@1 {
17438 + target = <&i2c1>;
17439 + __overlay__ {
17440 + #address-cells = <1>;
17441 + #size-cells = <0>;
17442 + status = "okay";
17443 +
17444 + tlv320aic23: codec@1a {
17445 + #sound-dai-cells = <0>;
17446 + reg = <0x1a>;
17447 + compatible = "ti,tlv320aic23";
17448 + status = "okay";
17449 + };
17450 + };
17451 + };
17452 +
17453 + fragment@2 {
17454 + target = <&sound>;
17455 + __overlay__ {
17456 + compatible = "simple-audio-card";
17457 + i2s-controller = <&i2s>;
17458 + status = "okay";
17459 +
17460 + simple-audio-card,name = "mbed-DAC";
17461 +
17462 + simple-audio-card,widgets =
17463 + "Microphone", "Mic Jack",
17464 + "Line", "Line In",
17465 + "Headphone", "Headphone Jack";
17466 +
17467 + simple-audio-card,routing =
17468 + "Headphone Jack", "LHPOUT",
17469 + "Headphone Jack", "RHPOUT",
17470 + "LLINEIN", "Line In",
17471 + "RLINEIN", "Line In",
17472 + "MICIN", "Mic Jack";
17473 +
17474 + simple-audio-card,format = "i2s";
17475 +
17476 + simple-audio-card,cpu {
17477 + sound-dai = <&i2s>;
17478 + };
17479 +
17480 + sound_master: simple-audio-card,codec {
17481 + sound-dai = <&tlv320aic23>;
17482 + system-clock-frequency = <12288000>;
17483 + };
17484 + };
17485 + };
17486 +};
17487 diff --git a/arch/arm/boot/dts/overlays/mcp23017-overlay.dts b/arch/arm/boot/dts/overlays/mcp23017-overlay.dts
17488 new file mode 100644
17489 index 000000000000..c546d8ba7e6d
17490 --- /dev/null
17491 +++ b/arch/arm/boot/dts/overlays/mcp23017-overlay.dts
17492 @@ -0,0 +1,69 @@
17493 +// Definitions for MCP23017 Gpio Extender from Microchip Semiconductor
17494 +
17495 +/dts-v1/;
17496 +/plugin/;
17497 +
17498 +/ {
17499 + compatible = "brcm,bcm2835";
17500 +
17501 + fragment@0 {
17502 + target = <&i2c1>;
17503 + __overlay__ {
17504 + status = "okay";
17505 + };
17506 + };
17507 +
17508 + fragment@1 {
17509 + target = <&gpio>;
17510 + __overlay__ {
17511 + mcp23017_pins: mcp23017_pins@20 {
17512 + brcm,pins = <4>;
17513 + brcm,function = <0>;
17514 + };
17515 + };
17516 + };
17517 +
17518 + fragment@2 {
17519 + target = <&i2c1>;
17520 + __overlay__ {
17521 + #address-cells = <1>;
17522 + #size-cells = <0>;
17523 +
17524 + mcp23017: mcp@20 {
17525 + compatible = "microchip,mcp23017";
17526 + reg = <0x20>;
17527 + gpio-controller;
17528 + #gpio-cells = <2>;
17529 +
17530 + status = "okay";
17531 + };
17532 + };
17533 + };
17534 +
17535 + fragment@3 {
17536 + target = <&mcp23017>;
17537 + __dormant__ {
17538 + compatible = "microchip,mcp23008";
17539 + };
17540 + };
17541 +
17542 + fragment@4 {
17543 + target = <&mcp23017>;
17544 + mcp23017_irq: __overlay__ {
17545 + #interrupt-cells=<2>;
17546 + interrupt-parent = <&gpio>;
17547 + interrupts = <4 2>;
17548 + interrupt-controller;
17549 + microchip,irq-mirror;
17550 + };
17551 + };
17552 +
17553 + __overrides__ {
17554 + gpiopin = <&mcp23017_pins>,"brcm,pins:0",
17555 + <&mcp23017_irq>,"interrupts:0";
17556 + addr = <&mcp23017>,"reg:0", <&mcp23017_pins>,"reg:0";
17557 + mcp23008 = <0>,"=3";
17558 + noints = <0>,"!1!4";
17559 + };
17560 +};
17561 +
17562 diff --git a/arch/arm/boot/dts/overlays/mcp23s17-overlay.dts b/arch/arm/boot/dts/overlays/mcp23s17-overlay.dts
17563 new file mode 100644
17564 index 000000000000..484d64b225fb
17565 --- /dev/null
17566 +++ b/arch/arm/boot/dts/overlays/mcp23s17-overlay.dts
17567 @@ -0,0 +1,732 @@
17568 +// Overlay for MCP23S08/17 GPIO Extenders from Microchip Semiconductor
17569 +
17570 +// dtparams:
17571 +// s08-spi<n>-<m>-present - 4-bit integer, bitmap indicating MCP23S08 devices present on SPI<n>, CS#<m>.
17572 +// s17-spi<n>-<m>-present - 8-bit integer, bitmap indicating MCP23S17 devices present on SPI<n>, CS#<m>.
17573 +// s08-spi<n>-<m>-int-gpio - integer, enables interrupts on a single MCP23S08 device on SPI<n>, CS#<m>, specifies the GPIO pin to which INT output is connected.
17574 +// s17-spi<n>-<m>-int-gpio - integer, enables mirrored interrupts on a single MCP23S17 device on SPI<n>, CS#<m>, specifies the GPIO pin to which either INTA or INTB output is connected.
17575 +//
17576 +// If devices are present on SPI1 or SPI2, those interfaces must be enabled with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
17577 +// If interrupts are enabled for a device on a given CS# on a SPI bus, that device must be the only one present on that SPI bus/CS#.
17578 +//
17579 +// Example 1: A single MCP23S17 device on SPI0, CS#0 with its SPI addr set to 0 and INTA output connected to GPIO25:
17580 +// dtoverlay=mcp23s17:s17-spi0-0-present=1,s17-spi0-0-int-gpio=25
17581 +//
17582 +// Example 2: Two MCP23S08 devices on SPI1, CS#0 with their addrs set to 2 and 3. Three MCP23S17 devices on SPI1, CS#1 with their addrs set to 0, 1 and 7:
17583 +// dtoverlay=spi1-2cs
17584 +// dtoverlay=mcp23s17:s08-spi1-0-present=12,s17-spi1-1-present=131
17585 +
17586 +/dts-v1/;
17587 +/plugin/;
17588 +
17589 +/ {
17590 + compatible = "brcm,bcm2835";
17591 +
17592 + // disable spi-dev on spi0.0
17593 + fragment@0 {
17594 + target = <&spidev0>;
17595 + __dormant__ {
17596 + status = "disabled";
17597 + };
17598 + };
17599 +
17600 + // disable spi-dev on spi0.1
17601 + fragment@1 {
17602 + target = <&spidev1>;
17603 + __dormant__ {
17604 + status = "disabled";
17605 + };
17606 + };
17607 +
17608 + // disable spi-dev on spi1.0
17609 + fragment@2 {
17610 + target-path = "spi1/spidev@0";
17611 + __dormant__ {
17612 + status = "disabled";
17613 + };
17614 + };
17615 +
17616 + // disable spi-dev on spi1.1
17617 + fragment@3 {
17618 + target-path = "spi1/spidev@1";
17619 + __dormant__ {
17620 + status = "disabled";
17621 + };
17622 + };
17623 +
17624 + // disable spi-dev on spi1.2
17625 + fragment@4 {
17626 + target-path = "spi1/spidev@2";
17627 + __dormant__ {
17628 + status = "disabled";
17629 + };
17630 + };
17631 +
17632 + // disable spi-dev on spi2.0
17633 + fragment@5 {
17634 + target-path = "spi2/spidev@0";
17635 + __dormant__ {
17636 + status = "disabled";
17637 + };
17638 + };
17639 +
17640 + // disable spi-dev on spi2.1
17641 + fragment@6 {
17642 + target-path = "spi2/spidev@1";
17643 + __dormant__ {
17644 + status = "disabled";
17645 + };
17646 + };
17647 +
17648 + // disable spi-dev on spi2.2
17649 + fragment@7 {
17650 + target-path = "spi2/spidev@2";
17651 + __dormant__ {
17652 + status = "disabled";
17653 + };
17654 + };
17655 +
17656 + // enable one or more mcp23s08s on spi0.0
17657 + fragment@8 {
17658 + target = <&spi0>;
17659 + __dormant__ {
17660 + status = "okay";
17661 + #address-cells = <1>;
17662 + #size-cells = <0>;
17663 + mcp23s08_00: mcp23s08@0 {
17664 + compatible = "microchip,mcp23s08";
17665 + gpio-controller;
17666 + #gpio-cells = <2>;
17667 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi0-0-present parameter */
17668 + reg = <0>;
17669 + spi-max-frequency = <500000>;
17670 + status = "okay";
17671 + #interrupt-cells=<2>;
17672 + interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi0-0-int-gpio parameter */
17673 + };
17674 + };
17675 + };
17676 +
17677 + // enable one or more mcp23s08s on spi0.1
17678 + fragment@9 {
17679 + target = <&spi0>;
17680 + __dormant__ {
17681 + status = "okay";
17682 + #address-cells = <1>;
17683 + #size-cells = <0>;
17684 + mcp23s08_01: mcp23s08@1 {
17685 + compatible = "microchip,mcp23s08";
17686 + gpio-controller;
17687 + #gpio-cells = <2>;
17688 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi0-1-present parameter */
17689 + reg = <1>;
17690 + spi-max-frequency = <500000>;
17691 + status = "okay";
17692 + #interrupt-cells=<2>;
17693 + interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi0-1-int-gpio parameter */
17694 + };
17695 + };
17696 + };
17697 +
17698 + // enable one or more mcp23s08s on spi1.0
17699 + fragment@10 {
17700 + target = <&spi1>;
17701 + __dormant__ {
17702 + status = "okay";
17703 + #address-cells = <1>;
17704 + #size-cells = <0>;
17705 + mcp23s08_10: mcp23s08@0 {
17706 + compatible = "microchip,mcp23s08";
17707 + gpio-controller;
17708 + #gpio-cells = <2>;
17709 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-0-present parameter */
17710 + reg = <0>;
17711 + spi-max-frequency = <500000>;
17712 + status = "okay";
17713 + #interrupt-cells=<2>;
17714 + interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-0-int-gpio parameter */
17715 + };
17716 + };
17717 + };
17718 +
17719 + // enable one or more mcp23s08s on spi1.1
17720 + fragment@11 {
17721 + target = <&spi1>;
17722 + __dormant__ {
17723 + status = "okay";
17724 + #address-cells = <1>;
17725 + #size-cells = <0>;
17726 + mcp23s08_11: mcp23s08@1 {
17727 + compatible = "microchip,mcp23s08";
17728 + gpio-controller;
17729 + #gpio-cells = <2>;
17730 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-1-present parameter */
17731 + reg = <1>;
17732 + spi-max-frequency = <500000>;
17733 + status = "okay";
17734 + #interrupt-cells=<2>;
17735 + interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-1-int-gpio parameter */
17736 + };
17737 + };
17738 + };
17739 +
17740 + // enable one or more mcp23s08s on spi1.2
17741 + fragment@12 {
17742 + target = <&spi1>;
17743 + __dormant__ {
17744 + status = "okay";
17745 + #address-cells = <1>;
17746 + #size-cells = <0>;
17747 + mcp23s08_12: mcp23s08@2 {
17748 + compatible = "microchip,mcp23s08";
17749 + gpio-controller;
17750 + #gpio-cells = <2>;
17751 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-2-present parameter */
17752 + reg = <2>;
17753 + spi-max-frequency = <500000>;
17754 + status = "okay";
17755 + #interrupt-cells=<2>;
17756 + interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-2-int-gpio parameter */
17757 + };
17758 + };
17759 + };
17760 +
17761 + // enable one or more mcp23s08s on spi2.0
17762 + fragment@13 {
17763 + target = <&spi2>;
17764 + __dormant__ {
17765 + status = "okay";
17766 + #address-cells = <1>;
17767 + #size-cells = <0>;
17768 + mcp23s08_20: mcp23s08@0 {
17769 + compatible = "microchip,mcp23s08";
17770 + gpio-controller;
17771 + #gpio-cells = <2>;
17772 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-0-present parameter */
17773 + reg = <0>;
17774 + spi-max-frequency = <500000>;
17775 + status = "okay";
17776 + #interrupt-cells=<2>;
17777 + interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-0-int-gpio parameter */
17778 + };
17779 + };
17780 + };
17781 +
17782 + // enable one or more mcp23s08s on spi2.1
17783 + fragment@14 {
17784 + target = <&spi2>;
17785 + __dormant__ {
17786 + status = "okay";
17787 + #address-cells = <1>;
17788 + #size-cells = <0>;
17789 + mcp23s08_21: mcp23s08@1 {
17790 + compatible = "microchip,mcp23s08";
17791 + gpio-controller;
17792 + #gpio-cells = <2>;
17793 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-1-present parameter */
17794 + reg = <1>;
17795 + spi-max-frequency = <500000>;
17796 + status = "okay";
17797 + #interrupt-cells=<2>;
17798 + interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-1-int-gpio parameter */
17799 + };
17800 + };
17801 + };
17802 +
17803 + // enable one or more mcp23s08s on spi2.2
17804 + fragment@15 {
17805 + target = <&spi2>;
17806 + __dormant__ {
17807 + status = "okay";
17808 + #address-cells = <1>;
17809 + #size-cells = <0>;
17810 + mcp23s08_22: mcp23s08@2 {
17811 + compatible = "microchip,mcp23s08";
17812 + gpio-controller;
17813 + #gpio-cells = <2>;
17814 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-2-present parameter */
17815 + reg = <2>;
17816 + spi-max-frequency = <500000>;
17817 + status = "okay";
17818 + #interrupt-cells=<2>;
17819 + interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-2-int-gpio parameter */
17820 + };
17821 + };
17822 + };
17823 +
17824 + // enable one or more mcp23s17s on spi0.0
17825 + fragment@16 {
17826 + target = <&spi0>;
17827 + __dormant__ {
17828 + status = "okay";
17829 + #address-cells = <1>;
17830 + #size-cells = <0>;
17831 + mcp23s17_00: mcp23s17@0 {
17832 + compatible = "microchip,mcp23s17";
17833 + gpio-controller;
17834 + #gpio-cells = <2>;
17835 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi0-0-present parameter */
17836 + reg = <0>;
17837 + spi-max-frequency = <500000>;
17838 + status = "okay";
17839 + #interrupt-cells=<2>;
17840 + interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi0-0-int-gpio parameter */
17841 + };
17842 + };
17843 + };
17844 +
17845 + // enable one or more mcp23s17s on spi0.1
17846 + fragment@17 {
17847 + target = <&spi0>;
17848 + __dormant__ {
17849 + status = "okay";
17850 + #address-cells = <1>;
17851 + #size-cells = <0>;
17852 + mcp23s17_01: mcp23s17@1 {
17853 + compatible = "microchip,mcp23s17";
17854 + gpio-controller;
17855 + #gpio-cells = <2>;
17856 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi0-1-present parameter */
17857 + reg = <1>;
17858 + spi-max-frequency = <500000>;
17859 + status = "okay";
17860 + #interrupt-cells=<2>;
17861 + interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi0-1-int-gpio parameter */
17862 + };
17863 + };
17864 + };
17865 +
17866 + // enable one or more mcp23s17s on spi1.0
17867 + fragment@18 {
17868 + target = <&spi1>;
17869 + __dormant__ {
17870 + status = "okay";
17871 + #address-cells = <1>;
17872 + #size-cells = <0>;
17873 + mcp23s17_10: mcp23s17@0 {
17874 + compatible = "microchip,mcp23s17";
17875 + gpio-controller;
17876 + #gpio-cells = <2>;
17877 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-0-present parameter */
17878 + reg = <0>;
17879 + spi-max-frequency = <500000>;
17880 + status = "okay";
17881 + #interrupt-cells=<2>;
17882 + interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-0-int-gpio parameter */
17883 + };
17884 + };
17885 + };
17886 +
17887 + // enable one or more mcp23s17s on spi1.1
17888 + fragment@19 {
17889 + target = <&spi1>;
17890 + __dormant__ {
17891 + status = "okay";
17892 + #address-cells = <1>;
17893 + #size-cells = <0>;
17894 + mcp23s17_11: mcp23s17@1 {
17895 + compatible = "microchip,mcp23s17";
17896 + gpio-controller;
17897 + #gpio-cells = <2>;
17898 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-1-present parameter */
17899 + reg = <1>;
17900 + spi-max-frequency = <500000>;
17901 + status = "okay";
17902 + #interrupt-cells=<2>;
17903 + interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-1-int-gpio parameter */
17904 + };
17905 + };
17906 + };
17907 +
17908 + // enable one or more mcp23s17s on spi1.2
17909 + fragment@20 {
17910 + target = <&spi1>;
17911 + __dormant__ {
17912 + status = "okay";
17913 + #address-cells = <1>;
17914 + #size-cells = <0>;
17915 + mcp23s17_12: mcp23s17@2 {
17916 + compatible = "microchip,mcp23s17";
17917 + gpio-controller;
17918 + #gpio-cells = <2>;
17919 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-2-present parameter */
17920 + reg = <2>;
17921 + spi-max-frequency = <500000>;
17922 + status = "okay";
17923 + #interrupt-cells=<2>;
17924 + interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-2-int-gpio parameter */
17925 + };
17926 + };
17927 + };
17928 +
17929 + // enable one or more mcp23s17s on spi2.0
17930 + fragment@21 {
17931 + target = <&spi2>;
17932 + __dormant__ {
17933 + status = "okay";
17934 + #address-cells = <1>;
17935 + #size-cells = <0>;
17936 + mcp23s17_20: mcp23s17@0 {
17937 + compatible = "microchip,mcp23s17";
17938 + gpio-controller;
17939 + #gpio-cells = <2>;
17940 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-0-present parameter */
17941 + reg = <0>;
17942 + spi-max-frequency = <500000>;
17943 + status = "okay";
17944 + #interrupt-cells=<2>;
17945 + interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-0-int-gpio parameter */
17946 + };
17947 + };
17948 + };
17949 +
17950 + // enable one or more mcp23s17s on spi2.1
17951 + fragment@22 {
17952 + target = <&spi2>;
17953 + __dormant__ {
17954 + status = "okay";
17955 + #address-cells = <1>;
17956 + #size-cells = <0>;
17957 + mcp23s17_21: mcp23s17@1 {
17958 + compatible = "microchip,mcp23s17";
17959 + gpio-controller;
17960 + #gpio-cells = <2>;
17961 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-1-present parameter */
17962 + reg = <1>;
17963 + spi-max-frequency = <500000>;
17964 + status = "okay";
17965 + #interrupt-cells=<2>;
17966 + interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-1-int-gpio parameter */
17967 + };
17968 + };
17969 + };
17970 +
17971 + // enable one or more mcp23s17s on spi2.2
17972 + fragment@23 {
17973 + target = <&spi2>;
17974 + __dormant__ {
17975 + status = "okay";
17976 + #address-cells = <1>;
17977 + #size-cells = <0>;
17978 + mcp23s17_22: mcp23s17@2 {
17979 + compatible = "microchip,mcp23s17";
17980 + gpio-controller;
17981 + #gpio-cells = <2>;
17982 + microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-2-present parameter */
17983 + reg = <2>;
17984 + spi-max-frequency = <500000>;
17985 + status = "okay";
17986 + #interrupt-cells=<2>;
17987 + interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-2-int-gpio parameter */
17988 + };
17989 + };
17990 + };
17991 +
17992 + // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi0.0 as a input with no pull-up/down
17993 + fragment@24 {
17994 + target = <&gpio>;
17995 + __dormant__ {
17996 + spi0_0_int_pins: spi0_0_int_pins {
17997 + brcm,pins = <0>; /* overwritten by mcp23s08/17-spi0-0-int-gpio parameter */
17998 + brcm,function = <0>;
17999 + brcm,pull = <0>;
18000 + };
18001 + };
18002 + };
18003 +
18004 + // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi0.1 as a input with no pull-up/down
18005 + fragment@25 {
18006 + target = <&gpio>;
18007 + __dormant__ {
18008 + spi0_1_int_pins: spi0_1_int_pins {
18009 + brcm,pins = <0>; /* overwritten by mcp23s08/17-spi0-1-int-gpio parameter */
18010 + brcm,function = <0>;
18011 + brcm,pull = <0>;
18012 + };
18013 + };
18014 + };
18015 +
18016 + // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.0 as a input with no pull-up/down
18017 + fragment@26 {
18018 + target = <&gpio>;
18019 + __dormant__ {
18020 + spi1_0_int_pins: spi1_0_int_pins {
18021 + brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-0-int-gpio parameter */
18022 + brcm,function = <0>;
18023 + brcm,pull = <0>;
18024 + };
18025 + };
18026 + };
18027 +
18028 + // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.1 as a input with no pull-up/down
18029 + fragment@27 {
18030 + target = <&gpio>;
18031 + __dormant__ {
18032 + spi1_1_int_pins: spi1_1_int_pins {
18033 + brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-1-int-gpio parameter */
18034 + brcm,function = <0>;
18035 + brcm,pull = <0>;
18036 + };
18037 + };
18038 + };
18039 +
18040 + // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.2 as a input with no pull-up/down
18041 + fragment@28 {
18042 + target = <&gpio>;
18043 + __dormant__ {
18044 + spi1_2_int_pins: spi1_2_int_pins {
18045 + brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-2-int-gpio parameter */
18046 + brcm,function = <0>;
18047 + brcm,pull = <0>;
18048 + };
18049 + };
18050 + };
18051 +
18052 + // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.0 as a input with no pull-up/down
18053 + fragment@29 {
18054 + target = <&gpio>;
18055 + __dormant__ {
18056 + spi2_0_int_pins: spi2_0_int_pins {
18057 + brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-0-int-gpio parameter */
18058 + brcm,function = <0>;
18059 + brcm,pull = <0>;
18060 + };
18061 + };
18062 + };
18063 +
18064 + // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.1 as a input with no pull-up/down
18065 + fragment@30 {
18066 + target = <&gpio>;
18067 + __dormant__ {
18068 + spi2_1_int_pins: spi2_1_int_pins {
18069 + brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-1-int-gpio parameter */
18070 + brcm,function = <0>;
18071 + brcm,pull = <0>;
18072 + };
18073 + };
18074 + };
18075 +
18076 + // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.2 as a input with no pull-up/down
18077 + fragment@31 {
18078 + target = <&gpio>;
18079 + __dormant__ {
18080 + spi2_2_int_pins: spi2_2_int_pins {
18081 + brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-2-int-gpio parameter */
18082 + brcm,function = <0>;
18083 + brcm,pull = <0>;
18084 + };
18085 + };
18086 + };
18087 +
18088 + // Enable interrupts for a mcp23s08 on spi0.0.
18089 + // Use default active low interrupt signalling.
18090 + fragment@32 {
18091 + target = <&mcp23s08_00>;
18092 + __dormant__ {
18093 + interrupt-parent = <&gpio>;
18094 + interrupt-controller;
18095 + };
18096 + };
18097 +
18098 + // Enable interrupts for a mcp23s08 on spi0.1.
18099 + // Use default active low interrupt signalling.
18100 + fragment@33 {
18101 + target = <&mcp23s08_01>;
18102 + __dormant__ {
18103 + interrupt-parent = <&gpio>;
18104 + interrupt-controller;
18105 + };
18106 + };
18107 +
18108 + // Enable interrupts for a mcp23s08 on spi1.0.
18109 + // Use default active low interrupt signalling.
18110 + fragment@34 {
18111 + target = <&mcp23s08_10>;
18112 + __dormant__ {
18113 + interrupt-parent = <&gpio>;
18114 + interrupt-controller;
18115 + };
18116 + };
18117 +
18118 + // Enable interrupts for a mcp23s08 on spi1.1.
18119 + // Use default active low interrupt signalling.
18120 + fragment@35 {
18121 + target = <&mcp23s08_11>;
18122 + __dormant__ {
18123 + interrupt-parent = <&gpio>;
18124 + interrupt-controller;
18125 + };
18126 + };
18127 +
18128 + // Enable interrupts for a mcp23s08 on spi1.2.
18129 + // Use default active low interrupt signalling.
18130 + fragment@36 {
18131 + target = <&mcp23s08_12>;
18132 + __dormant__ {
18133 + interrupt-parent = <&gpio>;
18134 + interrupt-controller;
18135 + };
18136 + };
18137 +
18138 + // Enable interrupts for a mcp23s08 on spi2.0.
18139 + // Use default active low interrupt signalling.
18140 + fragment@37 {
18141 + target = <&mcp23s08_20>;
18142 + __dormant__ {
18143 + interrupt-parent = <&gpio>;
18144 + interrupt-controller;
18145 + };
18146 + };
18147 +
18148 + // Enable interrupts for a mcp23s08 on spi2.1.
18149 + // Use default active low interrupt signalling.
18150 + fragment@38 {
18151 + target = <&mcp23s08_21>;
18152 + __dormant__ {
18153 + interrupt-parent = <&gpio>;
18154 + interrupt-controller;
18155 + };
18156 + };
18157 +
18158 + // Enable interrupts for a mcp23s08 on spi2.2.
18159 + // Use default active low interrupt signalling.
18160 + fragment@39 {
18161 + target = <&mcp23s08_22>;
18162 + __dormant__ {
18163 + interrupt-parent = <&gpio>;
18164 + interrupt-controller;
18165 + };
18166 + };
18167 +
18168 + // Enable interrupts for a mcp23s17 on spi0.0.
18169 + // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
18170 + // Use default active low interrupt signalling.
18171 + fragment@40 {
18172 + target = <&mcp23s17_00>;
18173 + __dormant__ {
18174 + interrupt-parent = <&gpio>;
18175 + interrupt-controller;
18176 + microchip,irq-mirror;
18177 + };
18178 + };
18179 +
18180 + // Enable interrupts for a mcp23s17 on spi0.1.
18181 + // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
18182 + // Configure INTA/B outputs of mcp23s08/17 as active low.
18183 + fragment@41 {
18184 + target = <&mcp23s17_01>;
18185 + __dormant__ {
18186 + interrupt-parent = <&gpio>;
18187 + interrupt-controller;
18188 + microchip,irq-mirror;
18189 + };
18190 + };
18191 +
18192 + // Enable interrupts for a mcp23s17 on spi1.0.
18193 + // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
18194 + // Configure INTA/B outputs of mcp23s08/17 as active low.
18195 + fragment@42 {
18196 + target = <&mcp23s17_10>;
18197 + __dormant__ {
18198 + interrupt-parent = <&gpio>;
18199 + interrupt-controller;
18200 + microchip,irq-mirror;
18201 + };
18202 + };
18203 +
18204 + // Enable interrupts for a mcp23s17 on spi1.1.
18205 + // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
18206 + // Configure INTA/B outputs of mcp23s08/17 as active low.
18207 + fragment@43 {
18208 + target = <&mcp23s17_11>;
18209 + __dormant__ {
18210 + interrupt-parent = <&gpio>;
18211 + interrupt-controller;
18212 + microchip,irq-mirror;
18213 + };
18214 + };
18215 +
18216 + // Enable interrupts for a mcp23s17 on spi1.2.
18217 + // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
18218 + // Configure INTA/B outputs of mcp23s08/17 as active low.
18219 + fragment@44 {
18220 + target = <&mcp23s17_12>;
18221 + __dormant__ {
18222 + interrupt-parent = <&gpio>;
18223 + interrupt-controller;
18224 + microchip,irq-mirror;
18225 + };
18226 + };
18227 +
18228 + // Enable interrupts for a mcp23s17 on spi2.0.
18229 + // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
18230 + // Configure INTA/B outputs of mcp23s08/17 as active low.
18231 + fragment@45 {
18232 + target = <&mcp23s17_20>;
18233 + __dormant__ {
18234 + interrupt-parent = <&gpio>;
18235 + interrupt-controller;
18236 + microchip,irq-mirror;
18237 + };
18238 + };
18239 +
18240 + // Enable interrupts for a mcp23s17 on spi2.1.
18241 + // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
18242 + // Configure INTA/B outputs of mcp23s08/17 as active low.
18243 + fragment@46 {
18244 + target = <&mcp23s17_21>;
18245 + __dormant__ {
18246 + interrupt-parent = <&gpio>;
18247 + interrupt-controller;
18248 + microchip,irq-mirror;
18249 + };
18250 + };
18251 +
18252 + // Enable interrupts for a mcp23s17 on spi2.2.
18253 + // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
18254 + // Configure INTA/B outputs of mcp23s08/17 as active low.
18255 + fragment@47 {
18256 + target = <&mcp23s17_22>;
18257 + __dormant__ {
18258 + interrupt-parent = <&gpio>;
18259 + interrupt-controller;
18260 + microchip,irq-mirror;
18261 + };
18262 + };
18263 +
18264 + __overrides__ {
18265 + s08-spi0-0-present = <0>,"+0+8", <&mcp23s08_00>,"microchip,spi-present-mask:0";
18266 + s08-spi0-1-present = <0>,"+1+9", <&mcp23s08_01>,"microchip,spi-present-mask:0";
18267 + s08-spi1-0-present = <0>,"+2+10", <&mcp23s08_10>,"microchip,spi-present-mask:0";
18268 + s08-spi1-1-present = <0>,"+3+11", <&mcp23s08_11>,"microchip,spi-present-mask:0";
18269 + s08-spi1-2-present = <0>,"+4+12", <&mcp23s08_12>,"microchip,spi-present-mask:0";
18270 + s08-spi2-0-present = <0>,"+5+13", <&mcp23s08_20>,"microchip,spi-present-mask:0";
18271 + s08-spi2-1-present = <0>,"+6+14", <&mcp23s08_21>,"microchip,spi-present-mask:0";
18272 + s08-spi2-2-present = <0>,"+7+15", <&mcp23s08_22>,"microchip,spi-present-mask:0";
18273 + s17-spi0-0-present = <0>,"+0+16", <&mcp23s17_00>,"microchip,spi-present-mask:0";
18274 + s17-spi0-1-present = <0>,"+1+17", <&mcp23s17_01>,"microchip,spi-present-mask:0";
18275 + s17-spi1-0-present = <0>,"+2+18", <&mcp23s17_10>,"microchip,spi-present-mask:0";
18276 + s17-spi1-1-present = <0>,"+3+19", <&mcp23s17_11>,"microchip,spi-present-mask:0";
18277 + s17-spi1-2-present = <0>,"+4+20", <&mcp23s17_12>,"microchip,spi-present-mask:0";
18278 + s17-spi2-0-present = <0>,"+5+21", <&mcp23s17_20>,"microchip,spi-present-mask:0";
18279 + s17-spi2-1-present = <0>,"+6+22", <&mcp23s17_21>,"microchip,spi-present-mask:0";
18280 + s17-spi2-2-present = <0>,"+7+23", <&mcp23s17_22>,"microchip,spi-present-mask:0";
18281 + s08-spi0-0-int-gpio = <0>,"+24+32", <&spi0_0_int_pins>,"brcm,pins:0", <&mcp23s08_00>,"interrupts:0";
18282 + s08-spi0-1-int-gpio = <0>,"+25+33", <&spi0_1_int_pins>,"brcm,pins:0", <&mcp23s08_01>,"interrupts:0";
18283 + s08-spi1-0-int-gpio = <0>,"+26+34", <&spi1_0_int_pins>,"brcm,pins:0", <&mcp23s08_10>,"interrupts:0";
18284 + s08-spi1-1-int-gpio = <0>,"+27+35", <&spi1_1_int_pins>,"brcm,pins:0", <&mcp23s08_11>,"interrupts:0";
18285 + s08-spi1-2-int-gpio = <0>,"+28+36", <&spi1_2_int_pins>,"brcm,pins:0", <&mcp23s08_12>,"interrupts:0";
18286 + s08-spi2-0-int-gpio = <0>,"+29+37", <&spi2_0_int_pins>,"brcm,pins:0", <&mcp23s08_20>,"interrupts:0";
18287 + s08-spi2-1-int-gpio = <0>,"+30+38", <&spi2_1_int_pins>,"brcm,pins:0", <&mcp23s08_21>,"interrupts:0";
18288 + s08-spi2-2-int-gpio = <0>,"+31+39", <&spi2_2_int_pins>,"brcm,pins:0", <&mcp23s08_22>,"interrupts:0";
18289 + s17-spi0-0-int-gpio = <0>,"+24+40", <&spi0_0_int_pins>,"brcm,pins:0", <&mcp23s17_00>,"interrupts:0";
18290 + s17-spi0-1-int-gpio = <0>,"+25+41", <&spi0_1_int_pins>,"brcm,pins:0", <&mcp23s17_01>,"interrupts:0";
18291 + s17-spi1-0-int-gpio = <0>,"+26+42", <&spi1_0_int_pins>,"brcm,pins:0", <&mcp23s17_10>,"interrupts:0";
18292 + s17-spi1-1-int-gpio = <0>,"+27+43", <&spi1_1_int_pins>,"brcm,pins:0", <&mcp23s17_11>,"interrupts:0";
18293 + s17-spi1-2-int-gpio = <0>,"+28+44", <&spi1_2_int_pins>,"brcm,pins:0", <&mcp23s17_12>,"interrupts:0";
18294 + s17-spi2-0-int-gpio = <0>,"+29+45", <&spi2_0_int_pins>,"brcm,pins:0", <&mcp23s17_20>,"interrupts:0";
18295 + s17-spi2-1-int-gpio = <0>,"+30+46", <&spi2_1_int_pins>,"brcm,pins:0", <&mcp23s17_21>,"interrupts:0";
18296 + s17-spi2-2-int-gpio = <0>,"+31+47", <&spi2_2_int_pins>,"brcm,pins:0", <&mcp23s17_22>,"interrupts:0";
18297 + };
18298 +};
18299 +
18300 diff --git a/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts b/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts
18301 new file mode 100755
18302 index 000000000000..46f143d809cc
18303 --- /dev/null
18304 +++ b/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts
18305 @@ -0,0 +1,73 @@
18306 +/*
18307 + * Device tree overlay for mcp251x/can0 on spi0.0
18308 + */
18309 +
18310 +/dts-v1/;
18311 +/plugin/;
18312 +
18313 +/ {
18314 + compatible = "brcm,bcm2835";
18315 + /* disable spi-dev for spi0.0 */
18316 + fragment@0 {
18317 + target = <&spi0>;
18318 + __overlay__ {
18319 + status = "okay";
18320 + };
18321 + };
18322 +
18323 + fragment@1 {
18324 + target = <&spidev0>;
18325 + __overlay__ {
18326 + status = "disabled";
18327 + };
18328 + };
18329 +
18330 + /* the interrupt pin of the can-controller */
18331 + fragment@2 {
18332 + target = <&gpio>;
18333 + __overlay__ {
18334 + can0_pins: can0_pins {
18335 + brcm,pins = <25>;
18336 + brcm,function = <0>; /* input */
18337 + };
18338 + };
18339 + };
18340 +
18341 + /* the clock/oscillator of the can-controller */
18342 + fragment@3 {
18343 + target-path = "/";
18344 + __overlay__ {
18345 + /* external oscillator of mcp2515 on SPI0.0 */
18346 + can0_osc: can0_osc {
18347 + compatible = "fixed-clock";
18348 + #clock-cells = <0>;
18349 + clock-frequency = <16000000>;
18350 + };
18351 + };
18352 + };
18353 +
18354 + /* the spi config of the can-controller itself binding everything together */
18355 + fragment@4 {
18356 + target = <&spi0>;
18357 + __overlay__ {
18358 + /* needed to avoid dtc warning */
18359 + #address-cells = <1>;
18360 + #size-cells = <0>;
18361 + can0: mcp2515@0 {
18362 + reg = <0>;
18363 + compatible = "microchip,mcp2515";
18364 + pinctrl-names = "default";
18365 + pinctrl-0 = <&can0_pins>;
18366 + spi-max-frequency = <10000000>;
18367 + interrupt-parent = <&gpio>;
18368 + interrupts = <25 8>; /* IRQ_TYPE_LEVEL_LOW */
18369 + clocks = <&can0_osc>;
18370 + };
18371 + };
18372 + };
18373 + __overrides__ {
18374 + oscillator = <&can0_osc>,"clock-frequency:0";
18375 + spimaxfrequency = <&can0>,"spi-max-frequency:0";
18376 + interrupt = <&can0_pins>,"brcm,pins:0",<&can0>,"interrupts:0";
18377 + };
18378 +};
18379 diff --git a/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts b/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts
18380 new file mode 100644
18381 index 000000000000..0a8dd576818e
18382 --- /dev/null
18383 +++ b/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts
18384 @@ -0,0 +1,73 @@
18385 +/*
18386 + * Device tree overlay for mcp251x/can1 on spi0.1 edited by petit_miner
18387 + */
18388 +
18389 +/dts-v1/;
18390 +/plugin/;
18391 +
18392 +/ {
18393 + compatible = "brcm,bcm2835";
18394 + /* disable spi-dev for spi0.1 */
18395 + fragment@0 {
18396 + target = <&spi0>;
18397 + __overlay__ {
18398 + status = "okay";
18399 + };
18400 + };
18401 +
18402 + fragment@1 {
18403 + target = <&spidev1>;
18404 + __overlay__ {
18405 + status = "disabled";
18406 + };
18407 + };
18408 +
18409 + /* the interrupt pin of the can-controller */
18410 + fragment@2 {
18411 + target = <&gpio>;
18412 + __overlay__ {
18413 + can1_pins: can1_pins {
18414 + brcm,pins = <25>;
18415 + brcm,function = <0>; /* input */
18416 + };
18417 + };
18418 + };
18419 +
18420 + /* the clock/oscillator of the can-controller */
18421 + fragment@3 {
18422 + target-path = "/";
18423 + __overlay__ {
18424 + /* external oscillator of mcp2515 on spi0.1 */
18425 + can1_osc: can1_osc {
18426 + compatible = "fixed-clock";
18427 + #clock-cells = <0>;
18428 + clock-frequency = <16000000>;
18429 + };
18430 + };
18431 + };
18432 +
18433 + /* the spi config of the can-controller itself binding everything together */
18434 + fragment@4 {
18435 + target = <&spi0>;
18436 + __overlay__ {
18437 + /* needed to avoid dtc warning */
18438 + #address-cells = <1>;
18439 + #size-cells = <0>;
18440 + can1: mcp2515@1 {
18441 + reg = <1>;
18442 + compatible = "microchip,mcp2515";
18443 + pinctrl-names = "default";
18444 + pinctrl-0 = <&can1_pins>;
18445 + spi-max-frequency = <10000000>;
18446 + interrupt-parent = <&gpio>;
18447 + interrupts = <25 8>; /* IRQ_TYPE_LEVEL_LOW */
18448 + clocks = <&can1_osc>;
18449 + };
18450 + };
18451 + };
18452 + __overrides__ {
18453 + oscillator = <&can1_osc>,"clock-frequency:0";
18454 + spimaxfrequency = <&can1>,"spi-max-frequency:0";
18455 + interrupt = <&can1_pins>,"brcm,pins:0",<&can1>,"interrupts:0";
18456 + };
18457 +};
18458 diff --git a/arch/arm/boot/dts/overlays/mcp251xfd-overlay.dts b/arch/arm/boot/dts/overlays/mcp251xfd-overlay.dts
18459 new file mode 100644
18460 index 000000000000..65c861bbd340
18461 --- /dev/null
18462 +++ b/arch/arm/boot/dts/overlays/mcp251xfd-overlay.dts
18463 @@ -0,0 +1,226 @@
18464 +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
18465 +
18466 +/dts-v1/;
18467 +/plugin/;
18468 +
18469 +#include <dt-bindings/gpio/gpio.h>
18470 +#include <dt-bindings/interrupt-controller/irq.h>
18471 +#include <dt-bindings/pinctrl/bcm2835.h>
18472 +
18473 +/ {
18474 + compatible = "brcm,bcm2835";
18475 +
18476 + fragment@0 {
18477 + target = <&spidev0>;
18478 + __dormant__ {
18479 + status = "disabled";
18480 + };
18481 + };
18482 +
18483 + fragment@1 {
18484 + target = <&spidev1>;
18485 + __dormant__ {
18486 + status = "disabled";
18487 + };
18488 + };
18489 +
18490 + fragment@2 {
18491 + target-path = "spi1/spidev@0";
18492 + __dormant__ {
18493 + status = "disabled";
18494 + };
18495 + };
18496 +
18497 + fragment@3 {
18498 + target-path = "spi1/spidev@1";
18499 + __dormant__ {
18500 + status = "disabled";
18501 + };
18502 + };
18503 +
18504 + fragment@4 {
18505 + target-path = "spi1/spidev@2";
18506 + __dormant__ {
18507 + status = "disabled";
18508 + };
18509 + };
18510 +
18511 + fragment@5 {
18512 + target-path = "spi2/spidev@0";
18513 + __dormant__ {
18514 + status = "disabled";
18515 + };
18516 + };
18517 +
18518 + fragment@6 {
18519 + target-path = "spi2/spidev@1";
18520 + __dormant__ {
18521 + status = "disabled";
18522 + };
18523 + };
18524 +
18525 + fragment@7 {
18526 + target-path = "spi2/spidev@2";
18527 + __dormant__ {
18528 + status = "disabled";
18529 + };
18530 + };
18531 +
18532 + fragment@8 {
18533 + target = <&gpio>;
18534 + __overlay__ {
18535 + mcp251xfd_pins: mcp251xfd_pins {
18536 + brcm,pins = <25>;
18537 + brcm,function = <BCM2835_FSEL_GPIO_IN>;
18538 + };
18539 + };
18540 + };
18541 +
18542 + fragment@9 {
18543 + target-path = "/clocks";
18544 + __overlay__ {
18545 + clk_mcp251xfd_osc: mcp251xfd-osc {
18546 + #clock-cells = <0>;
18547 + compatible = "fixed-clock";
18548 + clock-frequency = <40000000>;
18549 + };
18550 + };
18551 + };
18552 +
18553 + mcp251xfd_frag: fragment@10 {
18554 + target = <&spi0>;
18555 + __overlay__ {
18556 + status = "okay";
18557 + #address-cells = <1>;
18558 + #size-cells = <0>;
18559 +
18560 + mcp251xfd: mcp251xfd@0 {
18561 + compatible = "microchip,mcp251xfd";
18562 + reg = <0>;
18563 + pinctrl-names = "default";
18564 + pinctrl-0 = <&mcp251xfd_pins>;
18565 + spi-max-frequency = <20000000>;
18566 + interrupt-parent = <&gpio>;
18567 + interrupts = <25 IRQ_TYPE_LEVEL_LOW>;
18568 + clocks = <&clk_mcp251xfd_osc>;
18569 + };
18570 + };
18571 + };
18572 +
18573 + fragment@11 {
18574 + target = <&mcp251xfd>;
18575 + mcp251xfd_rx_int_gpios: __dormant__ {
18576 + microchip,rx-int-gpios = <&gpio 255 GPIO_ACTIVE_LOW>;
18577 + };
18578 + };
18579 +
18580 + fragment@12 {
18581 + target = <&gpio>;
18582 + __dormant__ {
18583 + mcp251xfd_xceiver_pins: mcp251xfd_xceiver_pins {
18584 + brcm,pins = <255>;
18585 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
18586 + };
18587 + };
18588 + };
18589 +
18590 + fragment@13 {
18591 + target-path = "/";
18592 + __dormant__ {
18593 + reg_mcp251xfd_xceiver: reg_mcp251xfd_xceiver {
18594 + compatible = "regulator-fixed";
18595 + regulator-name = "mcp251xfd_xceiver";
18596 + regulator-min-microvolt = <3300000>;
18597 + regulator-max-microvolt = <3300000>;
18598 + gpio = <&gpio 4 GPIO_ACTIVE_HIGH>;
18599 + pinctrl-names = "default";
18600 + pinctrl-0 = <&mcp251xfd_xceiver_pins>;
18601 + };
18602 + };
18603 + };
18604 +
18605 + fragment@14 {
18606 + target = <&mcp251xfd>;
18607 + __dormant__ {
18608 + xceiver-supply = <&reg_mcp251xfd_xceiver>;
18609 + };
18610 + };
18611 +
18612 + __overrides__ {
18613 + spi0-0 = <0>, "+0",
18614 + <&mcp251xfd_frag>, "target:0=", <&spi0>,
18615 + <&mcp251xfd>, "reg:0=0",
18616 + <&mcp251xfd_pins>, "name=mcp251xfd_spi0_0_pins",
18617 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi0-0-osc",
18618 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi0_0_xceiver_pins",
18619 + <&reg_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi0-0-xceiver",
18620 + <&reg_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi0-0-xceiver";
18621 + spi0-1 = <0>, "+1",
18622 + <&mcp251xfd_frag>, "target:0=", <&spi0>,
18623 + <&mcp251xfd>, "reg:0=1",
18624 + <&mcp251xfd_pins>, "name=mcp251xfd_spi0_1_pins",
18625 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi0-1-osc",
18626 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi0_1_xceiver_pins",
18627 + <&reg_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi0-1-xceiver",
18628 + <&reg_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi0-1-xceiver";
18629 + spi1-0 = <0>, "+2",
18630 + <&mcp251xfd_frag>, "target:0=", <&spi1>,
18631 + <&mcp251xfd>, "reg:0=0",
18632 + <&mcp251xfd_pins>, "name=mcp251xfd_spi1_0_pins",
18633 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi1-0-osc",
18634 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi1_0_xceiver_pins",
18635 + <&reg_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi1-0-xceiver",
18636 + <&reg_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi1-0-xceiver";
18637 + spi1-1 = <0>, "+3",
18638 + <&mcp251xfd_frag>, "target:0=", <&spi1>,
18639 + <&mcp251xfd>, "reg:0=1",
18640 + <&mcp251xfd_pins>, "name=mcp251xfd_spi1_1_pins",
18641 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi1-1-osc",
18642 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi1_1_xceiver_pins",
18643 + <&reg_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi1-1-xceiver",
18644 + <&reg_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi1-1-xceiver";
18645 + spi1-2 = <0>, "+4",
18646 + <&mcp251xfd_frag>, "target:0=", <&spi1>,
18647 + <&mcp251xfd>, "reg:0=2",
18648 + <&mcp251xfd_pins>, "name=mcp251xfd_spi1_2_pins",
18649 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi1-2-osc",
18650 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi1_2_xceiver_pins",
18651 + <&reg_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi1-2-xceiver",
18652 + <&reg_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi1-2-xceiver";
18653 + spi2-0 = <0>, "+5",
18654 + <&mcp251xfd_frag>, "target:0=", <&spi2>,
18655 + <&mcp251xfd>, "reg:0=0",
18656 + <&mcp251xfd_pins>, "name=mcp251xfd_spi2_0_pins",
18657 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi2-0-osc",
18658 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi2_0_xceiver_pins",
18659 + <&reg_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi2-0-xceiver",
18660 + <&reg_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi2-0-xceiver";
18661 + spi2-1 = <0>, "+6",
18662 + <&mcp251xfd_frag>, "target:0=", <&spi2>,
18663 + <&mcp251xfd>, "reg:0=1",
18664 + <&mcp251xfd_pins>, "name=mcp251xfd_spi2_1_pins",
18665 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi2-1-osc",
18666 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi2_1_xceiver_pins",
18667 + <&reg_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi2-1-xceiver",
18668 + <&reg_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi2-1-xceiver";
18669 + spi2-2 = <0>, "+7",
18670 + <&mcp251xfd_frag>, "target:0=", <&spi2>,
18671 + <&mcp251xfd>, "reg:0=2",
18672 + <&mcp251xfd_pins>, "name=mcp251xfd_spi2_2_pins",
18673 + <&clk_mcp251xfd_osc>, "name=mcp251xfd-spi2-2-osc",
18674 + <&mcp251xfd_xceiver_pins>, "name=mcp251xfd_spi2_2_xceiver_pins",
18675 + <&reg_mcp251xfd_xceiver>, "name=reg-mcp251xfd-spi2-2-xceiver",
18676 + <&reg_mcp251xfd_xceiver>, "regulator-name=mcp251xfd-spi2-2-xceiver";
18677 + oscillator = <&clk_mcp251xfd_osc>, "clock-frequency:0";
18678 + speed = <&mcp251xfd>, "spi-max-frequency:0";
18679 + interrupt = <&mcp251xfd_pins>, "brcm,pins:0",
18680 + <&mcp251xfd>, "interrupts:0";
18681 + rx_interrupt = <0>, "+11",
18682 + <&mcp251xfd_pins>, "brcm,pins:4",
18683 + <&mcp251xfd_rx_int_gpios>, "microchip,rx-int-gpios:4";
18684 + xceiver_enable = <0>, "+12+13+14",
18685 + <&mcp251xfd_xceiver_pins>, "brcm,pins:0",
18686 + <&reg_mcp251xfd_xceiver>, "gpio:4";
18687 + xceiver_active_high = <&reg_mcp251xfd_xceiver>, "enable-active-high?";
18688 + };
18689 +};
18690 diff --git a/arch/arm/boot/dts/overlays/mcp3008-overlay.dts b/arch/arm/boot/dts/overlays/mcp3008-overlay.dts
18691 new file mode 100755
18692 index 000000000000..957fdb9310af
18693 --- /dev/null
18694 +++ b/arch/arm/boot/dts/overlays/mcp3008-overlay.dts
18695 @@ -0,0 +1,205 @@
18696 +/*
18697 + * Device tree overlay for Microchip mcp3008 10-Bit A/D Converters
18698 + */
18699 +
18700 +/dts-v1/;
18701 +/plugin/;
18702 +
18703 +/ {
18704 + compatible = "brcm,bcm2835";
18705 +
18706 + fragment@0 {
18707 + target = <&spidev0>;
18708 + __dormant__ {
18709 + status = "disabled";
18710 + };
18711 + };
18712 +
18713 + fragment@1 {
18714 + target = <&spidev1>;
18715 + __dormant__ {
18716 + status = "disabled";
18717 + };
18718 + };
18719 +
18720 + fragment@2 {
18721 + target-path = "spi1/spidev@0";
18722 + __dormant__ {
18723 + status = "disabled";
18724 + };
18725 + };
18726 +
18727 + fragment@3 {
18728 + target-path = "spi1/spidev@1";
18729 + __dormant__ {
18730 + status = "disabled";
18731 + };
18732 + };
18733 +
18734 + fragment@4 {
18735 + target-path = "spi1/spidev@2";
18736 + __dormant__ {
18737 + status = "disabled";
18738 + };
18739 + };
18740 +
18741 + fragment@5 {
18742 + target-path = "spi2/spidev@0";
18743 + __dormant__ {
18744 + status = "disabled";
18745 + };
18746 + };
18747 +
18748 + fragment@6 {
18749 + target-path = "spi2/spidev@1";
18750 + __dormant__ {
18751 + status = "disabled";
18752 + };
18753 + };
18754 +
18755 + fragment@7 {
18756 + target-path = "spi2/spidev@2";
18757 + __dormant__ {
18758 + status = "disabled";
18759 + };
18760 + };
18761 +
18762 + fragment@8 {
18763 + target = <&spi0>;
18764 + __dormant__ {
18765 + status = "okay";
18766 + #address-cells = <1>;
18767 + #size-cells = <0>;
18768 +
18769 + mcp3008_00: mcp3008@0 {
18770 + compatible = "microchip,mcp3008";
18771 + reg = <0>;
18772 + spi-max-frequency = <1600000>;
18773 + };
18774 + };
18775 + };
18776 +
18777 + fragment@9 {
18778 + target = <&spi0>;
18779 + __dormant__ {
18780 + status = "okay";
18781 + #address-cells = <1>;
18782 + #size-cells = <0>;
18783 +
18784 + mcp3008_01: mcp3008@1 {
18785 + compatible = "microchip,mcp3008";
18786 + reg = <1>;
18787 + spi-max-frequency = <1600000>;
18788 + };
18789 + };
18790 + };
18791 +
18792 + fragment@10 {
18793 + target = <&spi1>;
18794 + __dormant__ {
18795 + status = "okay";
18796 + #address-cells = <1>;
18797 + #size-cells = <0>;
18798 +
18799 + mcp3008_10: mcp3008@0 {
18800 + compatible = "microchip,mcp3008";
18801 + reg = <0>;
18802 + spi-max-frequency = <1600000>;
18803 + };
18804 + };
18805 + };
18806 +
18807 + fragment@11 {
18808 + target = <&spi1>;
18809 + __dormant__ {
18810 + status = "okay";
18811 + #address-cells = <1>;
18812 + #size-cells = <0>;
18813 +
18814 + mcp3008_11: mcp3008@1 {
18815 + compatible = "microchip,mcp3008";
18816 + reg = <1>;
18817 + spi-max-frequency = <1600000>;
18818 + };
18819 + };
18820 + };
18821 +
18822 + fragment@12 {
18823 + target = <&spi1>;
18824 + __dormant__ {
18825 + status = "okay";
18826 + #address-cells = <1>;
18827 + #size-cells = <0>;
18828 +
18829 + mcp3008_12: mcp3008@2 {
18830 + compatible = "microchip,mcp3008";
18831 + reg = <2>;
18832 + spi-max-frequency = <1600000>;
18833 + };
18834 + };
18835 + };
18836 +
18837 + fragment@13 {
18838 + target = <&spi2>;
18839 + __dormant__ {
18840 + status = "okay";
18841 + #address-cells = <1>;
18842 + #size-cells = <0>;
18843 +
18844 + mcp3008_20: mcp3008@0 {
18845 + compatible = "microchip,mcp3008";
18846 + reg = <0>;
18847 + spi-max-frequency = <1600000>;
18848 + };
18849 + };
18850 + };
18851 +
18852 + fragment@14 {
18853 + target = <&spi2>;
18854 + __dormant__ {
18855 + status = "okay";
18856 + #address-cells = <1>;
18857 + #size-cells = <0>;
18858 +
18859 + mcp3008_21: mcp3008@1 {
18860 + compatible = "microchip,mcp3008";
18861 + reg = <1>;
18862 + spi-max-frequency = <1600000>;
18863 + };
18864 + };
18865 + };
18866 +
18867 + fragment@15 {
18868 + target = <&spi2>;
18869 + __dormant__ {
18870 + status = "okay";
18871 + #address-cells = <1>;
18872 + #size-cells = <0>;
18873 +
18874 + mcp3008_22: mcp3008@2 {
18875 + compatible = "microchip,mcp3008";
18876 + reg = <2>;
18877 + spi-max-frequency = <1600000>;
18878 + };
18879 + };
18880 + };
18881 +
18882 + __overrides__ {
18883 + spi0-0-present = <0>, "+0+8";
18884 + spi0-1-present = <0>, "+1+9";
18885 + spi1-0-present = <0>, "+2+10";
18886 + spi1-1-present = <0>, "+3+11";
18887 + spi1-2-present = <0>, "+4+12";
18888 + spi2-0-present = <0>, "+5+13";
18889 + spi2-1-present = <0>, "+6+14";
18890 + spi2-2-present = <0>, "+7+15";
18891 + spi0-0-speed = <&mcp3008_00>, "spi-max-frequency:0";
18892 + spi0-1-speed = <&mcp3008_01>, "spi-max-frequency:0";
18893 + spi1-0-speed = <&mcp3008_10>, "spi-max-frequency:0";
18894 + spi1-1-speed = <&mcp3008_11>, "spi-max-frequency:0";
18895 + spi1-2-speed = <&mcp3008_12>, "spi-max-frequency:0";
18896 + spi2-0-speed = <&mcp3008_20>, "spi-max-frequency:0";
18897 + spi2-1-speed = <&mcp3008_21>, "spi-max-frequency:0";
18898 + spi2-2-speed = <&mcp3008_22>, "spi-max-frequency:0";
18899 + };
18900 +};
18901 diff --git a/arch/arm/boot/dts/overlays/mcp3202-overlay.dts b/arch/arm/boot/dts/overlays/mcp3202-overlay.dts
18902 new file mode 100755
18903 index 000000000000..8e4e9f60f285
18904 --- /dev/null
18905 +++ b/arch/arm/boot/dts/overlays/mcp3202-overlay.dts
18906 @@ -0,0 +1,205 @@
18907 +/*
18908 + * Device tree overlay for Microchip mcp3202 12-Bit A/D Converters
18909 + */
18910 +
18911 +/dts-v1/;
18912 +/plugin/;
18913 +
18914 +/ {
18915 + compatible = "brcm,bcm2835";
18916 +
18917 + fragment@0 {
18918 + target = <&spidev0>;
18919 + __dormant__ {
18920 + status = "disabled";
18921 + };
18922 + };
18923 +
18924 + fragment@1 {
18925 + target = <&spidev1>;
18926 + __dormant__ {
18927 + status = "disabled";
18928 + };
18929 + };
18930 +
18931 + fragment@2 {
18932 + target-path = "spi1/spidev@0";
18933 + __dormant__ {
18934 + status = "disabled";
18935 + };
18936 + };
18937 +
18938 + fragment@3 {
18939 + target-path = "spi1/spidev@1";
18940 + __dormant__ {
18941 + status = "disabled";
18942 + };
18943 + };
18944 +
18945 + fragment@4 {
18946 + target-path = "spi1/spidev@2";
18947 + __dormant__ {
18948 + status = "disabled";
18949 + };
18950 + };
18951 +
18952 + fragment@5 {
18953 + target-path = "spi2/spidev@0";
18954 + __dormant__ {
18955 + status = "disabled";
18956 + };
18957 + };
18958 +
18959 + fragment@6 {
18960 + target-path = "spi2/spidev@1";
18961 + __dormant__ {
18962 + status = "disabled";
18963 + };
18964 + };
18965 +
18966 + fragment@7 {
18967 + target-path = "spi2/spidev@2";
18968 + __dormant__ {
18969 + status = "disabled";
18970 + };
18971 + };
18972 +
18973 + fragment@8 {
18974 + target = <&spi0>;
18975 + __dormant__ {
18976 + status = "okay";
18977 + #address-cells = <1>;
18978 + #size-cells = <0>;
18979 +
18980 + mcp3202_00: mcp3202@0 {
18981 + compatible = "mcp3202";
18982 + reg = <0>;
18983 + spi-max-frequency = <1600000>;
18984 + };
18985 + };
18986 + };
18987 +
18988 + fragment@9 {
18989 + target = <&spi0>;
18990 + __dormant__ {
18991 + status = "okay";
18992 + #address-cells = <1>;
18993 + #size-cells = <0>;
18994 +
18995 + mcp3202_01: mcp3202@1 {
18996 + compatible = "mcp3202";
18997 + reg = <1>;
18998 + spi-max-frequency = <1600000>;
18999 + };
19000 + };
19001 + };
19002 +
19003 + fragment@10 {
19004 + target = <&spi1>;
19005 + __dormant__ {
19006 + status = "okay";
19007 + #address-cells = <1>;
19008 + #size-cells = <0>;
19009 +
19010 + mcp3202_10: mcp3202@0 {
19011 + compatible = "mcp3202";
19012 + reg = <0>;
19013 + spi-max-frequency = <1600000>;
19014 + };
19015 + };
19016 + };
19017 +
19018 + fragment@11 {
19019 + target = <&spi1>;
19020 + __dormant__ {
19021 + status = "okay";
19022 + #address-cells = <1>;
19023 + #size-cells = <0>;
19024 +
19025 + mcp3202_11: mcp3202@1 {
19026 + compatible = "mcp3202";
19027 + reg = <1>;
19028 + spi-max-frequency = <1600000>;
19029 + };
19030 + };
19031 + };
19032 +
19033 + fragment@12 {
19034 + target = <&spi1>;
19035 + __dormant__ {
19036 + status = "okay";
19037 + #address-cells = <1>;
19038 + #size-cells = <0>;
19039 +
19040 + mcp3202_12: mcp3202@2 {
19041 + compatible = "mcp3202";
19042 + reg = <2>;
19043 + spi-max-frequency = <1600000>;
19044 + };
19045 + };
19046 + };
19047 +
19048 + fragment@13 {
19049 + target = <&spi2>;
19050 + __dormant__ {
19051 + status = "okay";
19052 + #address-cells = <1>;
19053 + #size-cells = <0>;
19054 +
19055 + mcp3202_20: mcp3202@0 {
19056 + compatible = "mcp3202";
19057 + reg = <0>;
19058 + spi-max-frequency = <1600000>;
19059 + };
19060 + };
19061 + };
19062 +
19063 + fragment@14 {
19064 + target = <&spi2>;
19065 + __dormant__ {
19066 + status = "okay";
19067 + #address-cells = <1>;
19068 + #size-cells = <0>;
19069 +
19070 + mcp3202_21: mcp3202@1 {
19071 + compatible = "mcp3202";
19072 + reg = <1>;
19073 + spi-max-frequency = <1600000>;
19074 + };
19075 + };
19076 + };
19077 +
19078 + fragment@15 {
19079 + target = <&spi2>;
19080 + __dormant__ {
19081 + status = "okay";
19082 + #address-cells = <1>;
19083 + #size-cells = <0>;
19084 +
19085 + mcp3202_22: mcp3202@2 {
19086 + compatible = "mcp3202";
19087 + reg = <2>;
19088 + spi-max-frequency = <1600000>;
19089 + };
19090 + };
19091 + };
19092 +
19093 + __overrides__ {
19094 + spi0-0-present = <0>, "+0+8";
19095 + spi0-1-present = <0>, "+1+9";
19096 + spi1-0-present = <0>, "+2+10";
19097 + spi1-1-present = <0>, "+3+11";
19098 + spi1-2-present = <0>, "+4+12";
19099 + spi2-0-present = <0>, "+5+13";
19100 + spi2-1-present = <0>, "+6+14";
19101 + spi2-2-present = <0>, "+7+15";
19102 + spi0-0-speed = <&mcp3202_00>, "spi-max-frequency:0";
19103 + spi0-1-speed = <&mcp3202_01>, "spi-max-frequency:0";
19104 + spi1-0-speed = <&mcp3202_10>, "spi-max-frequency:0";
19105 + spi1-1-speed = <&mcp3202_11>, "spi-max-frequency:0";
19106 + spi1-2-speed = <&mcp3202_12>, "spi-max-frequency:0";
19107 + spi2-0-speed = <&mcp3202_20>, "spi-max-frequency:0";
19108 + spi2-1-speed = <&mcp3202_21>, "spi-max-frequency:0";
19109 + spi2-2-speed = <&mcp3202_22>, "spi-max-frequency:0";
19110 + };
19111 +};
19112 diff --git a/arch/arm/boot/dts/overlays/mcp342x-overlay.dts b/arch/arm/boot/dts/overlays/mcp342x-overlay.dts
19113 new file mode 100644
19114 index 000000000000..714eca5a4b5e
19115 --- /dev/null
19116 +++ b/arch/arm/boot/dts/overlays/mcp342x-overlay.dts
19117 @@ -0,0 +1,164 @@
19118 +// Overlay for MCP3421-8 ADCs from Microchip Semiconductor
19119 +
19120 +/dts-v1/;
19121 +/plugin/;
19122 +
19123 +/ {
19124 + compatible = "brcm,bcm2835";
19125 +
19126 + fragment@0 {
19127 + target = <&i2c1>;
19128 + __dormant__ {
19129 + #address-cells = <1>;
19130 + #size-cells = <0>;
19131 +
19132 + status = "okay";
19133 +
19134 + mcp3421: mcp@68 {
19135 + reg = <0x68>;
19136 + compatible = "microchip,mcp3421";
19137 +
19138 + status = "okay";
19139 + };
19140 + };
19141 + };
19142 +
19143 + fragment@1 {
19144 + target = <&i2c1>;
19145 + __dormant__ {
19146 + #address-cells = <1>;
19147 + #size-cells = <0>;
19148 +
19149 + status = "okay";
19150 +
19151 + mcp3422: mcp@68 {
19152 + reg = <0x68>;
19153 + compatible = "microchip,mcp3422";
19154 +
19155 + status = "okay";
19156 + };
19157 + };
19158 + };
19159 +
19160 + fragment@2 {
19161 + target = <&i2c1>;
19162 + __dormant__ {
19163 + #address-cells = <1>;
19164 + #size-cells = <0>;
19165 +
19166 + status = "okay";
19167 +
19168 + mcp3423: mcp@68 {
19169 + reg = <0x68>;
19170 + compatible = "microchip,mcp3423";
19171 +
19172 + status = "okay";
19173 + };
19174 + };
19175 + };
19176 +
19177 + fragment@3 {
19178 + target = <&i2c1>;
19179 + __dormant__ {
19180 + #address-cells = <1>;
19181 + #size-cells = <0>;
19182 +
19183 + status = "okay";
19184 +
19185 + mcp3424: mcp@68 {
19186 + reg = <0x68>;
19187 + compatible = "microchip,mcp3424";
19188 +
19189 + status = "okay";
19190 + };
19191 + };
19192 + };
19193 +
19194 + fragment@4 {
19195 + target = <&i2c1>;
19196 + __dormant__ {
19197 + #address-cells = <1>;
19198 + #size-cells = <0>;
19199 +
19200 + status = "okay";
19201 +
19202 + mcp3425: mcp@68 {
19203 + reg = <0x68>;
19204 + compatible = "microchip,mcp3425","mcp3425";
19205 +
19206 + status = "okay";
19207 + };
19208 + };
19209 + };
19210 +
19211 + fragment@5 {
19212 + target = <&i2c1>;
19213 + __dormant__ {
19214 + #address-cells = <1>;
19215 + #size-cells = <0>;
19216 +
19217 + status = "okay";
19218 +
19219 + mcp3426: mcp@68 {
19220 + reg = <0x68>;
19221 + compatible = "microchip,mcp3426";
19222 +
19223 + status = "okay";
19224 + };
19225 + };
19226 + };
19227 +
19228 + fragment@6 {
19229 + target = <&i2c1>;
19230 + __dormant__ {
19231 + #address-cells = <1>;
19232 + #size-cells = <0>;
19233 +
19234 + status = "okay";
19235 +
19236 + mcp3427: mcp@68 {
19237 + reg = <0x68>;
19238 + compatible = "microchip,mcp3427";
19239 +
19240 + status = "okay";
19241 + };
19242 + };
19243 + };
19244 +
19245 + fragment@7 {
19246 + target = <&i2c1>;
19247 + __dormant__ {
19248 + #address-cells = <1>;
19249 + #size-cells = <0>;
19250 +
19251 + status = "okay";
19252 +
19253 + mcp3428: mcp@68 {
19254 + reg = <0x68>;
19255 + compatible = "microchip,mcp3428";
19256 +
19257 + status = "okay";
19258 + };
19259 + };
19260 + };
19261 +
19262 + __overrides__ {
19263 + addr = <&mcp3421>,"reg:0",
19264 + <&mcp3422>,"reg:0",
19265 + <&mcp3423>,"reg:0",
19266 + <&mcp3424>,"reg:0",
19267 + <&mcp3425>,"reg:0",
19268 + <&mcp3426>,"reg:0",
19269 + <&mcp3427>,"reg:0",
19270 + <&mcp3428>,"reg:0";
19271 + mcp3421 = <0>,"=0";
19272 + mcp3422 = <0>,"=1";
19273 + mcp3423 = <0>,"=2";
19274 + mcp3424 = <0>,"=3";
19275 + mcp3425 = <0>,"=4";
19276 + mcp3426 = <0>,"=5";
19277 + mcp3427 = <0>,"=6";
19278 + mcp3428 = <0>,"=7";
19279 + };
19280 +};
19281 +
19282 diff --git a/arch/arm/boot/dts/overlays/media-center-overlay.dts b/arch/arm/boot/dts/overlays/media-center-overlay.dts
19283 new file mode 100644
19284 index 000000000000..1b56963f4f16
19285 --- /dev/null
19286 +++ b/arch/arm/boot/dts/overlays/media-center-overlay.dts
19287 @@ -0,0 +1,134 @@
19288 +/*
19289 + * Device Tree overlay for Media Center HAT by Pi Supply
19290 + *
19291 + */
19292 +
19293 +/dts-v1/;
19294 +/plugin/;
19295 +
19296 +/ {
19297 + compatible = "brcm,bcm2835";
19298 +
19299 + fragment@0 {
19300 + target = <&spi0>;
19301 + __overlay__ {
19302 + status = "okay";
19303 +
19304 + spidev@0{
19305 + status = "disabled";
19306 + };
19307 +
19308 + spidev@1{
19309 + status = "disabled";
19310 + };
19311 + };
19312 + };
19313 +
19314 + fragment@1 {
19315 + target = <&gpio>;
19316 + __overlay__ {
19317 + rpi_display_pins: rpi_display_pins {
19318 + brcm,pins = <12 23 24 25>;
19319 + brcm,function = <1 1 1 0>; /* out out out in */
19320 + brcm,pull = <0 0 0 2>; /* - - - up */
19321 + };
19322 + };
19323 + };
19324 +
19325 + fragment@2 {
19326 + target = <&spi0>;
19327 + __overlay__ {
19328 + /* needed to avoid dtc warning */
19329 + #address-cells = <1>;
19330 + #size-cells = <0>;
19331 +
19332 + rpidisplay: rpi-display@0{
19333 + compatible = "ilitek,ili9341";
19334 + reg = <0>;
19335 + pinctrl-names = "default";
19336 + pinctrl-0 = <&rpi_display_pins>;
19337 +
19338 + spi-max-frequency = <32000000>;
19339 + rotate = <90>;
19340 + bgr;
19341 + fps = <30>;
19342 + buswidth = <8>;
19343 + reset-gpios = <&gpio 23 1>;
19344 + dc-gpios = <&gpio 24 0>;
19345 + led-gpios = <&gpio 12 0>;
19346 + debug = <0>;
19347 + };
19348 +
19349 + rpidisplay_ts: rpi-display-ts@1 {
19350 + compatible = "ti,ads7846";
19351 + reg = <1>;
19352 +
19353 + spi-max-frequency = <2000000>;
19354 + interrupts = <25 2>; /* high-to-low edge triggered */
19355 + interrupt-parent = <&gpio>;
19356 + pendown-gpio = <&gpio 25 1>;
19357 + ti,x-plate-ohms = /bits/ 16 <60>;
19358 + ti,pressure-max = /bits/ 16 <255>;
19359 + };
19360 + };
19361 + };
19362 +
19363 + fragment@3 {
19364 + target-path = "/";
19365 + __overlay__ {
19366 + lirc_rpi: lirc_rpi {
19367 + compatible = "rpi,lirc-rpi";
19368 + pinctrl-names = "default";
19369 + pinctrl-0 = <&lirc_pins>;
19370 + status = "okay";
19371 +
19372 + // Override autodetection of IR receiver circuit
19373 + // (0 = active high, 1 = active low, -1 = no override )
19374 + rpi,sense = <0xffffffff>;
19375 +
19376 + // Software carrier
19377 + // (0 = off, 1 = on)
19378 + rpi,softcarrier = <1>;
19379 +
19380 + // Invert output
19381 + // (0 = off, 1 = on)
19382 + rpi,invert = <0>;
19383 +
19384 + // Enable debugging messages
19385 + // (0 = off, 1 = on)
19386 + rpi,debug = <0>;
19387 + };
19388 + };
19389 + };
19390 +
19391 + fragment@4 {
19392 + target = <&gpio>;
19393 + __overlay__ {
19394 + lirc_pins: lirc_pins {
19395 + brcm,pins = <6 5>;
19396 + brcm,function = <1 0>; // out in
19397 + brcm,pull = <0 1>; // off down
19398 + };
19399 + };
19400 + };
19401 +
19402 + __overrides__ {
19403 + speed = <&rpidisplay>,"spi-max-frequency:0";
19404 + rotate = <&rpidisplay>,"rotate:0";
19405 + fps = <&rpidisplay>,"fps:0";
19406 + debug = <&rpidisplay>,"debug:0",
19407 + <&lirc_rpi>,"rpi,debug:0";
19408 + xohms = <&rpidisplay_ts>,"ti,x-plate-ohms;0";
19409 + swapxy = <&rpidisplay_ts>,"ti,swap-xy?";
19410 + backlight = <&rpidisplay>,"led-gpios:4",
19411 + <&rpi_display_pins>,"brcm,pins:0";
19412 +
19413 + gpio_out_pin = <&lirc_pins>,"brcm,pins:0";
19414 + gpio_in_pin = <&lirc_pins>,"brcm,pins:4";
19415 + gpio_in_pull = <&lirc_pins>,"brcm,pull:4";
19416 +
19417 + sense = <&lirc_rpi>,"rpi,sense:0";
19418 + softcarrier = <&lirc_rpi>,"rpi,softcarrier:0";
19419 + invert = <&lirc_rpi>,"rpi,invert:0";
19420 + };
19421 +};
19422 diff --git a/arch/arm/boot/dts/overlays/merus-amp-overlay.dts b/arch/arm/boot/dts/overlays/merus-amp-overlay.dts
19423 new file mode 100644
19424 index 000000000000..4501fbdc253d
19425 --- /dev/null
19426 +++ b/arch/arm/boot/dts/overlays/merus-amp-overlay.dts
19427 @@ -0,0 +1,60 @@
19428 +// SPDX-License-Identifier: GPL-2.0-only
19429 +// Definitions for Infineon Merus-Amp
19430 +/dts-v1/;
19431 +/plugin/;
19432 +#include <dt-bindings/pinctrl/bcm2835.h>
19433 +#include <dt-bindings/gpio/gpio.h>
19434 +
19435 +
19436 +/ {
19437 + compatible = "brcm,bcm2835";
19438 +
19439 + fragment@0 {
19440 + target = <&i2s>;
19441 + __overlay__ {
19442 + status = "okay";
19443 + };
19444 + };
19445 +
19446 + fragment@1 {
19447 + target = <&gpio>;
19448 + __overlay__ {
19449 + merus_amp_pins: merus_amp_pins {
19450 + brcm,pins = <23>;
19451 + brcm,function = <0>; /* in */
19452 + brcm,pull = <2>; /* up */
19453 + };
19454 + };
19455 + };
19456 +
19457 + fragment@2 {
19458 + target = <&i2c1>;
19459 + __overlay__ {
19460 + #address-cells = <1>;
19461 + #size-cells = <0>;
19462 + status = "okay";
19463 +
19464 + merus_amp: ma120x0p@20 {
19465 + #sound-dai-cells = <0>;
19466 + compatible = "ma,ma120x0p";
19467 + reg = <0x20>;
19468 + status = "okay";
19469 + pinctrl-names = "default";
19470 + pinctrl-0 = <&merus_amp_pins>;
19471 + enable_gp-gpios = <&gpio 14 GPIO_ACTIVE_HIGH>;
19472 + mute_gp-gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
19473 + booster_gp-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
19474 + error_gp-gpios = <&gpio 23 GPIO_ACTIVE_HIGH>;
19475 + };
19476 + };
19477 + };
19478 +
19479 + fragment@3 {
19480 + target = <&sound>;
19481 + __overlay__ {
19482 + compatible = "merus,merus-amp";
19483 + i2s-controller = <&i2s>;
19484 + status = "okay";
19485 + };
19486 + };
19487 +};
19488 diff --git a/arch/arm/boot/dts/overlays/midi-uart0-overlay.dts b/arch/arm/boot/dts/overlays/midi-uart0-overlay.dts
19489 new file mode 100644
19490 index 000000000000..f7e44d29e101
19491 --- /dev/null
19492 +++ b/arch/arm/boot/dts/overlays/midi-uart0-overlay.dts
19493 @@ -0,0 +1,36 @@
19494 +/dts-v1/;
19495 +/plugin/;
19496 +
19497 +#include <dt-bindings/clock/bcm2835.h>
19498 +
19499 +/*
19500 + * Fake a higher clock rate to get a larger divisor, and thereby a lower
19501 + * baudrate. The real clock is 48MHz, which we scale so that requesting
19502 + * 38.4kHz results in an actual 31.25kHz.
19503 + *
19504 + * 48000000*38400/31250 = 58982400
19505 + */
19506 +
19507 +/{
19508 + compatible = "brcm,bcm2835";
19509 +
19510 + fragment@0 {
19511 + target-path = "/";
19512 + __overlay__ {
19513 + midi_clk: midi_clk {
19514 + compatible = "fixed-clock";
19515 + #clock-cells = <0>;
19516 + clock-output-names = "uart0_pclk";
19517 + clock-frequency = <58982400>;
19518 + };
19519 + };
19520 + };
19521 +
19522 + fragment@1 {
19523 + target = <&uart0>;
19524 + __overlay__ {
19525 + clocks = <&midi_clk>,
19526 + <&clocks BCM2835_CLOCK_VPU>;
19527 + };
19528 + };
19529 +};
19530 diff --git a/arch/arm/boot/dts/overlays/midi-uart1-overlay.dts b/arch/arm/boot/dts/overlays/midi-uart1-overlay.dts
19531 new file mode 100644
19532 index 000000000000..e0bc410acbff
19533 --- /dev/null
19534 +++ b/arch/arm/boot/dts/overlays/midi-uart1-overlay.dts
19535 @@ -0,0 +1,43 @@
19536 +/dts-v1/;
19537 +/plugin/;
19538 +
19539 +#include <dt-bindings/clock/bcm2835-aux.h>
19540 +
19541 +/*
19542 + * Fake a higher clock rate to get a larger divisor, and thereby a lower
19543 + * baudrate. The real clock is 48MHz, which we scale so that requesting
19544 + * 38.4kHz results in an actual 31.25kHz.
19545 + *
19546 + * 48000000*38400/31250 = 58982400
19547 + */
19548 +
19549 +/{
19550 + compatible = "brcm,bcm2835";
19551 +
19552 + fragment@0 {
19553 + target-path = "/clocks";
19554 + __overlay__ {
19555 + midi_clk: clock@5 {
19556 + compatible = "fixed-factor-clock";
19557 + #clock-cells = <0>;
19558 + clocks = <&aux BCM2835_AUX_CLOCK_UART>;
19559 + clock-mult = <38400>;
19560 + clock-div = <31250>;
19561 + };
19562 + };
19563 + };
19564 +
19565 + fragment@1 {
19566 + target = <&uart1>;
19567 + __overlay__ {
19568 + clocks = <&midi_clk>;
19569 + };
19570 + };
19571 +
19572 + fragment@2 {
19573 + target = <&aux>;
19574 + __overlay__ {
19575 + clock-output-names = "aux_uart", "aux_spi1", "aux_spi2";
19576 + };
19577 + };
19578 +};
19579 diff --git a/arch/arm/boot/dts/overlays/midi-uart2-overlay.dts b/arch/arm/boot/dts/overlays/midi-uart2-overlay.dts
19580 new file mode 100644
19581 index 000000000000..66f3092e9a74
19582 --- /dev/null
19583 +++ b/arch/arm/boot/dts/overlays/midi-uart2-overlay.dts
19584 @@ -0,0 +1,37 @@
19585 +/dts-v1/;
19586 +/plugin/;
19587 +
19588 +#include <dt-bindings/clock/bcm2835.h>
19589 +
19590 +/*
19591 + * Fake a higher clock rate to get a larger divisor, and thereby a lower
19592 + * baudrate. The real clock is 48MHz, which we scale so that requesting
19593 + * 38.4kHz results in an actual 31.25kHz.
19594 + *
19595 + * 48000000*38400/31250 = 58982400
19596 + */
19597 +
19598 +/{
19599 + compatible = "brcm,bcm2835";
19600 +
19601 + fragment@0 {
19602 + target-path = "/";
19603 + __overlay__ {
19604 + midi_clk: midi_clk2 {
19605 + compatible = "fixed-clock";
19606 + #clock-cells = <0>;
19607 + clock-output-names = "uart2_pclk";
19608 + clock-frequency = <58982400>;
19609 + };
19610 + };
19611 + };
19612 +
19613 + fragment@1 {
19614 + target = <&uart2>;
19615 + __overlay__ {
19616 + clocks = <&midi_clk>,
19617 + <&clocks BCM2835_CLOCK_VPU>;
19618 + };
19619 + };
19620 +};
19621 +
19622 diff --git a/arch/arm/boot/dts/overlays/midi-uart3-overlay.dts b/arch/arm/boot/dts/overlays/midi-uart3-overlay.dts
19623 new file mode 100644
19624 index 000000000000..55c6cb94f963
19625 --- /dev/null
19626 +++ b/arch/arm/boot/dts/overlays/midi-uart3-overlay.dts
19627 @@ -0,0 +1,38 @@
19628 +/dts-v1/;
19629 +/plugin/;
19630 +
19631 +#include <dt-bindings/clock/bcm2835.h>
19632 +
19633 +/*
19634 + * Fake a higher clock rate to get a larger divisor, and thereby a lower
19635 + * baudrate. The real clock is 48MHz, which we scale so that requesting
19636 + * 38.4kHz results in an actual 31.25kHz.
19637 + *
19638 + * 48000000*38400/31250 = 58982400
19639 + */
19640 +
19641 +/{
19642 + compatible = "brcm,bcm2835";
19643 +
19644 + fragment@0 {
19645 + target-path = "/";
19646 + __overlay__ {
19647 + midi_clk: midi_clk3 {
19648 + compatible = "fixed-clock";
19649 + #clock-cells = <0>;
19650 + clock-output-names = "uart3_pclk";
19651 + clock-frequency = <58982400>;
19652 + };
19653 + };
19654 + };
19655 +
19656 + fragment@1 {
19657 + target = <&uart3>;
19658 + __overlay__ {
19659 + clocks = <&midi_clk>,
19660 + <&clocks BCM2835_CLOCK_VPU>;
19661 + };
19662 + };
19663 +};
19664 +
19665 +
19666 diff --git a/arch/arm/boot/dts/overlays/midi-uart4-overlay.dts b/arch/arm/boot/dts/overlays/midi-uart4-overlay.dts
19667 new file mode 100644
19668 index 000000000000..5819df1a6b2e
19669 --- /dev/null
19670 +++ b/arch/arm/boot/dts/overlays/midi-uart4-overlay.dts
19671 @@ -0,0 +1,38 @@
19672 +/dts-v1/;
19673 +/plugin/;
19674 +
19675 +#include <dt-bindings/clock/bcm2835.h>
19676 +
19677 +/*
19678 + * Fake a higher clock rate to get a larger divisor, and thereby a lower
19679 + * baudrate. The real clock is 48MHz, which we scale so that requesting
19680 + * 38.4kHz results in an actual 31.25kHz.
19681 + *
19682 + * 48000000*38400/31250 = 58982400
19683 + */
19684 +
19685 +/{
19686 + compatible = "brcm,bcm2835";
19687 +
19688 + fragment@0 {
19689 + target-path = "/";
19690 + __overlay__ {
19691 + midi_clk: midi_clk4 {
19692 + compatible = "fixed-clock";
19693 + #clock-cells = <0>;
19694 + clock-output-names = "uart4_pclk";
19695 + clock-frequency = <58982400>;
19696 + };
19697 + };
19698 + };
19699 +
19700 + fragment@1 {
19701 + target = <&uart4>;
19702 + __overlay__ {
19703 + clocks = <&midi_clk>,
19704 + <&clocks BCM2835_CLOCK_VPU>;
19705 + };
19706 + };
19707 +};
19708 +
19709 +
19710 diff --git a/arch/arm/boot/dts/overlays/midi-uart5-overlay.dts b/arch/arm/boot/dts/overlays/midi-uart5-overlay.dts
19711 new file mode 100644
19712 index 000000000000..a1d37f7103ff
19713 --- /dev/null
19714 +++ b/arch/arm/boot/dts/overlays/midi-uart5-overlay.dts
19715 @@ -0,0 +1,38 @@
19716 +/dts-v1/;
19717 +/plugin/;
19718 +
19719 +#include <dt-bindings/clock/bcm2835.h>
19720 +
19721 +/*
19722 + * Fake a higher clock rate to get a larger divisor, and thereby a lower
19723 + * baudrate. The real clock is 48MHz, which we scale so that requesting
19724 + * 38.4kHz results in an actual 31.25kHz.
19725 + *
19726 + * 48000000*38400/31250 = 58982400
19727 + */
19728 +
19729 +/{
19730 + compatible = "brcm,bcm2835";
19731 +
19732 + fragment@0 {
19733 + target-path = "/";
19734 + __overlay__ {
19735 + midi_clk: midi_clk5 {
19736 + compatible = "fixed-clock";
19737 + #clock-cells = <0>;
19738 + clock-output-names = "uart5_pclk";
19739 + clock-frequency = <58982400>;
19740 + };
19741 + };
19742 + };
19743 +
19744 + fragment@1 {
19745 + target = <&uart5>;
19746 + __overlay__ {
19747 + clocks = <&midi_clk>,
19748 + <&clocks BCM2835_CLOCK_VPU>;
19749 + };
19750 + };
19751 +};
19752 +
19753 +
19754 diff --git a/arch/arm/boot/dts/overlays/minipitft13-overlay.dts b/arch/arm/boot/dts/overlays/minipitft13-overlay.dts
19755 new file mode 100644
19756 index 000000000000..b1a0a2a41f72
19757 --- /dev/null
19758 +++ b/arch/arm/boot/dts/overlays/minipitft13-overlay.dts
19759 @@ -0,0 +1,70 @@
19760 +/*
19761 + * Device Tree overlay for Adafruit Mini PiTFT 1.3" and 1.5" 240x240 Display
19762 + *
19763 + */
19764 +
19765 +/dts-v1/;
19766 +/plugin/;
19767 +
19768 +/ {
19769 + compatible = "brcm,bcm2835";
19770 +
19771 + fragment@0 {
19772 + target = <&spi0>;
19773 + __overlay__ {
19774 + status = "okay";
19775 +
19776 + spidev@0{
19777 + status = "disabled";
19778 + };
19779 +
19780 + spidev@1{
19781 + status = "disabled";
19782 + };
19783 + };
19784 + };
19785 +
19786 + fragment@1 {
19787 + target = <&gpio>;
19788 + __overlay__ {
19789 + pitft_pins: pitft_pins {
19790 + brcm,pins = <25>;
19791 + brcm,function = <1>; /* out */
19792 + brcm,pull = <0>; /* none */
19793 + };
19794 + };
19795 + };
19796 +
19797 + fragment@2 {
19798 + target = <&spi0>;
19799 + __overlay__ {
19800 + /* needed to avoid dtc warning */
19801 + #address-cells = <1>;
19802 + #size-cells = <0>;
19803 +
19804 + pitft: pitft@0 {
19805 + compatible = "fbtft,minipitft13";
19806 + reg = <0>;
19807 + pinctrl-names = "default";
19808 + pinctrl-0 = <&pitft_pins>;
19809 + spi-max-frequency = <32000000>;
19810 + rotate = <0>;
19811 + width = <240>;
19812 + height = <240>;
19813 + buswidth = <8>;
19814 + dc-gpios = <&gpio 25 0>;
19815 + led-gpios = <&gpio 26 0>;
19816 + debug = <0>;
19817 + };
19818 + };
19819 + };
19820 +
19821 + __overrides__ {
19822 + speed = <&pitft>,"spi-max-frequency:0";
19823 + rotate = <&pitft>,"rotate:0";
19824 + width = <&pitft>,"width:0";
19825 + height = <&pitft>,"height:0";
19826 + fps = <&pitft>,"fps:0";
19827 + debug = <&pitft>,"debug:0";
19828 + };
19829 +};
19830 diff --git a/arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts b/arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts
19831 new file mode 100644
19832 index 000000000000..da49f14a0940
19833 --- /dev/null
19834 +++ b/arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts
19835 @@ -0,0 +1,93 @@
19836 +/dts-v1/;
19837 +/plugin/;
19838 +
19839 +/* Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore
19840 + UART0/ttyAMA0 over GPIOs 14 & 15. Note that this may reduce the maximum
19841 + usable baudrate.
19842 +
19843 + It is also necessary to edit /lib/systemd/system/hciuart.service and
19844 + replace ttyAMA0 with ttyS0, unless you have a system with udev rules
19845 + that create /dev/serial0 and /dev/serial1, in which case use /dev/serial1
19846 + instead because it will always be correct.
19847 +
19848 + If cmdline.txt uses the alias serial0 to refer to the user-accessable port
19849 + then the firmware will replace with the appropriate port whether or not
19850 + this overlay is used.
19851 +*/
19852 +
19853 +#include <dt-bindings/gpio/gpio.h>
19854 +
19855 +/{
19856 + compatible = "brcm,bcm2835";
19857 +
19858 + fragment@0 {
19859 + target = <&uart0>;
19860 + __overlay__ {
19861 + pinctrl-names = "default";
19862 + pinctrl-0 = <&uart0_pins>;
19863 + status = "okay";
19864 + };
19865 + };
19866 +
19867 + fragment@1 {
19868 + target = <&bt>;
19869 + __overlay__ {
19870 + status = "disabled";
19871 + };
19872 + };
19873 +
19874 + fragment@2 {
19875 + target = <&uart1>;
19876 + __overlay__ {
19877 + pinctrl-names = "default";
19878 + pinctrl-0 = <&uart1_pins &bt_pins &fake_bt_cts>;
19879 + status = "okay";
19880 + };
19881 + };
19882 +
19883 + fragment@3 {
19884 + target = <&uart0_pins>;
19885 + __overlay__ {
19886 + brcm,pins;
19887 + brcm,function;
19888 + brcm,pull;
19889 + };
19890 + };
19891 +
19892 + fragment@4 {
19893 + target = <&uart1_pins>;
19894 + __overlay__ {
19895 + brcm,pins = <32 33>;
19896 + brcm,function = <2>; /* alt5=UART1 */
19897 + brcm,pull = <0 2>;
19898 + };
19899 + };
19900 +
19901 + fragment@5 {
19902 + target = <&gpio>;
19903 + __overlay__ {
19904 + fake_bt_cts: fake_bt_cts {
19905 + brcm,pins = <31>;
19906 + brcm,function = <1>; /* output */
19907 + };
19908 + };
19909 + };
19910 +
19911 + fragment@6 {
19912 + target-path = "/aliases";
19913 + __overlay__ {
19914 + serial0 = "/soc/serial@7e201000";
19915 + serial1 = "/soc/serial@7e215040";
19916 + };
19917 + };
19918 +
19919 + fragment@7 {
19920 + target = <&minibt>;
19921 + minibt_frag: __overlay__ {
19922 + };
19923 + };
19924 +
19925 + __overrides__ {
19926 + krnbt = <&minibt_frag>,"status";
19927 + };
19928 +};
19929 diff --git a/arch/arm/boot/dts/overlays/mmc-overlay.dts b/arch/arm/boot/dts/overlays/mmc-overlay.dts
19930 new file mode 100644
19931 index 000000000000..c1a2f691aa1e
19932 --- /dev/null
19933 +++ b/arch/arm/boot/dts/overlays/mmc-overlay.dts
19934 @@ -0,0 +1,46 @@
19935 +/dts-v1/;
19936 +/plugin/;
19937 +
19938 +/{
19939 + compatible = "brcm,bcm2835";
19940 +
19941 + fragment@0 {
19942 + target = <&mmc>;
19943 + frag0: __overlay__ {
19944 + pinctrl-names = "default";
19945 + pinctrl-0 = <&mmc_pins>;
19946 + bus-width = <4>;
19947 + brcm,overclock-50 = <0>;
19948 + status = "okay";
19949 + };
19950 + };
19951 +
19952 + fragment@1 {
19953 + target = <&gpio>;
19954 + __overlay__ {
19955 + mmc_pins: mmc_pins {
19956 + brcm,pins = <48 49 50 51 52 53>;
19957 + brcm,function = <7>; /* alt3 */
19958 + brcm,pull = <0 2 2 2 2 2>;
19959 + };
19960 + };
19961 + };
19962 +
19963 + fragment@2 {
19964 + target = <&sdhost>;
19965 + __overlay__ {
19966 + status = "disabled";
19967 + };
19968 + };
19969 +
19970 + fragment@3 {
19971 + target = <&mmcnr>;
19972 + __overlay__ {
19973 + status = "disabled";
19974 + };
19975 + };
19976 +
19977 + __overrides__ {
19978 + overclock_50 = <&frag0>,"brcm,overclock-50:0";
19979 + };
19980 +};
19981 diff --git a/arch/arm/boot/dts/overlays/mpu6050-overlay.dts b/arch/arm/boot/dts/overlays/mpu6050-overlay.dts
19982 new file mode 100644
19983 index 000000000000..1b4c06535687
19984 --- /dev/null
19985 +++ b/arch/arm/boot/dts/overlays/mpu6050-overlay.dts
19986 @@ -0,0 +1,29 @@
19987 +// Definitions for MPU6050
19988 +/dts-v1/;
19989 +/plugin/;
19990 +
19991 +/ {
19992 + compatible = "brcm,bcm2835";
19993 +
19994 + fragment@0 {
19995 + target = <&i2c1>;
19996 + __overlay__ {
19997 + #address-cells = <1>;
19998 + #size-cells = <0>;
19999 + status = "okay";
20000 + clock-frequency = <400000>;
20001 +
20002 + mpu6050: mpu6050@68 {
20003 + compatible = "invensense,mpu6050";
20004 + reg = <0x68>;
20005 + interrupt-parent = <&gpio>;
20006 + interrupts = <4 1>;
20007 + };
20008 + };
20009 + };
20010 +
20011 + __overrides__ {
20012 + interrupt = <&mpu6050>,"interrupts:0";
20013 + addr = <&mpu6050>,"reg:0";
20014 + };
20015 +};
20016 diff --git a/arch/arm/boot/dts/overlays/mz61581-overlay.dts b/arch/arm/boot/dts/overlays/mz61581-overlay.dts
20017 new file mode 100644
20018 index 000000000000..6e00e8b2ddf2
20019 --- /dev/null
20020 +++ b/arch/arm/boot/dts/overlays/mz61581-overlay.dts
20021 @@ -0,0 +1,117 @@
20022 +/*
20023 + * Device Tree overlay for MZ61581-PI-EXT 2014.12.28 by Tontec
20024 + *
20025 + */
20026 +
20027 +/dts-v1/;
20028 +/plugin/;
20029 +
20030 +/ {
20031 + compatible = "brcm,bcm2835";
20032 +
20033 + fragment@0 {
20034 + target = <&spi0>;
20035 + __overlay__ {
20036 + status = "okay";
20037 + };
20038 + };
20039 +
20040 + fragment@1 {
20041 + target = <&spidev0>;
20042 + __overlay__ {
20043 + status = "disabled";
20044 + };
20045 + };
20046 +
20047 + fragment@2 {
20048 + target = <&spidev1>;
20049 + __overlay__ {
20050 + status = "disabled";
20051 + };
20052 + };
20053 +
20054 + fragment@3 {
20055 + target = <&gpio>;
20056 + __overlay__ {
20057 + mz61581_pins: mz61581_pins {
20058 + brcm,pins = <4 15 18 25>;
20059 + brcm,function = <0 1 1 1>; /* in out out out */
20060 + };
20061 + };
20062 + };
20063 +
20064 + fragment@4 {
20065 + target = <&spi0>;
20066 + __overlay__ {
20067 + /* needed to avoid dtc warning */
20068 + #address-cells = <1>;
20069 + #size-cells = <0>;
20070 +
20071 + mz61581: mz61581@0{
20072 + compatible = "samsung,s6d02a1";
20073 + reg = <0>;
20074 + pinctrl-names = "default";
20075 + pinctrl-0 = <&mz61581_pins>;
20076 +
20077 + spi-max-frequency = <128000000>;
20078 + spi-cpol;
20079 + spi-cpha;
20080 +
20081 + width = <320>;
20082 + height = <480>;
20083 + rotate = <270>;
20084 + bgr;
20085 + fps = <30>;
20086 + buswidth = <8>;
20087 + txbuflen = <32768>;
20088 +
20089 + reset-gpios = <&gpio 15 1>;
20090 + dc-gpios = <&gpio 25 0>;
20091 + led-gpios = <&gpio 18 0>;
20092 +
20093 + init = <0x10000b0 00
20094 + 0x1000011
20095 + 0x20000ff
20096 + 0x10000b3 0x02 0x00 0x00 0x00
20097 + 0x10000c0 0x13 0x3b 0x00 0x02 0x00 0x01 0x00 0x43
20098 + 0x10000c1 0x08 0x16 0x08 0x08
20099 + 0x10000c4 0x11 0x07 0x03 0x03
20100 + 0x10000c6 0x00
20101 + 0x10000c8 0x03 0x03 0x13 0x5c 0x03 0x07 0x14 0x08 0x00 0x21 0x08 0x14 0x07 0x53 0x0c 0x13 0x03 0x03 0x21 0x00
20102 + 0x1000035 0x00
20103 + 0x1000036 0xa0
20104 + 0x100003a 0x55
20105 + 0x1000044 0x00 0x01
20106 + 0x10000d0 0x07 0x07 0x1d 0x03
20107 + 0x10000d1 0x03 0x30 0x10
20108 + 0x10000d2 0x03 0x14 0x04
20109 + 0x1000029
20110 + 0x100002c>;
20111 +
20112 + /* This is a workaround to make sure the init sequence slows down and doesn't fail */
20113 + debug = <3>;
20114 + };
20115 +
20116 + mz61581_ts: mz61581_ts@1 {
20117 + compatible = "ti,ads7846";
20118 + reg = <1>;
20119 +
20120 + spi-max-frequency = <2000000>;
20121 + interrupts = <4 2>; /* high-to-low edge triggered */
20122 + interrupt-parent = <&gpio>;
20123 + pendown-gpio = <&gpio 4 0>;
20124 +
20125 + ti,x-plate-ohms = /bits/ 16 <60>;
20126 + ti,pressure-max = /bits/ 16 <255>;
20127 + };
20128 + };
20129 + };
20130 + __overrides__ {
20131 + speed = <&mz61581>, "spi-max-frequency:0";
20132 + rotate = <&mz61581>, "rotate:0";
20133 + fps = <&mz61581>, "fps:0";
20134 + txbuflen = <&mz61581>, "txbuflen:0";
20135 + debug = <&mz61581>, "debug:0";
20136 + xohms = <&mz61581_ts>,"ti,x-plate-ohms;0";
20137 + };
20138 +};
20139 diff --git a/arch/arm/boot/dts/overlays/ov5647-overlay.dts b/arch/arm/boot/dts/overlays/ov5647-overlay.dts
20140 new file mode 100644
20141 index 000000000000..d7ed4703c9b0
20142 --- /dev/null
20143 +++ b/arch/arm/boot/dts/overlays/ov5647-overlay.dts
20144 @@ -0,0 +1,94 @@
20145 +// SPDX-License-Identifier: GPL-2.0-only
20146 +// Definitions for OV5647 camera module on VC I2C bus
20147 +/dts-v1/;
20148 +/plugin/;
20149 +
20150 +/{
20151 + compatible = "brcm,bcm2835";
20152 +
20153 + fragment@0 {
20154 + target = <&i2c_csi_dsi>;
20155 + __overlay__ {
20156 + #address-cells = <1>;
20157 + #size-cells = <0>;
20158 + status = "okay";
20159 +
20160 + ov5647: ov5647@36 {
20161 + compatible = "ovti,ov5647";
20162 + reg = <0x36>;
20163 + status = "okay";
20164 +
20165 + pwdn-gpios = <&gpio 41 1>, <&gpio 32 1>;
20166 + clocks = <&ov5647_clk>;
20167 +
20168 + rotation = <0>;
20169 + orientation = <2>;
20170 +
20171 + port {
20172 + ov5647_0: endpoint {
20173 + remote-endpoint = <&csi1_ep>;
20174 + clock-lanes = <0>;
20175 + data-lanes = <1 2>;
20176 + clock-noncontinuous;
20177 + link-frequencies =
20178 + /bits/ 64 <297000000>;
20179 + };
20180 + };
20181 + };
20182 + };
20183 + };
20184 +
20185 + fragment@1 {
20186 + target = <&csi1>;
20187 + __overlay__ {
20188 + status = "okay";
20189 +
20190 + port {
20191 + csi1_ep: endpoint {
20192 + remote-endpoint = <&ov5647_0>;
20193 + data-lanes = <1 2>;
20194 + };
20195 + };
20196 + };
20197 + };
20198 +
20199 + fragment@2 {
20200 + target = <&i2c0if>;
20201 + __overlay__ {
20202 + status = "okay";
20203 + };
20204 + };
20205 +
20206 + fragment@3 {
20207 + target = <&i2c0mux>;
20208 + __overlay__ {
20209 + status = "okay";
20210 + };
20211 + };
20212 +
20213 + fragment@4 {
20214 + target-path="/__overrides__";
20215 + __overlay__ {
20216 + cam0-pwdn-ctrl = <&ov5647>,"pwdn-gpios:0";
20217 + cam0-pwdn = <&ov5647>,"pwdn-gpios:4";
20218 + cam0-led-ctrl = <&ov5647>,"pwdn-gpios:12";
20219 + cam0-led = <&ov5647>,"pwdn-gpios:16";
20220 + };
20221 + };
20222 +
20223 + fragment@5 {
20224 + target-path = "/";
20225 + __overlay__ {
20226 + ov5647_clk: camera-clk {
20227 + compatible = "fixed-clock";
20228 + #clock-cells = <0>;
20229 + clock-frequency = <25000000>;
20230 + };
20231 + };
20232 + };
20233 +
20234 + __overrides__ {
20235 + rotation = <&ov5647>,"rotation:0";
20236 + orientation = <&ov5647>,"orientation:0";
20237 + };
20238 +};
20239 diff --git a/arch/arm/boot/dts/overlays/ov7251-overlay.dts b/arch/arm/boot/dts/overlays/ov7251-overlay.dts
20240 new file mode 100644
20241 index 000000000000..09dbeda39d06
20242 --- /dev/null
20243 +++ b/arch/arm/boot/dts/overlays/ov7251-overlay.dts
20244 @@ -0,0 +1,113 @@
20245 +// SPDX-License-Identifier: GPL-2.0-only
20246 +// Definitions for OV7251 camera module on VC I2C bus
20247 +/dts-v1/;
20248 +/plugin/;
20249 +
20250 +#include <dt-bindings/gpio/gpio.h>
20251 +
20252 +/{
20253 + compatible = "brcm,bcm2835";
20254 +
20255 + fragment@0 {
20256 + target = <&i2c_csi_dsi>;
20257 + __overlay__ {
20258 + #address-cells = <1>;
20259 + #size-cells = <0>;
20260 + status = "okay";
20261 +
20262 + ov7251: ov7251@60 {
20263 + compatible = "ovti,ov7251";
20264 + reg = <0x60>;
20265 + status = "okay";
20266 +
20267 + clocks = <&ov7251_clk>;
20268 + clock-names = "xclk";
20269 + clock-frequency = <24000000>;
20270 +
20271 + vdddo-supply = <&ov7251_dovdd>;
20272 + vdda-supply = <&cam1_reg>;
20273 + vddd-supply = <&ov7251_dvdd>;
20274 +
20275 + rotation = <0>;
20276 + orientation = <2>;
20277 +
20278 + port {
20279 + ov7251_0: endpoint {
20280 + remote-endpoint = <&csi1_ep>;
20281 + clock-lanes = <0>;
20282 + data-lanes = <1>;
20283 + clock-noncontinuous;
20284 + link-frequencies =
20285 + /bits/ 64 <456000000>;
20286 + };
20287 + };
20288 + };
20289 + };
20290 + };
20291 +
20292 + fragment@1 {
20293 + target = <&csi1>;
20294 + __overlay__ {
20295 + status = "okay";
20296 +
20297 + port {
20298 + csi1_ep: endpoint {
20299 + remote-endpoint = <&ov7251_0>;
20300 + data-lanes = <1>;
20301 + };
20302 + };
20303 + };
20304 + };
20305 +
20306 + fragment@2 {
20307 + target = <&i2c0if>;
20308 + __overlay__ {
20309 + status = "okay";
20310 + };
20311 + };
20312 +
20313 + fragment@3 {
20314 + target-path="/";
20315 + __overlay__ {
20316 + ov7251_dovdd: fixedregulator@1 {
20317 + compatible = "regulator-fixed";
20318 + regulator-name = "ov7251_dovdd";
20319 + regulator-min-microvolt = <1800000>;
20320 + regulator-max-microvolt = <1800000>;
20321 + };
20322 + ov7251_dvdd: fixedregulator@2 {
20323 + compatible = "regulator-fixed";
20324 + regulator-name = "ov7251_dvdd";
20325 + regulator-min-microvolt = <1200000>;
20326 + regulator-max-microvolt = <1200000>;
20327 + };
20328 + ov7251_clk: ov7251-clk {
20329 + compatible = "fixed-clock";
20330 + #clock-cells = <0>;
20331 + clock-frequency = <24000000>;
20332 + };
20333 + };
20334 + };
20335 +
20336 + fragment@4 {
20337 + target = <&i2c0mux>;
20338 + __overlay__ {
20339 + status = "okay";
20340 + };
20341 + };
20342 +
20343 + fragment@5 {
20344 + target = <&cam1_reg>;
20345 + __overlay__ {
20346 + status = "okay";
20347 + regulator-name = "ov7251_avdd";
20348 + regulator-min-microvolt = <2800000>;
20349 + regulator-max-microvolt = <2800000>;
20350 + };
20351 + };
20352 +
20353 + __overrides__ {
20354 + rotation = <&ov7251>,"rotation:0";
20355 + orientation = <&ov7251>,"orientation:0";
20356 + };
20357 +};
20358 diff --git a/arch/arm/boot/dts/overlays/ov9281-overlay.dts b/arch/arm/boot/dts/overlays/ov9281-overlay.dts
20359 new file mode 100644
20360 index 000000000000..277236c03358
20361 --- /dev/null
20362 +++ b/arch/arm/boot/dts/overlays/ov9281-overlay.dts
20363 @@ -0,0 +1,113 @@
20364 +// SPDX-License-Identifier: GPL-2.0-only
20365 +// Definitions for OV9281 camera module on VC I2C bus
20366 +/dts-v1/;
20367 +/plugin/;
20368 +
20369 +#include <dt-bindings/gpio/gpio.h>
20370 +
20371 +/{
20372 + compatible = "brcm,bcm2835";
20373 +
20374 + fragment@0 {
20375 + target = <&i2c_csi_dsi>;
20376 + __overlay__ {
20377 + #address-cells = <1>;
20378 + #size-cells = <0>;
20379 + status = "okay";
20380 +
20381 + ov9281: ov9281@60 {
20382 + compatible = "ovti,ov9281";
20383 + reg = <0x60>;
20384 + status = "okay";
20385 +
20386 + clocks = <&ov9281_clk>;
20387 + clock-names = "xvclk";
20388 +
20389 + avdd-supply = <&cam1_reg>;
20390 + dovdd-supply = <&ov9281_dovdd>;
20391 + dvdd-supply = <&ov9281_dvdd>;
20392 +
20393 + rotation = <0>;
20394 + orientation = <2>;
20395 +
20396 + port {
20397 + ov9281_0: endpoint {
20398 + remote-endpoint = <&csi1_ep>;
20399 + clock-lanes = <0>;
20400 + data-lanes = <1 2>;
20401 + clock-noncontinuous;
20402 + link-frequencies =
20403 + /bits/ 64 <400000000>;
20404 + };
20405 + };
20406 + };
20407 + };
20408 + };
20409 +
20410 + fragment@1 {
20411 + target = <&csi1>;
20412 + __overlay__ {
20413 + status = "okay";
20414 +
20415 + port {
20416 + csi1_ep: endpoint {
20417 + remote-endpoint = <&ov9281_0>;
20418 + data-lanes = <1 2>;
20419 + clock-noncontinuous;
20420 + };
20421 + };
20422 + };
20423 + };
20424 +
20425 + fragment@2 {
20426 + target = <&i2c0if>;
20427 + __overlay__ {
20428 + status = "okay";
20429 + };
20430 + };
20431 +
20432 + fragment@3 {
20433 + target-path="/";
20434 + __overlay__ {
20435 + ov9281_dovdd: fixedregulator@1 {
20436 + compatible = "regulator-fixed";
20437 + regulator-name = "ov9281_dovdd";
20438 + regulator-min-microvolt = <1800000>;
20439 + regulator-max-microvolt = <1800000>;
20440 + };
20441 + ov9281_dvdd: fixedregulator@2 {
20442 + compatible = "regulator-fixed";
20443 + regulator-name = "ov9281_dvdd";
20444 + regulator-min-microvolt = <1200000>;
20445 + regulator-max-microvolt = <1200000>;
20446 + };
20447 + ov9281_clk: ov9281-clk {
20448 + compatible = "fixed-clock";
20449 + #clock-cells = <0>;
20450 + clock-frequency = <24000000>;
20451 + };
20452 + };
20453 + };
20454 +
20455 + fragment@4 {
20456 + target = <&i2c0mux>;
20457 + __overlay__ {
20458 + status = "okay";
20459 + };
20460 + };
20461 +
20462 + fragment@5 {
20463 + target = <&cam1_reg>;
20464 + __overlay__ {
20465 + status = "okay";
20466 + regulator-name = "ov9281_avdd";
20467 + regulator-min-microvolt = <2800000>;
20468 + regulator-max-microvolt = <2800000>;
20469 + };
20470 + };
20471 +
20472 + __overrides__ {
20473 + rotation = <&ov9281>,"rotation:0";
20474 + orientation = <&ov9281>,"orientation:0";
20475 + };
20476 +};
20477 diff --git a/arch/arm/boot/dts/overlays/overlay_map.dts b/arch/arm/boot/dts/overlays/overlay_map.dts
20478 new file mode 100644
20479 index 000000000000..bc6e3bce22c7
20480 --- /dev/null
20481 +++ b/arch/arm/boot/dts/overlays/overlay_map.dts
20482 @@ -0,0 +1,158 @@
20483 +/dts-v1/;
20484 +
20485 +/ {
20486 + bmp085_i2c-sensor {
20487 + deprecated = "use i2c-sensor,bmp085";
20488 + };
20489 +
20490 + highperi {
20491 + bcm2711;
20492 + };
20493 +
20494 + i2c0-bcm2708 {
20495 + deprecated = "use i2c0";
20496 + };
20497 +
20498 + i2c1-bcm2708 {
20499 + deprecated = "use i2c1";
20500 + };
20501 +
20502 + i2c3 {
20503 + bcm2711;
20504 + };
20505 +
20506 + i2c4 {
20507 + bcm2711;
20508 + };
20509 +
20510 + i2c5 {
20511 + bcm2711;
20512 + };
20513 +
20514 + i2c6 {
20515 + bcm2711;
20516 + };
20517 +
20518 + lirc-rpi {
20519 + deprecated = "use gpio-ir";
20520 + };
20521 +
20522 + pcie-32bit-dma {
20523 + bcm2711;
20524 + };
20525 +
20526 + pi3-act-led {
20527 + renamed = "act-led";
20528 + };
20529 +
20530 + pi3-disable-bt {
20531 + renamed = "disable-bt";
20532 + };
20533 +
20534 + pi3-disable-wifi {
20535 + renamed = "disable-wifi";
20536 + };
20537 +
20538 + pi3-miniuart-bt {
20539 + renamed = "miniuart-bt";
20540 + };
20541 +
20542 + rpivid-v4l2 {
20543 + bcm2711;
20544 + };
20545 +
20546 + sdio-1bit {
20547 + deprecated = "use sdio,bus_width=1,gpios_22_25";
20548 + };
20549 +
20550 + sdtweak {
20551 + deprecated = "use 'dtparam=sd_poll_once' etc.";
20552 + };
20553 +
20554 + spi0-cs {
20555 + renamed = "spi0-2cs";
20556 + };
20557 +
20558 + spi0-hw-cs {
20559 + deprecated = "no longer necessary";
20560 + };
20561 +
20562 + spi3-1cs {
20563 + bcm2711;
20564 + };
20565 +
20566 + spi3-2cs {
20567 + bcm2711;
20568 + };
20569 +
20570 + spi4-1cs {
20571 + bcm2711;
20572 + };
20573 +
20574 + spi4-2cs {
20575 + bcm2711;
20576 + };
20577 +
20578 + spi5-1cs {
20579 + bcm2711;
20580 + };
20581 +
20582 + spi5-2cs {
20583 + bcm2711;
20584 + };
20585 +
20586 + spi6-1cs {
20587 + bcm2711;
20588 + };
20589 +
20590 + spi6-2cs {
20591 + bcm2711;
20592 + };
20593 +
20594 + uart2 {
20595 + bcm2711;
20596 + };
20597 +
20598 + uart3 {
20599 + bcm2711;
20600 + };
20601 +
20602 + uart4 {
20603 + bcm2711;
20604 + };
20605 +
20606 + uart5 {
20607 + bcm2711;
20608 + };
20609 +
20610 + upstream {
20611 + bcm2835;
20612 + bcm2711 = "upstream-pi4";
20613 + };
20614 +
20615 + upstream-aux-interrupt {
20616 + deprecated = "no longer necessary";
20617 + };
20618 +
20619 + upstream-pi4 {
20620 + bcm2711;
20621 + };
20622 +
20623 + vc4-fkms-v3d {
20624 + bcm2835;
20625 + bcm2711 = "vc4-fkms-v3d-pi4";
20626 + };
20627 +
20628 + vc4-fkms-v3d-pi4 {
20629 + bcm2711;
20630 + };
20631 +
20632 + vc4-kms-v3d {
20633 + bcm2835;
20634 + bcm2711 = "vc4-kms-v3d-pi4";
20635 + };
20636 +
20637 + vc4-kms-v3d-pi4 {
20638 + bcm2711;
20639 + };
20640 +};
20641 diff --git a/arch/arm/boot/dts/overlays/papirus-overlay.dts b/arch/arm/boot/dts/overlays/papirus-overlay.dts
20642 new file mode 100644
20643 index 000000000000..7b6bcfd49c86
20644 --- /dev/null
20645 +++ b/arch/arm/boot/dts/overlays/papirus-overlay.dts
20646 @@ -0,0 +1,89 @@
20647 +/* PaPiRus ePaper Screen by Pi Supply */
20648 +
20649 +/dts-v1/;
20650 +/plugin/;
20651 +
20652 +/ {
20653 + compatible = "brcm,bcm2835";
20654 +
20655 + fragment@0 {
20656 + target = <&i2c_arm>;
20657 + __overlay__ {
20658 + #address-cells = <1>;
20659 + #size-cells = <0>;
20660 + status = "okay";
20661 +
20662 + display_temp: lm75@48 {
20663 + compatible = "lm75b";
20664 + reg = <0x48>;
20665 + status = "okay";
20666 + #thermal-sensor-cells = <0>;
20667 + };
20668 + };
20669 + };
20670 +
20671 + fragment@1 {
20672 + target-path = "/";
20673 + __overlay__ {
20674 + thermal-zones {
20675 + display {
20676 + polling-delay-passive = <0>;
20677 + polling-delay = <0>;
20678 + thermal-sensors = <&display_temp>;
20679 + };
20680 + };
20681 + };
20682 + };
20683 +
20684 + fragment@2 {
20685 + target = <&spi0>;
20686 + __overlay__ {
20687 + status = "okay";
20688 +
20689 + spidev@0{
20690 + status = "disabled";
20691 + };
20692 + };
20693 + };
20694 +
20695 + fragment@3 {
20696 + target = <&gpio>;
20697 + __overlay__ {
20698 + repaper_pins: repaper_pins {
20699 + brcm,pins = <14 15 23 24 25>;
20700 + brcm,function = <1 1 1 1 0>; /* out out out out in */
20701 + };
20702 + };
20703 + };
20704 +
20705 + fragment@4 {
20706 + target = <&spi0>;
20707 + __overlay__ {
20708 + /* needed to avoid dtc warning */
20709 + #address-cells = <1>;
20710 + #size-cells = <0>;
20711 +
20712 + repaper: repaper@0{
20713 + compatible = "not_set";
20714 + reg = <0>;
20715 + pinctrl-names = "default";
20716 + pinctrl-0 = <&repaper_pins>;
20717 +
20718 + spi-max-frequency = <8000000>;
20719 +
20720 + panel-on-gpios = <&gpio 23 0>;
20721 + border-gpios = <&gpio 14 0>;
20722 + discharge-gpios = <&gpio 15 0>;
20723 + reset-gpios = <&gpio 24 0>;
20724 + busy-gpios = <&gpio 25 0>;
20725 +
20726 + repaper-thermal-zone = "display";
20727 + };
20728 + };
20729 + };
20730 +
20731 + __overrides__ {
20732 + panel = <&repaper>, "compatible";
20733 + speed = <&repaper>, "spi-max-frequency:0";
20734 + };
20735 +};
20736 diff --git a/arch/arm/boot/dts/overlays/pca953x-overlay.dts b/arch/arm/boot/dts/overlays/pca953x-overlay.dts
20737 new file mode 100644
20738 index 000000000000..8b6ee44665ce
20739 --- /dev/null
20740 +++ b/arch/arm/boot/dts/overlays/pca953x-overlay.dts
20741 @@ -0,0 +1,240 @@
20742 +// Definitions for NXP PCA953x family of I2C GPIO controllers on ARM I2C bus.
20743 +/dts-v1/;
20744 +/plugin/;
20745 +
20746 +/{
20747 + compatible = "brcm,bcm2835";
20748 +
20749 + fragment@0 {
20750 + target = <&i2c_arm>;
20751 + __overlay__ {
20752 + #address-cells = <1>;
20753 + #size-cells = <0>;
20754 + status = "okay";
20755 +
20756 + pca: pca@20 {
20757 + compatible = "nxp,pca9534";
20758 + reg = <0x20>;
20759 + gpio-controller;
20760 + #gpio-cells = <2>;
20761 +
20762 + status = "okay";
20763 + };
20764 + };
20765 + };
20766 +
20767 + fragment@1 {
20768 + target = <&pca>;
20769 + __dormant__ {
20770 + compatible = "nxp,pca6416";
20771 + };
20772 + };
20773 + fragment@2 {
20774 + target = <&pca>;
20775 + __dormant__ {
20776 + compatible = "nxp,pca9505";
20777 + };
20778 + };
20779 + fragment@3 {
20780 + target = <&pca>;
20781 + __dormant__ {
20782 + compatible = "nxp,pca9535";
20783 + };
20784 + };
20785 + fragment@4 {
20786 + target = <&pca>;
20787 + __dormant__ {
20788 + compatible = "nxp,pca9536";
20789 + };
20790 + };
20791 + fragment@5 {
20792 + target = <&pca>;
20793 + __dormant__ {
20794 + compatible = "nxp,pca9537";
20795 + };
20796 + };
20797 + fragment@6 {
20798 + target = <&pca>;
20799 + __dormant__ {
20800 + compatible = "nxp,pca9538";
20801 + };
20802 + };
20803 + fragment@7 {
20804 + target = <&pca>;
20805 + __dormant__ {
20806 + compatible = "nxp,pca9539";
20807 + };
20808 + };
20809 + fragment@8 {
20810 + target = <&pca>;
20811 + __dormant__ {
20812 + compatible = "nxp,pca9554";
20813 + };
20814 + };
20815 + fragment@9 {
20816 + target = <&pca>;
20817 + __dormant__ {
20818 + compatible = "nxp,pca9555";
20819 + };
20820 + };
20821 + fragment@10 {
20822 + target = <&pca>;
20823 + __dormant__ {
20824 + compatible = "nxp,pca9556";
20825 + };
20826 + };
20827 + fragment@11 {
20828 + target = <&pca>;
20829 + __dormant__ {
20830 + compatible = "nxp,pca9557";
20831 + };
20832 + };
20833 + fragment@12 {
20834 + target = <&pca>;
20835 + __dormant__ {
20836 + compatible = "nxp,pca9574";
20837 + };
20838 + };
20839 + fragment@13 {
20840 + target = <&pca>;
20841 + __dormant__ {
20842 + compatible = "nxp,pca9575";
20843 + };
20844 + };
20845 + fragment@14 {
20846 + target = <&pca>;
20847 + __dormant__ {
20848 + compatible = "nxp,pca9698";
20849 + };
20850 + };
20851 + fragment@15 {
20852 + target = <&pca>;
20853 + __dormant__ {
20854 + compatible = "nxp,pca16416";
20855 + };
20856 + };
20857 + fragment@16 {
20858 + target = <&pca>;
20859 + __dormant__ {
20860 + compatible = "nxp,pca16524";
20861 + };
20862 + };
20863 + fragment@17 {
20864 + target = <&pca>;
20865 + __dormant__ {
20866 + compatible = "nxp,pca19555a";
20867 + };
20868 + };
20869 + fragment@18 {
20870 + target = <&pca>;
20871 + __dormant__ {
20872 + compatible = "maxim,max7310";
20873 + };
20874 + };
20875 + fragment@19 {
20876 + target = <&pca>;
20877 + __dormant__ {
20878 + compatible = "maxim,max7312";
20879 + };
20880 + };
20881 + fragment@20 {
20882 + target = <&pca>;
20883 + __dormant__ {
20884 + compatible = "maxim,max7313";
20885 + };
20886 + };
20887 + fragment@21 {
20888 + target = <&pca>;
20889 + __dormant__ {
20890 + compatible = "maxim,max7315";
20891 + };
20892 + };
20893 + fragment@22 {
20894 + target = <&pca>;
20895 + __dormant__ {
20896 + compatible = "ti,pca6107";
20897 + };
20898 + };
20899 + fragment@23 {
20900 + target = <&pca>;
20901 + __dormant__ {
20902 + compatible = "ti,tca6408";
20903 + };
20904 + };
20905 + fragment@24 {
20906 + target = <&pca>;
20907 + __dormant__ {
20908 + compatible = "ti,tca6416";
20909 + };
20910 + };
20911 + fragment@25 {
20912 + target = <&pca>;
20913 + __dormant__ {
20914 + compatible = "ti,tca6424";
20915 + };
20916 + };
20917 + fragment@26 {
20918 + target = <&pca>;
20919 + __dormant__ {
20920 + compatible = "ti,tca9539";
20921 + };
20922 + };
20923 + fragment@27 {
20924 + target = <&pca>;
20925 + __dormant__ {
20926 + compatible = "ti,tca9554";
20927 + };
20928 + };
20929 + fragment@28 {
20930 + target = <&pca>;
20931 + __dormant__ {
20932 + compatible = "onnn,cat9554";
20933 + };
20934 + };
20935 + fragment@29 {
20936 + target = <&pca>;
20937 + __dormant__ {
20938 + compatible = "onnn,pca9654";
20939 + };
20940 + };
20941 + fragment@30 {
20942 + target = <&pca>;
20943 + __dormant__ {
20944 + compatible = "exar,xra1202";
20945 + };
20946 + };
20947 +
20948 + __overrides__ {
20949 + addr = <&pca>,"reg:0";
20950 + pca6416 = <0>, "+1";
20951 + pca9505 = <0>, "+2";
20952 + pca9535 = <0>, "+3";
20953 + pca9536 = <0>, "+4";
20954 + pca9537 = <0>, "+5";
20955 + pca9538 = <0>, "+6";
20956 + pca9539 = <0>, "+7";
20957 + pca9554 = <0>, "+8";
20958 + pca9555 = <0>, "+9";
20959 + pca9556 = <0>, "+10";
20960 + pca9557 = <0>, "+11";
20961 + pca9574 = <0>, "+12";
20962 + pca9575 = <0>, "+13";
20963 + pca9698 = <0>, "+14";
20964 + pca16416 = <0>, "+15";
20965 + pca16524 = <0>, "+16";
20966 + pca19555a = <0>, "+17";
20967 + max7310 = <0>, "+18";
20968 + max7312 = <0>, "+19";
20969 + max7313 = <0>, "+20";
20970 + max7315 = <0>, "+21";
20971 + pca6107 = <0>, "+22";
20972 + tca6408 = <0>, "+23";
20973 + tca6416 = <0>, "+24";
20974 + tca6424 = <0>, "+25";
20975 + tca9539 = <0>, "+26";
20976 + tca9554 = <0>, "+27";
20977 + cat9554 = <0>, "+28";
20978 + pca9654 = <0>, "+29";
20979 + xra1202 = <0>, "+30";
20980 + };
20981 +};
20982 diff --git a/arch/arm/boot/dts/overlays/pcie-32bit-dma-overlay.dts b/arch/arm/boot/dts/overlays/pcie-32bit-dma-overlay.dts
20983 new file mode 100644
20984 index 000000000000..cca3e83721b7
20985 --- /dev/null
20986 +++ b/arch/arm/boot/dts/overlays/pcie-32bit-dma-overlay.dts
20987 @@ -0,0 +1,18 @@
20988 +/*
20989 + * pcie-32bit-dma-overlay.dts
20990 + */
20991 +
20992 +/dts-v1/;
20993 +/plugin/;
20994 +
20995 +/ {
20996 + compatible = "brcm,bcm2711";
20997 +
20998 + fragment@0 {
20999 + target-path = "/aliases";
21000 + __overlay__ {
21001 + pcie0 = "";
21002 + };
21003 + };
21004 +
21005 +};
21006 diff --git a/arch/arm/boot/dts/overlays/pibell-overlay.dts b/arch/arm/boot/dts/overlays/pibell-overlay.dts
21007 new file mode 100644
21008 index 000000000000..9333a9b09772
21009 --- /dev/null
21010 +++ b/arch/arm/boot/dts/overlays/pibell-overlay.dts
21011 @@ -0,0 +1,81 @@
21012 +/dts-v1/;
21013 +/plugin/;
21014 +
21015 +/ {
21016 + compatible = "brcm,bcm2835";
21017 +
21018 + fragment@0 {
21019 + target-path = "/";
21020 + __overlay__ {
21021 + codec_out: spdif-transmitter {
21022 + #address-cells = <0>;
21023 + #size-cells = <0>;
21024 + #sound-dai-cells = <0>;
21025 + compatible = "linux,spdif-dit";
21026 + status = "okay";
21027 + };
21028 +
21029 + codec_in: card-codec {
21030 + #sound-dai-cells = <0>;
21031 + compatible = "invensense,ics43432";
21032 + status = "okay";
21033 + };
21034 + };
21035 + };
21036 +
21037 + fragment@1 {
21038 + target = <&i2s>;
21039 + __overlay__ {
21040 + #sound-dai-cells = <0>;
21041 + status = "okay";
21042 + };
21043 + };
21044 +
21045 + fragment@2 {
21046 + target = <&sound>;
21047 + snd: __overlay__ {
21048 + compatible = "simple-audio-card";
21049 + simple-audio-card,name = "PiBell";
21050 +
21051 + status="okay";
21052 +
21053 + capture_link: simple-audio-card,dai-link@0 {
21054 + format = "i2s";
21055 +
21056 + r_cpu_dai: cpu {
21057 + sound-dai = <&i2s>;
21058 +
21059 +/* example TDM slot configuration
21060 + dai-tdm-slot-num = <2>;
21061 + dai-tdm-slot-width = <32>;
21062 +*/
21063 + };
21064 +
21065 + r_codec_dai: codec {
21066 + sound-dai = <&codec_in>;
21067 + };
21068 + };
21069 +
21070 + playback_link: simple-audio-card,dai-link@1 {
21071 + format = "i2s";
21072 +
21073 + p_cpu_dai: cpu {
21074 + sound-dai = <&i2s>;
21075 +
21076 +/* example TDM slot configuration
21077 + dai-tdm-slot-num = <2>;
21078 + dai-tdm-slot-width = <32>;
21079 +*/
21080 + };
21081 +
21082 + p_codec_dai: codec {
21083 + sound-dai = <&codec_out>;
21084 + };
21085 + };
21086 + };
21087 + };
21088 +
21089 + __overrides__ {
21090 + alsaname = <&snd>, "simple-audio-card,name";
21091 + };
21092 +};
21093 diff --git a/arch/arm/boot/dts/overlays/pifacedigital-overlay.dts b/arch/arm/boot/dts/overlays/pifacedigital-overlay.dts
21094 new file mode 100644
21095 index 000000000000..532a858683d6
21096 --- /dev/null
21097 +++ b/arch/arm/boot/dts/overlays/pifacedigital-overlay.dts
21098 @@ -0,0 +1,144 @@
21099 +// SPDX-License-Identifier: GPL-2.0-only
21100 +/*
21101 + * PiFace Digital, Device Tree Overlay.
21102 + * Copyright (C) 2020 Thomas Preston <thomas.preston@codethink.co.uk>
21103 + *
21104 + * The PiFace Digital is a convenient breakout board for the Microchip mcp23s17
21105 + * SPI GPIO port expander.
21106 + *
21107 + * The first eight GPIOs 0..7 (bank A) are connected to eight output terminals
21108 + * and LEDs, plus two relays on the first two outputs. These output loads are
21109 + * active-high.
21110 + *
21111 + * The next eight GPIOs 8..15 (bank B) are connected to eight input terminals
21112 + * with four on-board switches connecting them to ground. Inputs devices are
21113 + * therefore expected to bridge terminals to ground, so the mcp23s17 pullups are
21114 + * activated for GPIO bank B.
21115 + *
21116 + * On PiFace Digital, the mcp23s17 is connected to the Raspberry Pi's SPI0 CS0
21117 + * bus. Each SPI bus supports up to eight addressable child devices. The PiFace
21118 + * Digital only supports addresses 0-4, which can be configured by jumpers JP1
21119 + * and JP2.
21120 + *
21121 + * You can tell the driver about these jumper configurations with the
21122 + * spi-present-mask bitmask:
21123 + *
21124 + * | JP1 | JP2 | dtoverlay line in /boot/config.txt |
21125 + * | --- | --- | ------------------------------------------ |
21126 + * | 0 | 0 | dtoverlay=pifacedigital |
21127 + * | 0 | 0 | dtoverlay=pifacedigital:spi-present-mask=1 |
21128 + * | 0 | 1 | dtoverlay=pifacedigital:spi-present-mask=2 |
21129 + * | 1 | 0 | dtoverlay=pifacedigital:spi-present-mask=4 |
21130 + * | 1 | 1 | dtoverlay=pifacedigital:spi-present-mask=8 |
21131 + *
21132 + * # Example
21133 + * Set the dtoverlay config in /boot/config.txt and power off the Raspberry Pi:
21134 + *
21135 + * $ grep pifacedigital /boot/config.txt
21136 + * dtoverlay=pifacedigital
21137 + * $ sudo systemctl poweroff
21138 + *
21139 + * Attach the PiFace Digital and power on the Raspberry Pi.
21140 + * Then use the libgpiod tools to query the device:
21141 + *
21142 + * $ sudo apt install gpiod
21143 + * $ gpiodetect | grep mcp23s17
21144 + * gpiochip2 [mcp23s17.0] (16 lines)
21145 + *
21146 + * Set GPIO outputs 0, 2 and 5:
21147 + *
21148 + * $ gpioset gpiochip2 0=1 2=1 5=1
21149 + *
21150 + * Get GPIO status (input GPIO 8..15 are high, because they are active-low):
21151 + *
21152 + * $ gpioget gpiochip2 {8..15}
21153 + * 1 1 1 1 1 1 1 1
21154 + *
21155 + * And even monitor interrupts:
21156 + *
21157 + * $ gpiomon gpiochip2 {8..15}
21158 + * event: FALLING EDGE offset: 11 timestamp: [1597361662.926741667]
21159 + * event: RISING EDGE offset: 11 timestamp: [1597361663.062555051]
21160 + *
21161 + */
21162 +
21163 +/dts-v1/;
21164 +/plugin/;
21165 +
21166 +/ {
21167 + compatible = "brcm,bcm2835";
21168 +
21169 + /* Disable exposing /dev/spidev0.0 */
21170 + fragment@0 {
21171 + target = <&spidev0>;
21172 + __overlay__ {
21173 + status = "disabled";
21174 + };
21175 + };
21176 +
21177 + /* Add the PiFace Digital device node to the spi0.0 device. */
21178 + fragment@1 {
21179 + target = <&spi0>;
21180 + __overlay__ {
21181 + status = "okay";
21182 + #address-cells = <1>;
21183 + #size-cells = <0>;
21184 +
21185 + pfdigital: pifacedigital@0 {
21186 + compatible = "microchip,mcp23s17";
21187 + reg = <0>;
21188 +
21189 + /* Set devices present with 8-bit mask. */
21190 + microchip,spi-present-mask = <0x01>;
21191 + spi-max-frequency = <500000>;
21192 +
21193 + gpio-controller;
21194 + #gpio-cells = <2>;
21195 +
21196 + /* This device can pass through interrupts. */
21197 + interrupt-controller;
21198 + #interrupt-cells = <2>;
21199 +
21200 + /* INTB is connected to GPIO 25.
21201 + * 0x8 active-low level-sensitive
21202 + */
21203 + interrupts = <25 0x8>;
21204 + interrupt-parent = <&gpio>;
21205 +
21206 + /* Configure pull-ups on bank B GPIOs */
21207 + pinctrl-0 = <&pfdigital_irq &pfdigital_pullups>;
21208 + pinctrl-names = "default";
21209 + pfdigital_pullups: pinmux {
21210 + pins =
21211 + "gpio8",
21212 + "gpio9",
21213 + "gpio10",
21214 + "gpio11",
21215 + "gpio12",
21216 + "gpio13",
21217 + "gpio14",
21218 + "gpio15";
21219 + bias-pull-up;
21220 + };
21221 + };
21222 + };
21223 + };
21224 +
21225 + /* PiFace Digital mcp23s17 INTB pin is connected to GPIO 25. The INTB
21226 + * pin is configured active-low (0 on interrupt), so expect to see
21227 + * FALLING_EDGE when inputs are bridged to ground (switch is pressed).
21228 + */
21229 + fragment@3 {
21230 + target = <&gpio>;
21231 + __overlay__ {
21232 + pfdigital_irq: pifacedigital_irq {
21233 + brcm,pins = <25>;
21234 + brcm,function = <0>; /* input */
21235 + };
21236 + };
21237 + };
21238 +
21239 + __overrides__ {
21240 + spi-present-mask = <&pfdigital>, "microchip,spi-present-mask:0";
21241 + };
21242 +};
21243 diff --git a/arch/arm/boot/dts/overlays/pifi-40-overlay.dts b/arch/arm/boot/dts/overlays/pifi-40-overlay.dts
21244 new file mode 100644
21245 index 000000000000..51a20e54977f
21246 --- /dev/null
21247 +++ b/arch/arm/boot/dts/overlays/pifi-40-overlay.dts
21248 @@ -0,0 +1,50 @@
21249 +// Definitions for PiFi-40 Amp
21250 +/dts-v1/;
21251 +/plugin/;
21252 +#include <dt-bindings/gpio/gpio.h>
21253 +/ {
21254 + compatible = "brcm,bcm2835";
21255 +
21256 + fragment@0 {
21257 + target = <&i2s>;
21258 + __overlay__ {
21259 + status = "okay";
21260 + };
21261 + };
21262 +
21263 + fragment@1 {
21264 + target = <&i2c1>;
21265 + __overlay__ {
21266 + #address-cells = <1>;
21267 + #size-cells = <0>;
21268 + status = "okay";
21269 +
21270 + tas5711l: audio-codec@1a {
21271 + compatible = "ti,tas5711";
21272 + reg = <0x1a>;
21273 + #sound-dai-cells = <0>;
21274 + sound-name-prefix = "Left";
21275 + status = "okay";
21276 + };
21277 +
21278 + tas5711r: audio-codec@1b {
21279 + compatible = "ti,tas5711";
21280 + reg = <0x1b>;
21281 + #sound-dai-cells = <0>;
21282 + sound-name-prefix = "Right";
21283 + status = "okay";
21284 + };
21285 + };
21286 + };
21287 +
21288 + fragment@2 {
21289 + target = <&sound>;
21290 + pifi_40: __overlay__ {
21291 + compatible = "pifi,pifi-40";
21292 + audio-codec = <&tas5711l &tas5711r>;
21293 + i2s-controller = <&i2s>;
21294 + pdn-gpios = <&gpio 23 1>;
21295 + status = "okay";
21296 + };
21297 + };
21298 +};
21299 diff --git a/arch/arm/boot/dts/overlays/pifi-dac-hd-overlay.dts b/arch/arm/boot/dts/overlays/pifi-dac-hd-overlay.dts
21300 new file mode 100644
21301 index 000000000000..67f50db7861a
21302 --- /dev/null
21303 +++ b/arch/arm/boot/dts/overlays/pifi-dac-hd-overlay.dts
21304 @@ -0,0 +1,49 @@
21305 +// Overlay for PiFi-DAC-HD
21306 +/dts-v1/;
21307 +/plugin/;
21308 +
21309 +/ {
21310 + compatible = "brcm,bcm2835";
21311 +
21312 + fragment@0 {
21313 + target = <&i2s>;
21314 + __overlay__ {
21315 + status = "okay";
21316 + };
21317 + };
21318 +
21319 + fragment@1 {
21320 + target = <&i2c1>;
21321 + __overlay__ {
21322 + status = "okay";
21323 + #address-cells = <1>;
21324 + #size-cells =<0>;
21325 +
21326 + pcm5142: pcm5142@4c {
21327 + #sound-dai-cells = <0>;
21328 + compatible = "ti,pcm5142";
21329 + reg = <0x4c>;
21330 + status = "okay";
21331 + };
21332 + };
21333 + };
21334 +
21335 + fragment@2 {
21336 + target = <&sound>;
21337 + __overlay__ {
21338 + compatible = "simple-audio-card";
21339 + simple-audio-card,name = "PiFi-DAC-HD";
21340 + status = "okay";
21341 +
21342 + simple-audio-card,dai-link@1 {
21343 + format = "i2s";
21344 + cpu {
21345 + sound-dai = <&i2s>;
21346 + };
21347 + codec {
21348 + sound-dai = <&pcm5142>;
21349 + };
21350 + };
21351 + };
21352 + };
21353 +};
21354 diff --git a/arch/arm/boot/dts/overlays/pifi-dac-zero-overlay.dts b/arch/arm/boot/dts/overlays/pifi-dac-zero-overlay.dts
21355 new file mode 100644
21356 index 000000000000..645ea74cb435
21357 --- /dev/null
21358 +++ b/arch/arm/boot/dts/overlays/pifi-dac-zero-overlay.dts
21359 @@ -0,0 +1,49 @@
21360 +// Overlay for PiFi-DAC-Zero
21361 +/dts-v1/;
21362 +/plugin/;
21363 +
21364 +/ {
21365 + compatible = "brcm,bcm2835";
21366 +
21367 + fragment@0 {
21368 + target = <&sound>;
21369 + __overlay__ {
21370 + compatible = "simple-audio-card";
21371 + simple-audio-card,name = "PiFi-DAC-Zero";
21372 + status = "okay";
21373 +
21374 + simple-audio-card,dai-link@1 {
21375 + format = "i2s";
21376 +
21377 + cpu {
21378 + sound-dai = <&i2s>;
21379 + dai-tdm-slot-num = <2>;
21380 + dai-tdm-slot-width = <32>;
21381 + };
21382 +
21383 + codec {
21384 + sound-dai = <&codec_out>;
21385 + };
21386 + };
21387 + };
21388 + };
21389 +
21390 + fragment@1 {
21391 + target-path = "/";
21392 + __overlay__ {
21393 + codec_out: pcm5102a-codec {
21394 + #sound-dai-cells = <0>;
21395 + compatible = "ti,pcm5102a";
21396 + status = "okay";
21397 + };
21398 + };
21399 + };
21400 +
21401 + fragment@2 {
21402 + target = <&i2s>;
21403 + __overlay__ {
21404 + #sound-dai-cells = <0>;
21405 + status = "okay";
21406 + };
21407 + };
21408 +};
21409 diff --git a/arch/arm/boot/dts/overlays/pifi-mini-210-overlay.dts b/arch/arm/boot/dts/overlays/pifi-mini-210-overlay.dts
21410 new file mode 100644
21411 index 000000000000..963597d611b5
21412 --- /dev/null
21413 +++ b/arch/arm/boot/dts/overlays/pifi-mini-210-overlay.dts
21414 @@ -0,0 +1,42 @@
21415 +// Definitions for PiFi Mini 210
21416 +/dts-v1/;
21417 +/plugin/;
21418 +
21419 +/ {
21420 + compatible = "brcm,bcm2835";
21421 +
21422 + fragment@0 {
21423 + target = <&i2s>;
21424 + __overlay__ {
21425 + status = "okay";
21426 + };
21427 + };
21428 +
21429 + fragment@1 {
21430 + target = <&i2c1>;
21431 + __overlay__ {
21432 + #address-cells = <1>;
21433 + #size-cells = <0>;
21434 + status = "okay";
21435 +
21436 + tas5711@1a {
21437 + #sound-dai-cells = <0>;
21438 + compatible = "ti,tas5711";
21439 + reg = <0x1a>;
21440 + status = "okay";
21441 + pdn-gpios = <&gpio 23 1>;
21442 + reset-gpios = <&gpio 24 1>;
21443 + };
21444 + };
21445 + };
21446 +
21447 + fragment@2 {
21448 + target = <&sound>;
21449 + __overlay__ {
21450 + compatible = "pifi,pifi-mini-210";
21451 + i2s-controller = <&i2s>;
21452 +
21453 + status = "okay";
21454 + };
21455 + };
21456 +};
21457 diff --git a/arch/arm/boot/dts/overlays/piglow-overlay.dts b/arch/arm/boot/dts/overlays/piglow-overlay.dts
21458 new file mode 100644
21459 index 000000000000..075bceef158c
21460 --- /dev/null
21461 +++ b/arch/arm/boot/dts/overlays/piglow-overlay.dts
21462 @@ -0,0 +1,97 @@
21463 +// Definitions for SN3218 LED driver from Si-En Technology on PiGlow
21464 +/dts-v1/;
21465 +/plugin/;
21466 +
21467 +/ {
21468 + compatible = "brcm,bcm2835";
21469 +
21470 + fragment@0 {
21471 + target = <&i2c_arm>;
21472 + __overlay__ {
21473 + #address-cells = <1>;
21474 + #size-cells = <0>;
21475 + status = "okay";
21476 +
21477 + sn3218@54 {
21478 + compatible = "si-en,sn3218";
21479 + reg = <0x54>;
21480 + #address-cells = <1>;
21481 + #size-cells = <0>;
21482 + status = "okay";
21483 +
21484 + led@1 {
21485 + reg = <1>;
21486 + label = "piglow:red:led1";
21487 + };
21488 + led@2 {
21489 + reg = <2>;
21490 + label = "piglow:orange:led2";
21491 + };
21492 + led@3 {
21493 + reg = <3>;
21494 + label = "piglow:yellow:led3";
21495 + };
21496 + led@4 {
21497 + reg = <4>;
21498 + label = "piglow:green:led4";
21499 + };
21500 + led@5 {
21501 + reg = <5>;
21502 + label = "piglow:blue:led5";
21503 + };
21504 + led@6 {
21505 + reg = <6>;
21506 + label = "piglow:green:led6";
21507 + };
21508 + led@7 {
21509 + reg = <7>;
21510 + label = "piglow:red:led7";
21511 + };
21512 + led@8 {
21513 + reg = <8>;
21514 + label = "piglow:orange:led8";
21515 + };
21516 + led@9 {
21517 + reg = <9>;
21518 + label = "piglow:yellow:led9";
21519 + };
21520 + led@10 {
21521 + reg = <10>;
21522 + label = "piglow:white:led10";
21523 + };
21524 + led@11 {
21525 + reg = <11>;
21526 + label = "piglow:white:led11";
21527 + };
21528 + led@12 {
21529 + reg = <12>;
21530 + label = "piglow:blue:led12";
21531 + };
21532 + led@13 {
21533 + reg = <13>;
21534 + label = "piglow:white:led13";
21535 + };
21536 + led@14 {
21537 + reg = <14>;
21538 + label = "piglow:green:led14";
21539 + };
21540 + led@15 {
21541 + reg = <15>;
21542 + label = "piglow:blue:led15";
21543 + };
21544 + led@16 {
21545 + reg = <16>;
21546 + label = "piglow:yellow:led16";
21547 + };
21548 + led@17 {
21549 + reg = <17>;
21550 + label = "piglow:orange:led17";
21551 + };
21552 + led@18 {
21553 + reg = <18>;
21554 + label = "piglow:red:led18";
21555 + };
21556 + };
21557 + };
21558 + };
21559 +};
21560 diff --git a/arch/arm/boot/dts/overlays/piscreen-overlay.dts b/arch/arm/boot/dts/overlays/piscreen-overlay.dts
21561 new file mode 100644
21562 index 000000000000..1ac75a248fab
21563 --- /dev/null
21564 +++ b/arch/arm/boot/dts/overlays/piscreen-overlay.dts
21565 @@ -0,0 +1,102 @@
21566 +/*
21567 + * Device Tree overlay for PiScreen 3.5" display shield by Ozzmaker
21568 + *
21569 + */
21570 +
21571 +/dts-v1/;
21572 +/plugin/;
21573 +
21574 +/ {
21575 + compatible = "brcm,bcm2835";
21576 +
21577 + fragment@0 {
21578 + target = <&spi0>;
21579 + __overlay__ {
21580 + status = "okay";
21581 + };
21582 + };
21583 +
21584 + fragment@1 {
21585 + target = <&spidev0>;
21586 + __overlay__ {
21587 + status = "disabled";
21588 + };
21589 + };
21590 +
21591 + fragment@2 {
21592 + target = <&spidev1>;
21593 + __overlay__ {
21594 + status = "disabled";
21595 + };
21596 + };
21597 +
21598 + fragment@3 {
21599 + target = <&gpio>;
21600 + __overlay__ {
21601 + piscreen_pins: piscreen_pins {
21602 + brcm,pins = <17 25 24 22>;
21603 + brcm,function = <0 1 1 1>; /* in out out out */
21604 + };
21605 + };
21606 + };
21607 +
21608 + fragment@4 {
21609 + target = <&spi0>;
21610 + __overlay__ {
21611 + /* needed to avoid dtc warning */
21612 + #address-cells = <1>;
21613 + #size-cells = <0>;
21614 +
21615 + piscreen: piscreen@0{
21616 + compatible = "ilitek,ili9486";
21617 + reg = <0>;
21618 + pinctrl-names = "default";
21619 + pinctrl-0 = <&piscreen_pins>;
21620 +
21621 + spi-max-frequency = <24000000>;
21622 + rotate = <270>;
21623 + bgr;
21624 + fps = <30>;
21625 + buswidth = <8>;
21626 + regwidth = <16>;
21627 + reset-gpios = <&gpio 25 1>;
21628 + dc-gpios = <&gpio 24 0>;
21629 + led-gpios = <&gpio 22 0>;
21630 + debug = <0>;
21631 +
21632 + init = <0x10000b0 0x00
21633 + 0x1000011
21634 + 0x20000ff
21635 + 0x100003a 0x55
21636 + 0x1000036 0x28
21637 + 0x10000c2 0x44
21638 + 0x10000c5 0x00 0x00 0x00 0x00
21639 + 0x10000e0 0x0f 0x1f 0x1c 0x0c 0x0f 0x08 0x48 0x98 0x37 0x0a 0x13 0x04 0x11 0x0d 0x00
21640 + 0x10000e1 0x0f 0x32 0x2e 0x0b 0x0d 0x05 0x47 0x75 0x37 0x06 0x10 0x03 0x24 0x20 0x00
21641 + 0x10000e2 0x0f 0x32 0x2e 0x0b 0x0d 0x05 0x47 0x75 0x37 0x06 0x10 0x03 0x24 0x20 0x00
21642 + 0x1000011
21643 + 0x1000029>;
21644 + };
21645 +
21646 + piscreen_ts: piscreen-ts@1 {
21647 + compatible = "ti,ads7846";
21648 + reg = <1>;
21649 +
21650 + spi-max-frequency = <2000000>;
21651 + interrupts = <17 2>; /* high-to-low edge triggered */
21652 + interrupt-parent = <&gpio>;
21653 + pendown-gpio = <&gpio 17 0>;
21654 + ti,swap-xy;
21655 + ti,x-plate-ohms = /bits/ 16 <100>;
21656 + ti,pressure-max = /bits/ 16 <255>;
21657 + };
21658 + };
21659 + };
21660 + __overrides__ {
21661 + speed = <&piscreen>,"spi-max-frequency:0";
21662 + rotate = <&piscreen>,"rotate:0";
21663 + fps = <&piscreen>,"fps:0";
21664 + debug = <&piscreen>,"debug:0";
21665 + xohms = <&piscreen_ts>,"ti,x-plate-ohms;0";
21666 + };
21667 +};
21668 diff --git a/arch/arm/boot/dts/overlays/piscreen2r-overlay.dts b/arch/arm/boot/dts/overlays/piscreen2r-overlay.dts
21669 new file mode 100644
21670 index 000000000000..9d2b51101969
21671 --- /dev/null
21672 +++ b/arch/arm/boot/dts/overlays/piscreen2r-overlay.dts
21673 @@ -0,0 +1,106 @@
21674 + /*
21675 + * Device Tree overlay for PiScreen2 3.5" TFT with resistive touch by Ozzmaker.com
21676 + *
21677 + */
21678 +
21679 +/dts-v1/;
21680 +/plugin/;
21681 +
21682 +/ {
21683 + compatible = "brcm,bcm2835";
21684 +
21685 + fragment@0 {
21686 + target = <&spi0>;
21687 + __overlay__ {
21688 + status = "okay";
21689 + };
21690 + };
21691 +
21692 + fragment@1 {
21693 + target = <&spidev0>;
21694 + __overlay__ {
21695 + status = "disabled";
21696 + };
21697 + };
21698 +
21699 + fragment@2 {
21700 + target = <&spidev1>;
21701 + __overlay__ {
21702 + status = "disabled";
21703 + };
21704 + };
21705 +
21706 + fragment@3 {
21707 + target = <&gpio>;
21708 + __overlay__ {
21709 + piscreen2_pins: piscreen2_pins {
21710 + brcm,pins = <17 25 24 22>;
21711 + brcm,function = <0 1 1 1>; /* in out out out */
21712 + };
21713 + };
21714 + };
21715 +
21716 + fragment@4 {
21717 + target = <&spi0>;
21718 + __overlay__ {
21719 + /* needed to avoid dtc warning */
21720 + #address-cells = <1>;
21721 + #size-cells = <0>;
21722 +
21723 + piscreen2: piscreen2@0{
21724 + compatible = "ilitek,ili9486";
21725 + reg = <0>;
21726 + pinctrl-names = "default";
21727 + pinctrl-0 = <&piscreen2_pins>;
21728 + bgr;
21729 + spi-max-frequency = <64000000>;
21730 + rotate = <90>;
21731 + fps = <30>;
21732 + buswidth = <8>;
21733 + regwidth = <16>;
21734 + txbuflen = <32768>;
21735 + reset-gpios = <&gpio 25 1>;
21736 + dc-gpios = <&gpio 24 0>;
21737 + led-gpios = <&gpio 22 0>;
21738 + debug = <0>;
21739 +
21740 + init = <0x10000b0 0x00
21741 + 0x1000011
21742 + 0x20000ff
21743 + 0x100003a 0x55
21744 + 0x1000036 0x28
21745 + 0x10000c0 0x11 0x09
21746 + 0x10000c1 0x41
21747 + 0x10000c5 0x00 0x00 0x00 0x00
21748 + 0x10000b6 0x00 0x02
21749 + 0x10000f7 0xa9 0x51 0x2c 0x2
21750 + 0x10000be 0x00 0x04
21751 + 0x10000e9 0x00
21752 + 0x1000011
21753 + 0x1000029>;
21754 +
21755 + };
21756 +
21757 + piscreen2_ts: piscreen2-ts@1 {
21758 + compatible = "ti,ads7846";
21759 + reg = <1>;
21760 +
21761 + spi-max-frequency = <2000000>;
21762 + interrupts = <17 2>; /* high-to-low edge triggered */
21763 + interrupt-parent = <&gpio>;
21764 + pendown-gpio = <&gpio 17 0>;
21765 + ti,swap-xy;
21766 + ti,x-plate-ohms = /bits/ 16 <100>;
21767 + ti,pressure-max = /bits/ 16 <255>;
21768 + };
21769 + };
21770 + };
21771 + __overrides__ {
21772 + speed = <&piscreen2>,"spi-max-frequency:0";
21773 + rotate = <&piscreen2>,"rotate:0";
21774 + fps = <&piscreen2>,"fps:0";
21775 + debug = <&piscreen2>,"debug:0";
21776 + xohms = <&piscreen2_ts>,"ti,x-plate-ohms;0";
21777 + };
21778 +};
21779 +
21780 diff --git a/arch/arm/boot/dts/overlays/pisound-overlay.dts b/arch/arm/boot/dts/overlays/pisound-overlay.dts
21781 new file mode 100644
21782 index 000000000000..49efb2b768fb
21783 --- /dev/null
21784 +++ b/arch/arm/boot/dts/overlays/pisound-overlay.dts
21785 @@ -0,0 +1,120 @@
21786 +/*
21787 + * Pisound Linux kernel module.
21788 + * Copyright (C) 2016-2017 Vilniaus Blokas UAB, https://blokas.io/pisound
21789 + *
21790 + * This program is free software; you can redistribute it and/or
21791 + * modify it under the terms of the GNU General Public License
21792 + * as published by the Free Software Foundation; version 2 of the
21793 + * License.
21794 + *
21795 + * This program is distributed in the hope that it will be useful,
21796 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
21797 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21798 + * GNU General Public License for more details.
21799 + *
21800 + * You should have received a copy of the GNU General Public License
21801 + * along with this program; if not, write to the Free Software
21802 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21803 + */
21804 +
21805 +/dts-v1/;
21806 +/plugin/;
21807 +
21808 +#include <dt-bindings/gpio/gpio.h>
21809 +
21810 +/ {
21811 + compatible = "brcm,bcm2835";
21812 +
21813 + fragment@0 {
21814 + target = <&spi0>;
21815 + __overlay__ {
21816 + status = "okay";
21817 + };
21818 + };
21819 +
21820 + fragment@1 {
21821 + target = <&spidev0>;
21822 + __overlay__ {
21823 + status = "disabled";
21824 + };
21825 + };
21826 +
21827 + fragment@2 {
21828 + target = <&spidev1>;
21829 + __overlay__ {
21830 + status = "okay";
21831 + };
21832 + };
21833 +
21834 + fragment@3 {
21835 + target = <&spi0>;
21836 + __overlay__ {
21837 + #address-cells = <1>;
21838 + #size-cells = <0>;
21839 +
21840 + pisound_spi: pisound_spi@0{
21841 + compatible = "blokaslabs,pisound-spi";
21842 + reg = <0>;
21843 + pinctrl-names = "default";
21844 + pinctrl-0 = <&spi0_pins>;
21845 + spi-max-frequency = <1000000>;
21846 + };
21847 + };
21848 + };
21849 +
21850 + fragment@4 {
21851 + target-path = "/";
21852 + __overlay__ {
21853 + pcm5102a-codec {
21854 + #sound-dai-cells = <0>;
21855 + compatible = "ti,pcm5102a";
21856 + status = "okay";
21857 + };
21858 + };
21859 + };
21860 +
21861 + fragment@5 {
21862 + target = <&sound>;
21863 + __overlay__ {
21864 + compatible = "blokaslabs,pisound";
21865 + i2s-controller = <&i2s>;
21866 + status = "okay";
21867 +
21868 + pinctrl-0 = <&pisound_button_pins>;
21869 +
21870 + osr-gpios =
21871 + <&gpio 13 GPIO_ACTIVE_HIGH>,
21872 + <&gpio 26 GPIO_ACTIVE_HIGH>,
21873 + <&gpio 16 GPIO_ACTIVE_HIGH>;
21874 +
21875 + reset-gpios =
21876 + <&gpio 12 GPIO_ACTIVE_HIGH>,
21877 + <&gpio 24 GPIO_ACTIVE_HIGH>;
21878 +
21879 + data_available-gpios = <&gpio 25 GPIO_ACTIVE_HIGH>;
21880 +
21881 + button-gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
21882 + };
21883 + };
21884 +
21885 + fragment@6 {
21886 + target = <&gpio>;
21887 + __overlay__ {
21888 + pinctrl-names = "default";
21889 + pinctrl-0 = <&pisound_button_pins>;
21890 +
21891 + pisound_button_pins: pisound_button_pins {
21892 + brcm,pins = <17>;
21893 + brcm,function = <0>; // Input
21894 + brcm,pull = <2>; // Pull-Up
21895 + };
21896 + };
21897 + };
21898 +
21899 + fragment@7 {
21900 + target = <&i2s>;
21901 + __overlay__ {
21902 + status = "okay";
21903 + };
21904 + };
21905 +};
21906 diff --git a/arch/arm/boot/dts/overlays/pitft22-overlay.dts b/arch/arm/boot/dts/overlays/pitft22-overlay.dts
21907 new file mode 100644
21908 index 000000000000..589ad13795b1
21909 --- /dev/null
21910 +++ b/arch/arm/boot/dts/overlays/pitft22-overlay.dts
21911 @@ -0,0 +1,69 @@
21912 +/*
21913 + * Device Tree overlay for pitft by Adafruit
21914 + *
21915 + */
21916 +
21917 +/dts-v1/;
21918 +/plugin/;
21919 +
21920 +/ {
21921 + compatible = "brcm,bcm2835";
21922 +
21923 + fragment@0 {
21924 + target = <&spi0>;
21925 + __overlay__ {
21926 + status = "okay";
21927 +
21928 + spidev@0{
21929 + status = "disabled";
21930 + };
21931 +
21932 + spidev@1{
21933 + status = "disabled";
21934 + };
21935 + };
21936 + };
21937 +
21938 + fragment@1 {
21939 + target = <&gpio>;
21940 + __overlay__ {
21941 + pitft_pins: pitft_pins {
21942 + brcm,pins = <25>;
21943 + brcm,function = <1>; /* out */
21944 + brcm,pull = <0>; /* none */
21945 + };
21946 + };
21947 + };
21948 +
21949 + fragment@2 {
21950 + target = <&spi0>;
21951 + __overlay__ {
21952 + /* needed to avoid dtc warning */
21953 + #address-cells = <1>;
21954 + #size-cells = <0>;
21955 +
21956 + pitft: pitft@0{
21957 + compatible = "ilitek,ili9340";
21958 + reg = <0>;
21959 + pinctrl-names = "default";
21960 + pinctrl-0 = <&pitft_pins>;
21961 +
21962 + spi-max-frequency = <32000000>;
21963 + rotate = <90>;
21964 + fps = <25>;
21965 + bgr;
21966 + buswidth = <8>;
21967 + dc-gpios = <&gpio 25 0>;
21968 + debug = <0>;
21969 + };
21970 +
21971 + };
21972 + };
21973 +
21974 + __overrides__ {
21975 + speed = <&pitft>,"spi-max-frequency:0";
21976 + rotate = <&pitft>,"rotate:0";
21977 + fps = <&pitft>,"fps:0";
21978 + debug = <&pitft>,"debug:0";
21979 + };
21980 +};
21981 diff --git a/arch/arm/boot/dts/overlays/pitft28-capacitive-overlay.dts b/arch/arm/boot/dts/overlays/pitft28-capacitive-overlay.dts
21982 new file mode 100644
21983 index 000000000000..33901ee1db7a
21984 --- /dev/null
21985 +++ b/arch/arm/boot/dts/overlays/pitft28-capacitive-overlay.dts
21986 @@ -0,0 +1,91 @@
21987 +/*
21988 + * Device Tree overlay for Adafruit PiTFT 2.8" capacitive touch screen
21989 + *
21990 + */
21991 +
21992 +/dts-v1/;
21993 +/plugin/;
21994 +
21995 +/ {
21996 + compatible = "brcm,bcm2835";
21997 +
21998 + fragment@0 {
21999 + target = <&spi0>;
22000 + __overlay__ {
22001 + status = "okay";
22002 + };
22003 + };
22004 +
22005 + fragment@1 {
22006 + target = <&spidev0>;
22007 + __overlay__ {
22008 + status = "disabled";
22009 + };
22010 + };
22011 +
22012 + fragment@2 {
22013 + target = <&gpio>;
22014 + __overlay__ {
22015 + pitft_pins: pitft_pins {
22016 + brcm,pins = <24 25>;
22017 + brcm,function = <0 1>; /* in out */
22018 + brcm,pull = <2 0>; /* pullup none */
22019 + };
22020 + };
22021 + };
22022 +
22023 + fragment@3 {
22024 + target = <&spi0>;
22025 + __overlay__ {
22026 + /* needed to avoid dtc warning */
22027 + #address-cells = <1>;
22028 + #size-cells = <0>;
22029 +
22030 + pitft: pitft@0{
22031 + compatible = "ilitek,ili9340";
22032 + reg = <0>;
22033 + pinctrl-names = "default";
22034 + pinctrl-0 = <&pitft_pins>;
22035 +
22036 + spi-max-frequency = <32000000>;
22037 + rotate = <90>;
22038 + fps = <25>;
22039 + bgr;
22040 + buswidth = <8>;
22041 + dc-gpios = <&gpio 25 0>;
22042 + debug = <0>;
22043 + };
22044 + };
22045 + };
22046 +
22047 + fragment@4 {
22048 + target = <&i2c1>;
22049 + __overlay__ {
22050 + /* needed to avoid dtc warning */
22051 + #address-cells = <1>;
22052 + #size-cells = <0>;
22053 +
22054 + ft6236: ft6236@38 {
22055 + compatible = "focaltech,ft6236";
22056 + reg = <0x38>;
22057 +
22058 + interrupt-parent = <&gpio>;
22059 + interrupts = <24 2>;
22060 + touchscreen-size-x = <240>;
22061 + touchscreen-size-y = <320>;
22062 + };
22063 + };
22064 + };
22065 +
22066 + __overrides__ {
22067 + speed = <&pitft>,"spi-max-frequency:0";
22068 + rotate = <&pitft>,"rotate:0";
22069 + fps = <&pitft>,"fps:0";
22070 + debug = <&pitft>,"debug:0";
22071 + touch-sizex = <&ft6236>,"touchscreen-size-x?";
22072 + touch-sizey = <&ft6236>,"touchscreen-size-y?";
22073 + touch-invx = <&ft6236>,"touchscreen-inverted-x?";
22074 + touch-invy = <&ft6236>,"touchscreen-inverted-y?";
22075 + touch-swapxy = <&ft6236>,"touchscreen-swapped-x-y?";
22076 + };
22077 +};
22078 diff --git a/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts b/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts
22079 new file mode 100644
22080 index 000000000000..4a4a3f44c29d
22081 --- /dev/null
22082 +++ b/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts
22083 @@ -0,0 +1,119 @@
22084 +/*
22085 + * Device Tree overlay for Adafruit PiTFT 2.8" resistive touch screen
22086 + *
22087 + */
22088 +
22089 +/dts-v1/;
22090 +/plugin/;
22091 +
22092 +/ {
22093 + compatible = "brcm,bcm2835";
22094 +
22095 + fragment@0 {
22096 + target = <&spi0>;
22097 + __overlay__ {
22098 + status = "okay";
22099 + };
22100 + };
22101 +
22102 + fragment@1 {
22103 + target = <&spidev0>;
22104 + __overlay__ {
22105 + status = "disabled";
22106 + };
22107 + };
22108 +
22109 + fragment@2 {
22110 + target = <&spidev1>;
22111 + __overlay__ {
22112 + status = "disabled";
22113 + };
22114 + };
22115 +
22116 + fragment@3 {
22117 + target = <&gpio>;
22118 + __overlay__ {
22119 + pitft_pins: pitft_pins {
22120 + brcm,pins = <24 25>;
22121 + brcm,function = <0 1>; /* in out */
22122 + brcm,pull = <2 0>; /* pullup none */
22123 + };
22124 + };
22125 + };
22126 +
22127 + fragment@4 {
22128 + target = <&spi0>;
22129 + __overlay__ {
22130 + /* needed to avoid dtc warning */
22131 + #address-cells = <1>;
22132 + #size-cells = <0>;
22133 +
22134 + pitft: pitft@0{
22135 + compatible = "ilitek,ili9340";
22136 + reg = <0>;
22137 + pinctrl-names = "default";
22138 + pinctrl-0 = <&pitft_pins>;
22139 +
22140 + spi-max-frequency = <32000000>;
22141 + rotate = <90>;
22142 + fps = <25>;
22143 + bgr;
22144 + buswidth = <8>;
22145 + dc-gpios = <&gpio 25 0>;
22146 + debug = <0>;
22147 + };
22148 +
22149 + pitft_ts@1 {
22150 + compatible = "st,stmpe610";
22151 + reg = <1>;
22152 +
22153 + spi-max-frequency = <500000>;
22154 + irq-gpio = <&gpio 24 0x2>; /* IRQF_TRIGGER_FALLING */
22155 + interrupts = <24 2>; /* high-to-low edge triggered */
22156 + interrupt-parent = <&gpio>;
22157 + interrupt-controller;
22158 +
22159 + stmpe_touchscreen {
22160 + compatible = "st,stmpe-ts";
22161 + st,sample-time = <4>;
22162 + st,mod-12b = <1>;
22163 + st,ref-sel = <0>;
22164 + st,adc-freq = <2>;
22165 + st,ave-ctrl = <3>;
22166 + st,touch-det-delay = <4>;
22167 + st,settling = <2>;
22168 + st,fraction-z = <7>;
22169 + st,i-drive = <0>;
22170 + };
22171 +
22172 + stmpe_gpio: stmpe_gpio {
22173 + #gpio-cells = <2>;
22174 + compatible = "st,stmpe-gpio";
22175 + /*
22176 + * only GPIO2 is wired/available
22177 + * and it is wired to the backlight
22178 + */
22179 + st,norequest-mask = <0x7b>;
22180 + };
22181 + };
22182 + };
22183 + };
22184 +
22185 + fragment@5 {
22186 + target-path = "/soc";
22187 + __overlay__ {
22188 + backlight {
22189 + compatible = "gpio-backlight";
22190 + gpios = <&stmpe_gpio 2 0>;
22191 + default-on;
22192 + };
22193 + };
22194 + };
22195 +
22196 + __overrides__ {
22197 + speed = <&pitft>,"spi-max-frequency:0";
22198 + rotate = <&pitft>,"rotate:0";
22199 + fps = <&pitft>,"fps:0";
22200 + debug = <&pitft>,"debug:0";
22201 + };
22202 +};
22203 diff --git a/arch/arm/boot/dts/overlays/pitft35-resistive-overlay.dts b/arch/arm/boot/dts/overlays/pitft35-resistive-overlay.dts
22204 new file mode 100644
22205 index 000000000000..37629f18a740
22206 --- /dev/null
22207 +++ b/arch/arm/boot/dts/overlays/pitft35-resistive-overlay.dts
22208 @@ -0,0 +1,119 @@
22209 +/*
22210 + * Device Tree overlay for Adafruit PiTFT 3.5" resistive touch screen
22211 + *
22212 + */
22213 +
22214 +/dts-v1/;
22215 +/plugin/;
22216 +
22217 +/ {
22218 + compatible = "brcm,bcm2835";
22219 +
22220 + fragment@0 {
22221 + target = <&spi0>;
22222 + __overlay__ {
22223 + status = "okay";
22224 + };
22225 + };
22226 +
22227 + fragment@1 {
22228 + target = <&spidev0>;
22229 + __overlay__ {
22230 + status = "disabled";
22231 + };
22232 + };
22233 +
22234 + fragment@2 {
22235 + target = <&spidev1>;
22236 + __overlay__ {
22237 + status = "disabled";
22238 + };
22239 + };
22240 +
22241 + fragment@3 {
22242 + target = <&gpio>;
22243 + __overlay__ {
22244 + pitft_pins: pitft_pins {
22245 + brcm,pins = <24 25>;
22246 + brcm,function = <0 1>; /* in out */
22247 + brcm,pull = <2 0>; /* pullup none */
22248 + };
22249 + };
22250 + };
22251 +
22252 + fragment@4 {
22253 + target = <&spi0>;
22254 + __overlay__ {
22255 + /* needed to avoid dtc warning */
22256 + #address-cells = <1>;
22257 + #size-cells = <0>;
22258 +
22259 + pitft: pitft@0{
22260 + compatible = "himax,hx8357d", "adafruit,yx350hv15";
22261 + reg = <0>;
22262 + pinctrl-names = "default";
22263 + pinctrl-0 = <&pitft_pins>;
22264 +
22265 + spi-max-frequency = <32000000>;
22266 + rotate = <90>;
22267 + fps = <25>;
22268 + bgr;
22269 + buswidth = <8>;
22270 + dc-gpios = <&gpio 25 0>;
22271 + debug = <0>;
22272 + };
22273 +
22274 + pitft_ts@1 {
22275 + compatible = "st,stmpe610";
22276 + reg = <1>;
22277 +
22278 + spi-max-frequency = <500000>;
22279 + irq-gpio = <&gpio 24 0x2>; /* IRQF_TRIGGER_FALLING */
22280 + interrupts = <24 2>; /* high-to-low edge triggered */
22281 + interrupt-parent = <&gpio>;
22282 + interrupt-controller;
22283 +
22284 + stmpe_touchscreen {
22285 + compatible = "st,stmpe-ts";
22286 + st,sample-time = <4>;
22287 + st,mod-12b = <1>;
22288 + st,ref-sel = <0>;
22289 + st,adc-freq = <2>;
22290 + st,ave-ctrl = <3>;
22291 + st,touch-det-delay = <4>;
22292 + st,settling = <2>;
22293 + st,fraction-z = <7>;
22294 + st,i-drive = <0>;
22295 + };
22296 +
22297 + stmpe_gpio: stmpe_gpio {
22298 + #gpio-cells = <2>;
22299 + compatible = "st,stmpe-gpio";
22300 + /*
22301 + * only GPIO2 is wired/available
22302 + * and it is wired to the backlight
22303 + */
22304 + st,norequest-mask = <0x7b>;
22305 + };
22306 + };
22307 + };
22308 + };
22309 +
22310 + fragment@5 {
22311 + target-path = "/soc";
22312 + __overlay__ {
22313 + backlight {
22314 + compatible = "gpio-backlight";
22315 + gpios = <&stmpe_gpio 2 0>;
22316 + default-on;
22317 + };
22318 + };
22319 + };
22320 +
22321 + __overrides__ {
22322 + speed = <&pitft>,"spi-max-frequency:0";
22323 + rotate = <&pitft>,"rotate:0";
22324 + fps = <&pitft>,"fps:0";
22325 + debug = <&pitft>,"debug:0";
22326 + };
22327 +};
22328 diff --git a/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts b/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts
22329 new file mode 100644
22330 index 000000000000..524a1c1d3670
22331 --- /dev/null
22332 +++ b/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts
22333 @@ -0,0 +1,38 @@
22334 +/dts-v1/;
22335 +/plugin/;
22336 +
22337 +/ {
22338 + compatible = "brcm,bcm2835";
22339 + fragment@0 {
22340 + target-path = "/";
22341 + __overlay__ {
22342 + pps: pps@12 {
22343 + compatible = "pps-gpio";
22344 + pinctrl-names = "default";
22345 + pinctrl-0 = <&pps_pins>;
22346 + gpios = <&gpio 18 0>;
22347 + status = "okay";
22348 + };
22349 + };
22350 + };
22351 +
22352 + fragment@1 {
22353 + target = <&gpio>;
22354 + __overlay__ {
22355 + pps_pins: pps_pins@12 {
22356 + brcm,pins = <18>;
22357 + brcm,function = <0>; // in
22358 + brcm,pull = <0>; // off
22359 + };
22360 + };
22361 + };
22362 +
22363 + __overrides__ {
22364 + gpiopin = <&pps>,"gpios:4",
22365 + <&pps>,"reg:0",
22366 + <&pps_pins>,"brcm,pins:0",
22367 + <&pps_pins>,"reg:0";
22368 + assert_falling_edge = <&pps>,"assert-falling-edge?";
22369 + capture_clear = <&pps>,"capture-clear?";
22370 + };
22371 +};
22372 diff --git a/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts b/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts
22373 new file mode 100644
22374 index 000000000000..4ddbbfa04065
22375 --- /dev/null
22376 +++ b/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts
22377 @@ -0,0 +1,49 @@
22378 +/dts-v1/;
22379 +/plugin/;
22380 +
22381 +/*
22382 +This is the 2-channel overlay - only use it if you need both channels.
22383 +
22384 +Legal pin,function combinations for each channel:
22385 + PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
22386 + PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
22387 +
22388 +N.B.:
22389 + 1) Pin 18 is the only one available on all platforms, and
22390 + it is the one used by the I2S audio interface.
22391 + Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
22392 + 2) The onboard analogue audio output uses both PWM channels.
22393 + 3) So be careful mixing audio and PWM.
22394 +*/
22395 +
22396 +/ {
22397 + compatible = "brcm,bcm2835";
22398 +
22399 + fragment@0 {
22400 + target = <&gpio>;
22401 + __overlay__ {
22402 + pwm_pins: pwm_pins {
22403 + brcm,pins = <18 19>;
22404 + brcm,function = <2 2>; /* Alt5 */
22405 + };
22406 + };
22407 + };
22408 +
22409 + fragment@1 {
22410 + target = <&pwm>;
22411 + frag1: __overlay__ {
22412 + pinctrl-names = "default";
22413 + pinctrl-0 = <&pwm_pins>;
22414 + assigned-clock-rates = <100000000>;
22415 + status = "okay";
22416 + };
22417 + };
22418 +
22419 + __overrides__ {
22420 + pin = <&pwm_pins>,"brcm,pins:0";
22421 + pin2 = <&pwm_pins>,"brcm,pins:4";
22422 + func = <&pwm_pins>,"brcm,function:0";
22423 + func2 = <&pwm_pins>,"brcm,function:4";
22424 + clock = <&frag1>,"assigned-clock-rates:0";
22425 + };
22426 +};
22427 diff --git a/arch/arm/boot/dts/overlays/pwm-ir-tx-overlay.dts b/arch/arm/boot/dts/overlays/pwm-ir-tx-overlay.dts
22428 new file mode 100644
22429 index 000000000000..119caf746b3b
22430 --- /dev/null
22431 +++ b/arch/arm/boot/dts/overlays/pwm-ir-tx-overlay.dts
22432 @@ -0,0 +1,40 @@
22433 +/dts-v1/;
22434 +/plugin/;
22435 +
22436 +/ {
22437 + compatible = "brcm,bcm2835";
22438 +
22439 + fragment@0 {
22440 + target = <&gpio>;
22441 + __overlay__ {
22442 + pwm0_pins: pwm0_pins {
22443 + brcm,pins = <18>;
22444 + brcm,function = <2>; /* Alt5 */
22445 + };
22446 + };
22447 + };
22448 +
22449 + fragment@1 {
22450 + target = <&pwm>;
22451 + __overlay__ {
22452 + pinctrl-names = "default";
22453 + pinctrl-0 = <&pwm0_pins>;
22454 + status = "okay";
22455 + };
22456 + };
22457 +
22458 + fragment@2 {
22459 + target-path = "/";
22460 + __overlay__ {
22461 + pwm-ir-transmitter {
22462 + compatible = "pwm-ir-tx";
22463 + pwms = <&pwm 0 100>;
22464 + };
22465 + };
22466 + };
22467 +
22468 + __overrides__ {
22469 + gpio_pin = <&pwm0_pins>, "brcm,pins:0";
22470 + func = <&pwm0_pins>,"brcm,function:0";
22471 + };
22472 +};
22473 diff --git a/arch/arm/boot/dts/overlays/pwm-overlay.dts b/arch/arm/boot/dts/overlays/pwm-overlay.dts
22474 new file mode 100644
22475 index 000000000000..92876ab3bc8c
22476 --- /dev/null
22477 +++ b/arch/arm/boot/dts/overlays/pwm-overlay.dts
22478 @@ -0,0 +1,45 @@
22479 +/dts-v1/;
22480 +/plugin/;
22481 +
22482 +/*
22483 +Legal pin,function combinations for each channel:
22484 + PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
22485 + PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
22486 +
22487 +N.B.:
22488 + 1) Pin 18 is the only one available on all platforms, and
22489 + it is the one used by the I2S audio interface.
22490 + Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
22491 + 2) The onboard analogue audio output uses both PWM channels.
22492 + 3) So be careful mixing audio and PWM.
22493 +*/
22494 +
22495 +/ {
22496 + compatible = "brcm,bcm2835";
22497 +
22498 + fragment@0 {
22499 + target = <&gpio>;
22500 + __overlay__ {
22501 + pwm_pins: pwm_pins {
22502 + brcm,pins = <18>;
22503 + brcm,function = <2>; /* Alt5 */
22504 + };
22505 + };
22506 + };
22507 +
22508 + fragment@1 {
22509 + target = <&pwm>;
22510 + frag1: __overlay__ {
22511 + pinctrl-names = "default";
22512 + pinctrl-0 = <&pwm_pins>;
22513 + assigned-clock-rates = <100000000>;
22514 + status = "okay";
22515 + };
22516 + };
22517 +
22518 + __overrides__ {
22519 + pin = <&pwm_pins>,"brcm,pins:0";
22520 + func = <&pwm_pins>,"brcm,function:0";
22521 + clock = <&frag1>,"assigned-clock-rates:0";
22522 + };
22523 +};
22524 diff --git a/arch/arm/boot/dts/overlays/qca7000-overlay.dts b/arch/arm/boot/dts/overlays/qca7000-overlay.dts
22525 new file mode 100644
22526 index 000000000000..f695f36024fa
22527 --- /dev/null
22528 +++ b/arch/arm/boot/dts/overlays/qca7000-overlay.dts
22529 @@ -0,0 +1,55 @@
22530 +// Overlay for the Qualcomm Atheros QCA7000 on PLC Stamp micro EVK
22531 +// Visit: https://in-tech-smartcharging.com/products/evaluation-tools/plc-stamp-micro-2-evaluation-board for details
22532 +
22533 +/dts-v1/;
22534 +/plugin/;
22535 +
22536 +/ {
22537 + compatible = "brcm,bcm2835";
22538 +
22539 + fragment@0 {
22540 + target = <&spidev0>;
22541 + __overlay__ {
22542 + status = "disabled";
22543 + };
22544 + };
22545 +
22546 + fragment@1 {
22547 + target = <&spi0>;
22548 + __overlay__ {
22549 + /* needed to avoid dtc warning */
22550 + #address-cells = <1>;
22551 + #size-cells = <0>;
22552 +
22553 + status = "okay";
22554 +
22555 + eth1: qca7000@0 {
22556 + compatible = "qca,qca7000";
22557 + reg = <0>; /* CE0 */
22558 + pinctrl-names = "default";
22559 + pinctrl-0 = <&eth1_pins>;
22560 + interrupt-parent = <&gpio>;
22561 + interrupts = <23 0x1>; /* rising edge */
22562 + spi-max-frequency = <12000000>;
22563 + status = "okay";
22564 + };
22565 + };
22566 + };
22567 +
22568 + fragment@2 {
22569 + target = <&gpio>;
22570 + __overlay__ {
22571 + eth1_pins: eth1_pins {
22572 + brcm,pins = <23>;
22573 + brcm,function = <0>; /* in */
22574 + brcm,pull = <0>; /* none */
22575 + };
22576 + };
22577 + };
22578 +
22579 + __overrides__ {
22580 + int_pin = <&eth1>, "interrupts:0",
22581 + <&eth1_pins>, "brcm,pins:0";
22582 + speed = <&eth1>, "spi-max-frequency:0";
22583 + };
22584 +};
22585 diff --git a/arch/arm/boot/dts/overlays/qca7000-uart0-overlay.dts b/arch/arm/boot/dts/overlays/qca7000-uart0-overlay.dts
22586 new file mode 100644
22587 index 000000000000..5dee70853289
22588 --- /dev/null
22589 +++ b/arch/arm/boot/dts/overlays/qca7000-uart0-overlay.dts
22590 @@ -0,0 +1,46 @@
22591 +// Overlay for the Qualcomm Atheros QCA7000 on PLC Stamp micro EVK
22592 +// Visit: https://in-tech-smartcharging.com/products/evaluation-tools/plc-stamp-micro-2-evaluation-board for details
22593 +
22594 +/dts-v1/;
22595 +/plugin/;
22596 +
22597 +/ {
22598 + compatible = "brcm,bcm2835";
22599 +
22600 + fragment@0 {
22601 + target = <&uart0>;
22602 + __overlay__ {
22603 + pinctrl-names = "default";
22604 + pinctrl-0 = <&uart0_pins>;
22605 + status = "okay";
22606 +
22607 + eth2: qca7000 {
22608 + compatible = "qca,qca7000";
22609 + current-speed = <115200>;
22610 + };
22611 + };
22612 + };
22613 +
22614 + fragment@1 {
22615 + target = <&gpio>;
22616 + __overlay__ {
22617 + uart0_pins: uart0_pins {
22618 + brcm,pins = <14 15>;
22619 + brcm,function = <4>; /* alt0 */
22620 + brcm,pull = <0 2>;
22621 + };
22622 + };
22623 + };
22624 +
22625 + fragment@2 {
22626 + target-path = "/aliases";
22627 + __overlay__ {
22628 + serial0 = "/soc/serial@7e201000";
22629 + serial1 = "/soc/serial@7e215040";
22630 + };
22631 + };
22632 +
22633 + __overrides__ {
22634 + baudrate = <&eth2>, "current-speed:0";
22635 + };
22636 +};
22637 diff --git a/arch/arm/boot/dts/overlays/rotary-encoder-overlay.dts b/arch/arm/boot/dts/overlays/rotary-encoder-overlay.dts
22638 new file mode 100644
22639 index 000000000000..ea1d952734e9
22640 --- /dev/null
22641 +++ b/arch/arm/boot/dts/overlays/rotary-encoder-overlay.dts
22642 @@ -0,0 +1,59 @@
22643 +// Device tree overlay for GPIO connected rotary encoder.
22644 +/dts-v1/;
22645 +/plugin/;
22646 +
22647 +/ {
22648 + compatible = "brcm,bcm2835";
22649 +
22650 + fragment@0 {
22651 + target = <&gpio>;
22652 + __overlay__ {
22653 + rotary_pins: rotary_pins@4 {
22654 + brcm,pins = <4 17>; /* gpio 4 17 */
22655 + brcm,function = <0 0>; /* input */
22656 + brcm,pull = <2 2>; /* pull-up */
22657 + };
22658 +
22659 + };
22660 + };
22661 +
22662 + fragment@1 {
22663 + target-path = "/";
22664 + __overlay__ {
22665 + rotary: rotary@4 {
22666 + compatible = "rotary-encoder";
22667 + status = "okay";
22668 + pinctrl-names = "default";
22669 + pinctrl-0 = <&rotary_pins>;
22670 + gpios = <&gpio 4 0>, <&gpio 17 0>;
22671 + linux,axis = <0>; /* REL_X */
22672 + rotary-encoder,encoding = "gray";
22673 + rotary-encoder,steps = <24>; /* 24 default */
22674 + rotary-encoder,steps-per-period = <1>; /* corresponds to full period mode. See README */
22675 + };
22676 + };
22677 +
22678 + };
22679 +
22680 + __overrides__ {
22681 + pin_a = <&rotary>,"gpios:4",
22682 + <&rotary_pins>,"brcm,pins:0",
22683 + /* modify reg values to allow multiple instantiation */
22684 + <&rotary>,"reg:0",
22685 + <&rotary_pins>,"reg:0";
22686 + pin_b = <&rotary>,"gpios:16",
22687 + <&rotary_pins>,"brcm,pins:4";
22688 + relative_axis = <&rotary>,"rotary-encoder,relative-axis?";
22689 + linux_axis = <&rotary>,"linux,axis:0";
22690 + rollover = <&rotary>,"rotary-encoder,rollover?";
22691 + steps-per-period = <&rotary>,"rotary-encoder,steps-per-period:0";
22692 + steps = <&rotary>,"rotary-encoder,steps:0";
22693 + wakeup = <&rotary>,"wakeup-source?";
22694 + encoding = <&rotary>,"rotary-encoder,encoding";
22695 + /* legacy parameters*/
22696 + rotary0_pin_a = <&rotary>,"gpios:4",
22697 + <&rotary_pins>,"brcm,pins:0";
22698 + rotary0_pin_b = <&rotary>,"gpios:16",
22699 + <&rotary_pins>,"brcm,pins:4";
22700 + };
22701 +};
22702 diff --git a/arch/arm/boot/dts/overlays/rpi-backlight-overlay.dts b/arch/arm/boot/dts/overlays/rpi-backlight-overlay.dts
22703 new file mode 100644
22704 index 000000000000..cac5e44c6ec5
22705 --- /dev/null
22706 +++ b/arch/arm/boot/dts/overlays/rpi-backlight-overlay.dts
22707 @@ -0,0 +1,21 @@
22708 +/*
22709 + * Devicetree overlay for mailbox-driven Raspberry Pi DSI Display
22710 + * backlight controller
22711 + */
22712 +/dts-v1/;
22713 +/plugin/;
22714 +
22715 +/ {
22716 + compatible = "brcm,bcm2835";
22717 +
22718 + fragment@0 {
22719 + target-path = "/";
22720 + __overlay__ {
22721 + rpi_backlight: rpi_backlight {
22722 + compatible = "raspberrypi,rpi-backlight";
22723 + firmware = <&firmware>;
22724 + status = "okay";
22725 + };
22726 + };
22727 + };
22728 +};
22729 diff --git a/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts b/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts
22730 new file mode 100644
22731 index 000000000000..ed0c2745399f
22732 --- /dev/null
22733 +++ b/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts
22734 @@ -0,0 +1,172 @@
22735 +// Definitions for the Cirrus Logic Audio Card
22736 +/dts-v1/;
22737 +/plugin/;
22738 +#include <dt-bindings/pinctrl/bcm2835.h>
22739 +#include <dt-bindings/gpio/gpio.h>
22740 +#include <dt-bindings/mfd/arizona.h>
22741 +
22742 +/ {
22743 + compatible = "brcm,bcm2835";
22744 +
22745 + fragment@0 {
22746 + target = <&i2s>;
22747 + __overlay__ {
22748 + status = "okay";
22749 + };
22750 + };
22751 +
22752 + fragment@1 {
22753 + target = <&gpio>;
22754 + __overlay__ {
22755 + wlf_5102_pins: wlf_5102_pins {
22756 + brcm,pins = <17 22 27>;
22757 + brcm,function = <
22758 + BCM2835_FSEL_GPIO_OUT
22759 + BCM2835_FSEL_GPIO_OUT
22760 + BCM2835_FSEL_GPIO_IN
22761 + >;
22762 + };
22763 + wlf_8804_pins: wlf_8804_pins {
22764 + brcm,pins = <8>;
22765 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
22766 + };
22767 + };
22768 + };
22769 +
22770 + fragment@2 {
22771 + target = <&spi0_cs_pins>;
22772 + __overlay__ {
22773 + brcm,pins = <7>;
22774 + brcm,function = <BCM2835_FSEL_GPIO_OUT>;
22775 + };
22776 + };
22777 +
22778 +
22779 + fragment@3 {
22780 + target-path = "/";
22781 + __overlay__ {
22782 + rpi_cirrus_reg_1v8: rpi_cirrus_reg_1v8 {
22783 + compatible = "regulator-fixed";
22784 + regulator-name = "RPi-Cirrus 1v8";
22785 + regulator-min-microvolt = <1800000>;
22786 + regulator-max-microvolt = <1800000>;
22787 + regulator-always-on;
22788 + };
22789 + };
22790 + };
22791 +
22792 + fragment@4 {
22793 + target = <&spidev0>;
22794 + __overlay__ {
22795 + status = "disabled";
22796 + };
22797 + };
22798 +
22799 + fragment@5 {
22800 + target = <&spidev1>;
22801 + __overlay__ {
22802 + status = "disabled";
22803 + };
22804 + };
22805 +
22806 + fragment@6 {
22807 + target = <&spi0>;
22808 + __overlay__ {
22809 + #address-cells = <1>;
22810 + #size-cells = <0>;
22811 + status = "okay";
22812 + cs-gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
22813 +
22814 + wm5102@0{
22815 + compatible = "wlf,wm5102";
22816 + reg = <0>;
22817 +
22818 + pinctrl-names = "default";
22819 + pinctrl-0 = <&wlf_5102_pins>;
22820 +
22821 + spi-max-frequency = <500000>;
22822 +
22823 + interrupt-parent = <&gpio>;
22824 + interrupts = <27 8>;
22825 + interrupt-controller;
22826 + #interrupt-cells = <2>;
22827 +
22828 + gpio-controller;
22829 + #gpio-cells = <2>;
22830 +
22831 + LDOVDD-supply = <&rpi_cirrus_reg_1v8>;
22832 + AVDD-supply = <&rpi_cirrus_reg_1v8>;
22833 + DBVDD1-supply = <&rpi_cirrus_reg_1v8>;
22834 + DBVDD2-supply = <&vdd_3v3_reg>;
22835 + DBVDD3-supply = <&vdd_3v3_reg>;
22836 + CPVDD-supply = <&rpi_cirrus_reg_1v8>;
22837 + SPKVDDL-supply = <&vdd_5v0_reg>;
22838 + SPKVDDR-supply = <&vdd_5v0_reg>;
22839 + DCVDD-supply = <&arizona_ldo1>;
22840 +
22841 + reset-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
22842 + wlf,ldoena = <&gpio 22 GPIO_ACTIVE_HIGH>;
22843 + wlf,gpio-defaults = <
22844 + ARIZONA_GP_DEFAULT
22845 + ARIZONA_GP_DEFAULT
22846 + ARIZONA_GP_DEFAULT
22847 + ARIZONA_GP_DEFAULT
22848 + ARIZONA_GP_DEFAULT
22849 + >;
22850 + wlf,micd-configs = <0 1 0>;
22851 + wlf,dmic-ref = <
22852 + ARIZONA_DMIC_MICVDD
22853 + ARIZONA_DMIC_MICBIAS2
22854 + ARIZONA_DMIC_MICVDD
22855 + ARIZONA_DMIC_MICVDD
22856 + >;
22857 + wlf,inmode = <
22858 + ARIZONA_INMODE_DIFF
22859 + ARIZONA_INMODE_DMIC
22860 + ARIZONA_INMODE_SE
22861 + ARIZONA_INMODE_DIFF
22862 + >;
22863 + status = "okay";
22864 +
22865 + arizona_ldo1: ldo1 {
22866 + regulator-name = "LDO1";
22867 + // default constraints as in
22868 + // arizona-ldo1.c
22869 + regulator-min-microvolt = <1200000>;
22870 + regulator-max-microvolt = <1800000>;
22871 + };
22872 + };
22873 + };
22874 + };
22875 +
22876 + fragment@7 {
22877 + target = <&i2c1>;
22878 + __overlay__ {
22879 + status = "okay";
22880 + #address-cells = <1>;
22881 + #size-cells = <0>;
22882 +
22883 + wm8804@3b {
22884 + compatible = "wlf,wm8804";
22885 + reg = <0x3b>;
22886 + status = "okay";
22887 +
22888 + pinctrl-names = "default";
22889 + pinctrl-0 = <&wlf_8804_pins>;
22890 +
22891 + PVDD-supply = <&vdd_3v3_reg>;
22892 + DVDD-supply = <&vdd_3v3_reg>;
22893 + wlf,reset-gpio = <&gpio 8 GPIO_ACTIVE_HIGH>;
22894 + };
22895 + };
22896 + };
22897 +
22898 + fragment@8 {
22899 + target = <&sound>;
22900 + __overlay__ {
22901 + compatible = "wlf,rpi-cirrus";
22902 + i2s-controller = <&i2s>;
22903 + status = "okay";
22904 + };
22905 + };
22906 +};
22907 diff --git a/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts b/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
22908 new file mode 100644
22909 index 000000000000..07a915342702
22910 --- /dev/null
22911 +++ b/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
22912 @@ -0,0 +1,34 @@
22913 +// Definitions for RPi DAC
22914 +/dts-v1/;
22915 +/plugin/;
22916 +
22917 +/ {
22918 + compatible = "brcm,bcm2835";
22919 +
22920 + fragment@0 {
22921 + target = <&i2s>;
22922 + __overlay__ {
22923 + status = "okay";
22924 + };
22925 + };
22926 +
22927 + fragment@1 {
22928 + target-path = "/";
22929 + __overlay__ {
22930 + pcm1794a-codec {
22931 + #sound-dai-cells = <0>;
22932 + compatible = "ti,pcm1794a";
22933 + status = "okay";
22934 + };
22935 + };
22936 + };
22937 +
22938 + fragment@2 {
22939 + target = <&sound>;
22940 + __overlay__ {
22941 + compatible = "rpi,rpi-dac";
22942 + i2s-controller = <&i2s>;
22943 + status = "okay";
22944 + };
22945 + };
22946 +};
22947 diff --git a/arch/arm/boot/dts/overlays/rpi-display-overlay.dts b/arch/arm/boot/dts/overlays/rpi-display-overlay.dts
22948 new file mode 100644
22949 index 000000000000..de87432ff2be
22950 --- /dev/null
22951 +++ b/arch/arm/boot/dts/overlays/rpi-display-overlay.dts
22952 @@ -0,0 +1,91 @@
22953 +/*
22954 + * Device Tree overlay for rpi-display by Watterott
22955 + *
22956 + */
22957 +
22958 +/dts-v1/;
22959 +/plugin/;
22960 +
22961 +/ {
22962 + compatible = "brcm,bcm2835";
22963 +
22964 + fragment@0 {
22965 + target = <&spi0>;
22966 + __overlay__ {
22967 + status = "okay";
22968 + };
22969 + };
22970 +
22971 + fragment@1 {
22972 + target = <&spidev0>;
22973 + __overlay__ {
22974 + status = "disabled";
22975 + };
22976 + };
22977 +
22978 + fragment@2 {
22979 + target = <&spidev1>;
22980 + __overlay__ {
22981 + status = "disabled";
22982 + };
22983 + };
22984 +
22985 + fragment@3 {
22986 + target = <&gpio>;
22987 + __overlay__ {
22988 + rpi_display_pins: rpi_display_pins {
22989 + brcm,pins = <18 23 24 25>;
22990 + brcm,function = <1 1 1 0>; /* out out out in */
22991 + brcm,pull = <0 0 0 2>; /* - - - up */
22992 + };
22993 + };
22994 + };
22995 +
22996 + fragment@4 {
22997 + target = <&spi0>;
22998 + __overlay__ {
22999 + /* needed to avoid dtc warning */
23000 + #address-cells = <1>;
23001 + #size-cells = <0>;
23002 +
23003 + rpidisplay: rpi-display@0{
23004 + compatible = "ilitek,ili9341";
23005 + reg = <0>;
23006 + pinctrl-names = "default";
23007 + pinctrl-0 = <&rpi_display_pins>;
23008 +
23009 + spi-max-frequency = <32000000>;
23010 + rotate = <270>;
23011 + bgr;
23012 + fps = <30>;
23013 + buswidth = <8>;
23014 + reset-gpios = <&gpio 23 1>;
23015 + dc-gpios = <&gpio 24 0>;
23016 + led-gpios = <&gpio 18 0>;
23017 + debug = <0>;
23018 + };
23019 +
23020 + rpidisplay_ts: rpi-display-ts@1 {
23021 + compatible = "ti,ads7846";
23022 + reg = <1>;
23023 +
23024 + spi-max-frequency = <2000000>;
23025 + interrupts = <25 2>; /* high-to-low edge triggered */
23026 + interrupt-parent = <&gpio>;
23027 + pendown-gpio = <&gpio 25 1>;
23028 + ti,x-plate-ohms = /bits/ 16 <60>;
23029 + ti,pressure-max = /bits/ 16 <255>;
23030 + };
23031 + };
23032 + };
23033 + __overrides__ {
23034 + speed = <&rpidisplay>,"spi-max-frequency:0";
23035 + rotate = <&rpidisplay>,"rotate:0";
23036 + fps = <&rpidisplay>,"fps:0";
23037 + debug = <&rpidisplay>,"debug:0";
23038 + xohms = <&rpidisplay_ts>,"ti,x-plate-ohms;0";
23039 + swapxy = <&rpidisplay_ts>,"ti,swap-xy?";
23040 + backlight = <&rpidisplay>,"led-gpios:4",
23041 + <&rpi_display_pins>,"brcm,pins:0";
23042 + };
23043 +};
23044 diff --git a/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts b/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts
23045 new file mode 100644
23046 index 000000000000..8483c4f4b2eb
23047 --- /dev/null
23048 +++ b/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts
23049 @@ -0,0 +1,25 @@
23050 +/dts-v1/;
23051 +/plugin/;
23052 +
23053 +/ {
23054 + compatible = "brcm,bcm2835";
23055 +
23056 + fragment@0 {
23057 + target-path = "/soc/firmware";
23058 + __overlay__ {
23059 + ts: touchscreen {
23060 + compatible = "raspberrypi,firmware-ts";
23061 + touchscreen-size-x = <800>;
23062 + touchscreen-size-y = <480>;
23063 + };
23064 + };
23065 + };
23066 +
23067 + __overrides__ {
23068 + touchscreen-size-x = <&ts>,"touchscreen-size-x:0";
23069 + touchscreen-size-y = <&ts>,"touchscreen-size-y:0";
23070 + touchscreen-inverted-x = <&ts>,"touchscreen-inverted-x?";
23071 + touchscreen-inverted-y = <&ts>,"touchscreen-inverted-y?";
23072 + touchscreen-swapped-x-y = <&ts>,"touchscreen-swapped-x-y?";
23073 + };
23074 +};
23075 diff --git a/arch/arm/boot/dts/overlays/rpi-poe-overlay.dts b/arch/arm/boot/dts/overlays/rpi-poe-overlay.dts
23076 new file mode 100644
23077 index 000000000000..1eeac4854db4
23078 --- /dev/null
23079 +++ b/arch/arm/boot/dts/overlays/rpi-poe-overlay.dts
23080 @@ -0,0 +1,102 @@
23081 +/*
23082 + * Overlay for the Raspberry Pi POE HAT.
23083 + */
23084 +/dts-v1/;
23085 +/plugin/;
23086 +
23087 +/ {
23088 + compatible = "brcm,bcm2835";
23089 +
23090 + fragment@0 {
23091 + target = <&firmware>;
23092 + __overlay__ {
23093 + fwpwm: pwm {
23094 + compatible = "raspberrypi,firmware-poe-pwm";
23095 + #pwm-cells = <2>;
23096 + };
23097 + };
23098 + };
23099 +
23100 + fragment@1 {
23101 + target-path = "/";
23102 + __overlay__ {
23103 + fan: pwm-fan {
23104 + compatible = "pwm-fan";
23105 + cooling-levels = <0 1 10 100 255>;
23106 + #cooling-cells = <2>;
23107 + pwms = <&fwpwm 0 80000>;
23108 + };
23109 + };
23110 + };
23111 +
23112 + fragment@2 {
23113 + target = <&cpu_thermal>;
23114 + __overlay__ {
23115 + trips {
23116 + trip0: trip0 {
23117 + temperature = <40000>;
23118 + hysteresis = <2000>;
23119 + type = "active";
23120 + };
23121 + trip1: trip1 {
23122 + temperature = <45000>;
23123 + hysteresis = <2000>;
23124 + type = "active";
23125 + };
23126 + trip2: trip2 {
23127 + temperature = <50000>;
23128 + hysteresis = <2000>;
23129 + type = "active";
23130 + };
23131 + trip3: trip3 {
23132 + temperature = <55000>;
23133 + hysteresis = <5000>;
23134 + type = "active";
23135 + };
23136 + };
23137 + cooling-maps {
23138 + map0 {
23139 + trip = <&trip0>;
23140 + cooling-device = <&fan 0 1>;
23141 + };
23142 + map1 {
23143 + trip = <&trip1>;
23144 + cooling-device = <&fan 1 2>;
23145 + };
23146 + map2 {
23147 + trip = <&trip2>;
23148 + cooling-device = <&fan 2 3>;
23149 + };
23150 + map3 {
23151 + trip = <&trip3>;
23152 + cooling-device = <&fan 3 4>;
23153 + };
23154 + };
23155 + };
23156 + };
23157 +
23158 + fragment@3 {
23159 + target-path = "/__overrides__";
23160 + __overlay__ {
23161 + poe_fan_temp0 = <&trip0>,"temperature:0";
23162 + poe_fan_temp0_hyst = <&trip0>,"hysteresis:0";
23163 + poe_fan_temp1 = <&trip1>,"temperature:0";
23164 + poe_fan_temp1_hyst = <&trip1>,"hysteresis:0";
23165 + poe_fan_temp2 = <&trip2>,"temperature:0";
23166 + poe_fan_temp2_hyst = <&trip2>,"hysteresis:0";
23167 + poe_fan_temp3 = <&trip3>,"temperature:0";
23168 + poe_fan_temp3_hyst = <&trip3>,"hysteresis:0";
23169 + };
23170 + };
23171 +
23172 + __overrides__ {
23173 + poe_fan_temp0 = <&trip0>,"temperature:0";
23174 + poe_fan_temp0_hyst = <&trip0>,"hysteresis:0";
23175 + poe_fan_temp1 = <&trip1>,"temperature:0";
23176 + poe_fan_temp1_hyst = <&trip1>,"hysteresis:0";
23177 + poe_fan_temp2 = <&trip2>,"temperature:0";
23178 + poe_fan_temp2_hyst = <&trip2>,"hysteresis:0";
23179 + poe_fan_temp3 = <&trip3>,"temperature:0";
23180 + poe_fan_temp3_hyst = <&trip3>,"hysteresis:0";
23181 + };
23182 +};
23183 diff --git a/arch/arm/boot/dts/overlays/rpi-poe-plus-overlay.dts b/arch/arm/boot/dts/overlays/rpi-poe-plus-overlay.dts
23184 new file mode 100644
23185 index 000000000000..011f92ad33f3
23186 --- /dev/null
23187 +++ b/arch/arm/boot/dts/overlays/rpi-poe-plus-overlay.dts
23188 @@ -0,0 +1,23 @@
23189 +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
23190 +// Overlay for the Raspberry Pi PoE+ HAT.
23191 +
23192 +#include "rpi-poe-overlay.dts"
23193 +
23194 +/ {
23195 + compatible = "brcm,bcm2835";
23196 +
23197 + fragment@10 {
23198 + target-path = "/";
23199 + __overlay__ {
23200 + rpi_poe_power_supply: rpi-poe-power-supply {
23201 + compatible = "raspberrypi,rpi-poe-power-supply";
23202 + firmware = <&firmware>;
23203 + status = "okay";
23204 + };
23205 + };
23206 + };
23207 +};
23208 +
23209 +&fan {
23210 + cooling-levels = <0 32 64 128 255>;
23211 +};
23212 diff --git a/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts b/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
23213 new file mode 100644
23214 index 000000000000..9cda044a0f62
23215 --- /dev/null
23216 +++ b/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
23217 @@ -0,0 +1,39 @@
23218 +// Definitions for Rpi-Proto
23219 +/dts-v1/;
23220 +/plugin/;
23221 +
23222 +/ {
23223 + compatible = "brcm,bcm2835";
23224 +
23225 + fragment@0 {
23226 + target = <&i2s>;
23227 + __overlay__ {
23228 + status = "okay";
23229 + };
23230 + };
23231 +
23232 + fragment@1 {
23233 + target = <&i2c1>;
23234 + __overlay__ {
23235 + #address-cells = <1>;
23236 + #size-cells = <0>;
23237 + status = "okay";
23238 +
23239 + wm8731@1a {
23240 + #sound-dai-cells = <0>;
23241 + compatible = "wlf,wm8731";
23242 + reg = <0x1a>;
23243 + status = "okay";
23244 + };
23245 + };
23246 + };
23247 +
23248 + fragment@2 {
23249 + target = <&sound>;
23250 + __overlay__ {
23251 + compatible = "rpi,rpi-proto";
23252 + i2s-controller = <&i2s>;
23253 + status = "okay";
23254 + };
23255 + };
23256 +};
23257 diff --git a/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts b/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts
23258 new file mode 100644
23259 index 000000000000..89d8d2ea6b2e
23260 --- /dev/null
23261 +++ b/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts
23262 @@ -0,0 +1,47 @@
23263 +// rpi-sense HAT
23264 +/dts-v1/;
23265 +/plugin/;
23266 +
23267 +/ {
23268 + compatible = "brcm,bcm2835";
23269 +
23270 + fragment@0 {
23271 + target = <&i2c1>;
23272 + __overlay__ {
23273 + #address-cells = <1>;
23274 + #size-cells = <0>;
23275 + status = "okay";
23276 +
23277 + rpi-sense@46 {
23278 + compatible = "rpi,rpi-sense";
23279 + reg = <0x46>;
23280 + keys-int-gpios = <&gpio 23 1>;
23281 + status = "okay";
23282 + };
23283 +
23284 + lsm9ds1-magn@1c {
23285 + compatible = "st,lsm9ds1-magn";
23286 + reg = <0x1c>;
23287 + status = "okay";
23288 + };
23289 +
23290 + lsm9ds1-accel6a {
23291 + compatible = "st,lsm9ds1-accel";
23292 + reg = <0x6a>;
23293 + status = "okay";
23294 + };
23295 +
23296 + lps25h-press@5c {
23297 + compatible = "st,lps25h-press";
23298 + reg = <0x5c>;
23299 + status = "okay";
23300 + };
23301 +
23302 + hts221-humid@5f {
23303 + compatible = "st,hts221-humid", "st,hts221";
23304 + reg = <0x5f>;
23305 + status = "okay";
23306 + };
23307 + };
23308 + };
23309 +};
23310 diff --git a/arch/arm/boot/dts/overlays/rpi-tv-overlay.dts b/arch/arm/boot/dts/overlays/rpi-tv-overlay.dts
23311 new file mode 100644
23312 index 000000000000..3c97a545d820
23313 --- /dev/null
23314 +++ b/arch/arm/boot/dts/overlays/rpi-tv-overlay.dts
23315 @@ -0,0 +1,34 @@
23316 +// rpi-tv HAT
23317 +
23318 +/dts-v1/;
23319 +/plugin/;
23320 +
23321 +/ {
23322 + compatible = "brcm,bcm2835";
23323 +
23324 + fragment@0 {
23325 + target = <&spidev0>;
23326 + __overlay__ {
23327 + status = "disabled";
23328 + };
23329 + };
23330 +
23331 + fragment@1 {
23332 + target = <&spi0>;
23333 + __overlay__ {
23334 + /* needed to avoid dtc warning */
23335 + #address-cells = <1>;
23336 + #size-cells = <0>;
23337 +
23338 + status = "okay";
23339 +
23340 + cxd2880@0 {
23341 + compatible = "sony,cxd2880";
23342 + reg = <0>; /* CE0 */
23343 + spi-max-frequency = <50000000>;
23344 + status = "okay";
23345 + };
23346 + };
23347 + };
23348 +
23349 +};
23350 diff --git a/arch/arm/boot/dts/overlays/rpivid-v4l2-overlay.dts b/arch/arm/boot/dts/overlays/rpivid-v4l2-overlay.dts
23351 new file mode 100644
23352 index 000000000000..bdd1c0e5a915
23353 --- /dev/null
23354 +++ b/arch/arm/boot/dts/overlays/rpivid-v4l2-overlay.dts
23355 @@ -0,0 +1,50 @@
23356 +// SPDX-License-Identifier: GPL-2.0-only
23357 +// Definitions for Raspberry Pi video decode engine
23358 +/dts-v1/;
23359 +/plugin/;
23360 +
23361 +#include <dt-bindings/interrupt-controller/arm-gic.h>
23362 +
23363 +/{
23364 + compatible = "brcm,bcm2711";
23365 +
23366 + fragment@0 {
23367 + target = <&scb>;
23368 + __overlay__ {
23369 + /* needed to avoid dtc warning */
23370 + #address-cells = <2>;
23371 + #size-cells = <2>;
23372 +
23373 + codec@7eb10000 {
23374 + compatible = "raspberrypi,rpivid-vid-decoder";
23375 + reg = <0x0 0x7eb10000 0x0 0x1000>, /* INTC */
23376 + <0x0 0x7eb00000 0x0 0x10000>; /* HEVC */
23377 + reg-names = "intc",
23378 + "hevc";
23379 +
23380 + interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
23381 +
23382 + clocks = <&firmware_clocks 11>;
23383 + clock-names = "hevc";
23384 + };
23385 + };
23386 + };
23387 +
23388 + fragment@1 {
23389 + target = <&scb>;
23390 + __overlay__ {
23391 + hevc-decoder@7eb00000 {
23392 + status = "disabled";
23393 + };
23394 + rpivid-local-intc@7eb10000 {
23395 + status = "disabled";
23396 + };
23397 + h264-decoder@7eb20000 {
23398 + status = "disabled";
23399 + };
23400 + vp9-decoder@7eb30000 {
23401 + status = "disabled";
23402 + };
23403 + };
23404 + };
23405 +};
23406 diff --git a/arch/arm/boot/dts/overlays/rra-digidac1-wm8741-audio-overlay.dts b/arch/arm/boot/dts/overlays/rra-digidac1-wm8741-audio-overlay.dts
23407 new file mode 100644
23408 index 000000000000..87e9a326eff1
23409 --- /dev/null
23410 +++ b/arch/arm/boot/dts/overlays/rra-digidac1-wm8741-audio-overlay.dts
23411 @@ -0,0 +1,49 @@
23412 +// Definitions for RRA DigiDAC1 Audio card
23413 +/dts-v1/;
23414 +/plugin/;
23415 +
23416 +/ {
23417 + compatible = "brcm,bcm2835";
23418 +
23419 + fragment@0 {
23420 + target = <&i2s>;
23421 + __overlay__ {
23422 + status = "okay";
23423 + };
23424 + };
23425 +
23426 + fragment@1 {
23427 + target = <&i2c1>;
23428 + __overlay__ {
23429 + #address-cells = <1>;
23430 + #size-cells = <0>;
23431 + status = "okay";
23432 +
23433 + wm8804@3b {
23434 + #sound-dai-cells = <0>;
23435 + compatible = "wlf,wm8804";
23436 + reg = <0x3b>;
23437 + status = "okay";
23438 + PVDD-supply = <&vdd_3v3_reg>;
23439 + DVDD-supply = <&vdd_3v3_reg>;
23440 + };
23441 +
23442 + wm8742: wm8741@1a {
23443 + compatible = "wlf,wm8741";
23444 + reg = <0x1a>;
23445 + status = "okay";
23446 + AVDD-supply = <&vdd_5v0_reg>;
23447 + DVDD-supply = <&vdd_3v3_reg>;
23448 + };
23449 + };
23450 + };
23451 +
23452 + fragment@2 {
23453 + target = <&sound>;
23454 + __overlay__ {
23455 + compatible = "rra,digidac1-soundcard";
23456 + i2s-controller = <&i2s>;
23457 + status = "okay";
23458 + };
23459 + };
23460 +};
23461 diff --git a/arch/arm/boot/dts/overlays/sainsmart18-overlay.dts b/arch/arm/boot/dts/overlays/sainsmart18-overlay.dts
23462 new file mode 100644
23463 index 000000000000..c51f1c030a55
23464 --- /dev/null
23465 +++ b/arch/arm/boot/dts/overlays/sainsmart18-overlay.dts
23466 @@ -0,0 +1,52 @@
23467 +/*
23468 + * Device Tree overlay for the Sainsmart 1.8" TFT LCD with ST7735R chip 160x128
23469 + */
23470 +
23471 +/dts-v1/;
23472 +/plugin/;
23473 +
23474 +/ {
23475 + compatible = "brcm,bcm2835";
23476 +
23477 + fragment@0 {
23478 + target = <&spidev0>;
23479 + __overlay__ {
23480 + status = "disabled";
23481 + };
23482 + };
23483 +
23484 + fragment@1 {
23485 + target = <&spi0>;
23486 + __overlay__ {
23487 + /* needed to avoid dtc warning */
23488 + #address-cells = <1>;
23489 + #size-cells = <0>;
23490 + status = "okay";
23491 +
23492 + ss18: sainsmart18@0 {
23493 + compatible = "fbtft,sainsmart18";
23494 + reg = <0>;
23495 + pinctrl-names = "default";
23496 + spi-max-frequency = <40000000>;
23497 + rotate = <90>;
23498 + buswidth = <8>;
23499 + fps = <50>;
23500 + height = <160>;
23501 + width = <128>;
23502 + reset-gpios = <&gpio 25 1>;
23503 + dc-gpios = <&gpio 24 0>;
23504 + debug = <0>;
23505 + };
23506 + };
23507 + };
23508 +
23509 + __overrides__ {
23510 + speed = <&ss18>,"spi-max-frequency:0";
23511 + rotate = <&ss18>,"rotate:0";
23512 + fps = <&ss18>,"fps:0";
23513 + bgr = <&ss18>,"bgr?";
23514 + debug = <&ss18>,"debug:0";
23515 + dc_pin = <&ss18>,"dc-gpios:4";
23516 + reset_pin = <&ss18>,"reset-gpios:4";
23517 + };
23518 +};
23519 diff --git a/arch/arm/boot/dts/overlays/sc16is750-i2c-overlay.dts b/arch/arm/boot/dts/overlays/sc16is750-i2c-overlay.dts
23520 new file mode 100644
23521 index 000000000000..04d74d62897b
23522 --- /dev/null
23523 +++ b/arch/arm/boot/dts/overlays/sc16is750-i2c-overlay.dts
23524 @@ -0,0 +1,43 @@
23525 +/dts-v1/;
23526 +/plugin/;
23527 +
23528 +/ {
23529 + compatible = "brcm,bcm2835";
23530 +
23531 + fragment@0 {
23532 + target = <&i2c_arm>;
23533 + __overlay__ {
23534 + #address-cells = <1>;
23535 + #size-cells = <0>;
23536 + status = "okay";
23537 +
23538 + sc16is750: sc16is750@48 {
23539 + compatible = "nxp,sc16is750";
23540 + reg = <0x48>; /* i2c address */
23541 + clocks = <&sc16is750_clk>;
23542 + interrupt-parent = <&gpio>;
23543 + interrupts = <24 2>; /* IRQ_TYPE_EDGE_FALLING */
23544 + gpio-controller;
23545 + #gpio-cells = <2>;
23546 + i2c-max-frequency = <400000>;
23547 + };
23548 + };
23549 + };
23550 +
23551 + fragment@1 {
23552 + target-path = "/";
23553 + __overlay__ {
23554 + sc16is750_clk: sc16is750_i2c_clk@48 {
23555 + compatible = "fixed-clock";
23556 + #clock-cells = <0>;
23557 + clock-frequency = <14745600>;
23558 + };
23559 + };
23560 + };
23561 +
23562 + __overrides__ {
23563 + int_pin = <&sc16is750>,"interrupts:0";
23564 + addr = <&sc16is750>,"reg:0", <&sc16is750_clk>,"name";
23565 + xtal = <&sc16is750_clk>,"clock-frequency:0";
23566 + };
23567 +};
23568 diff --git a/arch/arm/boot/dts/overlays/sc16is752-i2c-overlay.dts b/arch/arm/boot/dts/overlays/sc16is752-i2c-overlay.dts
23569 new file mode 100644
23570 index 000000000000..da05e981314c
23571 --- /dev/null
23572 +++ b/arch/arm/boot/dts/overlays/sc16is752-i2c-overlay.dts
23573 @@ -0,0 +1,43 @@
23574 +/dts-v1/;
23575 +/plugin/;
23576 +
23577 +/ {
23578 + compatible = "brcm,bcm2835";
23579 +
23580 + fragment@0 {
23581 + target = <&i2c_arm>;
23582 + __overlay__ {
23583 + #address-cells = <1>;
23584 + #size-cells = <0>;
23585 + status = "okay";
23586 +
23587 + sc16is752: sc16is752@48 {
23588 + compatible = "nxp,sc16is752";
23589 + reg = <0x48>; /* i2c address */
23590 + clocks = <&sc16is752_clk>;
23591 + interrupt-parent = <&gpio>;
23592 + interrupts = <24 2>; /* IRQ_TYPE_EDGE_FALLING */
23593 + gpio-controller;
23594 + #gpio-cells = <2>;
23595 + i2c-max-frequency = <400000>;
23596 + };
23597 + };
23598 + };
23599 +
23600 + fragment@1 {
23601 + target-path = "/";
23602 + __overlay__ {
23603 + sc16is752_clk: sc16is752_i2c_clk@48 {
23604 + compatible = "fixed-clock";
23605 + #clock-cells = <0>;
23606 + clock-frequency = <14745600>;
23607 + };
23608 + };
23609 + };
23610 +
23611 + __overrides__ {
23612 + int_pin = <&sc16is752>,"interrupts:0";
23613 + addr = <&sc16is752>,"reg:0",<&sc16is752_clk>,"name";
23614 + xtal = <&sc16is752_clk>,"clock-frequency:0";
23615 + };
23616 +};
23617 diff --git a/arch/arm/boot/dts/overlays/sc16is752-spi0-overlay.dts b/arch/arm/boot/dts/overlays/sc16is752-spi0-overlay.dts
23618 new file mode 100644
23619 index 000000000000..a49a04722b99
23620 --- /dev/null
23621 +++ b/arch/arm/boot/dts/overlays/sc16is752-spi0-overlay.dts
23622 @@ -0,0 +1,49 @@
23623 +/dts-v1/;
23624 +/plugin/;
23625 +
23626 +/ {
23627 + compatible = "brcm,bcm2835";
23628 +
23629 + fragment@0 {
23630 + target = <&spi0>;
23631 + __overlay__ {
23632 + #address-cells = <1>;
23633 + #size-cells = <0>;
23634 + status = "okay";
23635 +
23636 + sc16is752: sc16is752@0 {
23637 + compatible = "nxp,sc16is752";
23638 + reg = <0>; /* CE0 */
23639 + clocks = <&sc16is752_clk>;
23640 + interrupt-parent = <&gpio>;
23641 + interrupts = <24 2>; /* IRQ_TYPE_EDGE_FALLING */
23642 + gpio-controller;
23643 + #gpio-cells = <2>;
23644 + spi-max-frequency = <4000000>;
23645 + };
23646 + };
23647 + };
23648 +
23649 + fragment@1 {
23650 + target = <&spidev0>;
23651 + __overlay__ {
23652 + status = "disabled";
23653 + };
23654 + };
23655 +
23656 + fragment@2 {
23657 + target-path = "/";
23658 + __overlay__ {
23659 + sc16is752_clk: sc16is752_spi0_0_clk {
23660 + compatible = "fixed-clock";
23661 + #clock-cells = <0>;
23662 + clock-frequency = <14745600>;
23663 + };
23664 + };
23665 + };
23666 +
23667 + __overrides__ {
23668 + int_pin = <&sc16is752>,"interrupts:0";
23669 + xtal = <&sc16is752_clk>,"clock-frequency:0";
23670 + };
23671 +};
23672 diff --git a/arch/arm/boot/dts/overlays/sc16is752-spi1-overlay.dts b/arch/arm/boot/dts/overlays/sc16is752-spi1-overlay.dts
23673 new file mode 100644
23674 index 000000000000..730c6e8cd614
23675 --- /dev/null
23676 +++ b/arch/arm/boot/dts/overlays/sc16is752-spi1-overlay.dts
23677 @@ -0,0 +1,67 @@
23678 +/dts-v1/;
23679 +/plugin/;
23680 +
23681 +/ {
23682 + compatible = "brcm,bcm2835";
23683 +
23684 + fragment@0 {
23685 + target = <&gpio>;
23686 + __overlay__ {
23687 + spi1_pins: spi1_pins {
23688 + brcm,pins = <19 20 21>;
23689 + brcm,function = <3>; /* alt4 */
23690 + };
23691 +
23692 + spi1_cs_pins: spi1_cs_pins {
23693 + brcm,pins = <18>;
23694 + brcm,function = <1>; /* output */
23695 + };
23696 + };
23697 + };
23698 +
23699 + fragment@1 {
23700 + target = <&spi1>;
23701 + __overlay__ {
23702 + #address-cells = <1>;
23703 + #size-cells = <0>;
23704 + pinctrl-names = "default";
23705 + pinctrl-0 = <&spi1_pins &spi1_cs_pins>;
23706 + cs-gpios = <&gpio 18 1>;
23707 + status = "okay";
23708 +
23709 + sc16is752: sc16is752@0 {
23710 + compatible = "nxp,sc16is752";
23711 + reg = <0>; /* CE0 */
23712 + clocks = <&sc16is752_clk>;
23713 + interrupt-parent = <&gpio>;
23714 + interrupts = <24 2>; /* IRQ_TYPE_EDGE_FALLING */
23715 + gpio-controller;
23716 + #gpio-cells = <2>;
23717 + spi-max-frequency = <4000000>;
23718 + };
23719 + };
23720 + };
23721 +
23722 + fragment@2 {
23723 + target = <&aux>;
23724 + __overlay__ {
23725 + status = "okay";
23726 + };
23727 + };
23728 +
23729 + fragment@3 {
23730 + target-path = "/";
23731 + __overlay__ {
23732 + sc16is752_clk: sc16is752_spi1_0_clk {
23733 + compatible = "fixed-clock";
23734 + #clock-cells = <0>;
23735 + clock-frequency = <14745600>;
23736 + };
23737 + };
23738 + };
23739 +
23740 + __overrides__ {
23741 + int_pin = <&sc16is752>,"interrupts:0";
23742 + xtal = <&sc16is752_clk>,"clock-frequency:0";
23743 + };
23744 +};
23745 diff --git a/arch/arm/boot/dts/overlays/sdhost-overlay.dts b/arch/arm/boot/dts/overlays/sdhost-overlay.dts
23746 new file mode 100644
23747 index 000000000000..0b72b4eeac88
23748 --- /dev/null
23749 +++ b/arch/arm/boot/dts/overlays/sdhost-overlay.dts
23750 @@ -0,0 +1,38 @@
23751 +/dts-v1/;
23752 +/plugin/;
23753 +
23754 +/* Provide backwards compatible aliases for the old sdhost dtparams. */
23755 +
23756 +/{
23757 + compatible = "brcm,bcm2835";
23758 +
23759 + fragment@0 {
23760 + target = <&sdhost>;
23761 + frag0: __overlay__ {
23762 + brcm,overclock-50 = <0>;
23763 + brcm,pio-limit = <1>;
23764 + status = "okay";
23765 + };
23766 + };
23767 +
23768 + fragment@1 {
23769 + target = <&mmc>;
23770 + __overlay__ {
23771 + status = "disabled";
23772 + };
23773 + };
23774 +
23775 + fragment@2 {
23776 + target = <&mmcnr>;
23777 + __overlay__ {
23778 + status = "disabled";
23779 + };
23780 + };
23781 +
23782 + __overrides__ {
23783 + overclock_50 = <&frag0>,"brcm,overclock-50:0";
23784 + force_pio = <&frag0>,"brcm,force-pio?";
23785 + pio_limit = <&frag0>,"brcm,pio-limit:0";
23786 + debug = <&frag0>,"brcm,debug?";
23787 + };
23788 +};
23789 diff --git a/arch/arm/boot/dts/overlays/sdio-overlay.dts b/arch/arm/boot/dts/overlays/sdio-overlay.dts
23790 new file mode 100644
23791 index 000000000000..873e49056379
23792 --- /dev/null
23793 +++ b/arch/arm/boot/dts/overlays/sdio-overlay.dts
23794 @@ -0,0 +1,77 @@
23795 +/dts-v1/;
23796 +/plugin/;
23797 +
23798 +/* Enable SDIO from MMC interface via various GPIO groups */
23799 +
23800 +/{
23801 + compatible = "brcm,bcm2835";
23802 +
23803 + fragment@0 {
23804 + target = <&mmcnr>;
23805 + __overlay__ {
23806 + status = "disabled";
23807 + };
23808 + };
23809 +
23810 + fragment@1 {
23811 + target = <&mmc>;
23812 + sdio_ovl: __overlay__ {
23813 + pinctrl-0 = <&sdio_ovl_pins>;
23814 + pinctrl-names = "default";
23815 + non-removable;
23816 + bus-width = <4>;
23817 + status = "okay";
23818 + };
23819 + };
23820 +
23821 + fragment@2 {
23822 + target = <&gpio>;
23823 + __overlay__ {
23824 + sdio_ovl_pins: sdio_ovl_pins {
23825 + brcm,pins = <22 23 24 25 26 27>;
23826 + brcm,function = <7>; /* ALT3 = SD1 */
23827 + brcm,pull = <0 2 2 2 2 2>;
23828 + };
23829 + };
23830 + };
23831 +
23832 + fragment@3 {
23833 + target = <&sdio_ovl_pins>;
23834 + __dormant__ {
23835 + brcm,pins = <22 23 24 25>;
23836 + brcm,pull = <0 2 2 2>;
23837 + };
23838 + };
23839 +
23840 + fragment@4 {
23841 + target = <&sdio_ovl_pins>;
23842 + __dormant__ {
23843 + brcm,pins = <34 35 36 37>;
23844 + brcm,pull = <0 2 2 2>;
23845 + };
23846 + };
23847 +
23848 + fragment@5 {
23849 + target = <&sdio_ovl_pins>;
23850 + __dormant__ {
23851 + brcm,pins = <34 35 36 37 38 39>;
23852 + brcm,pull = <0 2 2 2 2 2>;
23853 + };
23854 + };
23855 +
23856 + fragment@6 {
23857 + target-path = "/aliases";
23858 + __overlay__ {
23859 + mmc1 = "/soc/mmc@7e300000";
23860 + };
23861 + };
23862 +
23863 + __overrides__ {
23864 + poll_once = <&sdio_ovl>,"non-removable?";
23865 + bus_width = <&sdio_ovl>,"bus-width:0";
23866 + sdio_overclock = <&sdio_ovl>,"brcm,overclock-50:0";
23867 + gpios_22_25 = <0>,"=3";
23868 + gpios_34_37 = <0>,"=4";
23869 + gpios_34_39 = <0>,"=5";
23870 + };
23871 +};
23872 diff --git a/arch/arm/boot/dts/overlays/seeed-can-fd-hat-v1-overlay.dts b/arch/arm/boot/dts/overlays/seeed-can-fd-hat-v1-overlay.dts
23873 new file mode 100644
23874 index 000000000000..210d027a073e
23875 --- /dev/null
23876 +++ b/arch/arm/boot/dts/overlays/seeed-can-fd-hat-v1-overlay.dts
23877 @@ -0,0 +1,138 @@
23878 +// redo: ovmerge -c spi1-1cs-overlay.dts,cs0_pin=18,cs0_spidev=false mcp251xfd-overlay.dts,spi0-0,interrupt=25 mcp251xfd-overlay.dts,spi1-0,interrupt=24
23879 +
23880 +// Device tree overlay for https://www.seeedstudio.com/2-Channel-CAN-BUS-FD-Shield-for-Raspberry-Pi-p-4072.html
23881 +
23882 +/dts-v1/;
23883 +/plugin/;
23884 +
23885 +#include <dt-bindings/gpio/gpio.h>
23886 +#include <dt-bindings/interrupt-controller/irq.h>
23887 +#include <dt-bindings/pinctrl/bcm2835.h>
23888 +
23889 +/ {
23890 + compatible = "brcm,bcm2835";
23891 + fragment@0 {
23892 + target = <&gpio>;
23893 + __overlay__ {
23894 + spi1_pins: spi1_pins {
23895 + brcm,pins = <19 20 21>;
23896 + brcm,function = <3>;
23897 + };
23898 + spi1_cs_pins: spi1_cs_pins {
23899 + brcm,pins = <18>;
23900 + brcm,function = <1>;
23901 + };
23902 + };
23903 + };
23904 + fragment@1 {
23905 + target = <&spi1>;
23906 + __overlay__ {
23907 + #address-cells = <1>;
23908 + #size-cells = <0>;
23909 + pinctrl-names = "default";
23910 + pinctrl-0 = <&spi1_pins &spi1_cs_pins>;
23911 + cs-gpios = <&gpio 18 1>;
23912 + status = "okay";
23913 + spidev@0 {
23914 + compatible = "spidev";
23915 + reg = <0>;
23916 + #address-cells = <1>;
23917 + #size-cells = <0>;
23918 + spi-max-frequency = <125000000>;
23919 + status = "disabled";
23920 + };
23921 + };
23922 + };
23923 + fragment@2 {
23924 + target = <&aux>;
23925 + __overlay__ {
23926 + status = "okay";
23927 + };
23928 + };
23929 + fragment@3 {
23930 + target = <&spidev0>;
23931 + __overlay__ {
23932 + status = "disabled";
23933 + };
23934 + };
23935 + fragment@4 {
23936 + target = <&gpio>;
23937 + __overlay__ {
23938 + mcp251xfd_pins: mcp251xfd_spi0_0_pins {
23939 + brcm,pins = <25>;
23940 + brcm,function = <BCM2835_FSEL_GPIO_IN>;
23941 + };
23942 + };
23943 + };
23944 + fragment@5 {
23945 + target-path = "/clocks";
23946 + __overlay__ {
23947 + clk_mcp251xfd_osc: mcp251xfd-spi0-0-osc {
23948 + #clock-cells = <0>;
23949 + compatible = "fixed-clock";
23950 + clock-frequency = <40000000>;
23951 + };
23952 + };
23953 + };
23954 + fragment@6 {
23955 + target = <&spi0>;
23956 + __overlay__ {
23957 + status = "okay";
23958 + #address-cells = <1>;
23959 + #size-cells = <0>;
23960 + mcp251xfd@0 {
23961 + compatible = "microchip,mcp251xfd";
23962 + reg = <0>;
23963 + pinctrl-names = "default";
23964 + pinctrl-0 = <&mcp251xfd_pins>;
23965 + spi-max-frequency = <20000000>;
23966 + interrupt-parent = <&gpio>;
23967 + interrupts = <25 IRQ_TYPE_LEVEL_LOW>;
23968 + clocks = <&clk_mcp251xfd_osc>;
23969 + };
23970 + };
23971 + };
23972 + fragment@7 {
23973 + target-path = "spi1/spidev@0";
23974 + __overlay__ {
23975 + status = "disabled";
23976 + };
23977 + };
23978 + fragment@8 {
23979 + target = <&gpio>;
23980 + __overlay__ {
23981 + mcp251xfd_pins_1: mcp251xfd_spi1_0_pins {
23982 + brcm,pins = <24>;
23983 + brcm,function = <BCM2835_FSEL_GPIO_IN>;
23984 + };
23985 + };
23986 + };
23987 + fragment@9 {
23988 + target-path = "/clocks";
23989 + __overlay__ {
23990 + clk_mcp251xfd_osc_1: mcp251xfd-spi1-0-osc {
23991 + #clock-cells = <0>;
23992 + compatible = "fixed-clock";
23993 + clock-frequency = <40000000>;
23994 + };
23995 + };
23996 + };
23997 + fragment@10 {
23998 + target = <&spi1>;
23999 + __overlay__ {
24000 + status = "okay";
24001 + #address-cells = <1>;
24002 + #size-cells = <0>;
24003 + mcp251xfd@0 {
24004 + compatible = "microchip,mcp251xfd";
24005 + reg = <0>;
24006 + pinctrl-names = "default";
24007 + pinctrl-0 = <&mcp251xfd_pins_1>;
24008 + spi-max-frequency = <20000000>;
24009 + interrupt-parent = <&gpio>;
24010 + interrupts = <24 IRQ_TYPE_LEVEL_LOW>;
24011 + clocks = <&clk_mcp251xfd_osc_1>;
24012 + };
24013 + };
24014 + };
24015 +};
24016 diff --git a/arch/arm/boot/dts/overlays/seeed-can-fd-hat-v2-overlay.dts b/arch/arm/boot/dts/overlays/seeed-can-fd-hat-v2-overlay.dts
24017 new file mode 100644
24018 index 000000000000..e843d0b19745
24019 --- /dev/null
24020 +++ b/arch/arm/boot/dts/overlays/seeed-can-fd-hat-v2-overlay.dts
24021 @@ -0,0 +1,117 @@
24022 +// redo: ovmerge -c mcp251xfd-overlay.dts,spi0-0,interrupt=25 mcp251xfd-overlay.dts,spi0-1,interrupt=24 i2c-rtc-overlay.dts,pcf85063
24023 +
24024 +// Device tree overlay for https://www.seeedstudio.com/CAN-BUS-FD-HAT-for-Raspberry-Pi-p-4742.html
24025 +
24026 +/dts-v1/;
24027 +/plugin/;
24028 +
24029 +#include <dt-bindings/gpio/gpio.h>
24030 +#include <dt-bindings/interrupt-controller/irq.h>
24031 +#include <dt-bindings/pinctrl/bcm2835.h>
24032 +
24033 +/ {
24034 + compatible = "brcm,bcm2835";
24035 + fragment@0 {
24036 + target = <&spidev0>;
24037 + __overlay__ {
24038 + status = "disabled";
24039 + };
24040 + };
24041 + fragment@1 {
24042 + target = <&gpio>;
24043 + __overlay__ {
24044 + mcp251xfd_pins: mcp251xfd_spi0_0_pins {
24045 + brcm,pins = <25>;
24046 + brcm,function = <BCM2835_FSEL_GPIO_IN>;
24047 + };
24048 + };
24049 + };
24050 + fragment@2 {
24051 + target-path = "/clocks";
24052 + __overlay__ {
24053 + clk_mcp251xfd_osc: mcp251xfd-spi0-0-osc {
24054 + #clock-cells = <0>;
24055 + compatible = "fixed-clock";
24056 + clock-frequency = <40000000>;
24057 + };
24058 + };
24059 + };
24060 + fragment@3 {
24061 + target = <&spi0>;
24062 + __overlay__ {
24063 + status = "okay";
24064 + #address-cells = <1>;
24065 + #size-cells = <0>;
24066 + mcp251xfd@0 {
24067 + compatible = "microchip,mcp251xfd";
24068 + reg = <0>;
24069 + pinctrl-names = "default";
24070 + pinctrl-0 = <&mcp251xfd_pins>;
24071 + spi-max-frequency = <20000000>;
24072 + interrupt-parent = <&gpio>;
24073 + interrupts = <25 IRQ_TYPE_LEVEL_LOW>;
24074 + clocks = <&clk_mcp251xfd_osc>;
24075 + };
24076 + };
24077 + };
24078 + fragment@4 {
24079 + target = <&spidev1>;
24080 + __overlay__ {
24081 + status = "disabled";
24082 + };
24083 + };
24084 + fragment@5 {
24085 + target = <&gpio>;
24086 + __overlay__ {
24087 + mcp251xfd_pins_1: mcp251xfd_spi0_1_pins {
24088 + brcm,pins = <24>;
24089 + brcm,function = <BCM2835_FSEL_GPIO_IN>;
24090 + };
24091 + };
24092 + };
24093 + fragment@6 {
24094 + target-path = "/clocks";
24095 + __overlay__ {
24096 + clk_mcp251xfd_osc_1: mcp251xfd-spi0-1-osc {
24097 + #clock-cells = <0>;
24098 + compatible = "fixed-clock";
24099 + clock-frequency = <40000000>;
24100 + };
24101 + };
24102 + };
24103 + fragment@7 {
24104 + target = <&spi0>;
24105 + __overlay__ {
24106 + status = "okay";
24107 + #address-cells = <1>;
24108 + #size-cells = <0>;
24109 + mcp251xfd@1 {
24110 + compatible = "microchip,mcp251xfd";
24111 + reg = <1>;
24112 + pinctrl-names = "default";
24113 + pinctrl-0 = <&mcp251xfd_pins_1>;
24114 + spi-max-frequency = <20000000>;
24115 + interrupt-parent = <&gpio>;
24116 + interrupts = <24 IRQ_TYPE_LEVEL_LOW>;
24117 + clocks = <&clk_mcp251xfd_osc_1>;
24118 + };
24119 + };
24120 + };
24121 + fragment@8 {
24122 + target = <&i2cbus>;
24123 + __overlay__ {
24124 + #address-cells = <1>;
24125 + #size-cells = <0>;
24126 + pcf85063@51 {
24127 + compatible = "nxp,pcf85063";
24128 + reg = <0x51>;
24129 + };
24130 + };
24131 + };
24132 + fragment@9 {
24133 + target = <&i2c_arm>;
24134 + i2cbus: __overlay__ {
24135 + status = "okay";
24136 + };
24137 + };
24138 +};
24139 diff --git a/arch/arm/boot/dts/overlays/sh1106-spi-overlay.dts b/arch/arm/boot/dts/overlays/sh1106-spi-overlay.dts
24140 new file mode 100644
24141 index 000000000000..57a0cc9b1741
24142 --- /dev/null
24143 +++ b/arch/arm/boot/dts/overlays/sh1106-spi-overlay.dts
24144 @@ -0,0 +1,84 @@
24145 +/*
24146 + * Device Tree overlay for SH1106 based SPI OLED display
24147 + *
24148 + */
24149 +
24150 +/dts-v1/;
24151 +/plugin/;
24152 +
24153 +/ {
24154 + compatible = "brcm,bcm2835";
24155 +
24156 + fragment@0 {
24157 + target = <&spi0>;
24158 + __overlay__ {
24159 + status = "okay";
24160 + };
24161 + };
24162 +
24163 + fragment@1 {
24164 + target = <&spidev0>;
24165 + __overlay__ {
24166 + status = "disabled";
24167 + };
24168 + };
24169 +
24170 + fragment@2 {
24171 + target = <&spidev1>;
24172 + __overlay__ {
24173 + status = "disabled";
24174 + };
24175 + };
24176 +
24177 + fragment@3 {
24178 + target = <&gpio>;
24179 + __overlay__ {
24180 + sh1106_pins: sh1106_pins {
24181 + brcm,pins = <25 24>;
24182 + brcm,function = <1 1>; /* out out */
24183 + };
24184 + };
24185 + };
24186 +
24187 + fragment@4 {
24188 + target = <&spi0>;
24189 + __overlay__ {
24190 + /* needed to avoid dtc warning */
24191 + #address-cells = <1>;
24192 + #size-cells = <0>;
24193 +
24194 + sh1106: sh1106@0{
24195 + compatible = "sinowealth,sh1106";
24196 + reg = <0>;
24197 + pinctrl-names = "default";
24198 + pinctrl-0 = <&sh1106_pins>;
24199 +
24200 + spi-max-frequency = <4000000>;
24201 + bgr = <0>;
24202 + bpp = <1>;
24203 + rotate = <0>;
24204 + fps = <25>;
24205 + buswidth = <8>;
24206 + reset-gpios = <&gpio 25 1>;
24207 + dc-gpios = <&gpio 24 0>;
24208 + debug = <0>;
24209 +
24210 + sinowealth,height = <64>;
24211 + sinowealth,width = <128>;
24212 + sinowealth,page-offset = <0>;
24213 + };
24214 + };
24215 + };
24216 +
24217 + __overrides__ {
24218 + speed = <&sh1106>,"spi-max-frequency:0";
24219 + rotate = <&sh1106>,"rotate:0";
24220 + fps = <&sh1106>,"fps:0";
24221 + debug = <&sh1106>,"debug:0";
24222 + dc_pin = <&sh1106>,"dc-gpios:4",
24223 + <&sh1106_pins>,"brcm,pins:4";
24224 + reset_pin = <&sh1106>,"reset-gpios:4",
24225 + <&sh1106_pins>,"brcm,pins:0";
24226 + height = <&sh1106>,"sinowealth,height:0";
24227 + };
24228 +};
24229 diff --git a/arch/arm/boot/dts/overlays/si446x-spi0-overlay.dts b/arch/arm/boot/dts/overlays/si446x-spi0-overlay.dts
24230 new file mode 100644
24231 index 000000000000..90495f0941fb
24232 --- /dev/null
24233 +++ b/arch/arm/boot/dts/overlays/si446x-spi0-overlay.dts
24234 @@ -0,0 +1,53 @@
24235 +// Overlay for the SiLabs Si446X Controller - SPI0
24236 +// Default Interrupt Pin: 17
24237 +// Default SDN Pin: 27
24238 +/dts-v1/;
24239 +/plugin/;
24240 +
24241 + / {
24242 + compatible = "brcm,bcm2835";
24243 +
24244 + fragment@0 {
24245 + target = <&spi0>;
24246 + __overlay__ {
24247 + // needed to avoid dtc warning
24248 + #address-cells = <1>;
24249 + #size-cells = <0>;
24250 +
24251 + status = "okay";
24252 +
24253 + uhf0: si446x@0{
24254 + compatible = "silabs,si446x";
24255 + reg = <0>; // CE0
24256 + pinctrl-names = "default";
24257 + pinctrl-0 = <&uhf0_pins>;
24258 + interrupt-parent = <&gpio>;
24259 + interrupts = <17 0x2>; // falling edge
24260 + spi-max-frequency = <4000000>;
24261 + sdn_pin = <27>;
24262 + irq_pin = <17>;
24263 + status = "okay";
24264 + };
24265 + };
24266 + };
24267 +
24268 + fragment@1 {
24269 + target = <&gpio>;
24270 + __overlay__ {
24271 + uhf0_pins: uhf0_pins {
24272 + brcm,pins = <17 27>;
24273 + brcm,function = <0 1>; // in, out
24274 + brcm,pull = <2 0>; // high, none
24275 + };
24276 + };
24277 + };
24278 +
24279 + __overrides__ {
24280 + int_pin = <&uhf0>, "interrupts:0",
24281 + <&uhf0>, "irq_pin:0",
24282 + <&uhf0_pins>, "brcm,pins:0";
24283 + reset_pin = <&uhf0>, "sdn_pin:0",
24284 + <&uhf0_pins>, "brcm,pins:4";
24285 + speed = <&uhf0>, "spi-max-frequency:0";
24286 + };
24287 +};
24288 diff --git a/arch/arm/boot/dts/overlays/smi-dev-overlay.dts b/arch/arm/boot/dts/overlays/smi-dev-overlay.dts
24289 new file mode 100644
24290 index 000000000000..bafab6c92506
24291 --- /dev/null
24292 +++ b/arch/arm/boot/dts/overlays/smi-dev-overlay.dts
24293 @@ -0,0 +1,20 @@
24294 +// Description: Overlay to enable character device interface for SMI.
24295 +// Author: Luke Wren <luke@raspberrypi.org>
24296 +
24297 +/dts-v1/;
24298 +/plugin/;
24299 +
24300 +/{
24301 + compatible = "brcm,bcm2835";
24302 +
24303 + fragment@0 {
24304 + target = <&soc>;
24305 + __overlay__ {
24306 + smi_dev {
24307 + compatible = "brcm,bcm2835-smi-dev";
24308 + smi_handle = <&smi>;
24309 + status = "okay";
24310 + };
24311 + };
24312 + };
24313 +};
24314 diff --git a/arch/arm/boot/dts/overlays/smi-nand-overlay.dts b/arch/arm/boot/dts/overlays/smi-nand-overlay.dts
24315 new file mode 100644
24316 index 000000000000..ae1e50329d66
24317 --- /dev/null
24318 +++ b/arch/arm/boot/dts/overlays/smi-nand-overlay.dts
24319 @@ -0,0 +1,66 @@
24320 +// Description: Overlay to enable NAND flash through
24321 +// the secondary memory interface
24322 +// Author: Luke Wren
24323 +
24324 +/dts-v1/;
24325 +/plugin/;
24326 +
24327 +/{
24328 + compatible = "brcm,bcm2835";
24329 +
24330 + fragment@0 {
24331 + target = <&smi>;
24332 + __overlay__ {
24333 + pinctrl-names = "default";
24334 + pinctrl-0 = <&smi_pins>;
24335 + status = "okay";
24336 + };
24337 + };
24338 +
24339 + fragment@1 {
24340 + target = <&soc>;
24341 + __overlay__ {
24342 + nand: flash@0 {
24343 + compatible = "brcm,bcm2835-smi-nand";
24344 + smi_handle = <&smi>;
24345 + #address-cells = <1>;
24346 + #size-cells = <1>;
24347 + status = "okay";
24348 +
24349 + partition@0 {
24350 + label = "stage2";
24351 + // 128k
24352 + reg = <0 0x20000>;
24353 + read-only;
24354 + };
24355 + partition@1 {
24356 + label = "firmware";
24357 + // 16M
24358 + reg = <0x20000 0x1000000>;
24359 + read-only;
24360 + };
24361 + partition@2 {
24362 + label = "root";
24363 + // 2G (will need to use 64 bit for >=4G)
24364 + reg = <0x1020000 0x80000000>;
24365 + };
24366 + };
24367 + };
24368 + };
24369 +
24370 + fragment@2 {
24371 + target = <&gpio>;
24372 + __overlay__ {
24373 + smi_pins: smi_pins {
24374 + brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
24375 + 12 13 14 15>;
24376 + /* Alt 1: SMI */
24377 + brcm,function = <5 5 5 5 5 5 5 5 5 5 5
24378 + 5 5 5 5 5>;
24379 + /* /CS, /WE and /OE are pulled high, as they are
24380 + generally active low signals */
24381 + brcm,pull = <2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0>;
24382 + };
24383 + };
24384 + };
24385 +};
24386 diff --git a/arch/arm/boot/dts/overlays/smi-overlay.dts b/arch/arm/boot/dts/overlays/smi-overlay.dts
24387 new file mode 100644
24388 index 000000000000..bb8c7830df23
24389 --- /dev/null
24390 +++ b/arch/arm/boot/dts/overlays/smi-overlay.dts
24391 @@ -0,0 +1,37 @@
24392 +// Description: Overlay to enable the secondary memory interface peripheral
24393 +// Author: Luke Wren
24394 +
24395 +/dts-v1/;
24396 +/plugin/;
24397 +
24398 +/{
24399 + compatible = "brcm,bcm2835";
24400 +
24401 + fragment@0 {
24402 + target = <&smi>;
24403 + __overlay__ {
24404 + pinctrl-names = "default";
24405 + pinctrl-0 = <&smi_pins>;
24406 + status = "okay";
24407 + };
24408 + };
24409 +
24410 + fragment@1 {
24411 + target = <&gpio>;
24412 + __overlay__ {
24413 + smi_pins: smi_pins {
24414 + /* Don't configure the top two address bits, as
24415 + these are already used as ID_SD and ID_SC */
24416 + brcm,pins = <2 3 4 5 6 7 8 9 10 11 12 13 14 15
24417 + 16 17 18 19 20 21 22 23 24 25>;
24418 + /* Alt 1: SMI */
24419 + brcm,function = <5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
24420 + 5 5 5 5 5 5 5 5 5>;
24421 + /* /CS, /WE and /OE are pulled high, as they are
24422 + generally active low signals */
24423 + brcm,pull = <2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0
24424 + 0 0 0 0 0 0 0>;
24425 + };
24426 + };
24427 + };
24428 +};
24429 diff --git a/arch/arm/boot/dts/overlays/spi-gpio35-39-overlay.dts b/arch/arm/boot/dts/overlays/spi-gpio35-39-overlay.dts
24430 new file mode 100644
24431 index 000000000000..a132b8637c31
24432 --- /dev/null
24433 +++ b/arch/arm/boot/dts/overlays/spi-gpio35-39-overlay.dts
24434 @@ -0,0 +1,31 @@
24435 +/*
24436 + * Device tree overlay to move spi0 to gpio 35 to 39 on CM
24437 + */
24438 +
24439 +/dts-v1/;
24440 +/plugin/;
24441 +
24442 +/ {
24443 + compatible = "brcm,bcm2835";
24444 +
24445 + fragment@0 {
24446 + target = <&spi0>;
24447 + __overlay__ {
24448 + cs-gpios = <&gpio 36 1>, <&gpio 35 1>;
24449 + };
24450 + };
24451 +
24452 + fragment@1 {
24453 + target = <&spi0_cs_pins>;
24454 + __overlay__ {
24455 + brcm,pins = <36 35>;
24456 + };
24457 + };
24458 +
24459 + fragment@2 {
24460 + target = <&spi0_pins>;
24461 + __overlay__ {
24462 + brcm,pins = <37 38 39>;
24463 + };
24464 + };
24465 +};
24466 diff --git a/arch/arm/boot/dts/overlays/spi-gpio40-45-overlay.dts b/arch/arm/boot/dts/overlays/spi-gpio40-45-overlay.dts
24467 new file mode 100644
24468 index 000000000000..9ebcaf1b5ea0
24469 --- /dev/null
24470 +++ b/arch/arm/boot/dts/overlays/spi-gpio40-45-overlay.dts
24471 @@ -0,0 +1,36 @@
24472 +/*
24473 + * Boot EEPROM overlay
24474 + */
24475 +
24476 +/dts-v1/;
24477 +/plugin/;
24478 +
24479 +/ {
24480 + compatible = "brcm,bcm2835";
24481 +
24482 + fragment@0 {
24483 + target = <&spi0>;
24484 + __overlay__ {
24485 + cs-gpios = <&gpio 43 1>, <&gpio 44 1>, <&gpio 45 1>;
24486 + status = "okay";
24487 + };
24488 + };
24489 +
24490 + fragment@1 {
24491 + target = <&spi0_cs_pins>;
24492 + __overlay__ {
24493 + brcm,pins = <45 44 43>;
24494 + brcm,function = <1>; /* output */
24495 + status = "okay";
24496 + };
24497 + };
24498 +
24499 + fragment@2 {
24500 + target = <&spi0_pins>;
24501 + __overlay__ {
24502 + brcm,pins = <40 41 42>;
24503 + brcm,function = <3>; /* alt4 */
24504 + status = "okay";
24505 + };
24506 + };
24507 +};
24508 diff --git a/arch/arm/boot/dts/overlays/spi-rtc-overlay.dts b/arch/arm/boot/dts/overlays/spi-rtc-overlay.dts
24509 new file mode 100644
24510 index 000000000000..51b7fec281c0
24511 --- /dev/null
24512 +++ b/arch/arm/boot/dts/overlays/spi-rtc-overlay.dts
24513 @@ -0,0 +1,75 @@
24514 +// Definitions for several SPI-based Real Time Clocks
24515 +/dts-v1/;
24516 +/plugin/;
24517 +
24518 +/ {
24519 + compatible = "brcm,bcm2835";
24520 +
24521 + fragment@0 {
24522 + target = <&rtc>;
24523 + __dormant__ {
24524 + compatible = "maxim,ds3232";
24525 + };
24526 + };
24527 +
24528 + fragment@1 {
24529 + target = <&rtc>;
24530 + __dormant__ {
24531 + compatible = "maxim,ds3234";
24532 + };
24533 + };
24534 +
24535 + fragment@2 {
24536 + target = <&rtc>;
24537 + __dormant__ {
24538 + compatible = "nxp,rtc-pcf2123";
24539 + };
24540 + };
24541 +
24542 + spidev: fragment@100 {
24543 + target = <&spidev0>;
24544 + __overlay__ {
24545 + status = "disabled";
24546 + };
24547 + };
24548 +
24549 + frag101: fragment@101 {
24550 + target = <&spi0>;
24551 + __overlay__ {
24552 + #address-cells = <1>;
24553 + #size-cells = <0>;
24554 + status = "okay";
24555 +
24556 + rtc: rtc@0 {
24557 + reg = <0>;
24558 + spi-max-frequency = <5000000>;
24559 + };
24560 + };
24561 + };
24562 +
24563 + __overrides__ {
24564 + spi0_0 = <&spidev>, "target:0=",<&spidev0>,
24565 + <&frag101>, "target:0=",<&spi0>,
24566 + <&rtc>, "reg:0=0";
24567 + spi0_1 = <&spidev>, "target:0=",<&spidev1>,
24568 + <&frag101>, "target:0=",<&spi0>,
24569 + <&rtc>, "reg:0=1";
24570 + spi1_0 = <0>,"-100",
24571 + <&frag101>, "target:0=",<&spi1>,
24572 + <&rtc>, "reg:0=0";
24573 + spi1_1 = <0>,"-100",
24574 + <&frag101>, "target:0=",<&spi1>,
24575 + <&rtc>, "reg:0=1";
24576 + spi2_0 = <0>,"-100",
24577 + <&frag101>, "target:0=",<&spi2>,
24578 + <&rtc>, "reg:0=0";
24579 + spi2_1 = <0>,"-100",
24580 + <&frag101>, "target:0=",<&spi2>,
24581 + <&rtc>, "reg:0=1";
24582 + cs_high = <&rtc>, "spi-cs-high?";
24583 +
24584 + ds3232 = <0>,"+0";
24585 + ds3234 = <0>,"+1";
24586 + pcf2123 = <0>,"+2";
24587 + };
24588 +};
24589 diff --git a/arch/arm/boot/dts/overlays/spi0-1cs-overlay.dts b/arch/arm/boot/dts/overlays/spi0-1cs-overlay.dts
24590 new file mode 100644
24591 index 000000000000..e6eb66e2076a
24592 --- /dev/null
24593 +++ b/arch/arm/boot/dts/overlays/spi0-1cs-overlay.dts
24594 @@ -0,0 +1,42 @@
24595 +/dts-v1/;
24596 +/plugin/;
24597 +
24598 +
24599 +/ {
24600 + compatible = "brcm,bcm2835";
24601 +
24602 + fragment@0 {
24603 + target = <&spi0_cs_pins>;
24604 + frag0: __overlay__ {
24605 + brcm,pins = <8>;
24606 + };
24607 + };
24608 +
24609 + fragment@1 {
24610 + target = <&spi0>;
24611 + frag1: __overlay__ {
24612 + cs-gpios = <&gpio 8 1>;
24613 + status = "okay";
24614 + };
24615 + };
24616 +
24617 + fragment@2 {
24618 + target = <&spidev1>;
24619 + __overlay__ {
24620 + status = "disabled";
24621 + };
24622 + };
24623 +
24624 + fragment@3 {
24625 + target = <&spi0_pins>;
24626 + __dormant__ {
24627 + brcm,pins = <10 11>;
24628 + };
24629 + };
24630 +
24631 + __overrides__ {
24632 + cs0_pin = <&frag0>,"brcm,pins:0",
24633 + <&frag1>,"cs-gpios:4";
24634 + no_miso = <0>,"=3";
24635 + };
24636 +};
24637 diff --git a/arch/arm/boot/dts/overlays/spi0-2cs-overlay.dts b/arch/arm/boot/dts/overlays/spi0-2cs-overlay.dts
24638 new file mode 100644
24639 index 000000000000..df6519537c3a
24640 --- /dev/null
24641 +++ b/arch/arm/boot/dts/overlays/spi0-2cs-overlay.dts
24642 @@ -0,0 +1,37 @@
24643 +/dts-v1/;
24644 +/plugin/;
24645 +
24646 +
24647 +/ {
24648 + compatible = "brcm,bcm2835";
24649 +
24650 + fragment@0 {
24651 + target = <&spi0_cs_pins>;
24652 + frag0: __overlay__ {
24653 + brcm,pins = <8 7>;
24654 + };
24655 + };
24656 +
24657 + fragment@1 {
24658 + target = <&spi0>;
24659 + frag1: __overlay__ {
24660 + cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
24661 + status = "okay";
24662 + };
24663 + };
24664 +
24665 + fragment@2 {
24666 + target = <&spi0_pins>;
24667 + __dormant__ {
24668 + brcm,pins = <10 11>;
24669 + };
24670 + };
24671 +
24672 + __overrides__ {
24673 + cs0_pin = <&frag0>,"brcm,pins:0",
24674 + <&frag1>,"cs-gpios:4";
24675 + cs1_pin = <&frag0>,"brcm,pins:4",
24676 + <&frag1>,"cs-gpios:16";
24677 + no_miso = <0>,"=2";
24678 + };
24679 +};
24680 diff --git a/arch/arm/boot/dts/overlays/spi1-1cs-overlay.dts b/arch/arm/boot/dts/overlays/spi1-1cs-overlay.dts
24681 new file mode 100644
24682 index 000000000000..ea2794bc5fd5
24683 --- /dev/null
24684 +++ b/arch/arm/boot/dts/overlays/spi1-1cs-overlay.dts
24685 @@ -0,0 +1,57 @@
24686 +/dts-v1/;
24687 +/plugin/;
24688 +
24689 +
24690 +/ {
24691 + compatible = "brcm,bcm2835";
24692 +
24693 + fragment@0 {
24694 + target = <&gpio>;
24695 + __overlay__ {
24696 + spi1_pins: spi1_pins {
24697 + brcm,pins = <19 20 21>;
24698 + brcm,function = <3>; /* alt4 */
24699 + };
24700 +
24701 + spi1_cs_pins: spi1_cs_pins {
24702 + brcm,pins = <18>;
24703 + brcm,function = <1>; /* output */
24704 + };
24705 + };
24706 + };
24707 +
24708 + fragment@1 {
24709 + target = <&spi1>;
24710 + frag1: __overlay__ {
24711 + /* needed to avoid dtc warning */
24712 + #address-cells = <1>;
24713 + #size-cells = <0>;
24714 + pinctrl-names = "default";
24715 + pinctrl-0 = <&spi1_pins &spi1_cs_pins>;
24716 + cs-gpios = <&gpio 18 1>;
24717 + status = "okay";
24718 +
24719 + spidev1_0: spidev@0 {
24720 + compatible = "spidev";
24721 + reg = <0>; /* CE0 */
24722 + #address-cells = <1>;
24723 + #size-cells = <0>;
24724 + spi-max-frequency = <125000000>;
24725 + status = "okay";
24726 + };
24727 + };
24728 + };
24729 +
24730 + fragment@2 {
24731 + target = <&aux>;
24732 + __overlay__ {
24733 + status = "okay";
24734 + };
24735 + };
24736 +
24737 + __overrides__ {
24738 + cs0_pin = <&spi1_cs_pins>,"brcm,pins:0",
24739 + <&frag1>,"cs-gpios:4";
24740 + cs0_spidev = <&spidev1_0>,"status";
24741 + };
24742 +};
24743 diff --git a/arch/arm/boot/dts/overlays/spi1-2cs-overlay.dts b/arch/arm/boot/dts/overlays/spi1-2cs-overlay.dts
24744 new file mode 100644
24745 index 000000000000..dab34ee79ae2
24746 --- /dev/null
24747 +++ b/arch/arm/boot/dts/overlays/spi1-2cs-overlay.dts
24748 @@ -0,0 +1,69 @@
24749 +/dts-v1/;
24750 +/plugin/;
24751 +
24752 +
24753 +/ {
24754 + compatible = "brcm,bcm2835";
24755 +
24756 + fragment@0 {
24757 + target = <&gpio>;
24758 + __overlay__ {
24759 + spi1_pins: spi1_pins {
24760 + brcm,pins = <19 20 21>;
24761 + brcm,function = <3>; /* alt4 */
24762 + };
24763 +
24764 + spi1_cs_pins: spi1_cs_pins {
24765 + brcm,pins = <18 17>;
24766 + brcm,function = <1>; /* output */
24767 + };
24768 + };
24769 + };
24770 +
24771 + fragment@1 {
24772 + target = <&spi1>;
24773 + frag1: __overlay__ {
24774 + /* needed to avoid dtc warning */
24775 + #address-cells = <1>;
24776 + #size-cells = <0>;
24777 + pinctrl-names = "default";
24778 + pinctrl-0 = <&spi1_pins &spi1_cs_pins>;
24779 + cs-gpios = <&gpio 18 1>, <&gpio 17 1>;
24780 + status = "okay";
24781 +
24782 + spidev1_0: spidev@0 {
24783 + compatible = "spidev";
24784 + reg = <0>; /* CE0 */
24785 + #address-cells = <1>;
24786 + #size-cells = <0>;
24787 + spi-max-frequency = <125000000>;
24788 + status = "okay";
24789 + };
24790 +
24791 + spidev1_1: spidev@1 {
24792 + compatible = "spidev";
24793 + reg = <1>; /* CE1 */
24794 + #address-cells = <1>;
24795 + #size-cells = <0>;
24796 + spi-max-frequency = <125000000>;
24797 + status = "okay";
24798 + };
24799 + };
24800 + };
24801 +
24802 + fragment@2 {
24803 + target = <&aux>;
24804 + __overlay__ {
24805 + status = "okay";
24806 + };
24807 + };
24808 +
24809 + __overrides__ {
24810 + cs0_pin = <&spi1_cs_pins>,"brcm,pins:0",
24811 + <&frag1>,"cs-gpios:4";
24812 + cs1_pin = <&spi1_cs_pins>,"brcm,pins:4",
24813 + <&frag1>,"cs-gpios:16";
24814 + cs0_spidev = <&spidev1_0>,"status";
24815 + cs1_spidev = <&spidev1_1>,"status";
24816 + };
24817 +};
24818 diff --git a/arch/arm/boot/dts/overlays/spi1-3cs-overlay.dts b/arch/arm/boot/dts/overlays/spi1-3cs-overlay.dts
24819 new file mode 100644
24820 index 000000000000..bc7e7d04324b
24821 --- /dev/null
24822 +++ b/arch/arm/boot/dts/overlays/spi1-3cs-overlay.dts
24823 @@ -0,0 +1,81 @@
24824 +/dts-v1/;
24825 +/plugin/;
24826 +
24827 +
24828 +/ {
24829 + compatible = "brcm,bcm2835";
24830 +
24831 + fragment@0 {
24832 + target = <&gpio>;
24833 + __overlay__ {
24834 + spi1_pins: spi1_pins {
24835 + brcm,pins = <19 20 21>;
24836 + brcm,function = <3>; /* alt4 */
24837 + };
24838 +
24839 + spi1_cs_pins: spi1_cs_pins {
24840 + brcm,pins = <18 17 16>;
24841 + brcm,function = <1>; /* output */
24842 + };
24843 + };
24844 + };
24845 +
24846 + fragment@1 {
24847 + target = <&spi1>;
24848 + frag1: __overlay__ {
24849 + /* needed to avoid dtc warning */
24850 + #address-cells = <1>;
24851 + #size-cells = <0>;
24852 + pinctrl-names = "default";
24853 + pinctrl-0 = <&spi1_pins &spi1_cs_pins>;
24854 + cs-gpios = <&gpio 18 1>, <&gpio 17 1>, <&gpio 16 1>;
24855 + status = "okay";
24856 +
24857 + spidev1_0: spidev@0 {
24858 + compatible = "spidev";
24859 + reg = <0>; /* CE0 */
24860 + #address-cells = <1>;
24861 + #size-cells = <0>;
24862 + spi-max-frequency = <125000000>;
24863 + status = "okay";
24864 + };
24865 +
24866 + spidev1_1: spidev@1 {
24867 + compatible = "spidev";
24868 + reg = <1>; /* CE1 */
24869 + #address-cells = <1>;
24870 + #size-cells = <0>;
24871 + spi-max-frequency = <125000000>;
24872 + status = "okay";
24873 + };
24874 +
24875 + spidev1_2: spidev@2 {
24876 + compatible = "spidev";
24877 + reg = <2>; /* CE2 */
24878 + #address-cells = <1>;
24879 + #size-cells = <0>;
24880 + spi-max-frequency = <125000000>;
24881 + status = "okay";
24882 + };
24883 + };
24884 + };
24885 +
24886 + fragment@2 {
24887 + target = <&aux>;
24888 + __overlay__ {
24889 + status = "okay";
24890 + };
24891 + };
24892 +
24893 + __overrides__ {
24894 + cs0_pin = <&spi1_cs_pins>,"brcm,pins:0",
24895 + <&frag1>,"cs-gpios:4";
24896 + cs1_pin = <&spi1_cs_pins>,"brcm,pins:4",
24897 + <&frag1>,"cs-gpios:16";
24898 + cs2_pin = <&spi1_cs_pins>,"brcm,pins:8",
24899 + <&frag1>,"cs-gpios:28";
24900 + cs0_spidev = <&spidev1_0>,"status";
24901 + cs1_spidev = <&spidev1_1>,"status";
24902 + cs2_spidev = <&spidev1_2>,"status";
24903 + };
24904 +};
24905 diff --git a/arch/arm/boot/dts/overlays/spi2-1cs-overlay.dts b/arch/arm/boot/dts/overlays/spi2-1cs-overlay.dts
24906 new file mode 100644
24907 index 000000000000..2a29750462af
24908 --- /dev/null
24909 +++ b/arch/arm/boot/dts/overlays/spi2-1cs-overlay.dts
24910 @@ -0,0 +1,57 @@
24911 +/dts-v1/;
24912 +/plugin/;
24913 +
24914 +
24915 +/ {
24916 + compatible = "brcm,bcm2835";
24917 +
24918 + fragment@0 {
24919 + target = <&gpio>;
24920 + __overlay__ {
24921 + spi2_pins: spi2_pins {
24922 + brcm,pins = <40 41 42>;
24923 + brcm,function = <3>; /* alt4 */
24924 + };
24925 +
24926 + spi2_cs_pins: spi2_cs_pins {
24927 + brcm,pins = <43>;
24928 + brcm,function = <1>; /* output */
24929 + };
24930 + };
24931 + };
24932 +
24933 + fragment@1 {
24934 + target = <&spi2>;
24935 + frag1: __overlay__ {
24936 + /* needed to avoid dtc warning */
24937 + #address-cells = <1>;
24938 + #size-cells = <0>;
24939 + pinctrl-names = "default";
24940 + pinctrl-0 = <&spi2_pins &spi2_cs_pins>;
24941 + cs-gpios = <&gpio 43 1>;
24942 + status = "okay";
24943 +
24944 + spidev2_0: spidev@0 {
24945 + compatible = "spidev";
24946 + reg = <0>; /* CE0 */
24947 + #address-cells = <1>;
24948 + #size-cells = <0>;
24949 + spi-max-frequency = <125000000>;
24950 + status = "okay";
24951 + };
24952 + };
24953 + };
24954 +
24955 + fragment@2 {
24956 + target = <&aux>;
24957 + __overlay__ {
24958 + status = "okay";
24959 + };
24960 + };
24961 +
24962 + __overrides__ {
24963 + cs0_pin = <&spi2_cs_pins>,"brcm,pins:0",
24964 + <&frag1>,"cs-gpios:4";
24965 + cs0_spidev = <&spidev2_0>,"status";
24966 + };
24967 +};
24968 diff --git a/arch/arm/boot/dts/overlays/spi2-2cs-overlay.dts b/arch/arm/boot/dts/overlays/spi2-2cs-overlay.dts
24969 new file mode 100644
24970 index 000000000000..642678fc9ddd
24971 --- /dev/null
24972 +++ b/arch/arm/boot/dts/overlays/spi2-2cs-overlay.dts
24973 @@ -0,0 +1,69 @@
24974 +/dts-v1/;
24975 +/plugin/;
24976 +
24977 +
24978 +/ {
24979 + compatible = "brcm,bcm2835";
24980 +
24981 + fragment@0 {
24982 + target = <&gpio>;
24983 + __overlay__ {
24984 + spi2_pins: spi2_pins {
24985 + brcm,pins = <40 41 42>;
24986 + brcm,function = <3>; /* alt4 */
24987 + };
24988 +
24989 + spi2_cs_pins: spi2_cs_pins {
24990 + brcm,pins = <43 44>;
24991 + brcm,function = <1>; /* output */
24992 + };
24993 + };
24994 + };
24995 +
24996 + fragment@1 {
24997 + target = <&spi2>;
24998 + frag1: __overlay__ {
24999 + /* needed to avoid dtc warning */
25000 + #address-cells = <1>;
25001 + #size-cells = <0>;
25002 + pinctrl-names = "default";
25003 + pinctrl-0 = <&spi2_pins &spi2_cs_pins>;
25004 + cs-gpios = <&gpio 43 1>, <&gpio 44 1>;
25005 + status = "okay";
25006 +
25007 + spidev2_0: spidev@0 {
25008 + compatible = "spidev";
25009 + reg = <0>; /* CE0 */
25010 + #address-cells = <1>;
25011 + #size-cells = <0>;
25012 + spi-max-frequency = <125000000>;
25013 + status = "okay";
25014 + };
25015 +
25016 + spidev2_1: spidev@1 {
25017 + compatible = "spidev";
25018 + reg = <1>; /* CE1 */
25019 + #address-cells = <1>;
25020 + #size-cells = <0>;
25021 + spi-max-frequency = <125000000>;
25022 + status = "okay";
25023 + };
25024 + };
25025 + };
25026 +
25027 + fragment@2 {
25028 + target = <&aux>;
25029 + __overlay__ {
25030 + status = "okay";
25031 + };
25032 + };
25033 +
25034 + __overrides__ {
25035 + cs0_pin = <&spi2_cs_pins>,"brcm,pins:0",
25036 + <&frag1>,"cs-gpios:4";
25037 + cs1_pin = <&spi2_cs_pins>,"brcm,pins:4",
25038 + <&frag1>,"cs-gpios:16";
25039 + cs0_spidev = <&spidev2_0>,"status";
25040 + cs1_spidev = <&spidev2_1>,"status";
25041 + };
25042 +};
25043 diff --git a/arch/arm/boot/dts/overlays/spi2-3cs-overlay.dts b/arch/arm/boot/dts/overlays/spi2-3cs-overlay.dts
25044 new file mode 100644
25045 index 000000000000..28d40c6c3c37
25046 --- /dev/null
25047 +++ b/arch/arm/boot/dts/overlays/spi2-3cs-overlay.dts
25048 @@ -0,0 +1,81 @@
25049 +/dts-v1/;
25050 +/plugin/;
25051 +
25052 +
25053 +/ {
25054 + compatible = "brcm,bcm2835";
25055 +
25056 + fragment@0 {
25057 + target = <&gpio>;
25058 + __overlay__ {
25059 + spi2_pins: spi2_pins {
25060 + brcm,pins = <40 41 42>;
25061 + brcm,function = <3>; /* alt4 */
25062 + };
25063 +
25064 + spi2_cs_pins: spi2_cs_pins {
25065 + brcm,pins = <43 44 45>;
25066 + brcm,function = <1>; /* output */
25067 + };
25068 + };
25069 + };
25070 +
25071 + fragment@1 {
25072 + target = <&spi2>;
25073 + frag1: __overlay__ {
25074 + /* needed to avoid dtc warning */
25075 + #address-cells = <1>;
25076 + #size-cells = <0>;
25077 + pinctrl-names = "default";
25078 + pinctrl-0 = <&spi2_pins &spi2_cs_pins>;
25079 + cs-gpios = <&gpio 43 1>, <&gpio 44 1>, <&gpio 45 1>;
25080 + status = "okay";
25081 +
25082 + spidev2_0: spidev@0 {
25083 + compatible = "spidev";
25084 + reg = <0>; /* CE0 */
25085 + #address-cells = <1>;
25086 + #size-cells = <0>;
25087 + spi-max-frequency = <125000000>;
25088 + status = "okay";
25089 + };
25090 +
25091 + spidev2_1: spidev@1 {
25092 + compatible = "spidev";
25093 + reg = <1>; /* CE1 */
25094 + #address-cells = <1>;
25095 + #size-cells = <0>;
25096 + spi-max-frequency = <125000000>;
25097 + status = "okay";
25098 + };
25099 +
25100 + spidev2_2: spidev@2 {
25101 + compatible = "spidev";
25102 + reg = <2>; /* CE2 */
25103 + #address-cells = <1>;
25104 + #size-cells = <0>;
25105 + spi-max-frequency = <125000000>;
25106 + status = "okay";
25107 + };
25108 + };
25109 + };
25110 +
25111 + fragment@2 {
25112 + target = <&aux>;
25113 + __overlay__ {
25114 + status = "okay";
25115 + };
25116 + };
25117 +
25118 + __overrides__ {
25119 + cs0_pin = <&spi2_cs_pins>,"brcm,pins:0",
25120 + <&frag1>,"cs-gpios:4";
25121 + cs1_pin = <&spi2_cs_pins>,"brcm,pins:4",
25122 + <&frag1>,"cs-gpios:16";
25123 + cs2_pin = <&spi2_cs_pins>,"brcm,pins:8",
25124 + <&frag1>,"cs-gpios:28";
25125 + cs0_spidev = <&spidev2_0>,"status";
25126 + cs1_spidev = <&spidev2_1>,"status";
25127 + cs2_spidev = <&spidev2_2>,"status";
25128 + };
25129 +};
25130 diff --git a/arch/arm/boot/dts/overlays/spi3-1cs-overlay.dts b/arch/arm/boot/dts/overlays/spi3-1cs-overlay.dts
25131 new file mode 100644
25132 index 000000000000..335af8637051
25133 --- /dev/null
25134 +++ b/arch/arm/boot/dts/overlays/spi3-1cs-overlay.dts
25135 @@ -0,0 +1,44 @@
25136 +/dts-v1/;
25137 +/plugin/;
25138 +
25139 +
25140 +/ {
25141 + compatible = "brcm,bcm2711";
25142 +
25143 + fragment@0 {
25144 + target = <&spi3_cs_pins>;
25145 + frag0: __overlay__ {
25146 + brcm,pins = <0>;
25147 + brcm,function = <1>; /* output */
25148 + };
25149 + };
25150 +
25151 + fragment@1 {
25152 + target = <&spi3>;
25153 + frag1: __overlay__ {
25154 + /* needed to avoid dtc warning */
25155 + #address-cells = <1>;
25156 + #size-cells = <0>;
25157 +
25158 + pinctrl-names = "default";
25159 + pinctrl-0 = <&spi3_pins &spi3_cs_pins>;
25160 + cs-gpios = <&gpio 0 1>;
25161 + status = "okay";
25162 +
25163 + spidev3_0: spidev@0 {
25164 + compatible = "spidev";
25165 + reg = <0>; /* CE0 */
25166 + #address-cells = <1>;
25167 + #size-cells = <0>;
25168 + spi-max-frequency = <125000000>;
25169 + status = "okay";
25170 + };
25171 + };
25172 + };
25173 +
25174 + __overrides__ {
25175 + cs0_pin = <&frag0>,"brcm,pins:0",
25176 + <&frag1>,"cs-gpios:4";
25177 + cs0_spidev = <&spidev3_0>,"status";
25178 + };
25179 +};
25180 diff --git a/arch/arm/boot/dts/overlays/spi3-2cs-overlay.dts b/arch/arm/boot/dts/overlays/spi3-2cs-overlay.dts
25181 new file mode 100644
25182 index 000000000000..ce65da27f767
25183 --- /dev/null
25184 +++ b/arch/arm/boot/dts/overlays/spi3-2cs-overlay.dts
25185 @@ -0,0 +1,56 @@
25186 +/dts-v1/;
25187 +/plugin/;
25188 +
25189 +
25190 +/ {
25191 + compatible = "brcm,bcm2711";
25192 +
25193 + fragment@0 {
25194 + target = <&spi3_cs_pins>;
25195 + frag0: __overlay__ {
25196 + brcm,pins = <0 24>;
25197 + brcm,function = <1>; /* output */
25198 + };
25199 + };
25200 +
25201 + fragment@1 {
25202 + target = <&spi3>;
25203 + frag1: __overlay__ {
25204 + /* needed to avoid dtc warning */
25205 + #address-cells = <1>;
25206 + #size-cells = <0>;
25207 +
25208 + pinctrl-names = "default";
25209 + pinctrl-0 = <&spi3_pins &spi3_cs_pins>;
25210 + cs-gpios = <&gpio 0 1>, <&gpio 24 1>;
25211 + status = "okay";
25212 +
25213 + spidev3_0: spidev@0 {
25214 + compatible = "spidev";
25215 + reg = <0>; /* CE0 */
25216 + #address-cells = <1>;
25217 + #size-cells = <0>;
25218 + spi-max-frequency = <125000000>;
25219 + status = "okay";
25220 + };
25221 +
25222 + spidev3_1: spidev@1 {
25223 + compatible = "spidev";
25224 + reg = <1>; /* CE1 */
25225 + #address-cells = <1>;
25226 + #size-cells = <0>;
25227 + spi-max-frequency = <125000000>;
25228 + status = "okay";
25229 + };
25230 + };
25231 + };
25232 +
25233 + __overrides__ {
25234 + cs0_pin = <&frag0>,"brcm,pins:0",
25235 + <&frag1>,"cs-gpios:4";
25236 + cs1_pin = <&frag0>,"brcm,pins:4",
25237 + <&frag1>,"cs-gpios:16";
25238 + cs0_spidev = <&spidev3_0>,"status";
25239 + cs1_spidev = <&spidev3_1>,"status";
25240 + };
25241 +};
25242 diff --git a/arch/arm/boot/dts/overlays/spi4-1cs-overlay.dts b/arch/arm/boot/dts/overlays/spi4-1cs-overlay.dts
25243 new file mode 100644
25244 index 000000000000..85d70b40352b
25245 --- /dev/null
25246 +++ b/arch/arm/boot/dts/overlays/spi4-1cs-overlay.dts
25247 @@ -0,0 +1,44 @@
25248 +/dts-v1/;
25249 +/plugin/;
25250 +
25251 +
25252 +/ {
25253 + compatible = "brcm,bcm2711";
25254 +
25255 + fragment@0 {
25256 + target = <&spi4_cs_pins>;
25257 + frag0: __overlay__ {
25258 + brcm,pins = <4>;
25259 + brcm,function = <1>; /* output */
25260 + };
25261 + };
25262 +
25263 + fragment@1 {
25264 + target = <&spi4>;
25265 + frag1: __overlay__ {
25266 + /* needed to avoid dtc warning */
25267 + #address-cells = <1>;
25268 + #size-cells = <0>;
25269 +
25270 + pinctrl-names = "default";
25271 + pinctrl-0 = <&spi4_pins &spi4_cs_pins>;
25272 + cs-gpios = <&gpio 4 1>;
25273 + status = "okay";
25274 +
25275 + spidev4_0: spidev@0 {
25276 + compatible = "spidev";
25277 + reg = <0>; /* CE0 */
25278 + #address-cells = <1>;
25279 + #size-cells = <0>;
25280 + spi-max-frequency = <125000000>;
25281 + status = "okay";
25282 + };
25283 + };
25284 + };
25285 +
25286 + __overrides__ {
25287 + cs0_pin = <&frag0>,"brcm,pins:0",
25288 + <&frag1>,"cs-gpios:4";
25289 + cs0_spidev = <&spidev4_0>,"status";
25290 + };
25291 +};
25292 diff --git a/arch/arm/boot/dts/overlays/spi4-2cs-overlay.dts b/arch/arm/boot/dts/overlays/spi4-2cs-overlay.dts
25293 new file mode 100644
25294 index 000000000000..8bc2215a6a7e
25295 --- /dev/null
25296 +++ b/arch/arm/boot/dts/overlays/spi4-2cs-overlay.dts
25297 @@ -0,0 +1,56 @@
25298 +/dts-v1/;
25299 +/plugin/;
25300 +
25301 +
25302 +/ {
25303 + compatible = "brcm,bcm2711";
25304 +
25305 + fragment@0 {
25306 + target = <&spi4_cs_pins>;
25307 + frag0: __overlay__ {
25308 + brcm,pins = <4 25>;
25309 + brcm,function = <1>; /* output */
25310 + };
25311 + };
25312 +
25313 + fragment@1 {
25314 + target = <&spi4>;
25315 + frag1: __overlay__ {
25316 + /* needed to avoid dtc warning */
25317 + #address-cells = <1>;
25318 + #size-cells = <0>;
25319 +
25320 + pinctrl-names = "default";
25321 + pinctrl-0 = <&spi4_pins &spi4_cs_pins>;
25322 + cs-gpios = <&gpio 4 1>, <&gpio 25 1>;
25323 + status = "okay";
25324 +
25325 + spidev4_0: spidev@0 {
25326 + compatible = "spidev";
25327 + reg = <0>; /* CE0 */
25328 + #address-cells = <1>;
25329 + #size-cells = <0>;
25330 + spi-max-frequency = <125000000>;
25331 + status = "okay";
25332 + };
25333 +
25334 + spidev4_1: spidev@1 {
25335 + compatible = "spidev";
25336 + reg = <1>; /* CE1 */
25337 + #address-cells = <1>;
25338 + #size-cells = <0>;
25339 + spi-max-frequency = <125000000>;
25340 + status = "okay";
25341 + };
25342 + };
25343 + };
25344 +
25345 + __overrides__ {
25346 + cs0_pin = <&frag0>,"brcm,pins:0",
25347 + <&frag1>,"cs-gpios:4";
25348 + cs1_pin = <&frag0>,"brcm,pins:4",
25349 + <&frag1>,"cs-gpios:16";
25350 + cs0_spidev = <&spidev4_0>,"status";
25351 + cs1_spidev = <&spidev4_1>,"status";
25352 + };
25353 +};
25354 diff --git a/arch/arm/boot/dts/overlays/spi5-1cs-overlay.dts b/arch/arm/boot/dts/overlays/spi5-1cs-overlay.dts
25355 new file mode 100644
25356 index 000000000000..c0f8cb8510ee
25357 --- /dev/null
25358 +++ b/arch/arm/boot/dts/overlays/spi5-1cs-overlay.dts
25359 @@ -0,0 +1,44 @@
25360 +/dts-v1/;
25361 +/plugin/;
25362 +
25363 +
25364 +/ {
25365 + compatible = "brcm,bcm2711";
25366 +
25367 + fragment@0 {
25368 + target = <&spi5_cs_pins>;
25369 + frag0: __overlay__ {
25370 + brcm,pins = <12>;
25371 + brcm,function = <1>; /* output */
25372 + };
25373 + };
25374 +
25375 + fragment@1 {
25376 + target = <&spi5>;
25377 + frag1: __overlay__ {
25378 + /* needed to avoid dtc warning */
25379 + #address-cells = <1>;
25380 + #size-cells = <0>;
25381 +
25382 + pinctrl-names = "default";
25383 + pinctrl-0 = <&spi5_pins &spi5_cs_pins>;
25384 + cs-gpios = <&gpio 12 1>;
25385 + status = "okay";
25386 +
25387 + spidev5_0: spidev@0 {
25388 + compatible = "spidev";
25389 + reg = <0>; /* CE0 */
25390 + #address-cells = <1>;
25391 + #size-cells = <0>;
25392 + spi-max-frequency = <125000000>;
25393 + status = "okay";
25394 + };
25395 + };
25396 + };
25397 +
25398 + __overrides__ {
25399 + cs0_pin = <&frag0>,"brcm,pins:0",
25400 + <&frag1>,"cs-gpios:4";
25401 + cs0_spidev = <&spidev5_0>,"status";
25402 + };
25403 +};
25404 diff --git a/arch/arm/boot/dts/overlays/spi5-2cs-overlay.dts b/arch/arm/boot/dts/overlays/spi5-2cs-overlay.dts
25405 new file mode 100644
25406 index 000000000000..7758b9c00b4e
25407 --- /dev/null
25408 +++ b/arch/arm/boot/dts/overlays/spi5-2cs-overlay.dts
25409 @@ -0,0 +1,56 @@
25410 +/dts-v1/;
25411 +/plugin/;
25412 +
25413 +
25414 +/ {
25415 + compatible = "brcm,bcm2711";
25416 +
25417 + fragment@0 {
25418 + target = <&spi5_cs_pins>;
25419 + frag0: __overlay__ {
25420 + brcm,pins = <12 26>;
25421 + brcm,function = <1>; /* output */
25422 + };
25423 + };
25424 +
25425 + fragment@1 {
25426 + target = <&spi5>;
25427 + frag1: __overlay__ {
25428 + /* needed to avoid dtc warning */
25429 + #address-cells = <1>;
25430 + #size-cells = <0>;
25431 +
25432 + pinctrl-names = "default";
25433 + pinctrl-0 = <&spi5_pins &spi5_cs_pins>;
25434 + cs-gpios = <&gpio 12 1>, <&gpio 26 1>;
25435 + status = "okay";
25436 +
25437 + spidev5_0: spidev@0 {
25438 + compatible = "spidev";
25439 + reg = <0>; /* CE0 */
25440 + #address-cells = <1>;
25441 + #size-cells = <0>;
25442 + spi-max-frequency = <125000000>;
25443 + status = "okay";
25444 + };
25445 +
25446 + spidev5_1: spidev@1 {
25447 + compatible = "spidev";
25448 + reg = <1>; /* CE1 */
25449 + #address-cells = <1>;
25450 + #size-cells = <0>;
25451 + spi-max-frequency = <125000000>;
25452 + status = "okay";
25453 + };
25454 + };
25455 + };
25456 +
25457 + __overrides__ {
25458 + cs0_pin = <&frag0>,"brcm,pins:0",
25459 + <&frag1>,"cs-gpios:4";
25460 + cs1_pin = <&frag0>,"brcm,pins:4",
25461 + <&frag1>,"cs-gpios:16";
25462 + cs0_spidev = <&spidev5_0>,"status";
25463 + cs1_spidev = <&spidev5_1>,"status";
25464 + };
25465 +};
25466 diff --git a/arch/arm/boot/dts/overlays/spi6-1cs-overlay.dts b/arch/arm/boot/dts/overlays/spi6-1cs-overlay.dts
25467 new file mode 100644
25468 index 000000000000..8c8a953eca01
25469 --- /dev/null
25470 +++ b/arch/arm/boot/dts/overlays/spi6-1cs-overlay.dts
25471 @@ -0,0 +1,44 @@
25472 +/dts-v1/;
25473 +/plugin/;
25474 +
25475 +
25476 +/ {
25477 + compatible = "brcm,bcm2711";
25478 +
25479 + fragment@0 {
25480 + target = <&spi6_cs_pins>;
25481 + frag0: __overlay__ {
25482 + brcm,pins = <18>;
25483 + brcm,function = <1>; /* output */
25484 + };
25485 + };
25486 +
25487 + fragment@1 {
25488 + target = <&spi6>;
25489 + frag1: __overlay__ {
25490 + /* needed to avoid dtc warning */
25491 + #address-cells = <1>;
25492 + #size-cells = <0>;
25493 +
25494 + pinctrl-names = "default";
25495 + pinctrl-0 = <&spi6_pins &spi6_cs_pins>;
25496 + cs-gpios = <&gpio 18 1>;
25497 + status = "okay";
25498 +
25499 + spidev6_0: spidev@0 {
25500 + compatible = "spidev";
25501 + reg = <0>; /* CE0 */
25502 + #address-cells = <1>;
25503 + #size-cells = <0>;
25504 + spi-max-frequency = <125000000>;
25505 + status = "okay";
25506 + };
25507 + };
25508 + };
25509 +
25510 + __overrides__ {
25511 + cs0_pin = <&frag0>,"brcm,pins:0",
25512 + <&frag1>,"cs-gpios:4";
25513 + cs0_spidev = <&spidev6_0>,"status";
25514 + };
25515 +};
25516 diff --git a/arch/arm/boot/dts/overlays/spi6-2cs-overlay.dts b/arch/arm/boot/dts/overlays/spi6-2cs-overlay.dts
25517 new file mode 100644
25518 index 000000000000..2ff897f21aed
25519 --- /dev/null
25520 +++ b/arch/arm/boot/dts/overlays/spi6-2cs-overlay.dts
25521 @@ -0,0 +1,56 @@
25522 +/dts-v1/;
25523 +/plugin/;
25524 +
25525 +
25526 +/ {
25527 + compatible = "brcm,bcm2711";
25528 +
25529 + fragment@0 {
25530 + target = <&spi6_cs_pins>;
25531 + frag0: __overlay__ {
25532 + brcm,pins = <18 27>;
25533 + brcm,function = <1>; /* output */
25534 + };
25535 + };
25536 +
25537 + fragment@1 {
25538 + target = <&spi6>;
25539 + frag1: __overlay__ {
25540 + /* needed to avoid dtc warning */
25541 + #address-cells = <1>;
25542 + #size-cells = <0>;
25543 +
25544 + pinctrl-names = "default";
25545 + pinctrl-0 = <&spi6_pins &spi6_cs_pins>;
25546 + cs-gpios = <&gpio 18 1>, <&gpio 27 1>;
25547 + status = "okay";
25548 +
25549 + spidev6_0: spidev@0 {
25550 + compatible = "spidev";
25551 + reg = <0>; /* CE0 */
25552 + #address-cells = <1>;
25553 + #size-cells = <0>;
25554 + spi-max-frequency = <125000000>;
25555 + status = "okay";
25556 + };
25557 +
25558 + spidev6_1: spidev@1 {
25559 + compatible = "spidev";
25560 + reg = <1>; /* CE1 */
25561 + #address-cells = <1>;
25562 + #size-cells = <0>;
25563 + spi-max-frequency = <125000000>;
25564 + status = "okay";
25565 + };
25566 + };
25567 + };
25568 +
25569 + __overrides__ {
25570 + cs0_pin = <&frag0>,"brcm,pins:0",
25571 + <&frag1>,"cs-gpios:4";
25572 + cs1_pin = <&frag0>,"brcm,pins:4",
25573 + <&frag1>,"cs-gpios:16";
25574 + cs0_spidev = <&spidev6_0>,"status";
25575 + cs1_spidev = <&spidev6_1>,"status";
25576 + };
25577 +};
25578 diff --git a/arch/arm/boot/dts/overlays/ssd1306-overlay.dts b/arch/arm/boot/dts/overlays/ssd1306-overlay.dts
25579 new file mode 100644
25580 index 000000000000..84cf10e489d3
25581 --- /dev/null
25582 +++ b/arch/arm/boot/dts/overlays/ssd1306-overlay.dts
25583 @@ -0,0 +1,36 @@
25584 +// Overlay for SSD1306 128x64 and 128x32 OLED displays
25585 +/dts-v1/;
25586 +/plugin/;
25587 +
25588 +/ {
25589 + compatible = "brcm,bcm2835";
25590 +
25591 + fragment@0 {
25592 + target = <&i2c1>;
25593 + __overlay__ {
25594 + status = "okay";
25595 +
25596 + #address-cells = <1>;
25597 + #size-cells = <0>;
25598 +
25599 + ssd1306: oled@3c{
25600 + compatible = "solomon,ssd1306fb-i2c";
25601 + reg = <0x3c>;
25602 + solomon,width = <128>;
25603 + solomon,height = <64>;
25604 + solomon,page-offset = <0>;
25605 + };
25606 + };
25607 + };
25608 +
25609 + __overrides__ {
25610 + address = <&ssd1306>,"reg:0";
25611 + width = <&ssd1306>,"solomon,width:0";
25612 + height = <&ssd1306>,"solomon,height:0";
25613 + offset = <&ssd1306>,"solomon,page-offset:0";
25614 + normal = <&ssd1306>,"solomon,segment-no-remap?";
25615 + sequential = <&ssd1306>,"solomon,com-seq?";
25616 + remapped = <&ssd1306>,"solomon,com-lrremap?";
25617 + inverted = <&ssd1306>,"solomon,com-invdir?";
25618 + };
25619 +};
25620 diff --git a/arch/arm/boot/dts/overlays/ssd1306-spi-overlay.dts b/arch/arm/boot/dts/overlays/ssd1306-spi-overlay.dts
25621 new file mode 100644
25622 index 000000000000..ffc90c7cecf6
25623 --- /dev/null
25624 +++ b/arch/arm/boot/dts/overlays/ssd1306-spi-overlay.dts
25625 @@ -0,0 +1,84 @@
25626 +/*
25627 + * Device Tree overlay for SSD1306 based SPI OLED display
25628 + *
25629 + */
25630 +
25631 +/dts-v1/;
25632 +/plugin/;
25633 +
25634 +/ {
25635 + compatible = "brcm,bcm2835";
25636 +
25637 + fragment@0 {
25638 + target = <&spi0>;
25639 + __overlay__ {
25640 + status = "okay";
25641 + };
25642 + };
25643 +
25644 + fragment@1 {
25645 + target = <&spidev0>;
25646 + __overlay__ {
25647 + status = "disabled";
25648 + };
25649 + };
25650 +
25651 + fragment@2 {
25652 + target = <&spidev1>;
25653 + __overlay__ {
25654 + status = "disabled";
25655 + };
25656 + };
25657 +
25658 + fragment@3 {
25659 + target = <&gpio>;
25660 + __overlay__ {
25661 + ssd1306_pins: ssd1306_pins {
25662 + brcm,pins = <25 24>;
25663 + brcm,function = <1 1>; /* out out */
25664 + };
25665 + };
25666 + };
25667 +
25668 + fragment@4 {
25669 + target = <&spi0>;
25670 + __overlay__ {
25671 + /* needed to avoid dtc warning */
25672 + #address-cells = <1>;
25673 + #size-cells = <0>;
25674 +
25675 + ssd1306: ssd1306@0{
25676 + compatible = "solomon,ssd1306";
25677 + reg = <0>;
25678 + pinctrl-names = "default";
25679 + pinctrl-0 = <&ssd1306_pins>;
25680 +
25681 + spi-max-frequency = <10000000>;
25682 + bgr = <0>;
25683 + bpp = <1>;
25684 + rotate = <0>;
25685 + fps = <25>;
25686 + buswidth = <8>;
25687 + reset-gpios = <&gpio 25 1>;
25688 + dc-gpios = <&gpio 24 0>;
25689 + debug = <0>;
25690 +
25691 + solomon,height = <64>;
25692 + solomon,width = <128>;
25693 + solomon,page-offset = <0>;
25694 + };
25695 + };
25696 + };
25697 +
25698 + __overrides__ {
25699 + speed = <&ssd1306>,"spi-max-frequency:0";
25700 + rotate = <&ssd1306>,"rotate:0";
25701 + fps = <&ssd1306>,"fps:0";
25702 + debug = <&ssd1306>,"debug:0";
25703 + dc_pin = <&ssd1306>,"dc-gpios:4",
25704 + <&ssd1306_pins>,"brcm,pins:4";
25705 + reset_pin = <&ssd1306>,"reset-gpios:4",
25706 + <&ssd1306_pins>,"brcm,pins:0";
25707 + height = <&ssd1306>,"solomon,height:0";
25708 + };
25709 +};
25710 diff --git a/arch/arm/boot/dts/overlays/ssd1331-spi-overlay.dts b/arch/arm/boot/dts/overlays/ssd1331-spi-overlay.dts
25711 new file mode 100644
25712 index 000000000000..9fd5ebf2feda
25713 --- /dev/null
25714 +++ b/arch/arm/boot/dts/overlays/ssd1331-spi-overlay.dts
25715 @@ -0,0 +1,83 @@
25716 +/*
25717 + * Device Tree overlay for SSD1331 based SPI OLED display
25718 + *
25719 + */
25720 +
25721 +/dts-v1/;
25722 +/plugin/;
25723 +
25724 +/ {
25725 + compatible = "brcm,bcm2835";
25726 +
25727 + fragment@0 {
25728 + target = <&spi0>;
25729 + __overlay__ {
25730 + status = "okay";
25731 + };
25732 + };
25733 +
25734 + fragment@1 {
25735 + target = <&spidev0>;
25736 + __overlay__ {
25737 + status = "disabled";
25738 + };
25739 + };
25740 +
25741 + fragment@2 {
25742 + target = <&spidev1>;
25743 + __overlay__ {
25744 + status = "disabled";
25745 + };
25746 + };
25747 +
25748 + fragment@3 {
25749 + target = <&gpio>;
25750 + __overlay__ {
25751 + ssd1331_pins: ssd1331_pins {
25752 + brcm,pins = <25 24>;
25753 + brcm,function = <1 1>; /* out out */
25754 + };
25755 + };
25756 + };
25757 +
25758 + fragment@4 {
25759 + target = <&spi0>;
25760 + __overlay__ {
25761 + /* needed to avoid dtc warning */
25762 + #address-cells = <1>;
25763 + #size-cells = <0>;
25764 +
25765 + ssd1331: ssd1331@0{
25766 + compatible = "solomon,ssd1331";
25767 + reg = <0>;
25768 + pinctrl-names = "default";
25769 + pinctrl-0 = <&ssd1331_pins>;
25770 +
25771 + spi-max-frequency = <4500000>;
25772 + bgr = <0>;
25773 + bpp = <16>;
25774 + rotate = <0>;
25775 + fps = <25>;
25776 + buswidth = <8>;
25777 + reset-gpios = <&gpio 25 1>;
25778 + dc-gpios = <&gpio 24 0>;
25779 + debug = <0>;
25780 +
25781 + solomon,height = <64>;
25782 + solomon,width = <96>;
25783 + solomon,page-offset = <0>;
25784 + };
25785 + };
25786 + };
25787 +
25788 + __overrides__ {
25789 + speed = <&ssd1331>,"spi-max-frequency:0";
25790 + rotate = <&ssd1331>,"rotate:0";
25791 + fps = <&ssd1331>,"fps:0";
25792 + debug = <&ssd1331>,"debug:0";
25793 + dc_pin = <&ssd1331>,"dc-gpios:4",
25794 + <&ssd1331_pins>,"brcm,pins:4";
25795 + reset_pin = <&ssd1331>,"reset-gpios:4",
25796 + <&ssd1331_pins>,"brcm,pins:0";
25797 + };
25798 +};
25799 diff --git a/arch/arm/boot/dts/overlays/ssd1351-spi-overlay.dts b/arch/arm/boot/dts/overlays/ssd1351-spi-overlay.dts
25800 new file mode 100644
25801 index 000000000000..ffc872c60648
25802 --- /dev/null
25803 +++ b/arch/arm/boot/dts/overlays/ssd1351-spi-overlay.dts
25804 @@ -0,0 +1,83 @@
25805 +/*
25806 + * Device Tree overlay for SSD1351 based SPI OLED display
25807 + *
25808 + */
25809 +
25810 +/dts-v1/;
25811 +/plugin/;
25812 +
25813 +/ {
25814 + compatible = "brcm,bcm2835";
25815 +
25816 + fragment@0 {
25817 + target = <&spi0>;
25818 + __overlay__ {
25819 + status = "okay";
25820 + };
25821 + };
25822 +
25823 + fragment@1 {
25824 + target = <&spidev0>;
25825 + __overlay__ {
25826 + status = "disabled";
25827 + };
25828 + };
25829 +
25830 + fragment@2 {
25831 + target = <&spidev1>;
25832 + __overlay__ {
25833 + status = "disabled";
25834 + };
25835 + };
25836 +
25837 + fragment@3 {
25838 + target = <&gpio>;
25839 + __overlay__ {
25840 + ssd1351_pins: ssd1351_pins {
25841 + brcm,pins = <25 24>;
25842 + brcm,function = <1 1>; /* out out */
25843 + };
25844 + };
25845 + };
25846 +
25847 + fragment@4 {
25848 + target = <&spi0>;
25849 + __overlay__ {
25850 + /* needed to avoid dtc warning */
25851 + #address-cells = <1>;
25852 + #size-cells = <0>;
25853 +
25854 + ssd1351: ssd1351@0{
25855 + compatible = "solomon,ssd1351";
25856 + reg = <0>;
25857 + pinctrl-names = "default";
25858 + pinctrl-0 = <&ssd1351_pins>;
25859 +
25860 + spi-max-frequency = <4500000>;
25861 + bgr = <0>;
25862 + bpp = <16>;
25863 + rotate = <0>;
25864 + fps = <25>;
25865 + buswidth = <8>;
25866 + reset-gpios = <&gpio 25 1>;
25867 + dc-gpios = <&gpio 24 0>;
25868 + debug = <0>;
25869 +
25870 + solomon,height = <128>;
25871 + solomon,width = <128>;
25872 + solomon,page-offset = <0>;
25873 + };
25874 + };
25875 + };
25876 +
25877 + __overrides__ {
25878 + speed = <&ssd1351>,"spi-max-frequency:0";
25879 + rotate = <&ssd1351>,"rotate:0";
25880 + fps = <&ssd1351>,"fps:0";
25881 + debug = <&ssd1351>,"debug:0";
25882 + dc_pin = <&ssd1351>,"dc-gpios:4",
25883 + <&ssd1351_pins>,"brcm,pins:4";
25884 + reset_pin = <&ssd1351>,"reset-gpios:4",
25885 + <&ssd1351_pins>,"brcm,pins:0";
25886 + };
25887 +};
25888 diff --git a/arch/arm/boot/dts/overlays/superaudioboard-overlay.dts b/arch/arm/boot/dts/overlays/superaudioboard-overlay.dts
25889 new file mode 100755
25890 index 000000000000..bad61535981e
25891 --- /dev/null
25892 +++ b/arch/arm/boot/dts/overlays/superaudioboard-overlay.dts
25893 @@ -0,0 +1,73 @@
25894 +// Definitions for SuperAudioBoard
25895 +/dts-v1/;
25896 +/plugin/;
25897 +
25898 +/ {
25899 + compatible = "brcm,bcm2835";
25900 +
25901 + fragment@0 {
25902 + target = <&sound>;
25903 + __overlay__ {
25904 + compatible = "simple-audio-card";
25905 + i2s-controller = <&i2s>;
25906 + status = "okay";
25907 +
25908 + simple-audio-card,name = "SuperAudioBoard";
25909 +
25910 + simple-audio-card,widgets =
25911 + "Line", "Line In",
25912 + "Line", "Line Out";
25913 +
25914 + simple-audio-card,routing =
25915 + "Line Out","AOUTA+",
25916 + "Line Out","AOUTA-",
25917 + "Line Out","AOUTB+",
25918 + "Line Out","AOUTB-",
25919 + "AINA","Line In",
25920 + "AINB","Line In";
25921 +
25922 + simple-audio-card,format = "i2s";
25923 +
25924 + simple-audio-card,bitclock-master = <&sound_master>;
25925 + simple-audio-card,frame-master = <&sound_master>;
25926 +
25927 + simple-audio-card,cpu {
25928 + sound-dai = <&i2s>;
25929 + dai-tdm-slot-num = <2>;
25930 + dai-tdm-slot-width = <32>;
25931 + };
25932 +
25933 + sound_master: simple-audio-card,codec {
25934 + sound-dai = <&cs4271>;
25935 + system-clock-frequency = <24576000>;
25936 + };
25937 + };
25938 + };
25939 +
25940 + fragment@1 {
25941 + target = <&i2s>;
25942 + __overlay__ {
25943 + status = "okay";
25944 + };
25945 + };
25946 +
25947 + fragment@2 {
25948 + target = <&i2c1>;
25949 + __overlay__ {
25950 + #address-cells = <1>;
25951 + #size-cells = <0>;
25952 + status = "okay";
25953 +
25954 + cs4271: cs4271@10 {
25955 + #sound-dai-cells = <0>;
25956 + compatible = "cirrus,cs4271";
25957 + reg = <0x10>;
25958 + status = "okay";
25959 + reset-gpio = <&gpio 26 0>; /* Pin 26, active high */
25960 + };
25961 + };
25962 + };
25963 + __overrides__ {
25964 + gpiopin = <&cs4271>,"reset-gpio:4";
25965 + };
25966 +};
25967 diff --git a/arch/arm/boot/dts/overlays/sx150x-overlay.dts b/arch/arm/boot/dts/overlays/sx150x-overlay.dts
25968 new file mode 100644
25969 index 000000000000..1d1069345da2
25970 --- /dev/null
25971 +++ b/arch/arm/boot/dts/overlays/sx150x-overlay.dts
25972 @@ -0,0 +1,1706 @@
25973 +// Definitions for SX150x I2C GPIO Expanders from Semtech
25974 +
25975 +// dtparams:
25976 +// sx150<x>-<n>-<m> - Enables SX150X device on I2C#<n> with slave address <m>. <x> may be 1-9.
25977 +// <n> may be 0 or 1. Permissible values of <m> (which is denoted in hex)
25978 +// depend on the device variant.
25979 +// For SX1501, SX1502, SX1504 and SX1505, <m> may be 20 or 21.
25980 +// For SX1503 and SX1506, <m> may be 20.
25981 +// For SX1507 and SX1509, <m> may be 3E, 3F, 70 or 71.
25982 +// For SX1508, <m> may be 20, 21, 22 or 23.
25983 +// sx150<x>-<n>-<m>-int-gpio - Integer, enables interrupts on SX150X device on I2C#<n> with slave address <m>,
25984 +// specifies the GPIO pin to which NINT output of SX150X is connected.
25985 +//
25986 +//
25987 +// Example 1: A single SX1505 device on I2C#1 with its slave address set to 0x20 and NINT output connected to GPIO25:
25988 +// dtoverlay=sx150x:sx1505-1-20,sx1505-1-20-int-gpio=25
25989 +//
25990 +// Example 2: Two SX1507 devices on I2C#0 with their slave addresses set to 0x3E and 0x70 (interrupts not used):
25991 +// dtoverlay=sx150x:sx1507-0-3E,sx1507-0-70
25992 +
25993 +/dts-v1/;
25994 +/plugin/;
25995 +
25996 +/ {
25997 + compatible = "brcm,bcm2835";
25998 +
25999 + // Enable I2C#0 interface
26000 + fragment@0 {
26001 + target = <&i2c0>;
26002 + __dormant__ {
26003 + status = "okay";
26004 + };
26005 + };
26006 +
26007 + // Enable I2C#1 interface
26008 + fragment@1 {
26009 + target = <&i2c1>;
26010 + __dormant__ {
26011 + status = "okay";
26012 + };
26013 + };
26014 +
26015 + // Enable a SX1501 on I2C#0 at slave addr 0x20
26016 + fragment@2 {
26017 + target = <&i2c0>;
26018 + __dormant__ {
26019 + #address-cells = <1>;
26020 + #size-cells = <0>;
26021 +
26022 + sx1501_0_20: sx150x@20 {
26023 + compatible = "semtech,sx1501q";
26024 + reg = <0x20>;
26025 + gpio-controller;
26026 + #gpio-cells = <2>;
26027 + #interrupt-cells = <2>;
26028 + interrupts = <25 2>; /* 1st word overwritten by sx1501-0-20-int-gpio parameter
26029 + 2nd word is 2 for falling-edge triggered */
26030 + status = "okay";
26031 + };
26032 + };
26033 + };
26034 +
26035 + // Enable a SX1501 on I2C#1 at slave addr 0x20
26036 + fragment@3 {
26037 + target = <&i2c1>;
26038 + __dormant__ {
26039 + #address-cells = <1>;
26040 + #size-cells = <0>;
26041 +
26042 + sx1501_1_20: sx150x@20 {
26043 + compatible = "semtech,sx1501q";
26044 + reg = <0x20>;
26045 + gpio-controller;
26046 + #gpio-cells = <2>;
26047 + #interrupt-cells = <2>;
26048 + interrupts = <25 2>; /* 1st word overwritten by sx1501-1-20-int-gpio parameter
26049 + 2nd word is 2 for falling-edge triggered */
26050 + status = "okay";
26051 + };
26052 + };
26053 + };
26054 +
26055 + // Enable a SX1501 on I2C#0 at slave addr 0x21
26056 + fragment@4 {
26057 + target = <&i2c0>;
26058 + __dormant__ {
26059 + #address-cells = <1>;
26060 + #size-cells = <0>;
26061 +
26062 + sx1501_0_21: sx150x@21 {
26063 + compatible = "semtech,sx1501q";
26064 + reg = <0x21>;
26065 + gpio-controller;
26066 + #gpio-cells = <2>;
26067 + #interrupt-cells = <2>;
26068 + interrupts = <25 2>; /* 1st word overwritten by sx1501-0-21-int-gpio parameter
26069 + 2nd word is 2 for falling-edge triggered */
26070 + status = "okay";
26071 + };
26072 + };
26073 + };
26074 +
26075 + // Enable a SX1501 on I2C#1 at slave addr 0x21
26076 + fragment@5 {
26077 + target = <&i2c1>;
26078 + __dormant__ {
26079 + #address-cells = <1>;
26080 + #size-cells = <0>;
26081 +
26082 + sx1501_1_21: sx150x@21 {
26083 + compatible = "semtech,sx1501q";
26084 + reg = <0x21>;
26085 + gpio-controller;
26086 + #gpio-cells = <2>;
26087 + #interrupt-cells = <2>;
26088 + interrupts = <25 2>; /* 1st word overwritten by sx1501-1-21-int-gpio parameter
26089 + 2nd word is 2 for falling-edge triggered */
26090 + status = "okay";
26091 + };
26092 + };
26093 + };
26094 +
26095 + // Enable a SX1502 on I2C#0 at slave addr 0x20
26096 + fragment@6 {
26097 + target = <&i2c0>;
26098 + __dormant__ {
26099 + #address-cells = <1>;
26100 + #size-cells = <0>;
26101 +
26102 + sx1502_0_20: sx150x@20 {
26103 + compatible = "semtech,sx1502q";
26104 + reg = <0x20>;
26105 + gpio-controller;
26106 + #gpio-cells = <2>;
26107 + #interrupt-cells = <2>;
26108 + interrupts = <25 2>; /* 1st word overwritten by sx1502-0-20-int-gpio parameter
26109 + 2nd word is 2 for falling-edge triggered */
26110 + status = "okay";
26111 + };
26112 + };
26113 + };
26114 +
26115 + // Enable a SX1502 on I2C#1 at slave addr 0x20
26116 + fragment@7 {
26117 + target = <&i2c1>;
26118 + __dormant__ {
26119 + #address-cells = <1>;
26120 + #size-cells = <0>;
26121 +
26122 + sx1502_1_20: sx150x@20 {
26123 + compatible = "semtech,sx1502q";
26124 + reg = <0x20>;
26125 + gpio-controller;
26126 + #gpio-cells = <2>;
26127 + #interrupt-cells = <2>;
26128 + interrupts = <25 2>; /* 1st word overwritten by sx1502-1-20-int-gpio parameter
26129 + 2nd word is 2 for falling-edge triggered */
26130 + status = "okay";
26131 + };
26132 + };
26133 + };
26134 +
26135 + // Enable a SX1502 on I2C#0 at slave addr 0x21
26136 + fragment@8 {
26137 + target = <&i2c0>;
26138 + __dormant__ {
26139 + #address-cells = <1>;
26140 + #size-cells = <0>;
26141 +
26142 + sx1502_0_21: sx150x@21 {
26143 + compatible = "semtech,sx1502q";
26144 + reg = <0x21>;
26145 + gpio-controller;
26146 + #gpio-cells = <2>;
26147 + #interrupt-cells = <2>;
26148 + interrupts = <25 2>; /* 1st word overwritten by sx1502-0-21-int-gpio parameter
26149 + 2nd word is 2 for falling-edge triggered */
26150 + status = "okay";
26151 + };
26152 + };
26153 + };
26154 +
26155 + // Enable a SX1502 on I2C#1 at slave addr 0x21
26156 + fragment@9 {
26157 + target = <&i2c1>;
26158 + __dormant__ {
26159 + #address-cells = <1>;
26160 + #size-cells = <0>;
26161 +
26162 + sx1502_1_21: sx150x@21 {
26163 + compatible = "semtech,sx1502q";
26164 + reg = <0x21>;
26165 + gpio-controller;
26166 + #gpio-cells = <2>;
26167 + #interrupt-cells = <2>;
26168 + interrupts = <25 2>; /* 1st word overwritten by sx1501-1-21-int-gpio parameter
26169 + 2nd word is 2 for falling-edge triggered */
26170 + status = "okay";
26171 + };
26172 + };
26173 + };
26174 +
26175 + // Enable a SX1503 on I2C#0 at slave addr 0x20
26176 + fragment@10 {
26177 + target = <&i2c0>;
26178 + __dormant__ {
26179 + #address-cells = <1>;
26180 + #size-cells = <0>;
26181 +
26182 + sx1503_0_20: sx150x@20 {
26183 + compatible = "semtech,sx1503q";
26184 + reg = <0x20>;
26185 + gpio-controller;
26186 + #gpio-cells = <2>;
26187 + #interrupt-cells = <2>;
26188 + interrupts = <25 2>; /* 1st word overwritten by sx1503-0-20-int-gpio parameter
26189 + 2nd word is 2 for falling-edge triggered */
26190 + status = "okay";
26191 + };
26192 + };
26193 + };
26194 +
26195 + // Enable a SX1503 on I2C#1 at slave addr 0x20
26196 + fragment@11 {
26197 + target = <&i2c1>;
26198 + __dormant__ {
26199 + #address-cells = <1>;
26200 + #size-cells = <0>;
26201 +
26202 + sx1503_1_20: sx150x@20 {
26203 + compatible = "semtech,sx1503q";
26204 + reg = <0x20>;
26205 + gpio-controller;
26206 + #gpio-cells = <2>;
26207 + #interrupt-cells = <2>;
26208 + interrupts = <25 2>; /* 1st word overwritten by sx1503-1-20-int-gpio parameter
26209 + 2nd word is 2 for falling-edge triggered */
26210 + status = "okay";
26211 + };
26212 + };
26213 + };
26214 +
26215 + // Enable a SX1504 on I2C#0 at slave addr 0x20
26216 + fragment@12 {
26217 + target = <&i2c0>;
26218 + __dormant__ {
26219 + #address-cells = <1>;
26220 + #size-cells = <0>;
26221 +
26222 + sx1504_0_20: sx150x@20 {
26223 + compatible = "semtech,sx1504q";
26224 + reg = <0x20>;
26225 + gpio-controller;
26226 + #gpio-cells = <2>;
26227 + #interrupt-cells = <2>;
26228 + interrupts = <25 2>; /* 1st word overwritten by sx1504-0-20-int-gpio parameter
26229 + 2nd word is 2 for falling-edge triggered */
26230 + status = "okay";
26231 + };
26232 + };
26233 + };
26234 +
26235 + // Enable a SX1504 on I2C#1 at slave addr 0x20
26236 + fragment@13 {
26237 + target = <&i2c1>;
26238 + __dormant__ {
26239 + #address-cells = <1>;
26240 + #size-cells = <0>;
26241 +
26242 + sx1504_1_20: sx150x@20 {
26243 + compatible = "semtech,sx1504q";
26244 + reg = <0x20>;
26245 + gpio-controller;
26246 + #gpio-cells = <2>;
26247 + #interrupt-cells = <2>;
26248 + interrupts = <25 2>; /* 1st word overwritten by sx1504-1-20-int-gpio parameter
26249 + 2nd word is 2 for falling-edge triggered */
26250 + status = "okay";
26251 + };
26252 + };
26253 + };
26254 +
26255 + // Enable a SX1504 on I2C#0 at slave addr 0x21
26256 + fragment@14 {
26257 + target = <&i2c0>;
26258 + __dormant__ {
26259 + #address-cells = <1>;
26260 + #size-cells = <0>;
26261 +
26262 + sx1504_0_21: sx150x@21 {
26263 + compatible = "semtech,sx1504q";
26264 + reg = <0x21>;
26265 + gpio-controller;
26266 + #gpio-cells = <2>;
26267 + #interrupt-cells = <2>;
26268 + interrupts = <25 2>; /* 1st word overwritten by sx1504-0-21-int-gpio parameter
26269 + 2nd word is 2 for falling-edge triggered */
26270 + status = "okay";
26271 + };
26272 + };
26273 + };
26274 +
26275 + // Enable a SX1504 on I2C#1 at slave addr 0x21
26276 + fragment@15 {
26277 + target = <&i2c1>;
26278 + __dormant__ {
26279 + #address-cells = <1>;
26280 + #size-cells = <0>;
26281 +
26282 + sx1504_1_21: sx150x@21 {
26283 + compatible = "semtech,sx1504q";
26284 + reg = <0x21>;
26285 + gpio-controller;
26286 + #gpio-cells = <2>;
26287 + #interrupt-cells = <2>;
26288 + interrupts = <25 2>; /* 1st word overwritten by sx1504-1-20-int-gpio parameter
26289 + 2nd word is 2 for falling-edge triggered */
26290 + status = "okay";
26291 + };
26292 + };
26293 + };
26294 +
26295 + // Enable a SX1505 on I2C#0 at slave addr 0x20
26296 + fragment@16 {
26297 + target = <&i2c0>;
26298 + __dormant__ {
26299 + #address-cells = <1>;
26300 + #size-cells = <0>;
26301 +
26302 + sx1505_0_20: sx150x@20 {
26303 + compatible = "semtech,sx1505q";
26304 + reg = <0x20>;
26305 + gpio-controller;
26306 + #gpio-cells = <2>;
26307 + #interrupt-cells = <2>;
26308 + interrupts = <25 2>; /* 1st word overwritten by sx1505-0-20-int-gpio parameter
26309 + 2nd word is 2 for falling-edge triggered */
26310 + status = "okay";
26311 + };
26312 + };
26313 + };
26314 +
26315 + // Enable a SX1505 on I2C#1 at slave addr 0x20
26316 + fragment@17 {
26317 + target = <&i2c1>;
26318 + __dormant__ {
26319 + #address-cells = <1>;
26320 + #size-cells = <0>;
26321 +
26322 + sx1505_1_20: sx150x@20 {
26323 + compatible = "semtech,sx1505q";
26324 + reg = <0x20>;
26325 + gpio-controller;
26326 + #gpio-cells = <2>;
26327 + #interrupt-cells = <2>;
26328 + interrupts = <25 2>; /* 1st word overwritten by sx1505-1-20-int-gpio parameter
26329 + 2nd word is 2 for falling-edge triggered */
26330 + status = "okay";
26331 + };
26332 + };
26333 + };
26334 +
26335 + // Enable a SX1505 on I2C#0 at slave addr 0x21
26336 + fragment@18 {
26337 + target = <&i2c0>;
26338 + __dormant__ {
26339 + #address-cells = <1>;
26340 + #size-cells = <0>;
26341 +
26342 + sx1505_0_21: sx150x@21 {
26343 + compatible = "semtech,sx1505q";
26344 + reg = <0x21>;
26345 + gpio-controller;
26346 + #gpio-cells = <2>;
26347 + #interrupt-cells = <2>;
26348 + interrupts = <25 2>; /* 1st word overwritten by sx1505-0-21-int-gpio parameter
26349 + 2nd word is 2 for falling-edge triggered */
26350 + status = "okay";
26351 + };
26352 + };
26353 + };
26354 +
26355 + // Enable a SX1505 on I2C#1 at slave addr 0x21
26356 + fragment@19 {
26357 + target = <&i2c1>;
26358 + __dormant__ {
26359 + #address-cells = <1>;
26360 + #size-cells = <0>;
26361 +
26362 + sx1505_1_21: sx150x@21 {
26363 + compatible = "semtech,sx1505q";
26364 + reg = <0x21>;
26365 + gpio-controller;
26366 + #gpio-cells = <2>;
26367 + #interrupt-cells = <2>;
26368 + interrupts = <25 2>; /* 1st word overwritten by sx1505-1-21-int-gpio parameter
26369 + 2nd word is 2 for falling-edge triggered */
26370 + status = "okay";
26371 + };
26372 + };
26373 + };
26374 +
26375 + // Enable a SX1506 on I2C#0 at slave addr 0x20
26376 + fragment@20 {
26377 + target = <&i2c0>;
26378 + __dormant__ {
26379 + #address-cells = <1>;
26380 + #size-cells = <0>;
26381 +
26382 + sx1506_0_20: sx150x@20 {
26383 + compatible = "semtech,sx1506q";
26384 + reg = <0x20>;
26385 + gpio-controller;
26386 + #gpio-cells = <2>;
26387 + #interrupt-cells = <2>;
26388 + interrupts = <25 2>; /* 1st word overwritten by sx1506-0-20-int-gpio parameter
26389 + 2nd word is 2 for falling-edge triggered */
26390 + status = "okay";
26391 + };
26392 + };
26393 + };
26394 +
26395 + // Enable a SX1506 on I2C#1 at slave addr 0x20
26396 + fragment@21 {
26397 + target = <&i2c1>;
26398 + __dormant__ {
26399 + #address-cells = <1>;
26400 + #size-cells = <0>;
26401 +
26402 + sx1506_1_20: sx150x@20 {
26403 + compatible = "semtech,sx1506q";
26404 + reg = <0x20>;
26405 + gpio-controller;
26406 + #gpio-cells = <2>;
26407 + #interrupt-cells = <2>;
26408 + interrupts = <25 2>; /* 1st word overwritten by sx1506-1-20-int-gpio parameter
26409 + 2nd word is 2 for falling-edge triggered */
26410 + status = "okay";
26411 + };
26412 + };
26413 + };
26414 +
26415 + // Enable a SX1507 on I2C#0 at slave addr 0x3E
26416 + fragment@22 {
26417 + target = <&i2c0>;
26418 + __dormant__ {
26419 + #address-cells = <1>;
26420 + #size-cells = <0>;
26421 +
26422 + sx1507_0_3E: sx150x@3E {
26423 + compatible = "semtech,sx1507q";
26424 + reg = <0x3E>;
26425 + gpio-controller;
26426 + #gpio-cells = <2>;
26427 + #interrupt-cells = <2>;
26428 + interrupts = <25 2>; /* 1st word overwritten by sx1507_0_3E-int-gpio parameter
26429 + 2nd word is 2 for falling-edge triggered */
26430 + status = "okay";
26431 + };
26432 + };
26433 + };
26434 +
26435 + // Enable a SX1507 on I2C#1 at slave addr 0x3E
26436 + fragment@23 {
26437 + target = <&i2c1>;
26438 + __dormant__ {
26439 + #address-cells = <1>;
26440 + #size-cells = <0>;
26441 +
26442 + sx1507_1_3E: sx150x@3E {
26443 + compatible = "semtech,sx1507q";
26444 + reg = <0x3E>;
26445 + gpio-controller;
26446 + #gpio-cells = <2>;
26447 + #interrupt-cells = <2>;
26448 + interrupts = <25 2>; /* 1st word overwritten by sx1507_1_3E-int-gpio parameter
26449 + 2nd word is 2 for falling-edge triggered */
26450 + status = "okay";
26451 + };
26452 + };
26453 + };
26454 +
26455 + // Enable a SX1507 on I2C#0 at slave addr 0x3F
26456 + fragment@24 {
26457 + target = <&i2c0>;
26458 + __dormant__ {
26459 + #address-cells = <1>;
26460 + #size-cells = <0>;
26461 +
26462 + sx1507_0_3F: sx150x@3F {
26463 + compatible = "semtech,sx1507q";
26464 + reg = <0x3F>;
26465 + gpio-controller;
26466 + #gpio-cells = <2>;
26467 + #interrupt-cells = <2>;
26468 + interrupts = <25 2>; /* 1st word overwritten by sx1507_0_3F-int-gpio parameter
26469 + 2nd word is 2 for falling-edge triggered */
26470 + status = "okay";
26471 + };
26472 + };
26473 + };
26474 +
26475 + // Enable a SX1507 on I2C#1 at slave addr 0x3F
26476 + fragment@25 {
26477 + target = <&i2c1>;
26478 + __dormant__ {
26479 + #address-cells = <1>;
26480 + #size-cells = <0>;
26481 +
26482 + sx1507_1_3F: sx150x@3F {
26483 + compatible = "semtech,sx1507q";
26484 + reg = <0x3F>;
26485 + gpio-controller;
26486 + #gpio-cells = <2>;
26487 + #interrupt-cells = <2>;
26488 + interrupts = <25 2>; /* 1st word overwritten by sx1507_1_3F-int-gpio parameter
26489 + 2nd word is 2 for falling-edge triggered */
26490 + status = "okay";
26491 + };
26492 + };
26493 + };
26494 +
26495 + // Enable a SX1507 on I2C#0 at slave addr 0x70
26496 + fragment@26 {
26497 + target = <&i2c0>;
26498 + __dormant__ {
26499 + #address-cells = <1>;
26500 + #size-cells = <0>;
26501 +
26502 + sx1507_0_70: sx150x@70 {
26503 + compatible = "semtech,sx1507q";
26504 + reg = <0x70>;
26505 + gpio-controller;
26506 + #gpio-cells = <2>;
26507 + #interrupt-cells = <2>;
26508 + interrupts = <25 2>; /* 1st word overwritten by sx1507-0-70-int-gpio parameter
26509 + 2nd word is 2 for falling-edge triggered */
26510 + status = "okay";
26511 + };
26512 + };
26513 + };
26514 +
26515 + // Enable a SX1507 on I2C#1 at slave addr 0x70
26516 + fragment@27 {
26517 + target = <&i2c1>;
26518 + __dormant__ {
26519 + #address-cells = <1>;
26520 + #size-cells = <0>;
26521 +
26522 + sx1507_1_70: sx150x@70 {
26523 + compatible = "semtech,sx1507q";
26524 + reg = <0x70>;
26525 + gpio-controller;
26526 + #gpio-cells = <2>;
26527 + #interrupt-cells = <2>;
26528 + interrupts = <25 2>; /* 1st word overwritten by sx1507-1-70-int-gpio parameter
26529 + 2nd word is 2 for falling-edge triggered */
26530 + status = "okay";
26531 + };
26532 + };
26533 + };
26534 +
26535 + // Enable a SX1507 on I2C#0 at slave addr 0x71
26536 + fragment@28 {
26537 + target = <&i2c0>;
26538 + __dormant__ {
26539 + #address-cells = <1>;
26540 + #size-cells = <0>;
26541 +
26542 + sx1507_0_71: sx150x@71 {
26543 + compatible = "semtech,sx1507q";
26544 + reg = <0x71>;
26545 + gpio-controller;
26546 + #gpio-cells = <2>;
26547 + #interrupt-cells = <2>;
26548 + interrupts = <25 2>; /* 1st word overwritten by sx1507-0-71-int-gpio parameter
26549 + 2nd word is 2 for falling-edge triggered */
26550 + status = "okay";
26551 + };
26552 + };
26553 + };
26554 +
26555 + // Enable a SX1507 on I2C#1 at slave addr 0x71
26556 + fragment@29 {
26557 + target = <&i2c1>;
26558 + __dormant__ {
26559 + #address-cells = <1>;
26560 + #size-cells = <0>;
26561 +
26562 + sx1507_1_71: sx150x@71 {
26563 + compatible = "semtech,sx1507q";
26564 + reg = <0x71>;
26565 + gpio-controller;
26566 + #gpio-cells = <2>;
26567 + #interrupt-cells = <2>;
26568 + interrupts = <25 2>; /* 1st word overwritten by sx1507-1-71-int-gpio parameter
26569 + 2nd word is 2 for falling-edge triggered */
26570 + status = "okay";
26571 + };
26572 + };
26573 + };
26574 +
26575 + // Enable a SX1508 on I2C#0 at slave addr 0x20
26576 + fragment@30 {
26577 + target = <&i2c0>;
26578 + __dormant__ {
26579 + #address-cells = <1>;
26580 + #size-cells = <0>;
26581 +
26582 + sx1508_0_20: sx150x@20 {
26583 + compatible = "semtech,sx1508q";
26584 + reg = <0x20>;
26585 + gpio-controller;
26586 + #gpio-cells = <2>;
26587 + #interrupt-cells = <2>;
26588 + interrupts = <25 2>; /* 1st word overwritten by sx1508-0-20-int-gpio parameter
26589 + 2nd word is 2 for falling-edge triggered */
26590 + status = "okay";
26591 + };
26592 + };
26593 + };
26594 +
26595 + // Enable a SX1508 on I2C#1 at slave addr 0x20
26596 + fragment@31 {
26597 + target = <&i2c1>;
26598 + __dormant__ {
26599 + #address-cells = <1>;
26600 + #size-cells = <0>;
26601 +
26602 + sx1508_1_20: sx150x@20 {
26603 + compatible = "semtech,sx1508q";
26604 + reg = <0x20>;
26605 + gpio-controller;
26606 + #gpio-cells = <2>;
26607 + #interrupt-cells = <2>;
26608 + interrupts = <25 2>; /* 1st word overwritten by sx1508-1-20-int-gpio parameter
26609 + 2nd word is 2 for falling-edge triggered */
26610 + status = "okay";
26611 + };
26612 + };
26613 + };
26614 +
26615 + // Enable a SX1508 on I2C#0 at slave addr 0x21
26616 + fragment@32 {
26617 + target = <&i2c0>;
26618 + __dormant__ {
26619 + #address-cells = <1>;
26620 + #size-cells = <0>;
26621 +
26622 + sx1508_0_21: sx150x@21 {
26623 + compatible = "semtech,sx1508q";
26624 + reg = <0x21>;
26625 + gpio-controller;
26626 + #gpio-cells = <2>;
26627 + #interrupt-cells = <2>;
26628 + interrupts = <25 2>; /* 1st word overwritten by sx1508-0-21-int-gpio parameter
26629 + 2nd word is 2 for falling-edge triggered */
26630 + status = "okay";
26631 + };
26632 + };
26633 + };
26634 +
26635 + // Enable a SX1508 on I2C#1 at slave addr 0x21
26636 + fragment@33 {
26637 + target = <&i2c1>;
26638 + __dormant__ {
26639 + #address-cells = <1>;
26640 + #size-cells = <0>;
26641 +
26642 + sx1508_1_21: sx150x@21 {
26643 + compatible = "semtech,sx1508q";
26644 + reg = <0x21>;
26645 + gpio-controller;
26646 + #gpio-cells = <2>;
26647 + #interrupt-cells = <2>;
26648 + interrupts = <25 2>; /* 1st word overwritten by sx1508-1-21-int-gpio parameter
26649 + 2nd word is 2 for falling-edge triggered */
26650 + status = "okay";
26651 + };
26652 + };
26653 + };
26654 +
26655 + // Enable a SX1508 on I2C#0 at slave addr 0x22
26656 + fragment@34 {
26657 + target = <&i2c0>;
26658 + __dormant__ {
26659 + #address-cells = <1>;
26660 + #size-cells = <0>;
26661 +
26662 + sx1508_0_22: sx150x@22 {
26663 + compatible = "semtech,sx1508q";
26664 + reg = <0x22>;
26665 + gpio-controller;
26666 + #gpio-cells = <2>;
26667 + #interrupt-cells = <2>;
26668 + interrupts = <25 2>; /* 1st word overwritten by sx1508-0-22-int-gpio parameter
26669 + 2nd word is 2 for falling-edge triggered */
26670 + status = "okay";
26671 + };
26672 + };
26673 + };
26674 +
26675 + // Enable a SX1508 on I2C#1 at slave addr 0x22
26676 + fragment@35 {
26677 + target = <&i2c1>;
26678 + __dormant__ {
26679 + #address-cells = <1>;
26680 + #size-cells = <0>;
26681 +
26682 + sx1508_1_22: sx150x@22 {
26683 + compatible = "semtech,sx1508q";
26684 + reg = <0x22>;
26685 + gpio-controller;
26686 + #gpio-cells = <2>;
26687 + #interrupt-cells = <2>;
26688 + interrupts = <25 2>; /* 1st word overwritten by sx1508-1-22-int-gpio parameter
26689 + 2nd word is 2 for falling-edge triggered */
26690 + status = "okay";
26691 + };
26692 + };
26693 + };
26694 +
26695 + // Enable a SX1508 on I2C#0 at slave addr 0x23
26696 + fragment@36 {
26697 + target = <&i2c0>;
26698 + __dormant__ {
26699 + #address-cells = <1>;
26700 + #size-cells = <0>;
26701 +
26702 + sx1508_0_23: sx150x@23 {
26703 + compatible = "semtech,sx1508q";
26704 + reg = <0x23>;
26705 + gpio-controller;
26706 + #gpio-cells = <2>;
26707 + #interrupt-cells = <2>;
26708 + interrupts = <25 2>; /* 1st word overwritten by sx1508-0-23-int-gpio parameter
26709 + 2nd word is 2 for falling-edge triggered */
26710 + status = "okay";
26711 + };
26712 + };
26713 + };
26714 +
26715 + // Enable a SX1508 on I2C#1 at slave addr 0x23
26716 + fragment@37 {
26717 + target = <&i2c1>;
26718 + __dormant__ {
26719 + #address-cells = <1>;
26720 + #size-cells = <0>;
26721 +
26722 + sx1508_1_23: sx150x@23 {
26723 + compatible = "semtech,sx1508q";
26724 + reg = <0x23>;
26725 + gpio-controller;
26726 + #gpio-cells = <2>;
26727 + #interrupt-cells = <2>;
26728 + interrupts = <25 2>; /* 1st word overwritten by sx1508-1-23-int-gpio parameter
26729 + 2nd word is 2 for falling-edge triggered */
26730 + status = "okay";
26731 + };
26732 + };
26733 + };
26734 +
26735 + // Enable a SX1509 on I2C#0 at slave addr 0x3E
26736 + fragment@38 {
26737 + target = <&i2c0>;
26738 + __dormant__ {
26739 + #address-cells = <1>;
26740 + #size-cells = <0>;
26741 +
26742 + sx1509_0_3E: sx150x@3E {
26743 + compatible = "semtech,sx1509q";
26744 + reg = <0x3E>;
26745 + gpio-controller;
26746 + #gpio-cells = <2>;
26747 + #interrupt-cells = <2>;
26748 + interrupts = <25 2>; /* 1st word overwritten by sx1509_0_3E-int-gpio parameter
26749 + 2nd word is 2 for falling-edge triggered */
26750 + status = "okay";
26751 + };
26752 + };
26753 + };
26754 +
26755 + // Enable a SX1509 on I2C#1 at slave addr 0x3E
26756 + fragment@39 {
26757 + target = <&i2c1>;
26758 + __dormant__ {
26759 + #address-cells = <1>;
26760 + #size-cells = <0>;
26761 +
26762 + sx1509_1_3E: sx150x@3E {
26763 + compatible = "semtech,sx1509q";
26764 + reg = <0x3E>;
26765 + gpio-controller;
26766 + #gpio-cells = <2>;
26767 + #interrupt-cells = <2>;
26768 + interrupts = <25 2>; /* 1st word overwritten by sx1509_1_3E-int-gpio parameter
26769 + 2nd word is 2 for falling-edge triggered */
26770 + status = "okay";
26771 + };
26772 + };
26773 + };
26774 +
26775 + // Enable a SX1509 on I2C#0 at slave addr 0x3F
26776 + fragment@40 {
26777 + target = <&i2c0>;
26778 + __dormant__ {
26779 + #address-cells = <1>;
26780 + #size-cells = <0>;
26781 +
26782 + sx1509_0_3F: sx150x@3F {
26783 + compatible = "semtech,sx1509q";
26784 + reg = <0x3F>;
26785 + gpio-controller;
26786 + #gpio-cells = <2>;
26787 + #interrupt-cells = <2>;
26788 + interrupts = <25 2>; /* 1st word overwritten by sx1509_0_3F-int-gpio parameter
26789 + 2nd word is 2 for falling-edge triggered */
26790 + status = "okay";
26791 + };
26792 + };
26793 + };
26794 +
26795 + // Enable a SX1509 on I2C#1 at slave addr 0x3F
26796 + fragment@41 {
26797 + target = <&i2c1>;
26798 + __dormant__ {
26799 + #address-cells = <1>;
26800 + #size-cells = <0>;
26801 +
26802 + sx1509_1_3F: sx150x@3F {
26803 + compatible = "semtech,sx1509q";
26804 + reg = <0x3F>;
26805 + gpio-controller;
26806 + #gpio-cells = <2>;
26807 + #interrupt-cells = <2>;
26808 + interrupts = <25 2>; /* 1st word overwritten by sx1509_1_3F-int-gpio parameter
26809 + 2nd word is 2 for falling-edge triggered */
26810 + status = "okay";
26811 + };
26812 + };
26813 + };
26814 +
26815 + // Enable a SX1509 on I2C#0 at slave addr 0x70
26816 + fragment@42 {
26817 + target = <&i2c0>;
26818 + __dormant__ {
26819 + #address-cells = <1>;
26820 + #size-cells = <0>;
26821 +
26822 + sx1509_0_70: sx150x@70 {
26823 + compatible = "semtech,sx1509q";
26824 + reg = <0x70>;
26825 + gpio-controller;
26826 + #gpio-cells = <2>;
26827 + #interrupt-cells = <2>;
26828 + interrupts = <25 2>; /* 1st word overwritten by sx1509-0-70-int-gpio parameter
26829 + 2nd word is 2 for falling-edge triggered */
26830 + status = "okay";
26831 + };
26832 + };
26833 + };
26834 +
26835 + // Enable a SX1509 on I2C#1 at slave addr 0x70
26836 + fragment@43 {
26837 + target = <&i2c1>;
26838 + __dormant__ {
26839 + #address-cells = <1>;
26840 + #size-cells = <0>;
26841 +
26842 + sx1509_1_70: sx150x@70 {
26843 + compatible = "semtech,sx1509q";
26844 + reg = <0x70>;
26845 + gpio-controller;
26846 + #gpio-cells = <2>;
26847 + #interrupt-cells = <2>;
26848 + interrupts = <25 2>; /* 1st word overwritten by sx1509-1-70-int-gpio parameter
26849 + 2nd word is 2 for falling-edge triggered */
26850 + status = "okay";
26851 + };
26852 + };
26853 + };
26854 +
26855 + // Enable a SX1509 on I2C#0 at slave addr 0x71
26856 + fragment@44 {
26857 + target = <&i2c0>;
26858 + __dormant__ {
26859 + #address-cells = <1>;
26860 + #size-cells = <0>;
26861 +
26862 + sx1509_0_71: sx150x@71 {
26863 + compatible = "semtech,sx1509q";
26864 + reg = <0x71>;
26865 + gpio-controller;
26866 + #gpio-cells = <2>;
26867 + #interrupt-cells = <2>;
26868 + interrupts = <25 2>; /* 1st word overwritten by sx1509-0-71-int-gpio parameter
26869 + 2nd word is 2 for falling-edge triggered */
26870 + status = "okay";
26871 + };
26872 + };
26873 + };
26874 +
26875 + // Enable a SX1509 on I2C#1 at slave addr 0x71
26876 + fragment@45 {
26877 + target = <&i2c1>;
26878 + __dormant__ {
26879 + #address-cells = <1>;
26880 + #size-cells = <0>;
26881 +
26882 + sx1509_1_71: sx150x@71 {
26883 + compatible = "semtech,sx1509q";
26884 + reg = <0x71>;
26885 + gpio-controller;
26886 + #gpio-cells = <2>;
26887 + #interrupt-cells = <2>;
26888 + interrupts = <25 2>; /* 1st word overwritten by sx1509-1-71-int-gpio parameter
26889 + 2nd word is 2 for falling-edge triggered */
26890 + status = "okay";
26891 + };
26892 + };
26893 + };
26894 +
26895 + // Enable interrupts for a SX1501 on I2C#0 at slave addr 0x20
26896 + fragment@46 {
26897 + target = <&sx1501_0_20>;
26898 + __dormant__ {
26899 + interrupt-parent = <&gpio>;
26900 + interrupt-controller;
26901 + pinctrl-names = "default";
26902 + pinctrl-0 = <&sx150x_0_20_pins>;
26903 + };
26904 + };
26905 +
26906 + // Enable interrupts for a SX1501 on I2C#1 at slave addr 0x20
26907 + fragment@47 {
26908 + target = <&sx1501_1_20>;
26909 + __dormant__ {
26910 + interrupt-parent = <&gpio>;
26911 + interrupt-controller;
26912 + pinctrl-names = "default";
26913 + pinctrl-0 = <&sx150x_1_20_pins>;
26914 + };
26915 + };
26916 +
26917 + // Enable interrupts for a SX1501 on I2C#0 at slave addr 0x21
26918 + fragment@48 {
26919 + target = <&sx1501_0_21>;
26920 + __dormant__ {
26921 + interrupt-parent = <&gpio>;
26922 + interrupt-controller;
26923 + pinctrl-names = "default";
26924 + pinctrl-0 = <&sx150x_0_21_pins>;
26925 + };
26926 + };
26927 +
26928 + // Enable interrupts for a SX1501 on I2C#1 at slave addr 0x21
26929 + fragment@49 {
26930 + target = <&sx1501_1_21>;
26931 + __dormant__ {
26932 + interrupt-parent = <&gpio>;
26933 + interrupt-controller;
26934 + pinctrl-names = "default";
26935 + pinctrl-0 = <&sx150x_1_21_pins>;
26936 + };
26937 + };
26938 +
26939 + // Enable interrupts for a SX1502 on I2C#0 at slave addr 0x20
26940 + fragment@50 {
26941 + target = <&sx1502_0_20>;
26942 + __dormant__ {
26943 + interrupt-parent = <&gpio>;
26944 + interrupt-controller;
26945 + pinctrl-names = "default";
26946 + pinctrl-0 = <&sx150x_0_20_pins>;
26947 + };
26948 + };
26949 +
26950 + // Enable interrupts for a SX1502 on I2C#1 at slave addr 0x20
26951 + fragment@51 {
26952 + target = <&sx1502_1_20>;
26953 + __dormant__ {
26954 + interrupt-parent = <&gpio>;
26955 + interrupt-controller;
26956 + pinctrl-names = "default";
26957 + pinctrl-0 = <&sx150x_1_20_pins>;
26958 + };
26959 + };
26960 +
26961 + // Enable interrupts for a SX1502 on I2C#0 at slave addr 0x21
26962 + fragment@52 {
26963 + target = <&sx1502_0_21>;
26964 + __dormant__ {
26965 + interrupt-parent = <&gpio>;
26966 + interrupt-controller;
26967 + pinctrl-names = "default";
26968 + pinctrl-0 = <&sx150x_0_21_pins>;
26969 + };
26970 + };
26971 +
26972 + // Enable interrupts for a SX1502 on I2C#1 at slave addr 0x21
26973 + fragment@53 {
26974 + target = <&sx1502_1_21>;
26975 + __dormant__ {
26976 + interrupt-parent = <&gpio>;
26977 + interrupt-controller;
26978 + pinctrl-names = "default";
26979 + pinctrl-0 = <&sx150x_1_21_pins>;
26980 + };
26981 + };
26982 +
26983 + // Enable interrupts for a SX1503 on I2C#0 at slave addr 0x20
26984 + fragment@54 {
26985 + target = <&sx1503_0_20>;
26986 + __dormant__ {
26987 + interrupt-parent = <&gpio>;
26988 + interrupt-controller;
26989 + pinctrl-names = "default";
26990 + pinctrl-0 = <&sx150x_0_20_pins>;
26991 + };
26992 + };
26993 +
26994 + // Enable interrupts for a SX1503 on I2C#1 at slave addr 0x20
26995 + fragment@55 {
26996 + target = <&sx1503_1_20>;
26997 + __dormant__ {
26998 + interrupt-parent = <&gpio>;
26999 + interrupt-controller;
27000 + pinctrl-names = "default";
27001 + pinctrl-0 = <&sx150x_1_20_pins>;
27002 + };
27003 + };
27004 +
27005 + // Enable interrupts for a SX1504 on I2C#0 at slave addr 0x20
27006 + fragment@56 {
27007 + target = <&sx1504_0_20>;
27008 + __dormant__ {
27009 + interrupt-parent = <&gpio>;
27010 + interrupt-controller;
27011 + pinctrl-names = "default";
27012 + pinctrl-0 = <&sx150x_0_20_pins>;
27013 + };
27014 + };
27015 +
27016 + // Enable interrupts for a SX1504 on I2C#1 at slave addr 0x20
27017 + fragment@57 {
27018 + target = <&sx1504_1_20>;
27019 + __dormant__ {
27020 + interrupt-parent = <&gpio>;
27021 + interrupt-controller;
27022 + pinctrl-names = "default";
27023 + pinctrl-0 = <&sx150x_1_20_pins>;
27024 + };
27025 + };
27026 +
27027 + // Enable interrupts for a SX1504 on I2C#0 at slave addr 0x21
27028 + fragment@58 {
27029 + target = <&sx1504_0_21>;
27030 + __dormant__ {
27031 + interrupt-parent = <&gpio>;
27032 + interrupt-controller;
27033 + pinctrl-names = "default";
27034 + pinctrl-0 = <&sx150x_0_21_pins>;
27035 + };
27036 + };
27037 +
27038 + // Enable interrupts for a SX1504 on I2C#1 at slave addr 0x21
27039 + fragment@59 {
27040 + target = <&sx1504_1_21>;
27041 + __dormant__ {
27042 + interrupt-parent = <&gpio>;
27043 + interrupt-controller;
27044 + pinctrl-names = "default";
27045 + pinctrl-0 = <&sx150x_1_21_pins>;
27046 + };
27047 + };
27048 +
27049 + // Enable interrupts for a SX1505 on I2C#0 at slave addr 0x20
27050 + fragment@60 {
27051 + target = <&sx1505_0_20>;
27052 + __dormant__ {
27053 + interrupt-parent = <&gpio>;
27054 + interrupt-controller;
27055 + pinctrl-names = "default";
27056 + pinctrl-0 = <&sx150x_0_20_pins>;
27057 + };
27058 + };
27059 +
27060 + // Enable interrupts for a SX1505 on I2C#1 at slave addr 0x20
27061 + fragment@61 {
27062 + target = <&sx1505_1_20>;
27063 + __dormant__ {
27064 + interrupt-parent = <&gpio>;
27065 + interrupt-controller;
27066 + pinctrl-names = "default";
27067 + pinctrl-0 = <&sx150x_1_20_pins>;
27068 + };
27069 + };
27070 +
27071 + // Enable interrupts for a SX1505 on I2C#0 at slave addr 0x21
27072 + fragment@62 {
27073 + target = <&sx1505_0_21>;
27074 + __dormant__ {
27075 + interrupt-parent = <&gpio>;
27076 + interrupt-controller;
27077 + pinctrl-names = "default";
27078 + pinctrl-0 = <&sx150x_0_21_pins>;
27079 + };
27080 + };
27081 +
27082 + // Enable interrupts for a SX1505 on I2C#1 at slave addr 0x21
27083 + fragment@63 {
27084 + target = <&sx1505_1_21>;
27085 + __dormant__ {
27086 + interrupt-parent = <&gpio>;
27087 + interrupt-controller;
27088 + pinctrl-names = "default";
27089 + pinctrl-0 = <&sx150x_1_21_pins>;
27090 + };
27091 + };
27092 +
27093 + // Enable interrupts for a SX1506 on I2C#0 at slave addr 0x20
27094 + fragment@64 {
27095 + target = <&sx1506_0_20>;
27096 + __dormant__ {
27097 + interrupt-parent = <&gpio>;
27098 + interrupt-controller;
27099 + pinctrl-names = "default";
27100 + pinctrl-0 = <&sx150x_0_20_pins>;
27101 + };
27102 + };
27103 +
27104 + // Enable interrupts for a SX1506 on I2C#1 at slave addr 0x20
27105 + fragment@65 {
27106 + target = <&sx1506_1_20>;
27107 + __dormant__ {
27108 + interrupt-parent = <&gpio>;
27109 + interrupt-controller;
27110 + pinctrl-names = "default";
27111 + pinctrl-0 = <&sx150x_1_20_pins>;
27112 + };
27113 + };
27114 +
27115 + // Enable interrupts for a SX1507 on I2C#0 at slave addr 0x3E
27116 + fragment@66 {
27117 + target = <&sx1507_0_3E>;
27118 + __dormant__ {
27119 + interrupt-parent = <&gpio>;
27120 + interrupt-controller;
27121 + pinctrl-names = "default";
27122 + pinctrl-0 = <&sx150x_0_3E_pins>;
27123 + };
27124 + };
27125 +
27126 + // Enable interrupts for a SX1507 on I2C#1 at slave addr 0x3E
27127 + fragment@67 {
27128 + target = <&sx1507_1_3E>;
27129 + __dormant__ {
27130 + interrupt-parent = <&gpio>;
27131 + interrupt-controller;
27132 + pinctrl-names = "default";
27133 + pinctrl-0 = <&sx150x_1_3E_pins>;
27134 + };
27135 + };
27136 +
27137 + // Enable interrupts for a SX1507 on I2C#0 at slave addr 0x3F
27138 + fragment@68 {
27139 + target = <&sx1507_0_3F>;
27140 + __dormant__ {
27141 + interrupt-parent = <&gpio>;
27142 + interrupt-controller;
27143 + pinctrl-names = "default";
27144 + pinctrl-0 = <&sx150x_0_3F_pins>;
27145 + };
27146 + };
27147 +
27148 + // Enable interrupts for a SX1507 on I2C#1 at slave addr 0x3F
27149 + fragment@69 {
27150 + target = <&sx1507_1_3F>;
27151 + __dormant__ {
27152 + interrupt-parent = <&gpio>;
27153 + interrupt-controller;
27154 + pinctrl-names = "default";
27155 + pinctrl-0 = <&sx150x_1_3F_pins>;
27156 + };
27157 + };
27158 +
27159 + // Enable interrupts for a SX1507 on I2C#0 at slave addr 0x70
27160 + fragment@70 {
27161 + target = <&sx1507_0_70>;
27162 + __dormant__ {
27163 + interrupt-parent = <&gpio>;
27164 + interrupt-controller;
27165 + pinctrl-names = "default";
27166 + pinctrl-0 = <&sx150x_1_70_pins>;
27167 + };
27168 + };
27169 +
27170 + // Enable interrupts for a SX1507 on I2C#1 at slave addr 0x70
27171 + fragment@71 {
27172 + target = <&sx1507_1_70>;
27173 + __dormant__ {
27174 + interrupt-parent = <&gpio>;
27175 + interrupt-controller;
27176 + pinctrl-names = "default";
27177 + pinctrl-0 = <&sx150x_1_70_pins>;
27178 + };
27179 + };
27180 +
27181 + // Enable interrupts for a SX1507 on I2C#0 at slave addr 0x71
27182 + fragment@72 {
27183 + target = <&sx1507_0_71>;
27184 + __dormant__ {
27185 + interrupt-parent = <&gpio>;
27186 + interrupt-controller;
27187 + pinctrl-names = "default";
27188 + pinctrl-0 = <&sx150x_0_71_pins>;
27189 + };
27190 + };
27191 +
27192 + // Enable interrupts for a SX1507 on I2C#1 at slave addr 0x71
27193 + fragment@73 {
27194 + target = <&sx1507_1_71>;
27195 + __dormant__ {
27196 + interrupt-parent = <&gpio>;
27197 + interrupt-controller;
27198 + pinctrl-names = "default";
27199 + pinctrl-0 = <&sx150x_1_71_pins>;
27200 + };
27201 + };
27202 +
27203 + // Enable interrupts for a SX1508 on I2C#0 at slave addr 0x20
27204 + fragment@74 {
27205 + target = <&sx1508_0_20>;
27206 + __dormant__ {
27207 + interrupt-parent = <&gpio>;
27208 + interrupt-controller;
27209 + pinctrl-names = "default";
27210 + pinctrl-0 = <&sx150x_0_20_pins>;
27211 + };
27212 + };
27213 +
27214 + // Enable interrupts for a SX1508 on I2C#1 at slave addr 0x20
27215 + fragment@75 {
27216 + target = <&sx1508_1_20>;
27217 + __dormant__ {
27218 + interrupt-parent = <&gpio>;
27219 + interrupt-controller;
27220 + pinctrl-names = "default";
27221 + pinctrl-0 = <&sx150x_1_20_pins>;
27222 + };
27223 + };
27224 +
27225 + // Enable interrupts for a SX1508 on I2C#0 at slave addr 0x21
27226 + fragment@76 {
27227 + target = <&sx1508_0_21>;
27228 + __dormant__ {
27229 + interrupt-parent = <&gpio>;
27230 + interrupt-controller;
27231 + pinctrl-names = "default";
27232 + pinctrl-0 = <&sx150x_0_21_pins>;
27233 + };
27234 + };
27235 +
27236 + // Enable interrupts for a SX1508 on I2C#1 at slave addr 0x21
27237 + fragment@77 {
27238 + target = <&sx1508_1_21>;
27239 + __dormant__ {
27240 + interrupt-parent = <&gpio>;
27241 + interrupt-controller;
27242 + pinctrl-names = "default";
27243 + pinctrl-0 = <&sx150x_1_21_pins>;
27244 + };
27245 + };
27246 +
27247 + // Enable interrupts for a SX1508 on I2C#0 at slave addr 0x22
27248 + fragment@78 {
27249 + target = <&sx1508_0_22>;
27250 + __dormant__ {
27251 + interrupt-parent = <&gpio>;
27252 + interrupt-controller;
27253 + pinctrl-names = "default";
27254 + pinctrl-0 = <&sx150x_0_22_pins>;
27255 + };
27256 + };
27257 +
27258 + // Enable interrupts for a SX1508 on I2C#1 at slave addr 0x22
27259 + fragment@79 {
27260 + target = <&sx1508_1_22>;
27261 + __dormant__ {
27262 + interrupt-parent = <&gpio>;
27263 + interrupt-controller;
27264 + pinctrl-names = "default";
27265 + pinctrl-0 = <&sx150x_1_22_pins>;
27266 + };
27267 + };
27268 +
27269 + // Enable interrupts for a SX1508 on I2C#0 at slave addr 0x23
27270 + fragment@80 {
27271 + target = <&sx1508_0_23>;
27272 + __dormant__ {
27273 + interrupt-parent = <&gpio>;
27274 + interrupt-controller;
27275 + pinctrl-names = "default";
27276 + pinctrl-0 = <&sx150x_0_23_pins>;
27277 + };
27278 + };
27279 +
27280 + // Enable interrupts for a SX1508 on I2C#1 at slave addr 0x23
27281 + fragment@81 {
27282 + target = <&sx1508_1_23>;
27283 + __dormant__ {
27284 + interrupt-parent = <&gpio>;
27285 + interrupt-controller;
27286 + pinctrl-names = "default";
27287 + pinctrl-0 = <&sx150x_1_23_pins>;
27288 + };
27289 + };
27290 +
27291 + // Enable interrupts for a SX1509 on I2C#0 at slave addr 0x3E
27292 + fragment@82 {
27293 + target = <&sx1509_0_3E>;
27294 + __dormant__ {
27295 + interrupt-parent = <&gpio>;
27296 + interrupt-controller;
27297 + pinctrl-names = "default";
27298 + pinctrl-0 = <&sx150x_0_3E_pins>;
27299 + };
27300 + };
27301 +
27302 + // Enable interrupts for a SX1509 on I2C#1 at slave addr 0x3E
27303 + fragment@83 {
27304 + target = <&sx1509_1_3E>;
27305 + __dormant__ {
27306 + interrupt-parent = <&gpio>;
27307 + interrupt-controller;
27308 + pinctrl-names = "default";
27309 + pinctrl-0 = <&sx150x_1_3E_pins>;
27310 + };
27311 + };
27312 +
27313 + // Enable interrupts for a SX1509 on I2C#0 at slave addr 0x3F
27314 + fragment@84 {
27315 + target = <&sx1509_0_3F>;
27316 + __dormant__ {
27317 + interrupt-parent = <&gpio>;
27318 + interrupt-controller;
27319 + pinctrl-names = "default";
27320 + pinctrl-0 = <&sx150x_0_3F_pins>;
27321 + };
27322 + };
27323 +
27324 + // Enable interrupts for a SX1509 on I2C#1 at slave addr 0x3F
27325 + fragment@85 {
27326 + target = <&sx1509_1_3F>;
27327 + __dormant__ {
27328 + interrupt-parent = <&gpio>;
27329 + interrupt-controller;
27330 + pinctrl-names = "default";
27331 + pinctrl-0 = <&sx150x_1_3F_pins>;
27332 + };
27333 + };
27334 +
27335 + // Enable interrupts for a SX1509 on I2C#0 at slave addr 0x70
27336 + fragment@86 {
27337 + target = <&sx1509_0_70>;
27338 + __dormant__ {
27339 + interrupt-parent = <&gpio>;
27340 + interrupt-controller;
27341 + pinctrl-names = "default";
27342 + pinctrl-0 = <&sx150x_0_70_pins>;
27343 + };
27344 + };
27345 +
27346 + // Enable interrupts for a SX1509 on I2C#1 at slave addr 0x70
27347 + fragment@87 {
27348 + target = <&sx1509_1_70>;
27349 + __dormant__ {
27350 + interrupt-parent = <&gpio>;
27351 + interrupt-controller;
27352 + pinctrl-names = "default";
27353 + pinctrl-0 = <&sx150x_1_70_pins>;
27354 + };
27355 + };
27356 +
27357 + // Enable interrupts for a SX1509 on I2C#0 at slave addr 0x71
27358 + fragment@88 {
27359 + target = <&sx1509_0_71>;
27360 + __dormant__ {
27361 + interrupt-parent = <&gpio>;
27362 + interrupt-controller;
27363 + pinctrl-names = "default";
27364 + pinctrl-0 = <&sx150x_0_71_pins>;
27365 + };
27366 + };
27367 +
27368 + // Enable interrupts for a SX1509 on I2C#1 at slave addr 0x71
27369 + fragment@89 {
27370 + target = <&sx1509_1_71>;
27371 + __dormant__ {
27372 + interrupt-parent = <&gpio>;
27373 + interrupt-controller;
27374 + pinctrl-names = "default";
27375 + pinctrl-0 = <&sx150x_1_71_pins>;
27376 + };
27377 + };
27378 +
27379 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#0 interface at slave addr 0x20
27380 + // Configure as a input with no pull-up/down
27381 + fragment@90 {
27382 + target = <&gpio>;
27383 + __dormant__ {
27384 + sx150x_0_20_pins: sx150x_0_20_pins {
27385 + brcm,pins = <0>; /* overwritten by sx150x-0-20-int-gpio parameter */
27386 + brcm,function = <0>;
27387 + brcm,pull = <0>;
27388 + };
27389 + };
27390 + };
27391 +
27392 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#1 interface at slave addr 0x20
27393 + // Configure as a input with no pull-up/down
27394 + fragment@91 {
27395 + target = <&gpio>;
27396 + __dormant__ {
27397 + sx150x_1_20_pins: sx150x_1_20_pins {
27398 + brcm,pins = <0>; /* overwritten by sx150x-1-20-int-gpio parameter */
27399 + brcm,function = <0>;
27400 + brcm,pull = <0>;
27401 + };
27402 + };
27403 + };
27404 +
27405 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#0 interface at slave addr 0x21
27406 + // Configure as a input with no pull-up/down
27407 + fragment@92 {
27408 + target = <&gpio>;
27409 + __dormant__ {
27410 + sx150x_0_21_pins: sx150x_0_21_pins {
27411 + brcm,pins = <0>; /* overwritten by sx150x-0-21-int-gpio parameter */
27412 + brcm,function = <0>;
27413 + brcm,pull = <0>;
27414 + };
27415 + };
27416 + };
27417 +
27418 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#1 interface at slave addr 0x21
27419 + // Configure as a input with no pull-up/down
27420 + fragment@93 {
27421 + target = <&gpio>;
27422 + __dormant__ {
27423 + sx150x_1_21_pins: sx150x_1_21_pins {
27424 + brcm,pins = <0>; /* overwritten by sx150x-1-21-int-gpio parameter */
27425 + brcm,function = <0>;
27426 + brcm,pull = <0>;
27427 + };
27428 + };
27429 + };
27430 +
27431 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#0 interface at slave addr 0x22
27432 + // Configure as a input with no pull-up/down
27433 + fragment@94 {
27434 + target = <&gpio>;
27435 + __dormant__ {
27436 + sx150x_0_22_pins: sx150x_0_22_pins {
27437 + brcm,pins = <0>; /* overwritten by sx150x-0-22-int-gpio parameter */
27438 + brcm,function = <0>;
27439 + brcm,pull = <0>;
27440 + };
27441 + };
27442 + };
27443 +
27444 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#1 interface at slave addr 0x22
27445 + // Configure as a input with no pull-up/down
27446 + fragment@95 {
27447 + target = <&gpio>;
27448 + __dormant__ {
27449 + sx150x_1_22_pins: sx150x_1_22_pins {
27450 + brcm,pins = <0>; /* overwritten by sx150x-1-22-int-gpio parameter */
27451 + brcm,function = <0>;
27452 + brcm,pull = <0>;
27453 + };
27454 + };
27455 + };
27456 +
27457 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#0 interface at slave addr 0x23
27458 + // Configure as a input with no pull-up/down
27459 + fragment@96 {
27460 + target = <&gpio>;
27461 + __dormant__ {
27462 + sx150x_0_23_pins: sx150x_0_23_pins {
27463 + brcm,pins = <0>; /* overwritten by sx150x-0-23-int-gpio parameter */
27464 + brcm,function = <0>;
27465 + brcm,pull = <0>;
27466 + };
27467 + };
27468 + };
27469 +
27470 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#1 interface at slave addr 0x23
27471 + // Configure as a input with no pull-up/down
27472 + fragment@97 {
27473 + target = <&gpio>;
27474 + __dormant__ {
27475 + sx150x_1_23_pins: sx150x_1_23_pins {
27476 + brcm,pins = <0>; /* overwritten by sx150x-1-23-int-gpio parameter */
27477 + brcm,function = <0>;
27478 + brcm,pull = <0>;
27479 + };
27480 + };
27481 + };
27482 +
27483 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#0 interface at slave addr 0x3E
27484 + // Configure as a input with no pull-up/down
27485 + fragment@98 {
27486 + target = <&gpio>;
27487 + __dormant__ {
27488 + sx150x_0_3E_pins: sx150x_0_3E_pins {
27489 + brcm,pins = <0>; /* overwritten by sx150x-0-3E-int-gpio parameter */
27490 + brcm,function = <0>;
27491 + brcm,pull = <0>;
27492 + };
27493 + };
27494 + };
27495 +
27496 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#1 interface at slave addr 0x3E
27497 + // Configure as a input with no pull-up/down
27498 + fragment@99 {
27499 + target = <&gpio>;
27500 + __dormant__ {
27501 + sx150x_1_3E_pins: sx150x_1_3E_pins {
27502 + brcm,pins = <0>; /* overwritten by sx150x-1-3E-int-gpio parameter */
27503 + brcm,function = <0>;
27504 + brcm,pull = <0>;
27505 + };
27506 + };
27507 + };
27508 +
27509 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#0 interface at slave addr 0x3F
27510 + // Configure as a input with no pull-up/down
27511 + fragment@100 {
27512 + target = <&gpio>;
27513 + __dormant__ {
27514 + sx150x_0_3F_pins: sx150x_0_3F_pins {
27515 + brcm,pins = <0>; /* overwritten by sx150x-0-3F-int-gpio parameter */
27516 + brcm,function = <0>;
27517 + brcm,pull = <0>;
27518 + };
27519 + };
27520 + };
27521 +
27522 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#1 interface at slave addr 0x3F
27523 + // Configure as a input with no pull-up/down
27524 + fragment@101 {
27525 + target = <&gpio>;
27526 + __dormant__ {
27527 + sx150x_1_3F_pins: sx150x_1_3F_pins {
27528 + brcm,pins = <0>; /* overwritten by sx150x-1-3F-int-gpio parameter */
27529 + brcm,function = <0>;
27530 + brcm,pull = <0>;
27531 + };
27532 + };
27533 + };
27534 +
27535 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#0 interface at slave addr 0x70
27536 + // Configure as a input with no pull-up/down
27537 + fragment@102 {
27538 + target = <&gpio>;
27539 + __dormant__ {
27540 + sx150x_0_70_pins: sx150x_0_70_pins {
27541 + brcm,pins = <0>; /* overwritten by sx150x-0-70-int-gpio parameter */
27542 + brcm,function = <0>;
27543 + brcm,pull = <0>;
27544 + };
27545 + };
27546 + };
27547 +
27548 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#1 interface at slave addr 0x70
27549 + // Configure as a input with no pull-up/down
27550 + fragment@103 {
27551 + target = <&gpio>;
27552 + __dormant__ {
27553 + sx150x_1_70_pins: sx150x_1_70_pins {
27554 + brcm,pins = <0>; /* overwritten by sx150x-1-70-int-gpio parameter */
27555 + brcm,function = <0>;
27556 + brcm,pull = <0>;
27557 + };
27558 + };
27559 + };
27560 +
27561 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#0 interface at slave addr 0x71
27562 + // Configure as a input with no pull-up/down
27563 + fragment@104 {
27564 + target = <&gpio>;
27565 + __dormant__ {
27566 + sx150x_0_71_pins: sx150x_0_71_pins {
27567 + brcm,pins = <0>; /* overwritten by sx150x-0-71-int-gpio parameter */
27568 + brcm,function = <0>;
27569 + brcm,pull = <0>;
27570 + };
27571 + };
27572 + };
27573 +
27574 + // Configure GPIO pin connected to NINT output of a SX150x on I2C#1 interface at slave addr 0x71
27575 + // Configure as a input with no pull-up/down
27576 + fragment@105 {
27577 + target = <&gpio>;
27578 + __dormant__ {
27579 + sx150x_1_71_pins: sx150x_1_71_pins {
27580 + brcm,pins = <0>; /* overwritten by sx150x-1-71-int-gpio parameter */
27581 + brcm,function = <0>;
27582 + brcm,pull = <0>;
27583 + };
27584 + };
27585 + };
27586 +
27587 + __overrides__ {
27588 + sx1501-0-20 = <0>,"+0+2";
27589 + sx1501-1-20 = <0>,"+1+3";
27590 + sx1501-0-21 = <0>,"+0+4";
27591 + sx1501-1-21 = <0>,"+1+5";
27592 + sx1502-0-20 = <0>,"+0+6";
27593 + sx1502-1-20 = <0>,"+1+7";
27594 + sx1502-0-21 = <0>,"+0+8";
27595 + sx1502-1-21 = <0>,"+1+9";
27596 + sx1503-0-20 = <0>,"+0+10";
27597 + sx1503-1-20 = <0>,"+1+11";
27598 + sx1504-0-20 = <0>,"+0+12";
27599 + sx1504-1-20 = <0>,"+1+13";
27600 + sx1504-0-21 = <0>,"+0+14";
27601 + sx1504-1-21 = <0>,"+1+15";
27602 + sx1505-0-20 = <0>,"+0+16";
27603 + sx1505-1-20 = <0>,"+1+17";
27604 + sx1505-0-21 = <0>,"+0+18";
27605 + sx1505-1-21 = <0>,"+1+19";
27606 + sx1506-0-20 = <0>,"+0+20";
27607 + sx1506-1-20 = <0>,"+1+21";
27608 + sx1507-0-3E = <0>,"+0+22";
27609 + sx1507-1-3E = <0>,"+1+23";
27610 + sx1507-0-3F = <0>,"+0+24";
27611 + sx1507-1-3F = <0>,"+1+25";
27612 + sx1507-0-70 = <0>,"+0+26";
27613 + sx1507-1-70 = <0>,"+1+27";
27614 + sx1507-0-71 = <0>,"+0+28";
27615 + sx1507-1-71 = <0>,"+1+29";
27616 + sx1508-0-20 = <0>,"+0+30";
27617 + sx1508-1-20 = <0>,"+1+31";
27618 + sx1508-0-21 = <0>,"+0+32";
27619 + sx1508-1-21 = <0>,"+1+33";
27620 + sx1508-0-22 = <0>,"+0+34";
27621 + sx1508-1-22 = <0>,"+1+35";
27622 + sx1508-0-23 = <0>,"+0+36";
27623 + sx1508-1-23 = <0>,"+1+37";
27624 + sx1509-0-3E = <0>,"+0+38";
27625 + sx1509-1-3E = <0>,"+1+39";
27626 + sx1509-0-3F = <0>,"+0+40";
27627 + sx1509-1-3F = <0>,"+1+41";
27628 + sx1509-0-70 = <0>,"+0+42";
27629 + sx1509-1-70 = <0>,"+1+43";
27630 + sx1509-0-71 = <0>,"+0+44";
27631 + sx1509-1-71 = <0>,"+1+45";
27632 + sx1501-0-20-int-gpio = <0>,"+46+90", <&sx150x_0_20_pins>,"brcm,pins:0", <&sx1501_0_20>,"interrupts:0";
27633 + sx1501-1-20-int-gpio = <0>,"+47+91", <&sx150x_1_20_pins>,"brcm,pins:0", <&sx1501_1_20>,"interrupts:0";
27634 + sx1501-0-21-int-gpio = <0>,"+48+92", <&sx150x_0_21_pins>,"brcm,pins:0", <&sx1501_0_21>,"interrupts:0";
27635 + sx1501-1-21-int-gpio = <0>,"+49+93", <&sx150x_1_21_pins>,"brcm,pins:0", <&sx1501_1_21>,"interrupts:0";
27636 + sx1502-0-20-int-gpio = <0>,"+50+90", <&sx150x_0_20_pins>,"brcm,pins:0", <&sx1502_0_20>,"interrupts:0";
27637 + sx1502-1-20-int-gpio = <0>,"+51+91", <&sx150x_1_20_pins>,"brcm,pins:0", <&sx1502_1_20>,"interrupts:0";
27638 + sx1502-0-21-int-gpio = <0>,"+52+92", <&sx150x_0_21_pins>,"brcm,pins:0", <&sx1502_0_21>,"interrupts:0";
27639 + sx1502-1-21-int-gpio = <0>,"+53+93", <&sx150x_1_21_pins>,"brcm,pins:0", <&sx1502_1_21>,"interrupts:0";
27640 + sx1503-0-20-int-gpio = <0>,"+54+90", <&sx150x_0_20_pins>,"brcm,pins:0", <&sx1503_0_20>,"interrupts:0";
27641 + sx1503-1-20-int-gpio = <0>,"+55+91", <&sx150x_1_20_pins>,"brcm,pins:0", <&sx1503_1_20>,"interrupts:0";
27642 + sx1504-0-20-int-gpio = <0>,"+56+90", <&sx150x_0_20_pins>,"brcm,pins:0", <&sx1504_0_20>,"interrupts:0";
27643 + sx1504-1-20-int-gpio = <0>,"+57+91", <&sx150x_1_20_pins>,"brcm,pins:0", <&sx1504_1_20>,"interrupts:0";
27644 + sx1504-0-21-int-gpio = <0>,"+58+92", <&sx150x_0_21_pins>,"brcm,pins:0", <&sx1504_0_21>,"interrupts:0";
27645 + sx1504-1-21-int-gpio = <0>,"+59+93", <&sx150x_1_21_pins>,"brcm,pins:0", <&sx1504_1_21>,"interrupts:0";
27646 + sx1505-0-20-int-gpio = <0>,"+60+90", <&sx150x_0_20_pins>,"brcm,pins:0", <&sx1505_0_20>,"interrupts:0";
27647 + sx1505-1-20-int-gpio = <0>,"+61+91", <&sx150x_1_20_pins>,"brcm,pins:0", <&sx1505_1_20>,"interrupts:0";
27648 + sx1505-0-21-int-gpio = <0>,"+62+92", <&sx150x_0_21_pins>,"brcm,pins:0", <&sx1505_0_21>,"interrupts:0";
27649 + sx1505-1-21-int-gpio = <0>,"+63+93", <&sx150x_1_21_pins>,"brcm,pins:0", <&sx1505_1_21>,"interrupts:0";
27650 + sx1506-0-20-int-gpio = <0>,"+64+90", <&sx150x_0_20_pins>,"brcm,pins:0", <&sx1506_0_20>,"interrupts:0";
27651 + sx1506-1-20-int-gpio = <0>,"+65+91", <&sx150x_1_20_pins>,"brcm,pins:0", <&sx1506_1_20>,"interrupts:0";
27652 + sx1507-0-3E-int-gpio = <0>,"+66+98", <&sx150x_0_3E_pins>,"brcm,pins:0", <&sx1507_0_3E>,"interrupts:0";
27653 + sx1507-1-3E-int-gpio = <0>,"+67+99", <&sx150x_1_3E_pins>,"brcm,pins:0", <&sx1507_1_3E>,"interrupts:0";
27654 + sx1507-0-3F-int-gpio = <0>,"+68+100", <&sx150x_0_3F_pins>,"brcm,pins:0", <&sx1507_0_3F>,"interrupts:0";
27655 + sx1507-1-3F-int-gpio = <0>,"+69+101", <&sx150x_1_3F_pins>,"brcm,pins:0", <&sx1507_1_3F>,"interrupts:0";
27656 + sx1507-0-70-int-gpio = <0>,"+60+102", <&sx150x_0_70_pins>,"brcm,pins:0", <&sx1507_0_70>,"interrupts:0";
27657 + sx1507-1-70-int-gpio = <0>,"+71+103", <&sx150x_1_70_pins>,"brcm,pins:0", <&sx1507_1_70>,"interrupts:0";
27658 + sx1507-0-71-int-gpio = <0>,"+72+104", <&sx150x_0_71_pins>,"brcm,pins:0", <&sx1507_0_71>,"interrupts:0";
27659 + sx1507-1-71-int-gpio = <0>,"+73+105", <&sx150x_1_71_pins>,"brcm,pins:0", <&sx1507_1_71>,"interrupts:0";
27660 + sx1508-0-20-int-gpio = <0>,"+74+90", <&sx150x_0_20_pins>,"brcm,pins:0", <&sx1508_0_20>,"interrupts:0";
27661 + sx1508-1-20-int-gpio = <0>,"+75+91", <&sx150x_1_20_pins>,"brcm,pins:0", <&sx1508_1_20>,"interrupts:0";
27662 + sx1508-0-21-int-gpio = <0>,"+76+92", <&sx150x_0_21_pins>,"brcm,pins:0", <&sx1508_0_21>,"interrupts:0";
27663 + sx1508-1-21-int-gpio = <0>,"+77+93", <&sx150x_1_21_pins>,"brcm,pins:0", <&sx1508_1_21>,"interrupts:0";
27664 + sx1508-0-22-int-gpio = <0>,"+78+94", <&sx150x_0_22_pins>,"brcm,pins:0", <&sx1508_0_22>,"interrupts:0";
27665 + sx1508-1-22-int-gpio = <0>,"+79+95", <&sx150x_1_22_pins>,"brcm,pins:0", <&sx1508_1_22>,"interrupts:0";
27666 + sx1508-0-23-int-gpio = <0>,"+80+96", <&sx150x_0_23_pins>,"brcm,pins:0", <&sx1508_0_23>,"interrupts:0";
27667 + sx1508-1-23-int-gpio = <0>,"+81+97", <&sx150x_1_23_pins>,"brcm,pins:0", <&sx1508_1_23>,"interrupts:0";
27668 + sx1509-0-3E-int-gpio = <0>,"+82+98", <&sx150x_0_3E_pins>,"brcm,pins:0", <&sx1509_0_3E>,"interrupts:0";
27669 + sx1509-1-3E-int-gpio = <0>,"+83+99", <&sx150x_1_3E_pins>,"brcm,pins:0", <&sx1509_1_3E>,"interrupts:0";
27670 + sx1509-0-3F-int-gpio = <0>,"+84+100", <&sx150x_0_3F_pins>,"brcm,pins:0", <&sx1509_0_3F>,"interrupts:0";
27671 + sx1509-1-3F-int-gpio = <0>,"+85+101", <&sx150x_1_3F_pins>,"brcm,pins:0", <&sx1509_1_3F>,"interrupts:0";
27672 + sx1509-0-70-int-gpio = <0>,"+86+102", <&sx150x_0_70_pins>,"brcm,pins:0", <&sx1509_0_70>,"interrupts:0";
27673 + sx1509-1-70-int-gpio = <0>,"+87+103", <&sx150x_1_70_pins>,"brcm,pins:0", <&sx1509_1_70>,"interrupts:0";
27674 + sx1509-0-71-int-gpio = <0>,"+88+104", <&sx150x_0_71_pins>,"brcm,pins:0", <&sx1509_0_71>,"interrupts:0";
27675 + sx1509-1-71-int-gpio = <0>,"+89+105", <&sx150x_1_71_pins>,"brcm,pins:0", <&sx1509_1_71>,"interrupts:0";
27676 + };
27677 +};
27678 +
27679 diff --git a/arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts b/arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts
27680 new file mode 100644
27681 index 000000000000..047695bb0c71
27682 --- /dev/null
27683 +++ b/arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts
27684 @@ -0,0 +1,52 @@
27685 +// SPDX-License-Identifier: GPL-2.0-only
27686 +// Definitions to add I2S audio from the Toshiba TC358743 HDMI to CSI2 bridge.
27687 +// Requires tc358743 overlay to have been loaded to actually function.
27688 +/dts-v1/;
27689 +/plugin/;
27690 +
27691 +/ {
27692 + compatible = "brcm,bcm2835";
27693 +
27694 + fragment@0 {
27695 + target = <&i2s>;
27696 + __overlay__ {
27697 + status = "okay";
27698 + };
27699 + };
27700 +
27701 + fragment@1 {
27702 + target-path = "/";
27703 + __overlay__ {
27704 + tc358743_codec: tc358743-codec {
27705 + #sound-dai-cells = <0>;
27706 + compatible = "linux,spdif-dir";
27707 + status = "okay";
27708 + };
27709 + };
27710 + };
27711 +
27712 + fragment@2 {
27713 + target = <&sound>;
27714 + sound_overlay: __overlay__ {
27715 + compatible = "simple-audio-card";
27716 + simple-audio-card,format = "i2s";
27717 + simple-audio-card,name = "tc358743";
27718 + simple-audio-card,bitclock-master = <&dailink0_slave>;
27719 + simple-audio-card,frame-master = <&dailink0_slave>;
27720 + status = "okay";
27721 +
27722 + simple-audio-card,cpu {
27723 + sound-dai = <&i2s>;
27724 + dai-tdm-slot-num = <2>;
27725 + dai-tdm-slot-width = <32>;
27726 + };
27727 + dailink0_slave: simple-audio-card,codec {
27728 + sound-dai = <&tc358743_codec>;
27729 + };
27730 + };
27731 + };
27732 +
27733 + __overrides__ {
27734 + card-name = <&sound_overlay>,"simple-audio-card,name";
27735 + };
27736 +};
27737 diff --git a/arch/arm/boot/dts/overlays/tc358743-overlay.dts b/arch/arm/boot/dts/overlays/tc358743-overlay.dts
27738 new file mode 100644
27739 index 000000000000..a1f8af36d2e7
27740 --- /dev/null
27741 +++ b/arch/arm/boot/dts/overlays/tc358743-overlay.dts
27742 @@ -0,0 +1,107 @@
27743 +// SPDX-License-Identifier: GPL-2.0-only
27744 +// Definitions for Toshiba TC358743 HDMI to CSI2 bridge on VC I2C bus
27745 +/dts-v1/;
27746 +/plugin/;
27747 +
27748 +/{
27749 + compatible = "brcm,bcm2835";
27750 +
27751 + fragment@0 {
27752 + target = <&i2c_csi_dsi>;
27753 + __overlay__ {
27754 + #address-cells = <1>;
27755 + #size-cells = <0>;
27756 + status = "okay";
27757 +
27758 + tc358743@0f {
27759 + compatible = "toshiba,tc358743";
27760 + reg = <0x0f>;
27761 + status = "okay";
27762 +
27763 + clocks = <&tc358743_clk>;
27764 + clock-names = "refclk";
27765 +
27766 + port {
27767 + tc358743: endpoint {
27768 + remote-endpoint = <&csi1_ep>;
27769 + clock-lanes = <0>;
27770 + clock-noncontinuous;
27771 + link-frequencies =
27772 + /bits/ 64 <486000000>;
27773 + };
27774 + };
27775 + };
27776 + };
27777 + };
27778 +
27779 + fragment@1 {
27780 + target = <&csi1>;
27781 + __overlay__ {
27782 + status = "okay";
27783 +
27784 + port {
27785 + csi1_ep: endpoint {
27786 + remote-endpoint = <&tc358743>;
27787 + };
27788 + };
27789 + };
27790 + };
27791 +
27792 + fragment@2 {
27793 + target = <&tc358743>;
27794 + __overlay__ {
27795 + data-lanes = <1 2>;
27796 + };
27797 + };
27798 +
27799 + fragment@3 {
27800 + target = <&tc358743>;
27801 + __dormant__ {
27802 + data-lanes = <1 2 3 4>;
27803 + };
27804 + };
27805 +
27806 + fragment@4 {
27807 + target = <&i2c0if>;
27808 + __overlay__ {
27809 + status = "okay";
27810 + };
27811 + };
27812 +
27813 + fragment@5 {
27814 + target = <&i2c0mux>;
27815 + __overlay__ {
27816 + status = "okay";
27817 + };
27818 + };
27819 +
27820 + fragment@6 {
27821 + target-path = "/";
27822 + __overlay__ {
27823 + tc358743_clk: bridge-clk {
27824 + compatible = "fixed-clock";
27825 + #clock-cells = <0>;
27826 + clock-frequency = <27000000>;
27827 + };
27828 + };
27829 + };
27830 +
27831 + fragment@7 {
27832 + target = <&csi1_ep>;
27833 + __overlay__ {
27834 + data-lanes = <1 2>;
27835 + };
27836 + };
27837 +
27838 + fragment@8 {
27839 + target = <&csi1_ep>;
27840 + __dormant__ {
27841 + data-lanes = <1 2 3 4>;
27842 + };
27843 + };
27844 +
27845 + __overrides__ {
27846 + 4lane = <0>, "-2+3-7+8";
27847 + link-frequency = <&tc358743>,"link-frequencies#0";
27848 + };
27849 +};
27850 diff --git a/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts b/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts
27851 new file mode 100644
27852 index 000000000000..a102b09e3ab5
27853 --- /dev/null
27854 +++ b/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts
27855 @@ -0,0 +1,222 @@
27856 +/*
27857 + * tinylcd35-overlay.dts
27858 + *
27859 + * -------------------------------------------------
27860 + * www.tinlylcd.com
27861 + * -------------------------------------------------
27862 + * Device---Driver-----BUS GPIO's
27863 + * display tinylcd35 spi0.0 25 24 18
27864 + * touch ads7846 spi0.1 5
27865 + * rtc ds1307 i2c1-0068
27866 + * rtc pcf8563 i2c1-0051
27867 + * keypad gpio-keys --------- 17 22 27 23 28
27868 + *
27869 + *
27870 + * TinyLCD.com 3.5 inch TFT
27871 + *
27872 + * Version 001
27873 + * 5/3/2015 -- Noralf Trønnes Initial Device tree framework
27874 + * 10/3/2015 -- tinylcd@gmail.com added ds1307 support.
27875 + *
27876 + */
27877 +
27878 +/dts-v1/;
27879 +/plugin/;
27880 +
27881 +/ {
27882 + compatible = "brcm,bcm2835";
27883 +
27884 + fragment@0 {
27885 + target = <&spi0>;
27886 + __overlay__ {
27887 + status = "okay";
27888 + };
27889 + };
27890 +
27891 + fragment@1 {
27892 + target = <&spidev0>;
27893 + __overlay__ {
27894 + status = "disabled";
27895 + };
27896 + };
27897 +
27898 + fragment@2 {
27899 + target = <&spidev1>;
27900 + __overlay__ {
27901 + status = "disabled";
27902 + };
27903 + };
27904 +
27905 + fragment@3 {
27906 + target = <&gpio>;
27907 + __overlay__ {
27908 + tinylcd35_pins: tinylcd35_pins {
27909 + brcm,pins = <25 24 18>;
27910 + brcm,function = <1>; /* out */
27911 + };
27912 + tinylcd35_ts_pins: tinylcd35_ts_pins {
27913 + brcm,pins = <5>;
27914 + brcm,function = <0>; /* in */
27915 + };
27916 + keypad_pins: keypad_pins {
27917 + brcm,pins = <4 17 22 23 27>;
27918 + brcm,function = <0>; /* in */
27919 + brcm,pull = <1>; /* down */
27920 + };
27921 + };
27922 + };
27923 +
27924 + fragment@4 {
27925 + target = <&spi0>;
27926 + __overlay__ {
27927 + /* needed to avoid dtc warning */
27928 + #address-cells = <1>;
27929 + #size-cells = <0>;
27930 +
27931 + tinylcd35: tinylcd35@0{
27932 + compatible = "neosec,tinylcd";
27933 + reg = <0>;
27934 + pinctrl-names = "default";
27935 + pinctrl-0 = <&tinylcd35_pins>,
27936 + <&tinylcd35_ts_pins>;
27937 +
27938 + spi-max-frequency = <48000000>;
27939 + rotate = <270>;
27940 + fps = <20>;
27941 + bgr;
27942 + buswidth = <8>;
27943 + reset-gpios = <&gpio 25 1>;
27944 + dc-gpios = <&gpio 24 0>;
27945 + led-gpios = <&gpio 18 0>;
27946 + debug = <0>;
27947 +
27948 + init = <0x10000B0 0x80
27949 + 0x10000C0 0x0A 0x0A
27950 + 0x10000C1 0x01 0x01
27951 + 0x10000C2 0x33
27952 + 0x10000C5 0x00 0x42 0x80
27953 + 0x10000B1 0xD0 0x11
27954 + 0x10000B4 0x02
27955 + 0x10000B6 0x00 0x22 0x3B
27956 + 0x10000B7 0x07
27957 + 0x1000036 0x58
27958 + 0x10000F0 0x36 0xA5 0xD3
27959 + 0x10000E5 0x80
27960 + 0x10000E5 0x01
27961 + 0x10000B3 0x00
27962 + 0x10000E5 0x00
27963 + 0x10000F0 0x36 0xA5 0x53
27964 + 0x10000E0 0x00 0x35 0x33 0x00 0x00 0x00 0x00 0x35 0x33 0x00 0x00 0x00
27965 + 0x100003A 0x55
27966 + 0x1000011
27967 + 0x2000001
27968 + 0x1000029>;
27969 + };
27970 +
27971 + tinylcd35_ts: tinylcd35_ts@1 {
27972 + compatible = "ti,ads7846";
27973 + reg = <1>;
27974 + status = "disabled";
27975 +
27976 + spi-max-frequency = <2000000>;
27977 + interrupts = <5 2>; /* high-to-low edge triggered */
27978 + interrupt-parent = <&gpio>;
27979 + pendown-gpio = <&gpio 5 0>;
27980 + ti,x-plate-ohms = /bits/ 16 <100>;
27981 + ti,pressure-max = /bits/ 16 <255>;
27982 + };
27983 + };
27984 + };
27985 +
27986 + /* RTC */
27987 +
27988 + fragment@5 {
27989 + target = <&i2c1>;
27990 + __dormant__ {
27991 + #address-cells = <1>;
27992 + #size-cells = <0>;
27993 +
27994 + status = "okay";
27995 +
27996 + pcf8563: pcf8563@51 {
27997 + compatible = "nxp,pcf8563";
27998 + reg = <0x51>;
27999 + status = "okay";
28000 + };
28001 + };
28002 + };
28003 +
28004 + fragment@6 {
28005 + target = <&i2c1>;
28006 + __dormant__ {
28007 + #address-cells = <1>;
28008 + #size-cells = <0>;
28009 +
28010 + status = "okay";
28011 +
28012 + ds1307: ds1307@68 {
28013 + compatible = "dallas,ds1307";
28014 + reg = <0x68>;
28015 + status = "okay";
28016 + };
28017 + };
28018 + };
28019 +
28020 + /*
28021 + * Values for input event code is found under the
28022 + * 'Keys and buttons' heading in include/uapi/linux/input.h
28023 + */
28024 + fragment@7 {
28025 + target-path = "/soc";
28026 + __overlay__ {
28027 + keypad: keypad {
28028 + compatible = "gpio-keys";
28029 + pinctrl-names = "default";
28030 + pinctrl-0 = <&keypad_pins>;
28031 + status = "disabled";
28032 + autorepeat;
28033 +
28034 + button@17 {
28035 + label = "GPIO KEY_UP";
28036 + linux,code = <103>;
28037 + gpios = <&gpio 17 0>;
28038 + };
28039 + button@22 {
28040 + label = "GPIO KEY_DOWN";
28041 + linux,code = <108>;
28042 + gpios = <&gpio 22 0>;
28043 + };
28044 + button@27 {
28045 + label = "GPIO KEY_LEFT";
28046 + linux,code = <105>;
28047 + gpios = <&gpio 27 0>;
28048 + };
28049 + button@23 {
28050 + label = "GPIO KEY_RIGHT";
28051 + linux,code = <106>;
28052 + gpios = <&gpio 23 0>;
28053 + };
28054 + button@4 {
28055 + label = "GPIO KEY_ENTER";
28056 + linux,code = <28>;
28057 + gpios = <&gpio 4 0>;
28058 + };
28059 + };
28060 + };
28061 + };
28062 +
28063 + __overrides__ {
28064 + speed = <&tinylcd35>,"spi-max-frequency:0";
28065 + rotate = <&tinylcd35>,"rotate:0";
28066 + fps = <&tinylcd35>,"fps:0";
28067 + debug = <&tinylcd35>,"debug:0";
28068 + touch = <&tinylcd35_ts>,"status";
28069 + touchgpio = <&tinylcd35_ts_pins>,"brcm,pins:0",
28070 + <&tinylcd35_ts>,"interrupts:0",
28071 + <&tinylcd35_ts>,"pendown-gpio:4";
28072 + xohms = <&tinylcd35_ts>,"ti,x-plate-ohms;0";
28073 + rtc-pcf = <0>,"=5";
28074 + rtc-ds = <0>,"=6";
28075 + keypad = <&keypad>,"status";
28076 + };
28077 +};
28078 diff --git a/arch/arm/boot/dts/overlays/tpm-slb9670-overlay.dts b/arch/arm/boot/dts/overlays/tpm-slb9670-overlay.dts
28079 new file mode 100644
28080 index 000000000000..e69188503ca3
28081 --- /dev/null
28082 +++ b/arch/arm/boot/dts/overlays/tpm-slb9670-overlay.dts
28083 @@ -0,0 +1,44 @@
28084 +/*
28085 + * Device Tree overlay for the Infineon SLB9670 Trusted Platform Module add-on
28086 + * boards, which can be used as a secure key storage and hwrng.
28087 + * available as "Iridium SLB9670" by Infineon and "LetsTrust TPM" by pi3g.
28088 + */
28089 +
28090 +/dts-v1/;
28091 +/plugin/;
28092 +
28093 +/ {
28094 + compatible = "brcm,bcm2835";
28095 +
28096 + fragment@0 {
28097 + target = <&spi0>;
28098 + __overlay__ {
28099 + status = "okay";
28100 + };
28101 + };
28102 +
28103 + fragment@1 {
28104 + target = <&spidev1>;
28105 + __overlay__ {
28106 + status = "disabled";
28107 + };
28108 + };
28109 +
28110 + fragment@2 {
28111 + target = <&spi0>;
28112 + __overlay__ {
28113 + /* needed to avoid dtc warning */
28114 + #address-cells = <1>;
28115 + #size-cells = <0>;
28116 + slb9670: slb9670@1 {
28117 + compatible = "infineon,slb9670";
28118 + reg = <1>; /* CE1 */
28119 + #address-cells = <1>;
28120 + #size-cells = <0>;
28121 + spi-max-frequency = <32000000>;
28122 + status = "okay";
28123 + };
28124 +
28125 + };
28126 + };
28127 +};
28128 diff --git a/arch/arm/boot/dts/overlays/uart0-overlay.dts b/arch/arm/boot/dts/overlays/uart0-overlay.dts
28129 new file mode 100755
28130 index 000000000000..73d563bbaabf
28131 --- /dev/null
28132 +++ b/arch/arm/boot/dts/overlays/uart0-overlay.dts
28133 @@ -0,0 +1,32 @@
28134 +/dts-v1/;
28135 +/plugin/;
28136 +
28137 +/{
28138 + compatible = "brcm,bcm2835";
28139 +
28140 + fragment@0 {
28141 + target = <&uart0>;
28142 + __overlay__ {
28143 + pinctrl-names = "default";
28144 + pinctrl-0 = <&uart0_pins>;
28145 + status = "okay";
28146 + };
28147 + };
28148 +
28149 + fragment@1 {
28150 + target = <&gpio>;
28151 + __overlay__ {
28152 + uart0_pins: uart0_pins {
28153 + brcm,pins = <14 15>;
28154 + brcm,function = <4>; /* alt0 */
28155 + brcm,pull = <0 2>;
28156 + };
28157 + };
28158 + };
28159 +
28160 + __overrides__ {
28161 + txd0_pin = <&uart0_pins>,"brcm,pins:0";
28162 + rxd0_pin = <&uart0_pins>,"brcm,pins:4";
28163 + pin_func = <&uart0_pins>,"brcm,function:0";
28164 + };
28165 +};
28166 diff --git a/arch/arm/boot/dts/overlays/uart1-overlay.dts b/arch/arm/boot/dts/overlays/uart1-overlay.dts
28167 new file mode 100644
28168 index 000000000000..986d725a2652
28169 --- /dev/null
28170 +++ b/arch/arm/boot/dts/overlays/uart1-overlay.dts
28171 @@ -0,0 +1,38 @@
28172 +/dts-v1/;
28173 +/plugin/;
28174 +
28175 +/{
28176 + compatible = "brcm,bcm2835";
28177 +
28178 + fragment@0 {
28179 + target = <&uart1>;
28180 + __overlay__ {
28181 + pinctrl-names = "default";
28182 + pinctrl-0 = <&uart1_pins>;
28183 + status = "okay";
28184 + };
28185 + };
28186 +
28187 + fragment@1 {
28188 + target = <&gpio>;
28189 + __overlay__ {
28190 + uart1_pins: uart1_pins {
28191 + brcm,pins = <14 15>;
28192 + brcm,function = <2>; /* alt5 */
28193 + brcm,pull = <0 2>;
28194 + };
28195 + };
28196 + };
28197 +
28198 + fragment@2 {
28199 + target-path = "/chosen";
28200 + __overlay__ {
28201 + bootargs = "8250.nr_uarts=1";
28202 + };
28203 + };
28204 +
28205 + __overrides__ {
28206 + txd1_pin = <&uart1_pins>,"brcm,pins:0";
28207 + rxd1_pin = <&uart1_pins>,"brcm,pins:4";
28208 + };
28209 +};
28210 diff --git a/arch/arm/boot/dts/overlays/uart2-overlay.dts b/arch/arm/boot/dts/overlays/uart2-overlay.dts
28211 new file mode 100644
28212 index 000000000000..9face240aca1
28213 --- /dev/null
28214 +++ b/arch/arm/boot/dts/overlays/uart2-overlay.dts
28215 @@ -0,0 +1,27 @@
28216 +/dts-v1/;
28217 +/plugin/;
28218 +
28219 +/{
28220 + compatible = "brcm,bcm2711";
28221 +
28222 + fragment@0 {
28223 + target = <&uart2>;
28224 + __overlay__ {
28225 + pinctrl-names = "default";
28226 + pinctrl-0 = <&uart2_pins>;
28227 + status = "okay";
28228 + };
28229 + };
28230 +
28231 + fragment@1 {
28232 + target = <&uart2_pins>;
28233 + __dormant__ {
28234 + brcm,pins = <0 1 2 3>;
28235 + brcm,pull = <0 2 2 0>;
28236 + };
28237 + };
28238 +
28239 + __overrides__ {
28240 + ctsrts = <0>,"=1";
28241 + };
28242 +};
28243 diff --git a/arch/arm/boot/dts/overlays/uart3-overlay.dts b/arch/arm/boot/dts/overlays/uart3-overlay.dts
28244 new file mode 100644
28245 index 000000000000..ae9f9fe5ea1d
28246 --- /dev/null
28247 +++ b/arch/arm/boot/dts/overlays/uart3-overlay.dts
28248 @@ -0,0 +1,27 @@
28249 +/dts-v1/;
28250 +/plugin/;
28251 +
28252 +/{
28253 + compatible = "brcm,bcm2711";
28254 +
28255 + fragment@0 {
28256 + target = <&uart3>;
28257 + __overlay__ {
28258 + pinctrl-names = "default";
28259 + pinctrl-0 = <&uart3_pins>;
28260 + status = "okay";
28261 + };
28262 + };
28263 +
28264 + fragment@1 {
28265 + target = <&uart3_pins>;
28266 + __dormant__ {
28267 + brcm,pins = <4 5 6 7>;
28268 + brcm,pull = <0 2 2 0>;
28269 + };
28270 + };
28271 +
28272 + __overrides__ {
28273 + ctsrts = <0>,"=1";
28274 + };
28275 +};
28276 diff --git a/arch/arm/boot/dts/overlays/uart4-overlay.dts b/arch/arm/boot/dts/overlays/uart4-overlay.dts
28277 new file mode 100644
28278 index 000000000000..ac004ffbadbf
28279 --- /dev/null
28280 +++ b/arch/arm/boot/dts/overlays/uart4-overlay.dts
28281 @@ -0,0 +1,27 @@
28282 +/dts-v1/;
28283 +/plugin/;
28284 +
28285 +/{
28286 + compatible = "brcm,bcm2711";
28287 +
28288 + fragment@0 {
28289 + target = <&uart4>;
28290 + __overlay__ {
28291 + pinctrl-names = "default";
28292 + pinctrl-0 = <&uart4_pins>;
28293 + status = "okay";
28294 + };
28295 + };
28296 +
28297 + fragment@1 {
28298 + target = <&uart4_pins>;
28299 + __dormant__ {
28300 + brcm,pins = <8 9 10 11>;
28301 + brcm,pull = <0 2 2 0>;
28302 + };
28303 + };
28304 +
28305 + __overrides__ {
28306 + ctsrts = <0>,"=1";
28307 + };
28308 +};
28309 diff --git a/arch/arm/boot/dts/overlays/uart5-overlay.dts b/arch/arm/boot/dts/overlays/uart5-overlay.dts
28310 new file mode 100644
28311 index 000000000000..04eaf376effe
28312 --- /dev/null
28313 +++ b/arch/arm/boot/dts/overlays/uart5-overlay.dts
28314 @@ -0,0 +1,27 @@
28315 +/dts-v1/;
28316 +/plugin/;
28317 +
28318 +/{
28319 + compatible = "brcm,bcm2711";
28320 +
28321 + fragment@0 {
28322 + target = <&uart5>;
28323 + __overlay__ {
28324 + pinctrl-names = "default";
28325 + pinctrl-0 = <&uart5_pins>;
28326 + status = "okay";
28327 + };
28328 + };
28329 +
28330 + fragment@1 {
28331 + target = <&uart5_pins>;
28332 + __dormant__ {
28333 + brcm,pins = <12 13 14 15>;
28334 + brcm,pull = <0 2 2 0>;
28335 + };
28336 + };
28337 +
28338 + __overrides__ {
28339 + ctsrts = <0>,"=1";
28340 + };
28341 +};
28342 diff --git a/arch/arm/boot/dts/overlays/udrc-overlay.dts b/arch/arm/boot/dts/overlays/udrc-overlay.dts
28343 new file mode 100644
28344 index 000000000000..ae7c37996894
28345 --- /dev/null
28346 +++ b/arch/arm/boot/dts/overlays/udrc-overlay.dts
28347 @@ -0,0 +1,128 @@
28348 +#include <dt-bindings/clock/bcm2835.h>
28349 +/*
28350 + * Device tree overlay for the Universal Digital Radio Controller
28351 + */
28352 +
28353 +/dts-v1/;
28354 +/plugin/;
28355 +
28356 +/ {
28357 + compatible = "brcm,bcm2835";
28358 + fragment@0 {
28359 + target = <&i2s>;
28360 + __overlay__ {
28361 + clocks = <&clocks BCM2835_CLOCK_PCM>;
28362 + clock-names = "pcm";
28363 + status = "okay";
28364 + };
28365 + };
28366 +
28367 + fragment@1 {
28368 + target-path = "/";
28369 + __overlay__ {
28370 + regulators {
28371 + compatible = "simple-bus";
28372 + #address-cells = <1>;
28373 + #size-cells = <0>;
28374 +
28375 + udrc0_ldoin: udrc0_ldoin {
28376 + compatible = "regulator-fixed";
28377 + regulator-name = "ldoin";
28378 + regulator-min-microvolt = <3300000>;
28379 + regulator-max-microvolt = <3300000>;
28380 + regulator-always-on;
28381 + };
28382 + };
28383 + };
28384 + };
28385 +
28386 + fragment@2 {
28387 + target = <&i2c1>;
28388 + __overlay__ {
28389 + #address-cells = <1>;
28390 + #size-cells = <0>;
28391 + status = "okay";
28392 + clocks = <&clocks BCM2835_CLOCK_VPU>;
28393 + clock-frequency = <400000>;
28394 +
28395 + tlv320aic32x4: tlv320aic32x4@18 {
28396 + compatible = "ti,tlv320aic32x4";
28397 + #sound-dai-cells = <0>;
28398 + reg = <0x18>;
28399 + status = "okay";
28400 +
28401 + clocks = <&clocks BCM2835_CLOCK_GP0>;
28402 + clock-names = "mclk";
28403 + assigned-clocks = <&clocks BCM2835_CLOCK_GP0>;
28404 + assigned-clock-rates = <25000000>;
28405 +
28406 + pinctrl-names = "default";
28407 + pinctrl-0 = <&gpclk0_pin &aic3204_reset>;
28408 +
28409 + reset-gpios = <&gpio 13 0>;
28410 +
28411 + iov-supply = <&udrc0_ldoin>;
28412 + ldoin-supply = <&udrc0_ldoin>;
28413 + };
28414 + };
28415 + };
28416 +
28417 + fragment@3 {
28418 + target = <&sound>;
28419 + snd: __overlay__ {
28420 + compatible = "simple-audio-card";
28421 + i2s-controller = <&i2s>;
28422 + status = "okay";
28423 +
28424 + simple-audio-card,name = "udrc";
28425 + simple-audio-card,format = "i2s";
28426 +
28427 + simple-audio-card,bitclock-master = <&dailink0_master>;
28428 + simple-audio-card,frame-master = <&dailink0_master>;
28429 +
28430 + simple-audio-card,widgets =
28431 + "Line", "Line In",
28432 + "Line", "Line Out";
28433 +
28434 + simple-audio-card,routing =
28435 + "IN1_R", "Line In",
28436 + "IN1_L", "Line In",
28437 + "CM_L", "Line In",
28438 + "CM_R", "Line In",
28439 + "Line Out", "LOR",
28440 + "Line Out", "LOL";
28441 +
28442 + dailink0_master: simple-audio-card,cpu {
28443 + sound-dai = <&i2s>;
28444 + };
28445 +
28446 + simple-audio-card,codec {
28447 + sound-dai = <&tlv320aic32x4>;
28448 + };
28449 + };
28450 + };
28451 +
28452 + fragment@4 {
28453 + target = <&gpio>;
28454 + __overlay__ {
28455 + gpclk0_pin: gpclk0_pin {
28456 + brcm,pins = <4>;
28457 + brcm,function = <4>;
28458 + };
28459 +
28460 + aic3204_reset: aic3204_reset {
28461 + brcm,pins = <13>;
28462 + brcm,function = <1>;
28463 + brcm,pull = <1>;
28464 + };
28465 +
28466 + aic3204_gpio: aic3204_gpio {
28467 + brcm,pins = <26>;
28468 + };
28469 + };
28470 + };
28471 +
28472 + __overrides__ {
28473 + alsaname = <&snd>, "simple-audio-card,name";
28474 + };
28475 +};
28476 diff --git a/arch/arm/boot/dts/overlays/ugreen-dabboard-overlay.dts b/arch/arm/boot/dts/overlays/ugreen-dabboard-overlay.dts
28477 new file mode 100644
28478 index 000000000000..fc8d9b118068
28479 --- /dev/null
28480 +++ b/arch/arm/boot/dts/overlays/ugreen-dabboard-overlay.dts
28481 @@ -0,0 +1,49 @@
28482 +// Definitions for the ugreen dabboard I2S
28483 +/dts-v1/;
28484 +/plugin/;
28485 +
28486 +/ {
28487 + compatible = "brcm,bcm2835";
28488 +
28489 + fragment@0 {
28490 + target = <&i2s>;
28491 + __overlay__ {
28492 + status = "okay";
28493 + };
28494 + };
28495 +
28496 + fragment@1 {
28497 + target-path = "/";
28498 + __overlay__ {
28499 + dmic_codec: dmic-codec {
28500 + #sound-dai-cells = <0>;
28501 + compatible = "dmic-codec";
28502 + status = "okay";
28503 + };
28504 + };
28505 + };
28506 +
28507 + fragment@2 {
28508 + target = <&sound>;
28509 + sound_overlay: __overlay__ {
28510 + compatible = "simple-audio-card";
28511 + simple-audio-card,format = "i2s";
28512 + simple-audio-card,name = "dabboard";
28513 + simple-audio-card,bitclock-master = <&dailink0_slave>;
28514 + simple-audio-card,frame-master = <&dailink0_slave>;
28515 + simple-audio-card,widgets = "Microphone", "Microphone Jack";
28516 + status = "okay";
28517 + simple-audio-card,cpu {
28518 + sound-dai = <&i2s>;
28519 + };
28520 + dailink0_slave: simple-audio-card,codec {
28521 + #sound-dai-cells = <0>;
28522 + sound-dai = <&dmic_codec>;
28523 + };
28524 + };
28525 + };
28526 +
28527 + __overrides__ {
28528 + card-name = <&sound_overlay>,"simple-audio-card,name";
28529 + };
28530 +};
28531 diff --git a/arch/arm/boot/dts/overlays/upstream-overlay.dts b/arch/arm/boot/dts/overlays/upstream-overlay.dts
28532 new file mode 100644
28533 index 000000000000..7c4071a7cb27
28534 --- /dev/null
28535 +++ b/arch/arm/boot/dts/overlays/upstream-overlay.dts
28536 @@ -0,0 +1,101 @@
28537 +// redo: ovmerge -c vc4-kms-v3d-overlay.dts,cma-default dwc2-overlay.dts,dr_mode=otg
28538 +
28539 +/dts-v1/;
28540 +/plugin/;
28541 +
28542 +#include <dt-bindings/clock/bcm2835.h>
28543 +
28544 +/ {
28545 + compatible = "brcm,bcm2835";
28546 + fragment@0 {
28547 + target = <&i2c2>;
28548 + __overlay__ {
28549 + status = "okay";
28550 + };
28551 + };
28552 + fragment@1 {
28553 + target = <&fb>;
28554 + __overlay__ {
28555 + status = "disabled";
28556 + };
28557 + };
28558 + fragment@2 {
28559 + target = <&pixelvalve0>;
28560 + __overlay__ {
28561 + status = "okay";
28562 + };
28563 + };
28564 + fragment@3 {
28565 + target = <&pixelvalve1>;
28566 + __overlay__ {
28567 + status = "okay";
28568 + };
28569 + };
28570 + fragment@4 {
28571 + target = <&pixelvalve2>;
28572 + __overlay__ {
28573 + status = "okay";
28574 + };
28575 + };
28576 + fragment@5 {
28577 + target = <&hvs>;
28578 + __overlay__ {
28579 + status = "okay";
28580 + };
28581 + };
28582 + fragment@6 {
28583 + target = <&hdmi>;
28584 + __overlay__ {
28585 + status = "okay";
28586 + };
28587 + };
28588 + fragment@7 {
28589 + target = <&v3d>;
28590 + __overlay__ {
28591 + status = "okay";
28592 + };
28593 + };
28594 + fragment@8 {
28595 + target = <&vc4>;
28596 + __overlay__ {
28597 + status = "okay";
28598 + };
28599 + };
28600 + fragment@9 {
28601 + target = <&clocks>;
28602 + __overlay__ {
28603 + claim-clocks = <BCM2835_PLLD_DSI0 BCM2835_PLLD_DSI1 BCM2835_PLLH_AUX BCM2835_PLLH_PIX>;
28604 + };
28605 + };
28606 + fragment@10 {
28607 + target = <&vec>;
28608 + __overlay__ {
28609 + status = "okay";
28610 + };
28611 + };
28612 + fragment@11 {
28613 + target = <&txp>;
28614 + __overlay__ {
28615 + status = "okay";
28616 + };
28617 + };
28618 + fragment@12 {
28619 + target = <&audio>;
28620 + __overlay__ {
28621 + brcm,disable-hdmi;
28622 + };
28623 + };
28624 + fragment@13 {
28625 + target = <&usb>;
28626 + #address-cells = <1>;
28627 + #size-cells = <1>;
28628 + __overlay__ {
28629 + compatible = "brcm,bcm2835-usb";
28630 + dr_mode = "otg";
28631 + g-np-tx-fifo-size = <32>;
28632 + g-rx-fifo-size = <558>;
28633 + g-tx-fifo-size = <512 512 512 512 512 256 256>;
28634 + status = "okay";
28635 + };
28636 + };
28637 +};
28638 diff --git a/arch/arm/boot/dts/overlays/upstream-pi4-overlay.dts b/arch/arm/boot/dts/overlays/upstream-pi4-overlay.dts
28639 new file mode 100644
28640 index 000000000000..f4328634542e
28641 --- /dev/null
28642 +++ b/arch/arm/boot/dts/overlays/upstream-pi4-overlay.dts
28643 @@ -0,0 +1,137 @@
28644 +// redo: ovmerge -c vc4-kms-v3d-pi4-overlay.dts,cma-default dwc2-overlay.dts,dr_mode=otg
28645 +
28646 +/dts-v1/;
28647 +/plugin/;
28648 +
28649 +#include <dt-bindings/clock/bcm2835.h>
28650 +
28651 +/ {
28652 + compatible = "brcm,bcm2711";
28653 + fragment@0 {
28654 + target = <&ddc0>;
28655 + __overlay__ {
28656 + status = "okay";
28657 + };
28658 + };
28659 + fragment@1 {
28660 + target = <&ddc1>;
28661 + __overlay__ {
28662 + status = "okay";
28663 + };
28664 + };
28665 + fragment@2 {
28666 + target = <&hdmi0>;
28667 + __overlay__ {
28668 + status = "okay";
28669 + };
28670 + };
28671 + fragment@3 {
28672 + target = <&hdmi1>;
28673 + __overlay__ {
28674 + status = "okay";
28675 + };
28676 + };
28677 + fragment@4 {
28678 + target = <&hvs>;
28679 + __overlay__ {
28680 + status = "okay";
28681 + };
28682 + };
28683 + fragment@5 {
28684 + target = <&pixelvalve0>;
28685 + __overlay__ {
28686 + status = "okay";
28687 + };
28688 + };
28689 + fragment@6 {
28690 + target = <&pixelvalve1>;
28691 + __overlay__ {
28692 + status = "okay";
28693 + };
28694 + };
28695 + fragment@7 {
28696 + target = <&pixelvalve2>;
28697 + __overlay__ {
28698 + status = "okay";
28699 + };
28700 + };
28701 + fragment@8 {
28702 + target = <&pixelvalve3>;
28703 + __overlay__ {
28704 + status = "okay";
28705 + };
28706 + };
28707 + fragment@9 {
28708 + target = <&pixelvalve4>;
28709 + __overlay__ {
28710 + status = "okay";
28711 + };
28712 + };
28713 + fragment@10 {
28714 + target = <&v3d>;
28715 + __overlay__ {
28716 + status = "okay";
28717 + };
28718 + };
28719 + fragment@11 {
28720 + target = <&vc4>;
28721 + __overlay__ {
28722 + status = "okay";
28723 + };
28724 + };
28725 + fragment@12 {
28726 + target = <&txp>;
28727 + __overlay__ {
28728 + status = "okay";
28729 + };
28730 + };
28731 + fragment@13 {
28732 + target = <&fb>;
28733 + __overlay__ {
28734 + status = "disabled";
28735 + };
28736 + };
28737 + fragment@14 {
28738 + target = <&firmwarekms>;
28739 + __overlay__ {
28740 + status = "disabled";
28741 + };
28742 + };
28743 + fragment@15 {
28744 + target = <&vec>;
28745 + __overlay__ {
28746 + status = "disabled";
28747 + };
28748 + };
28749 + fragment@16 {
28750 + target = <&audio>;
28751 + __overlay__ {
28752 + brcm,disable-hdmi;
28753 + };
28754 + };
28755 + fragment@17 {
28756 + target = <&dvp>;
28757 + __overlay__ {
28758 + status = "okay";
28759 + };
28760 + };
28761 + fragment@18 {
28762 + target = <&aon_intr>;
28763 + __overlay__ {
28764 + status = "okay";
28765 + };
28766 + };
28767 + fragment@19 {
28768 + target = <&usb>;
28769 + #address-cells = <1>;
28770 + #size-cells = <1>;
28771 + __overlay__ {
28772 + compatible = "brcm,bcm2835-usb";
28773 + dr_mode = "otg";
28774 + g-np-tx-fifo-size = <32>;
28775 + g-rx-fifo-size = <558>;
28776 + g-tx-fifo-size = <512 512 512 512 512 256 256>;
28777 + status = "okay";
28778 + };
28779 + };
28780 +};
28781 diff --git a/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts b/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts
28782 new file mode 100644
28783 index 000000000000..ca344492bed8
28784 --- /dev/null
28785 +++ b/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts
28786 @@ -0,0 +1,40 @@
28787 +/*
28788 + * vc4-fkms-v3d-overlay.dts
28789 + */
28790 +
28791 +/dts-v1/;
28792 +/plugin/;
28793 +
28794 +#include "cma-overlay.dts"
28795 +
28796 +/ {
28797 + compatible = "brcm,bcm2835";
28798 +
28799 + fragment@1 {
28800 + target = <&fb>;
28801 + __overlay__ {
28802 + status = "disabled";
28803 + };
28804 + };
28805 +
28806 + fragment@2 {
28807 + target = <&firmwarekms>;
28808 + __overlay__ {
28809 + status = "okay";
28810 + };
28811 + };
28812 +
28813 + fragment@3 {
28814 + target = <&v3d>;
28815 + __overlay__ {
28816 + status = "okay";
28817 + };
28818 + };
28819 +
28820 + fragment@4 {
28821 + target = <&vc4>;
28822 + __overlay__ {
28823 + status = "okay";
28824 + };
28825 + };
28826 +};
28827 diff --git a/arch/arm/boot/dts/overlays/vc4-fkms-v3d-pi4-overlay.dts b/arch/arm/boot/dts/overlays/vc4-fkms-v3d-pi4-overlay.dts
28828 new file mode 100644
28829 index 000000000000..7792ead0cbb3
28830 --- /dev/null
28831 +++ b/arch/arm/boot/dts/overlays/vc4-fkms-v3d-pi4-overlay.dts
28832 @@ -0,0 +1,44 @@
28833 +/*
28834 + * vc4-fkms-v3d-overlay.dts
28835 + */
28836 +
28837 +/dts-v1/;
28838 +/plugin/;
28839 +
28840 +#include "cma-overlay.dts"
28841 +
28842 +&frag0 {
28843 + size = <((320-4)*1024*1024)>;
28844 +};
28845 +
28846 +/ {
28847 + compatible = "brcm,bcm2711";
28848 +
28849 + fragment@1 {
28850 + target = <&fb>;
28851 + __overlay__ {
28852 + status = "disabled";
28853 + };
28854 + };
28855 +
28856 + fragment@2 {
28857 + target = <&firmwarekms>;
28858 + __overlay__ {
28859 + status = "okay";
28860 + };
28861 + };
28862 +
28863 + fragment@3 {
28864 + target = <&v3d>;
28865 + __overlay__ {
28866 + status = "okay";
28867 + };
28868 + };
28869 +
28870 + fragment@4 {
28871 + target = <&vc4>;
28872 + __overlay__ {
28873 + status = "okay";
28874 + };
28875 + };
28876 +};
28877 diff --git a/arch/arm/boot/dts/overlays/vc4-kms-dpi-at056tn53v1-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-dpi-at056tn53v1-overlay.dts
28878 new file mode 100644
28879 index 000000000000..f7181c9828bf
28880 --- /dev/null
28881 +++ b/arch/arm/boot/dts/overlays/vc4-kms-dpi-at056tn53v1-overlay.dts
28882 @@ -0,0 +1,44 @@
28883 +/*
28884 + * vc4-kms-dpi-at056tn53v1-overlay.dts
28885 + */
28886 +
28887 +/dts-v1/;
28888 +/plugin/;
28889 +
28890 +#include <dt-bindings/gpio/gpio.h>
28891 +#include <dt-bindings/pinctrl/bcm2835.h>
28892 +
28893 +/ {
28894 + compatible = "brcm,bcm2835";
28895 +
28896 + fragment@0 {
28897 + target-path = "/";
28898 + __overlay__ {
28899 + panel: panel {
28900 + compatible = "innolux,at056tn53v1", "simple-panel";
28901 +
28902 + port {
28903 + panel_in: endpoint {
28904 + remote-endpoint = <&dpi_out>;
28905 + };
28906 + };
28907 + };
28908 + };
28909 + };
28910 +
28911 + fragment@1 {
28912 + target = <&dpi>;
28913 + __overlay__ {
28914 + status = "okay";
28915 +
28916 + pinctrl-names = "default";
28917 + pinctrl-0 = <&dpi_18bit_cpadhi_gpio0>;
28918 +
28919 + port {
28920 + dpi_out: endpoint {
28921 + remote-endpoint = <&panel_in>;
28922 + };
28923 + };
28924 + };
28925 + };
28926 +};
28927 diff --git a/arch/arm/boot/dts/overlays/vc4-kms-dsi-7inch-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-dsi-7inch-overlay.dts
28928 new file mode 100644
28929 index 000000000000..ecd3bef3d65a
28930 --- /dev/null
28931 +++ b/arch/arm/boot/dts/overlays/vc4-kms-dsi-7inch-overlay.dts
28932 @@ -0,0 +1,118 @@
28933 +/*
28934 + * Device Tree overlay for RaspberryPi 7" Touchscreen panel
28935 + *
28936 + */
28937 +
28938 +/dts-v1/;
28939 +/plugin/;
28940 +
28941 +#include "edt-ft5406.dtsi"
28942 +
28943 +/ {
28944 + /* No compatible as it will have come from edt-ft5406.dtsi */
28945 +
28946 + fragment@0 {
28947 + target = <&dsi1>;
28948 + __overlay__ {
28949 + #address-cells = <1>;
28950 + #size-cells = <0>;
28951 + status = "okay";
28952 + port {
28953 + dsi_out: endpoint {
28954 + remote-endpoint = <&bridge_in>;
28955 + };
28956 + };
28957 + bridge@0 {
28958 + reg = <0>;
28959 + compatible = "toshiba,tc358762";
28960 + vddc-supply = <&reg_bridge>;
28961 + ports {
28962 + #address-cells = <1>;
28963 + #size-cells = <0>;
28964 +
28965 + port@0 {
28966 + reg = <0>;
28967 + bridge_in: endpoint {
28968 + remote-endpoint = <&dsi_out>;
28969 + };
28970 + };
28971 +
28972 + port@1 {
28973 + reg = <1>;
28974 + bridge_out: endpoint {
28975 + remote-endpoint = <&panel_in>;
28976 + };
28977 + };
28978 + };
28979 + };
28980 + };
28981 + };
28982 +
28983 + fragment@1 {
28984 + target-path = "/";
28985 + __overlay__ {
28986 + panel_disp1: panel_disp1@0 {
28987 + reg = <0>;
28988 + compatible = "raspberrypi,7inch-dsi", "simple-panel";
28989 + backlight = <&reg_display>;
28990 + power-supply = <&reg_display>;
28991 +
28992 + port {
28993 + panel_in: endpoint {
28994 + remote-endpoint = <&bridge_out>;
28995 + };
28996 + };
28997 + };
28998 +
28999 + reg_bridge: reg_bridge@0 {
29000 + reg = <0>;
29001 + compatible = "regulator-fixed";
29002 + regulator-name = "bridge_reg";
29003 + gpio = <&reg_display 0 0>;
29004 + vin-supply = <&reg_display>;
29005 + enable-active-high;
29006 + };
29007 + };
29008 + };
29009 +
29010 + fragment@2 {
29011 + target = <&i2c_csi_dsi>;
29012 + __overlay__ {
29013 + #address-cells = <1>;
29014 + #size-cells = <0>;
29015 + status = "okay";
29016 +
29017 + reg_display: reg_display@45 {
29018 + compatible = "raspberrypi,7inch-touchscreen-panel-regulator";
29019 + reg = <0x45>;
29020 + gpio-controller;
29021 + #gpio-cells = <2>;
29022 + };
29023 + };
29024 + };
29025 +
29026 + fragment@3 {
29027 + target = <&i2c0if>;
29028 + __overlay__ {
29029 + status = "okay";
29030 + };
29031 + };
29032 +
29033 + fragment@4 {
29034 + target = <&i2c0mux>;
29035 + __overlay__ {
29036 + status = "okay";
29037 + };
29038 + };
29039 + fragment@5 {
29040 + target = <&ft5406>;
29041 + __overlay__ {
29042 + vcc-supply = <&reg_display>;
29043 + reset-gpio = <&reg_display 1 1>;
29044 + };
29045 + };
29046 +
29047 + __overrides__ {
29048 + disable_touch = <0>, "-10-11-12-13";
29049 + };
29050 +};
29051 diff --git a/arch/arm/boot/dts/overlays/vc4-kms-dsi-lt070me05000-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-dsi-lt070me05000-overlay.dts
29052 new file mode 100644
29053 index 000000000000..d7b8f6713804
29054 --- /dev/null
29055 +++ b/arch/arm/boot/dts/overlays/vc4-kms-dsi-lt070me05000-overlay.dts
29056 @@ -0,0 +1,69 @@
29057 +/*
29058 + * Device Tree overlay to connect a JDI LT070ME05000 DSI panel to DSI1.
29059 + * This uses 4 DSI data lanes, so can only be used with a Compute Module.
29060 + *
29061 + * Credit to forum user gizmomouse on
29062 + * https://www.raspberrypi.org/forums/viewtopic.php?f=98&t=253912 and
29063 + * Andrey Vostrukhin of Harlab for the overlay.
29064 + *
29065 + * Refer to https://github.com/harlab/CM4_LCD_LT070ME05000 for schematics and
29066 + * other documentation.
29067 + */
29068 +
29069 +/dts-v1/;
29070 +/plugin/;
29071 +
29072 +/ {
29073 + compatible = "brcm,bcm2835";
29074 +
29075 + fragment@0 {
29076 + target = <&dsi1>;
29077 + __overlay__{
29078 + status = "okay";
29079 + #address-cells = <1>;
29080 + #size-cells = <0>;
29081 + port {
29082 + dsi_out_port:endpoint {
29083 + remote-endpoint = <&panel_dsi_port>;
29084 + };
29085 + };
29086 +
29087 + lt070me05000:lt070me05000@0 {
29088 + compatible = "jdi,lt070me05000";
29089 + status = "okay";
29090 + reg = <0>;
29091 + reset-gpios = <&gpio 17 1>; // LCD RST
29092 + enable-gpios = <&gpio 4 0>; // LCD Enable
29093 + dcdc-en-gpios = <&gpio 5 0>; // LCD DC-DC Enable
29094 + port {
29095 + panel_dsi_port: endpoint {
29096 + remote-endpoint = <&dsi_out_port>;
29097 + };
29098 + };
29099 + };
29100 + };
29101 + };
29102 +
29103 + fragment@1 {
29104 + target = <&gpio>;
29105 + __overlay__ {
29106 + lt070me05000_pins: lt070me05000_pins {
29107 + brcm,pins = <4 5 17>;
29108 + brcm,function = <1 1 1>; // out
29109 + brcm,pull = <0 0 0>; // off
29110 + };
29111 + };
29112 +
29113 + };
29114 +
29115 + __overrides__ {
29116 + reset = <&lt070me05000_pins>,"brcm,pins:8",
29117 + <&lt070me05000>,"reset-gpios:4";
29118 +
29119 + enable = <&lt070me05000_pins>,"brcm,pins:0",
29120 + <&lt070me05000>,"enable-gpios:4";
29121 +
29122 + dcdc-en = <&lt070me05000_pins>,"brcm,pins:4",
29123 + <&lt070me05000>,"dcdc-en-gpios:4";
29124 + };
29125 +};
29126 diff --git a/arch/arm/boot/dts/overlays/vc4-kms-dsi-lt070me05000-v2-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-dsi-lt070me05000-v2-overlay.dts
29127 new file mode 100644
29128 index 000000000000..5dcd0f2243e2
29129 --- /dev/null
29130 +++ b/arch/arm/boot/dts/overlays/vc4-kms-dsi-lt070me05000-v2-overlay.dts
29131 @@ -0,0 +1,64 @@
29132 +/*
29133 + * Device Tree overlay to connect a JDI LT070ME05000 DSI panel to DSI1.
29134 + * This uses 4 DSI data lanes, so can only be used with a Compute Module.
29135 + *
29136 + * The overlay is for V2 of Harlab's interface board that uses a PCA9536 to
29137 + * handle the panel's control GPIOs instead of wiring it back to Pi GPIOs.
29138 + *
29139 + * Credit to Andrey Vostrukhin of Harlab for the overlay.
29140 + *
29141 + * Refer to https://github.com/harlab/CM4_LCD_LT070ME05000 for schematics and
29142 + * other documentation.
29143 + */
29144 +
29145 +/dts-v1/;
29146 +/plugin/;
29147 +
29148 +/ {
29149 + compatible = "brcm,bcm2835";
29150 +
29151 + fragment@0 {
29152 + target = <&i2c_csi_dsi>;
29153 + __overlay__ {
29154 + #address-cells = <1>;
29155 + #size-cells = <0>;
29156 + status = "okay";
29157 +
29158 + pca: pca@41 {
29159 + compatible = "nxp,pca9536";
29160 + reg = <0x41>;
29161 + gpio-controller;
29162 + #gpio-cells = <2>;
29163 + status = "okay";
29164 + };
29165 + };
29166 + };
29167 +
29168 + fragment@1 {
29169 + target = <&dsi1>;
29170 + __overlay__{
29171 + status = "okay";
29172 + #address-cells = <1>;
29173 + #size-cells = <0>;
29174 + port {
29175 + dsi_out_port:endpoint {
29176 + remote-endpoint = <&panel_dsi_port>;
29177 + };
29178 + };
29179 +
29180 + lt070me05000:lt070me05000@0 {
29181 + compatible = "jdi,lt070me05000";
29182 + status = "okay";
29183 + reg = <0>;
29184 + reset-gpios = <&pca 0 1>;
29185 + enable-gpios = <&pca 2 0>;
29186 + dcdc-en-gpios = <&pca 1 0>;
29187 + port {
29188 + panel_dsi_port: endpoint {
29189 + remote-endpoint = <&dsi_out_port>;
29190 + };
29191 + };
29192 + };
29193 + };
29194 + };
29195 +};
29196 diff --git a/arch/arm/boot/dts/overlays/vc4-kms-kippah-7inch-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-kippah-7inch-overlay.dts
29197 new file mode 100644
29198 index 000000000000..b03394844abd
29199 --- /dev/null
29200 +++ b/arch/arm/boot/dts/overlays/vc4-kms-kippah-7inch-overlay.dts
29201 @@ -0,0 +1,43 @@
29202 +/*
29203 + * vc4-kms-v3d-overlay.dts
29204 + */
29205 +
29206 +/dts-v1/;
29207 +/plugin/;
29208 +
29209 +#include <dt-bindings/pinctrl/bcm2835.h>
29210 +
29211 +/ {
29212 + compatible = "brcm,bcm2835";
29213 +
29214 + fragment@0 {
29215 + target-path = "/";
29216 + __overlay__ {
29217 + panel: panel {
29218 + compatible = "ontat,yx700wv03", "simple-panel";
29219 +
29220 + port {
29221 + panel_in: endpoint {
29222 + remote-endpoint = <&dpi_out>;
29223 + };
29224 + };
29225 + };
29226 + };
29227 + };
29228 +
29229 + fragment@1 {
29230 + target = <&dpi>;
29231 + __overlay__ {
29232 + status = "okay";
29233 +
29234 + pinctrl-names = "default";
29235 + pinctrl-0 = <&dpi_18bit_gpio0>;
29236 +
29237 + port {
29238 + dpi_out: endpoint@0 {
29239 + remote-endpoint = <&panel_in>;
29240 + };
29241 + };
29242 + };
29243 + };
29244 +};
29245 diff --git a/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts
29246 new file mode 100644
29247 index 000000000000..5a4efdeed663
29248 --- /dev/null
29249 +++ b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts
29250 @@ -0,0 +1,123 @@
29251 +/*
29252 + * vc4-kms-v3d-overlay.dts
29253 + */
29254 +
29255 +/dts-v1/;
29256 +/plugin/;
29257 +
29258 +#include <dt-bindings/clock/bcm2835.h>
29259 +
29260 +#include "cma-overlay.dts"
29261 +
29262 +/ {
29263 + compatible = "brcm,bcm2835";
29264 +
29265 + fragment@1 {
29266 + target = <&i2c2>;
29267 + __overlay__ {
29268 + status = "okay";
29269 + };
29270 + };
29271 +
29272 + fragment@2 {
29273 + target = <&fb>;
29274 + __overlay__ {
29275 + status = "disabled";
29276 + };
29277 + };
29278 +
29279 + fragment@3 {
29280 + target = <&pixelvalve0>;
29281 + __overlay__ {
29282 + status = "okay";
29283 + };
29284 + };
29285 +
29286 + fragment@4 {
29287 + target = <&pixelvalve1>;
29288 + __overlay__ {
29289 + status = "okay";
29290 + };
29291 + };
29292 +
29293 + fragment@5 {
29294 + target = <&pixelvalve2>;
29295 + __overlay__ {
29296 + status = "okay";
29297 + };
29298 + };
29299 +
29300 + fragment@6 {
29301 + target = <&hvs>;
29302 + __overlay__ {
29303 + status = "okay";
29304 + };
29305 + };
29306 +
29307 + fragment@7 {
29308 + target = <&hdmi>;
29309 + __overlay__ {
29310 + status = "okay";
29311 + };
29312 + };
29313 +
29314 + fragment@8 {
29315 + target = <&v3d>;
29316 + __overlay__ {
29317 + status = "okay";
29318 + };
29319 + };
29320 +
29321 + fragment@9 {
29322 + target = <&vc4>;
29323 + __overlay__ {
29324 + status = "okay";
29325 + };
29326 + };
29327 +
29328 + fragment@10 {
29329 + target = <&clocks>;
29330 + __overlay__ {
29331 + claim-clocks = <
29332 + BCM2835_PLLD_DSI0
29333 + BCM2835_PLLD_DSI1
29334 + BCM2835_PLLH_AUX
29335 + BCM2835_PLLH_PIX
29336 + >;
29337 + };
29338 + };
29339 +
29340 + fragment@11 {
29341 + target = <&vec>;
29342 + __overlay__ {
29343 + status = "okay";
29344 + };
29345 + };
29346 +
29347 + fragment@12 {
29348 + target = <&txp>;
29349 + __overlay__ {
29350 + status = "okay";
29351 + };
29352 + };
29353 +
29354 + fragment@13 {
29355 + target = <&hdmi>;
29356 + __dormant__ {
29357 + dmas;
29358 + };
29359 + };
29360 +
29361 + fragment@14 {
29362 + target = <&audio>;
29363 + __overlay__ {
29364 + brcm,disable-hdmi;
29365 + };
29366 + };
29367 +
29368 + __overrides__ {
29369 + audio = <0>,"!13", <0>,"=14";
29370 + noaudio = <0>,"=13", <0>,"!14";
29371 + nocomposite = <0>, "!11";
29372 + };
29373 +};
29374 diff --git a/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts
29375 new file mode 100644
29376 index 000000000000..4285e12a4e53
29377 --- /dev/null
29378 +++ b/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts
29379 @@ -0,0 +1,197 @@
29380 +/*
29381 + * vc4-kms-v3d-pi4-overlay.dts
29382 + */
29383 +
29384 +/dts-v1/;
29385 +/plugin/;
29386 +
29387 +#include <dt-bindings/clock/bcm2835.h>
29388 +
29389 +#include "cma-overlay.dts"
29390 +
29391 +&frag0 {
29392 + size = <((320-4)*1024*1024)>;
29393 +};
29394 +
29395 +/ {
29396 + compatible = "brcm,bcm2711";
29397 +
29398 + fragment@1 {
29399 + target = <&ddc0>;
29400 + __overlay__ {
29401 + status = "okay";
29402 + };
29403 + };
29404 +
29405 + fragment@2 {
29406 + target = <&ddc1>;
29407 + __overlay__ {
29408 + status = "okay";
29409 + };
29410 + };
29411 +
29412 + fragment@3 {
29413 + target = <&hdmi0>;
29414 + __overlay__ {
29415 + status = "okay";
29416 + };
29417 + };
29418 +
29419 + fragment@4 {
29420 + target = <&hdmi1>;
29421 + __overlay__ {
29422 + status = "okay";
29423 + };
29424 + };
29425 +
29426 + fragment@5 {
29427 + target = <&hvs>;
29428 + __overlay__ {
29429 + status = "okay";
29430 + };
29431 + };
29432 +
29433 + fragment@6 {
29434 + target = <&pixelvalve0>;
29435 + __overlay__ {
29436 + status = "okay";
29437 + };
29438 + };
29439 +
29440 + fragment@7 {
29441 + target = <&pixelvalve1>;
29442 + __overlay__ {
29443 + status = "okay";
29444 + };
29445 + };
29446 +
29447 + fragment@8 {
29448 + target = <&pixelvalve2>;
29449 + __overlay__ {
29450 + status = "okay";
29451 + };
29452 + };
29453 +
29454 + fragment@9 {
29455 + target = <&pixelvalve3>;
29456 + __overlay__ {
29457 + status = "okay";
29458 + };
29459 + };
29460 +
29461 + fragment@10 {
29462 + target = <&pixelvalve4>;
29463 + __overlay__ {
29464 + status = "okay";
29465 + };
29466 + };
29467 +
29468 + fragment@11 {
29469 + target = <&v3d>;
29470 + __overlay__ {
29471 + status = "okay";
29472 + };
29473 + };
29474 +
29475 + fragment@12 {
29476 + target = <&vc4>;
29477 + __overlay__ {
29478 + status = "okay";
29479 + };
29480 + };
29481 +
29482 + fragment@13 {
29483 + target = <&txp>;
29484 + __overlay__ {
29485 + status = "okay";
29486 + };
29487 + };
29488 +
29489 + fragment@14 {
29490 + target = <&fb>;
29491 + __overlay__ {
29492 + status = "disabled";
29493 + };
29494 + };
29495 +
29496 + fragment@15 {
29497 + target = <&firmwarekms>;
29498 + __overlay__ {
29499 + status = "disabled";
29500 + };
29501 + };
29502 +
29503 + fragment@16 {
29504 + target = <&vec>;
29505 + __overlay__ {
29506 + status = "disabled";
29507 + };
29508 + };
29509 +
29510 + fragment@17 {
29511 + target = <&hdmi0>;
29512 + __dormant__ {
29513 + dmas;
29514 + };
29515 + };
29516 +
29517 + fragment@18 {
29518 + target = <&hdmi1>;
29519 + __dormant__ {
29520 + dmas;
29521 + };
29522 + };
29523 +
29524 + fragment@19 {
29525 + target = <&audio>;
29526 + __overlay__ {
29527 + brcm,disable-hdmi;
29528 + };
29529 + };
29530 +
29531 + fragment@20 {
29532 + target = <&dvp>;
29533 + __overlay__ {
29534 + status = "okay";
29535 + };
29536 + };
29537 +
29538 + fragment@21 {
29539 + target = <&pixelvalve3>;
29540 + __dormant__ {
29541 + status = "okay";
29542 + };
29543 + };
29544 +
29545 + fragment@22 {
29546 + target = <&vec>;
29547 + __dormant__ {
29548 + status = "okay";
29549 + };
29550 + };
29551 +
29552 + fragment@23 {
29553 + target = <&aon_intr>;
29554 + __overlay__ {
29555 + status = "okay";
29556 + };
29557 + };
29558 +
29559 + __overrides__ {
29560 + audio = <0>,"!17";
29561 + audio1 = <0>,"!18";
29562 + noaudio = <0>,"=17", <0>,"=18", <0>,"!19";
29563 + composite = <0>, "!1",
29564 + <0>, "!2",
29565 + <0>, "!3",
29566 + <0>, "!4",
29567 + <0>, "!6",
29568 + <0>, "!7",
29569 + <0>, "!8",
29570 + <0>, "!9",
29571 + <0>, "!10",
29572 + <0>, "!16",
29573 + <0>, "=21",
29574 + <0>, "=22";
29575 + };
29576 +};
29577 diff --git a/arch/arm/boot/dts/overlays/vc4-kms-vga666-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-vga666-overlay.dts
29578 new file mode 100644
29579 index 000000000000..6e787099e861
29580 --- /dev/null
29581 +++ b/arch/arm/boot/dts/overlays/vc4-kms-vga666-overlay.dts
29582 @@ -0,0 +1,100 @@
29583 +/*
29584 + * vc4-kms-vga666-overlay.dts
29585 + * Configures a FenLogic or similar VGA666 DPI adapter when using the
29586 + * vc4-kms-v3d driver.
29587 + * If a suitable I2C level shifter is connected to GPIOs 0&1 and the VGA
29588 + * ID1/SDA (pin 12) and ID3/SCL (pin 15) lines, then there is the option to
29589 + * enable reading the EDID from the display.
29590 + */
29591 +
29592 +/dts-v1/;
29593 +/plugin/;
29594 +
29595 +#include <dt-bindings/pinctrl/bcm2835.h>
29596 +
29597 +/ {
29598 + compatible = "brcm,bcm2835";
29599 +
29600 + fragment@0 {
29601 + target-path = "/";
29602 + __overlay__ {
29603 + vga_connector: vga_connector {
29604 + compatible = "vga-connector";
29605 + label = "vga";
29606 +
29607 + port {
29608 + vga_con_in: endpoint {
29609 + remote-endpoint = <&vga666_out>;
29610 + };
29611 + };
29612 + };
29613 +
29614 + vga_dac {
29615 + compatible = "dumb-vga-dac";
29616 +
29617 + ports {
29618 + #address-cells = <1>;
29619 + #size-cells = <0>;
29620 +
29621 + port@0 {
29622 + reg = <0>;
29623 +
29624 + vga666_in: endpoint {
29625 + remote-endpoint = <&dpi_out>;
29626 + };
29627 + };
29628 +
29629 + port@1 {
29630 + reg = <1>;
29631 +
29632 + vga666_out: endpoint {
29633 + remote-endpoint = <&vga_con_in>;
29634 + };
29635 + };
29636 + };
29637 + };
29638 +
29639 + };
29640 + };
29641 +
29642 + fragment@1 {
29643 + target = <&dpi>;
29644 + __overlay__ {
29645 + status = "okay";
29646 +
29647 + pinctrl-names = "default";
29648 + pinctrl-0 = <&dpi_18bit_gpio2>;
29649 +
29650 + port {
29651 + dpi_out: endpoint@0 {
29652 + remote-endpoint = <&vga666_in>;
29653 + };
29654 + };
29655 + };
29656 + };
29657 +
29658 + fragment@2 {
29659 + target = <&vga_connector>;
29660 + __dormant__ {
29661 + ddc-i2c-bus = <&i2c_vc>;
29662 + };
29663 + };
29664 +
29665 + fragment@3 {
29666 + target = <&i2c0if>;
29667 + __dormant__ {
29668 + status = "okay";
29669 + };
29670 + };
29671 +
29672 + fragment@4 {
29673 + target = <&i2c0mux>;
29674 + __dormant__ {
29675 + status = "okay";
29676 + };
29677 + };
29678 +
29679 + __overrides__ {
29680 + ddc = <0>,"=2", <0>,"=3", <0>,"=4";
29681 + };
29682 +};
29683 diff --git a/arch/arm/boot/dts/overlays/vga666-overlay.dts b/arch/arm/boot/dts/overlays/vga666-overlay.dts
29684 new file mode 100644
29685 index 000000000000..a4968d180a5d
29686 --- /dev/null
29687 +++ b/arch/arm/boot/dts/overlays/vga666-overlay.dts
29688 @@ -0,0 +1,30 @@
29689 +/dts-v1/;
29690 +/plugin/;
29691 +
29692 +/{
29693 + compatible = "brcm,bcm2835";
29694 +
29695 + // There is no VGA driver module, but we need a platform device
29696 + // node (that doesn't already use pinctrl) to hang the pinctrl
29697 + // reference on - leds will do
29698 +
29699 + fragment@0 {
29700 + target = <&leds>;
29701 + __overlay__ {
29702 + pinctrl-names = "default";
29703 + pinctrl-0 = <&vga666_pins>;
29704 + };
29705 + };
29706 +
29707 + fragment@1 {
29708 + target = <&gpio>;
29709 + __overlay__ {
29710 + vga666_pins: vga666_pins {
29711 + brcm,pins = <2 3 4 5 6 7 8 9 10 11 12
29712 + 13 14 15 16 17 18 19 20 21>;
29713 + brcm,function = <6>; /* alt2 */
29714 + brcm,pull = <0>; /* no pull */
29715 + };
29716 + };
29717 + };
29718 +};
29719 diff --git a/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts b/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts
29720 new file mode 100644
29721 index 000000000000..f44e325bc1f2
29722 --- /dev/null
29723 +++ b/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts
29724 @@ -0,0 +1,40 @@
29725 +// Definitions for w1-gpio module (without external pullup)
29726 +/dts-v1/;
29727 +/plugin/;
29728 +
29729 +/ {
29730 + compatible = "brcm,bcm2835";
29731 +
29732 + fragment@0 {
29733 + target-path = "/";
29734 + __overlay__ {
29735 +
29736 + w1: onewire@0 {
29737 + compatible = "w1-gpio";
29738 + pinctrl-names = "default";
29739 + pinctrl-0 = <&w1_pins>;
29740 + gpios = <&gpio 4 0>;
29741 + status = "okay";
29742 + };
29743 + };
29744 + };
29745 +
29746 + fragment@1 {
29747 + target = <&gpio>;
29748 + __overlay__ {
29749 + w1_pins: w1_pins@0 {
29750 + brcm,pins = <4>;
29751 + brcm,function = <0>; // in (initially)
29752 + brcm,pull = <0>; // off
29753 + };
29754 + };
29755 + };
29756 +
29757 + __overrides__ {
29758 + gpiopin = <&w1>,"gpios:4",
29759 + <&w1>,"reg:0",
29760 + <&w1_pins>,"brcm,pins:0",
29761 + <&w1_pins>,"reg:0";
29762 + pullup; // Silently ignore unneeded parameter
29763 + };
29764 +};
29765 diff --git a/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts b/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts
29766 new file mode 100644
29767 index 000000000000..953c6a1aeab9
29768 --- /dev/null
29769 +++ b/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts
29770 @@ -0,0 +1,42 @@
29771 +// Definitions for w1-gpio module (with external pullup)
29772 +/dts-v1/;
29773 +/plugin/;
29774 +
29775 +/ {
29776 + compatible = "brcm,bcm2835";
29777 +
29778 + fragment@0 {
29779 + target-path = "/";
29780 + __overlay__ {
29781 +
29782 + w1: onewire@0 {
29783 + compatible = "w1-gpio";
29784 + pinctrl-names = "default";
29785 + pinctrl-0 = <&w1_pins>;
29786 + gpios = <&gpio 4 0>, <&gpio 5 1>;
29787 + status = "okay";
29788 + };
29789 + };
29790 + };
29791 +
29792 + fragment@1 {
29793 + target = <&gpio>;
29794 + __overlay__ {
29795 + w1_pins: w1_pins@0 {
29796 + brcm,pins = <4 5>;
29797 + brcm,function = <0 1>; // in out
29798 + brcm,pull = <0 0>; // off off
29799 + };
29800 + };
29801 + };
29802 +
29803 + __overrides__ {
29804 + gpiopin = <&w1>,"gpios:4",
29805 + <&w1>,"reg:0",
29806 + <&w1_pins>,"brcm,pins:0",
29807 + <&w1_pins>,"reg:0";
29808 + extpullup = <&w1>,"gpios:16",
29809 + <&w1_pins>,"brcm,pins:4";
29810 + pullup; // Silently ignore unneeded parameter
29811 + };
29812 +};
29813 diff --git a/arch/arm/boot/dts/overlays/w5500-overlay.dts b/arch/arm/boot/dts/overlays/w5500-overlay.dts
29814 new file mode 100644
29815 index 000000000000..4d3e66296753
29816 --- /dev/null
29817 +++ b/arch/arm/boot/dts/overlays/w5500-overlay.dts
29818 @@ -0,0 +1,63 @@
29819 +// Overlay for the Wiznet w5500 Ethernet Controller
29820 +/dts-v1/;
29821 +/plugin/;
29822 +
29823 +/ {
29824 + compatible = "brcm,bcm2835";
29825 +
29826 + fragment@0 {
29827 + target = <&spidev0>;
29828 + __overlay__ {
29829 + status = "disabled";
29830 + };
29831 + };
29832 +
29833 + fragment@1 {
29834 + target = <&spidev1>;
29835 + __dormant__ {
29836 + status = "disabled";
29837 + };
29838 + };
29839 +
29840 + fragment@2 {
29841 + target = <&spi0>;
29842 + __overlay__ {
29843 + /* needed to avoid dtc warning */
29844 + #address-cells = <1>;
29845 + #size-cells = <0>;
29846 +
29847 + status = "okay";
29848 +
29849 + eth1: w5500@0{
29850 + compatible = "wiznet,w5500";
29851 + reg = <0>; /* CE0 */
29852 + pinctrl-names = "default";
29853 + pinctrl-0 = <&eth1_pins>;
29854 + interrupt-parent = <&gpio>;
29855 + interrupts = <25 0x8>;
29856 + spi-max-frequency = <30000000>;
29857 +// local-mac-address = [aa bb cc dd ee ff];
29858 + status = "okay";
29859 + };
29860 + };
29861 + };
29862 +
29863 + fragment@3 {
29864 + target = <&gpio>;
29865 + __overlay__ {
29866 + eth1_pins: eth1_pins {
29867 + brcm,pins = <25>;
29868 + brcm,function = <0>; /* in */
29869 + brcm,pull = <0>; /* none */
29870 + };
29871 + };
29872 + };
29873 +
29874 + __overrides__ {
29875 + int_pin = <&eth1>, "interrupts:0",
29876 + <&eth1_pins>, "brcm,pins:0";
29877 + speed = <&eth1>, "spi-max-frequency:0";
29878 + cs = <&eth1>, "reg:0",
29879 + <0>, "!0=1";
29880 + };
29881 +};
29882 diff --git a/arch/arm/boot/dts/overlays/wittypi-overlay.dts b/arch/arm/boot/dts/overlays/wittypi-overlay.dts
29883 new file mode 100644
29884 index 000000000000..71ce806186de
29885 --- /dev/null
29886 +++ b/arch/arm/boot/dts/overlays/wittypi-overlay.dts
29887 @@ -0,0 +1,44 @@
29888 +/*
29889 + * Device Tree overlay for Witty Pi extension board by UUGear
29890 + *
29891 + */
29892 +
29893 +/dts-v1/;
29894 +/plugin/;
29895 +
29896 +/ {
29897 +
29898 + compatible = "brcm,bcm2835";
29899 +
29900 + fragment@0 {
29901 + target = <&leds>;
29902 + __overlay__ {
29903 + compatible = "gpio-leds";
29904 + wittypi_led: wittypi_led {
29905 + label = "wittypi_led";
29906 + linux,default-trigger = "default-on";
29907 + gpios = <&gpio 17 0>;
29908 + };
29909 + };
29910 + };
29911 +
29912 + fragment@1 {
29913 + target = <&i2c1>;
29914 + __overlay__ {
29915 + #address-cells = <1>;
29916 + #size-cells = <0>;
29917 +
29918 + rtc: ds1337@68 {
29919 + compatible = "dallas,ds1337";
29920 + reg = <0x68>;
29921 + wakeup-source;
29922 + };
29923 + };
29924 + };
29925 +
29926 + __overrides__ {
29927 + led_gpio = <&wittypi_led>,"gpios:4";
29928 + led_trigger = <&wittypi_led>,"linux,default-trigger";
29929 + };
29930 +
29931 +};
29932 diff --git a/arch/arm/boot/dts/overlays/wm8960-soundcard-overlay.dts b/arch/arm/boot/dts/overlays/wm8960-soundcard-overlay.dts
29933 new file mode 100644
29934 index 000000000000..289fa4dacdf1
29935 --- /dev/null
29936 +++ b/arch/arm/boot/dts/overlays/wm8960-soundcard-overlay.dts
29937 @@ -0,0 +1,82 @@
29938 +// Definitions for Waveshare WM8960 https://github.com/waveshare/WM8960-Audio-HAT
29939 +/dts-v1/;
29940 +/plugin/;
29941 +
29942 +/ {
29943 + compatible = "brcm,bcm2835";
29944 +
29945 + fragment@0 {
29946 + target = <&i2s>;
29947 + __overlay__ {
29948 + status = "okay";
29949 + };
29950 + };
29951 +
29952 + fragment@1 {
29953 + target-path="/";
29954 + __overlay__ {
29955 + wm8960_mclk: wm8960_mclk {
29956 + compatible = "fixed-clock";
29957 + #clock-cells = <0>;
29958 + clock-frequency = <12288000>;
29959 + };
29960 + };
29961 + };
29962 + fragment@2 {
29963 + target = <&i2c1>;
29964 + __overlay__ {
29965 + #address-cells = <1>;
29966 + #size-cells = <0>;
29967 + status = "okay";
29968 +
29969 + wm8960: wm8960 {
29970 + compatible = "wlf,wm8960";
29971 + reg = <0x1a>;
29972 + #sound-dai-cells = <0>;
29973 + AVDD-supply = <&vdd_5v0_reg>;
29974 + DVDD-supply = <&vdd_3v3_reg>;
29975 + };
29976 + };
29977 + };
29978 +
29979 +
29980 + fragment@3 {
29981 + target = <&sound>;
29982 + slave_overlay: __overlay__ {
29983 + compatible = "simple-audio-card";
29984 + simple-audio-card,format = "i2s";
29985 + simple-audio-card,name = "wm8960-soundcard";
29986 + status = "okay";
29987 +
29988 + simple-audio-card,widgets =
29989 + "Microphone", "Mic Jack",
29990 + "Line", "Line In",
29991 + "Line", "Line Out",
29992 + "Speaker", "Speaker",
29993 + "Headphone", "Headphone Jack";
29994 + simple-audio-card,routing =
29995 + "Headphone Jack", "HP_L",
29996 + "Headphone Jack", "HP_R",
29997 + "Speaker", "SPK_LP",
29998 + "Speaker", "SPK_LN",
29999 + "LINPUT1", "Mic Jack",
30000 + "LINPUT3", "Mic Jack",
30001 + "RINPUT1", "Mic Jack",
30002 + "RINPUT2", "Mic Jack";
30003 +
30004 + simple-audio-card,cpu {
30005 + sound-dai = <&i2s>;
30006 + };
30007 + dailink0_slave: simple-audio-card,codec {
30008 + sound-dai = <&wm8960>;
30009 + clocks = <&wm8960_mclk>;
30010 + clock-names = "mclk";
30011 + };
30012 + };
30013 + };
30014 +
30015 + __overrides__ {
30016 + alsaname = <&slave_overlay>,"simple-audio-card,name";
30017 + compatible = <&wm8960>,"compatible";
30018 + };
30019 +};
30020 diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile
30021 index 639e01a4d855..becca30ad4fe 100644
30022 --- a/arch/arm64/boot/dts/Makefile
30023 +++ b/arch/arm64/boot/dts/Makefile
30024 @@ -30,3 +30,5 @@ subdir-y += synaptics
30025 subdir-y += ti
30026 subdir-y += toshiba
30027 subdir-y += xilinx
30028 +
30029 +subdir-y += overlays
30030 diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile
30031 index 11eae3e3a944..5a90727064ee 100644
30032 --- a/arch/arm64/boot/dts/broadcom/Makefile
30033 +++ b/arch/arm64/boot/dts/broadcom/Makefile
30034 @@ -5,7 +5,19 @@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb \
30035 bcm2837-rpi-3-b.dtb \
30036 bcm2837-rpi-3-b-plus.dtb \
30037 bcm2837-rpi-cm3-io3.dtb
30038 +dtb-$(CONFIG_ARCH_BCM2835) += bcm2710-rpi-2-b.dtb
30039 +dtb-$(CONFIG_ARCH_BCM2835) += bcm2710-rpi-3-b.dtb
30040 +dtb-$(CONFIG_ARCH_BCM2835) += bcm2710-rpi-3-b-plus.dtb
30041 +dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-4-b.dtb
30042 +dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb
30043 +dtb-$(CONFIG_ARCH_BCM2835) += bcm2710-rpi-cm3.dtb
30044 +dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-cm4.dtb
30045
30046 subdir-y += bcm4908
30047 subdir-y += northstar2
30048 subdir-y += stingray
30049 +
30050 +# Enable fixups to support overlays on BCM2835 platforms
30051 +ifeq ($(CONFIG_ARCH_BCM2835),y)
30052 + DTC_FLAGS += -@
30053 +endif
30054 diff --git a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-2-b.dts b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-2-b.dts
30055 new file mode 100644
30056 index 000000000000..36ecea71f0ef
30057 --- /dev/null
30058 +++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-2-b.dts
30059 @@ -0,0 +1 @@
30060 +#include "../../../../arm/boot/dts/bcm2710-rpi-2-b.dts"
30061 diff --git a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b-plus.dts b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b-plus.dts
30062 new file mode 100644
30063 index 000000000000..22fc6a82f2a9
30064 --- /dev/null
30065 +++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b-plus.dts
30066 @@ -0,0 +1 @@
30067 +#include "../../../../arm/boot/dts/bcm2710-rpi-3-b-plus.dts"
30068 diff --git a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dts b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dts
30069 new file mode 100644
30070 index 000000000000..4cacc5b72ae3
30071 --- /dev/null
30072 +++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dts
30073 @@ -0,0 +1 @@
30074 +#include "../../../../arm/boot/dts/bcm2710-rpi-3-b.dts"
30075 diff --git a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts
30076 new file mode 100644
30077 index 000000000000..e1e13784cff6
30078 --- /dev/null
30079 +++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts
30080 @@ -0,0 +1 @@
30081 +#include "../../../../arm/boot/dts/bcm2710-rpi-cm3.dts"
30082 diff --git a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dts b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dts
30083 index d24c53682e44..bf69a4b0b172 100644
30084 --- a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dts
30085 +++ b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dts
30086 @@ -1,2 +1 @@
30087 -// SPDX-License-Identifier: GPL-2.0
30088 -#include "arm/bcm2711-rpi-4-b.dts"
30089 +#include "../../../../arm/boot/dts/bcm2711-rpi-4-b.dts"
30090 diff --git a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-400.dts b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-400.dts
30091 index b9000f58beb5..90c2b5a195d4 100644
30092 --- a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-400.dts
30093 +++ b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-400.dts
30094 @@ -1,2 +1 @@
30095 -// SPDX-License-Identifier: GPL-2.0
30096 -#include "arm/bcm2711-rpi-400.dts"
30097 +#include "../../../../arm/boot/dts/bcm2711-rpi-400.dts"
30098 diff --git a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-cm4.dts b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-cm4.dts
30099 new file mode 100644
30100 index 000000000000..8064a58155f1
30101 --- /dev/null
30102 +++ b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-cm4.dts
30103 @@ -0,0 +1 @@
30104 +#include "../../../../arm/boot/dts/bcm2711-rpi-cm4.dts"
30105 diff --git a/arch/arm64/boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi b/arch/arm64/boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi
30106 new file mode 120000
30107 index 000000000000..e5c400284467
30108 --- /dev/null
30109 +++ b/arch/arm64/boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi
30110 @@ -0,0 +1 @@
30111 +../../../../arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi
30112 \ No newline at end of file
30113 diff --git a/arch/arm64/boot/dts/broadcom/bcm283x-rpi-lan7515.dtsi b/arch/arm64/boot/dts/broadcom/bcm283x-rpi-lan7515.dtsi
30114 new file mode 120000
30115 index 000000000000..fc4c05bbe7fd
30116 --- /dev/null
30117 +++ b/arch/arm64/boot/dts/broadcom/bcm283x-rpi-lan7515.dtsi
30118 @@ -0,0 +1 @@
30119 +../../../../arm/boot/dts/bcm283x-rpi-lan7515.dtsi
30120 \ No newline at end of file
30121 diff --git a/arch/arm64/boot/dts/overlays b/arch/arm64/boot/dts/overlays
30122 new file mode 120000
30123 index 000000000000..ded08646b6f6
30124 --- /dev/null
30125 +++ b/arch/arm64/boot/dts/overlays
30126 @@ -0,0 +1 @@
30127 +../../../arm/boot/dts/overlays
30128 \ No newline at end of file
30129 diff --git a/scripts/Makefile.dtbinst b/scripts/Makefile.dtbinst
30130 index 190d781e84f4..84c46c081218 100644
30131 --- a/scripts/Makefile.dtbinst
30132 +++ b/scripts/Makefile.dtbinst
30133 @@ -18,9 +18,10 @@ include $(srctree)/scripts/Kbuild.include
30134 include $(src)/Makefile
30135
30136 dtbs := $(addprefix $(dst)/, $(dtb-y) $(if $(CONFIG_OF_ALL_DTBS),$(dtb-)))
30137 +dtbos := $(addprefix $(dst)/, $(dtbo-y) $(if $(CONFIG_OF_ALL_DTBS),$(dtb-)))
30138 subdirs := $(addprefix $(obj)/, $(subdir-y) $(subdir-m))
30139
30140 -__dtbs_install: $(dtbs) $(subdirs)
30141 +__dtbs_install: $(dtbs) $(dtbos) $(subdirs)
30142 @:
30143
30144 quiet_cmd_dtb_install = INSTALL $@
30145 diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
30146 index 0a8a4689c3eb..dff7d1ef5ff4 100644
30147 --- a/scripts/Makefile.lib
30148 +++ b/scripts/Makefile.lib
30149 @@ -300,6 +300,7 @@ DTC_FLAGS += -Wno-interrupt_provider
30150 ifeq ($(findstring 1,$(KBUILD_EXTRA_WARN)),)
30151 DTC_FLAGS += -Wno-unit_address_vs_reg \
30152 -Wno-unit_address_format \
30153 + -Wno-gpios_property \
30154 -Wno-avoid_unnecessary_addr_size \
30155 -Wno-alias_paths \
30156 -Wno-graph_child_address \
30157 @@ -373,6 +374,18 @@ endef
30158 $(obj)/%.dt.yaml: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE
30159 $(call if_changed_rule,dtc)
30160
30161 +quiet_cmd_dtco = DTCO $@
30162 +cmd_dtco = mkdir -p $(dir ${dtc-tmp}) ; \
30163 + $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \
30164 + $(DTC) -@ -H epapr -O dtb -o $@ -b 0 \
30165 + -i $(dir $<) $(DTC_FLAGS) \
30166 + -Wno-interrupts_property \
30167 + -d $(depfile).dtc.tmp $(dtc-tmp) ; \
30168 + cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile)
30169 +
30170 +$(obj)/%.dtbo: $(src)/%-overlay.dts FORCE
30171 + $(call if_changed_dep,dtco)
30172 +
30173 dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp)
30174
30175 # Bzip2
30176 --
30177 2.30.2
30178