bcm27xx: update to latest patches from RPi foundation
[openwrt/openwrt.git] / target / linux / bcm27xx / patches-4.19 / 950-0790-Add-universal-device-tree-overlay-for-SPI-devices.patch
1 From 4d19be9132ca10cf582450a86dcb2c41f227f589 Mon Sep 17 00:00:00 2001
2 From: Ed Spiridonov <edo.rus@gmail.com>
3 Date: Tue, 10 Dec 2019 22:45:04 +0300
4 Subject: [PATCH] Add universal device tree overlay for SPI devices
5
6 Just specify the SPI address and device name ("compatible" property).
7 This overlay lacks any device-specific parameter support!
8 (some of them could be added later)
9
10 Examples:
11 1. SPI NOR flash on spi0.1, maximum SPI clock frequency 45MHz:
12 dtoverlay=anyspi:spi0-1,dev="jedec,spi-nor",speed=45000000
13 2. MCP3204 ADC on spi1.2, maximum SPI clock frequency 500kHz:
14 dtoverlay=anyspi:spi1-2,dev="microchip,mcp3204"
15
16 Signed-off-by: Ed Spiridonov <edo.rus@gmail.com>
17 ---
18 arch/arm/boot/dts/overlays/Makefile | 1 +
19 arch/arm/boot/dts/overlays/README | 23 ++
20 arch/arm/boot/dts/overlays/anyspi-overlay.dts | 205 ++++++++++++++++++
21 3 files changed, 229 insertions(+)
22 create mode 100755 arch/arm/boot/dts/overlays/anyspi-overlay.dts
23
24 --- a/arch/arm/boot/dts/overlays/Makefile
25 +++ b/arch/arm/boot/dts/overlays/Makefile
26 @@ -15,6 +15,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
27 allo-katana-dac-audio.dtbo \
28 allo-piano-dac-pcm512x-audio.dtbo \
29 allo-piano-dac-plus-pcm512x-audio.dtbo \
30 + anyspi.dtbo \
31 apds9960.dtbo \
32 applepi-dac.dtbo \
33 at86rf233.dtbo \
34 --- a/arch/arm/boot/dts/overlays/README
35 +++ b/arch/arm/boot/dts/overlays/README
36 @@ -441,6 +441,29 @@ Params: 24db_digital_gain Allow ga
37 better voice quality. (default Off)
38
39
40 +Name: anyspi
41 +Info: Universal device tree overlay for SPI devices
42 +
43 + Just specify the SPI address and device name ("compatible" property).
44 + This overlay lacks any device-specific parameter support!
45 +
46 + For devices on spi1 or spi2, the interfaces should be enabled
47 + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
48 +
49 + Examples:
50 + 1. SPI NOR flash on spi0.1, maximum SPI clock frequency 45MHz:
51 + dtoverlay=anyspi:spi0-1,dev="jedec,spi-nor",speed=45000000
52 + 2. MCP3204 ADC on spi1.2, maximum SPI clock frequency 500kHz:
53 + dtoverlay=anyspi:spi1-2,dev="microchip,mcp3204"
54 +Load: dtoverlay=anyspi,<param>=<val>
55 +Params: spi<n>-<m> Configure device at spi<n>, cs<m>
56 + (boolean, required)
57 + dev Set device name to search compatible module
58 + (string, required)
59 + speed Set SPI clock frequency in Hz
60 + (integer, optional, default 500000)
61 +
62 +
63 Name: apds9960
64 Info: Configures the AVAGO APDS9960 digital proximity, ambient light, RGB and
65 gesture sensor
66 --- /dev/null
67 +++ b/arch/arm/boot/dts/overlays/anyspi-overlay.dts
68 @@ -0,0 +1,205 @@
69 +/*
70 + * Universal device tree overlay for SPI devices
71 + */
72 +
73 +/dts-v1/;
74 +/plugin/;
75 +
76 +/ {
77 + compatible = "brcm,bcm2835";
78 +
79 + fragment@0 {
80 + target = <&spidev0>;
81 + __dormant__ {
82 + status = "disabled";
83 + };
84 + };
85 +
86 + fragment@1 {
87 + target = <&spidev1>;
88 + __dormant__ {
89 + status = "disabled";
90 + };
91 + };
92 +
93 + fragment@2 {
94 + target-path = "spi1/spidev@0";
95 + __dormant__ {
96 + status = "disabled";
97 + };
98 + };
99 +
100 + fragment@3 {
101 + target-path = "spi1/spidev@1";
102 + __dormant__ {
103 + status = "disabled";
104 + };
105 + };
106 +
107 + fragment@4 {
108 + target-path = "spi1/spidev@2";
109 + __dormant__ {
110 + status = "disabled";
111 + };
112 + };
113 +
114 + fragment@5 {
115 + target-path = "spi2/spidev@0";
116 + __dormant__ {
117 + status = "disabled";
118 + };
119 + };
120 +
121 + fragment@6 {
122 + target-path = "spi2/spidev@1";
123 + __dormant__ {
124 + status = "disabled";
125 + };
126 + };
127 +
128 + fragment@7 {
129 + target-path = "spi2/spidev@2";
130 + __dormant__ {
131 + status = "disabled";
132 + };
133 + };
134 +
135 + fragment@8 {
136 + target = <&spi0>;
137 + __dormant__ {
138 + status = "okay";
139 + #address-cells = <1>;
140 + #size-cells = <0>;
141 +
142 + anyspi_00: anyspi@0 {
143 + reg = <0>;
144 + spi-max-frequency = <500000>;
145 + };
146 + };
147 + };
148 +
149 + fragment@9 {
150 + target = <&spi0>;
151 + __dormant__ {
152 + status = "okay";
153 + #address-cells = <1>;
154 + #size-cells = <0>;
155 +
156 + anyspi_01: anyspi@1 {
157 + reg = <1>;
158 + spi-max-frequency = <500000>;
159 + };
160 + };
161 + };
162 +
163 + fragment@10 {
164 + target = <&spi1>;
165 + __dormant__ {
166 + status = "okay";
167 + #address-cells = <1>;
168 + #size-cells = <0>;
169 +
170 + anyspi_10: anyspi@0 {
171 + reg = <0>;
172 + spi-max-frequency = <500000>;
173 + };
174 + };
175 + };
176 +
177 + fragment@11 {
178 + target = <&spi1>;
179 + __dormant__ {
180 + status = "okay";
181 + #address-cells = <1>;
182 + #size-cells = <0>;
183 +
184 + anyspi_11: anyspi@1 {
185 + reg = <1>;
186 + spi-max-frequency = <500000>;
187 + };
188 + };
189 + };
190 +
191 + fragment@12 {
192 + target = <&spi1>;
193 + __dormant__ {
194 + status = "okay";
195 + #address-cells = <1>;
196 + #size-cells = <0>;
197 +
198 + anyspi_12: anyspi@2 {
199 + reg = <2>;
200 + spi-max-frequency = <500000>;
201 + };
202 + };
203 + };
204 +
205 + fragment@13 {
206 + target = <&spi2>;
207 + __dormant__ {
208 + status = "okay";
209 + #address-cells = <1>;
210 + #size-cells = <0>;
211 +
212 + anyspi_20: anyspi@0 {
213 + reg = <0>;
214 + spi-max-frequency = <500000>;
215 + };
216 + };
217 + };
218 +
219 + fragment@14 {
220 + target = <&spi2>;
221 + __dormant__ {
222 + status = "okay";
223 + #address-cells = <1>;
224 + #size-cells = <0>;
225 +
226 + anyspi_21: anyspi@1 {
227 + reg = <1>;
228 + spi-max-frequency = <500000>;
229 + };
230 + };
231 + };
232 +
233 + fragment@15 {
234 + target = <&spi2>;
235 + __dormant__ {
236 + status = "okay";
237 + #address-cells = <1>;
238 + #size-cells = <0>;
239 +
240 + anyspi_22: anyspi@2 {
241 + reg = <2>;
242 + spi-max-frequency = <500000>;
243 + };
244 + };
245 + };
246 +
247 + __overrides__ {
248 + spi0-0 = <0>, "+0+8";
249 + spi0-1 = <0>, "+1+9";
250 + spi1-0 = <0>, "+2+10";
251 + spi1-1 = <0>, "+3+11";
252 + spi1-2 = <0>, "+4+12";
253 + spi2-0 = <0>, "+5+13";
254 + spi2-1 = <0>, "+6+14";
255 + spi2-2 = <0>, "+7+15";
256 + dev = <&anyspi_00>,"compatible",
257 + <&anyspi_01>,"compatible",
258 + <&anyspi_10>,"compatible",
259 + <&anyspi_11>,"compatible",
260 + <&anyspi_12>,"compatible",
261 + <&anyspi_20>,"compatible",
262 + <&anyspi_21>,"compatible",
263 + <&anyspi_22>,"compatible";
264 + speed = <&anyspi_00>, "spi-max-frequency:0",
265 + <&anyspi_01>, "spi-max-frequency:0",
266 + <&anyspi_10>, "spi-max-frequency:0",
267 + <&anyspi_11>, "spi-max-frequency:0",
268 + <&anyspi_12>, "spi-max-frequency:0",
269 + <&anyspi_20>, "spi-max-frequency:0",
270 + <&anyspi_21>, "spi-max-frequency:0",
271 + <&anyspi_22>, "spi-max-frequency:0";
272 + };
273 +};