bcm27xx: update patches from RPi foundation
[oweals/openwrt.git] / target / linux / bcm27xx / patches-5.4 / 950-0393-Add-universal-device-tree-overlay-for-SPI-devices.patch
1 From 17159731ae064a70031d746284855b7d30f17407 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 +};