brcm2708: update linux 4.4 patches to latest version
[openwrt/staging/dedeckeh.git] / target / linux / brcm2708 / patches-4.4 / 0308-BCM270X_DT-Sound-DT-adjustments-for-Dynamic-DT.patch
1 From 7ad6d43eb9631ca8f4bb51f920b6fd2664d1b214 Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.org>
3 Date: Tue, 26 Apr 2016 10:44:59 +0100
4 Subject: [PATCH 308/381] BCM270X_DT: Sound DT adjustments for Dynamic DT
5
6 There are a number of issues when loading and unloading overlays for
7 sound cards:
8 1) The "sound" and "audio" nodes must be children of a bus node, such
9 as "/soc", otherwise the DT changes don't result in platform devices
10 being created and deleted.
11 2) The "/sound" node must have a "disabled" status property, otherwise
12 setting the status to "okay" won't be detected.
13 3) ALSA doesn't like having components unloaded under its feet, and it
14 is easy to deadlock or crash. Ordering the overlay fragments so that
15 the sound card appears last avoids this problem.
16
17 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
18 ---
19 arch/arm/boot/dts/bcm2708_common.dtsi | 23 +++++++++---------
20 .../dts/overlays/akkordion-iqdacplus-overlay.dts | 28 +++++++++++-----------
21 .../boot/dts/overlays/boomberry-dac-overlay.dts | 22 ++++++++---------
22 .../boot/dts/overlays/boomberry-digi-overlay.dts | 20 ++++++++--------
23 .../boot/dts/overlays/hifiberry-amp-overlay.dts | 20 ++++++++--------
24 .../boot/dts/overlays/hifiberry-dac-overlay.dts | 22 ++++++++---------
25 .../dts/overlays/hifiberry-dacplus-overlay.dts | 22 ++++++++---------
26 .../boot/dts/overlays/hifiberry-digi-overlay.dts | 20 ++++++++--------
27 arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts | 20 ++++++++--------
28 .../boot/dts/overlays/iqaudio-dacplus-overlay.dts | 22 ++++++++---------
29 arch/arm/boot/dts/overlays/raspidac3-overlay.dts | 20 ++++++++--------
30 arch/arm/boot/dts/overlays/rpi-dac-overlay.dts | 22 ++++++++---------
31 arch/arm/boot/dts/overlays/rpi-proto-overlay.dts | 20 ++++++++--------
32 13 files changed, 141 insertions(+), 140 deletions(-)
33
34 --- a/arch/arm/boot/dts/bcm2708_common.dtsi
35 +++ b/arch/arm/boot/dts/bcm2708_common.dtsi
36 @@ -34,17 +34,6 @@
37 clocks = &clocks;
38 };
39
40 - /* Onboard audio */
41 - audio: audio {
42 - compatible = "brcm,bcm2835-audio";
43 - brcm,pwm-channels = <8>;
44 - status = "disabled";
45 - };
46 -
47 - /* External sound card */
48 - sound: sound {
49 - };
50 -
51 soc: soc {
52 compatible = "simple-bus";
53 #address-cells = <1>;
54 @@ -313,6 +302,18 @@
55 compatible = "brcm,bcm2835-thermal";
56 firmware = <&firmware>;
57 };
58 +
59 + /* Onboard audio */
60 + audio: audio {
61 + compatible = "brcm,bcm2835-audio";
62 + brcm,pwm-channels = <8>;
63 + status = "disabled";
64 + };
65 +
66 + /* External sound card */
67 + sound: sound {
68 + status = "disabled";
69 + };
70 };
71
72 clocks: clocks {
73 --- a/arch/arm/boot/dts/overlays/akkordion-iqdacplus-overlay.dts
74 +++ b/arch/arm/boot/dts/overlays/akkordion-iqdacplus-overlay.dts
75 @@ -6,25 +6,13 @@
76 compatible = "brcm,bcm2708";
77
78 fragment@0 {
79 - target = <&sound>;
80 - frag0: __overlay__ {
81 - compatible = "iqaudio,iqaudio-dac";
82 - card_name = "Akkordion";
83 - dai_name = "IQaudIO DAC";
84 - dai_stream_name = "IQaudIO DAC HiFi";
85 - i2s-controller = <&i2s>;
86 - status = "okay";
87 - };
88 - };
89 -
90 - fragment@1 {
91 target = <&i2s>;
92 __overlay__ {
93 status = "okay";
94 };
95 };
96
97 - fragment@2 {
98 + fragment@1 {
99 target = <&i2c1>;
100 __overlay__ {
101 #address-cells = <1>;
102 @@ -40,7 +28,19 @@
103 };
104 };
105
106 + fragment@2 {
107 + target = <&sound>;
108 + frag2: __overlay__ {
109 + compatible = "iqaudio,iqaudio-dac";
110 + card_name = "Akkordion";
111 + dai_name = "IQaudIO DAC";
112 + dai_stream_name = "IQaudIO DAC HiFi";
113 + i2s-controller = <&i2s>;
114 + status = "okay";
115 + };
116 + };
117 +
118 __overrides__ {
119 - 24db_digital_gain = <&frag0>,"iqaudio,24db_digital_gain?";
120 + 24db_digital_gain = <&frag2>,"iqaudio,24db_digital_gain?";
121 };
122 };
123 --- a/arch/arm/boot/dts/overlays/boomberry-dac-overlay.dts
124 +++ b/arch/arm/boot/dts/overlays/boomberry-dac-overlay.dts
125 @@ -6,22 +6,13 @@
126 compatible = "brcm,bcm2708";
127
128 fragment@0 {
129 - target = <&sound>;
130 - frag0: __overlay__ {
131 - compatible = "boomberry,boomberry-dac";
132 - i2s-controller = <&i2s>;
133 - status = "okay";
134 - };
135 - };
136 -
137 - fragment@1 {
138 target = <&i2s>;
139 __overlay__ {
140 status = "okay";
141 };
142 };
143
144 - fragment@2 {
145 + fragment@1 {
146 target = <&i2c1>;
147 __overlay__ {
148 #address-cells = <1>;
149 @@ -37,7 +28,16 @@
150 };
151 };
152
153 + fragment@2 {
154 + target = <&sound>;
155 + frag2: __overlay__ {
156 + compatible = "boomberry,boomberry-dac";
157 + i2s-controller = <&i2s>;
158 + status = "okay";
159 + };
160 + };
161 +
162 __overrides__ {
163 - 24db_digital_gain = <&frag0>,"boomberry,24db_digital_gain?";
164 + 24db_digital_gain = <&frag2>,"boomberry,24db_digital_gain?";
165 };
166 };
167 --- a/arch/arm/boot/dts/overlays/boomberry-digi-overlay.dts
168 +++ b/arch/arm/boot/dts/overlays/boomberry-digi-overlay.dts
169 @@ -6,22 +6,13 @@
170 compatible = "brcm,bcm2708";
171
172 fragment@0 {
173 - target = <&sound>;
174 - __overlay__ {
175 - compatible = "boomberry,boomberry-digi";
176 - i2s-controller = <&i2s>;
177 - status = "okay";
178 - };
179 - };
180 -
181 - fragment@1 {
182 target = <&i2s>;
183 __overlay__ {
184 status = "okay";
185 };
186 };
187
188 - fragment@2 {
189 + fragment@1 {
190 target = <&i2c1>;
191 __overlay__ {
192 #address-cells = <1>;
193 @@ -36,4 +27,13 @@
194 };
195 };
196 };
197 +
198 + fragment@2 {
199 + target = <&sound>;
200 + __overlay__ {
201 + compatible = "boomberry,boomberry-digi";
202 + i2s-controller = <&i2s>;
203 + status = "okay";
204 + };
205 + };
206 };
207 --- a/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
208 +++ b/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
209 @@ -6,22 +6,13 @@
210 compatible = "brcm,bcm2708";
211
212 fragment@0 {
213 - target = <&sound>;
214 - __overlay__ {
215 - compatible = "hifiberry,hifiberry-amp";
216 - i2s-controller = <&i2s>;
217 - status = "okay";
218 - };
219 - };
220 -
221 - fragment@1 {
222 target = <&i2s>;
223 __overlay__ {
224 status = "okay";
225 };
226 };
227
228 - fragment@2 {
229 + fragment@1 {
230 target = <&i2c1>;
231 __overlay__ {
232 #address-cells = <1>;
233 @@ -36,4 +27,13 @@
234 };
235 };
236 };
237 +
238 + fragment@2 {
239 + target = <&sound>;
240 + __overlay__ {
241 + compatible = "hifiberry,hifiberry-amp";
242 + i2s-controller = <&i2s>;
243 + status = "okay";
244 + };
245 + };
246 };
247 --- a/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
248 +++ b/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
249 @@ -6,23 +6,14 @@
250 compatible = "brcm,bcm2708";
251
252 fragment@0 {
253 - target = <&sound>;
254 - __overlay__ {
255 - compatible = "hifiberry,hifiberry-dac";
256 - i2s-controller = <&i2s>;
257 - status = "okay";
258 - };
259 - };
260 -
261 - fragment@1 {
262 target = <&i2s>;
263 __overlay__ {
264 status = "okay";
265 };
266 };
267
268 - fragment@2 {
269 - target-path = "/";
270 + fragment@1 {
271 + target = <&soc>;
272 __overlay__ {
273 pcm5102a-codec {
274 #sound-dai-cells = <0>;
275 @@ -31,4 +22,13 @@
276 };
277 };
278 };
279 +
280 + fragment@2 {
281 + target = <&sound>;
282 + __overlay__ {
283 + compatible = "hifiberry,hifiberry-dac";
284 + i2s-controller = <&i2s>;
285 + status = "okay";
286 + };
287 + };
288 };
289 --- a/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
290 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
291 @@ -16,22 +16,13 @@
292 };
293
294 fragment@1 {
295 - target = <&sound>;
296 - frag1: __overlay__ {
297 - compatible = "hifiberry,hifiberry-dacplus";
298 - i2s-controller = <&i2s>;
299 - status = "okay";
300 - };
301 - };
302 -
303 - fragment@2 {
304 target = <&i2s>;
305 __overlay__ {
306 status = "okay";
307 };
308 };
309
310 - fragment@3 {
311 + fragment@2 {
312 target = <&i2c1>;
313 __overlay__ {
314 #address-cells = <1>;
315 @@ -48,7 +39,16 @@
316 };
317 };
318
319 + fragment@3 {
320 + target = <&sound>;
321 + frag3: __overlay__ {
322 + compatible = "hifiberry,hifiberry-dacplus";
323 + i2s-controller = <&i2s>;
324 + status = "okay";
325 + };
326 + };
327 +
328 __overrides__ {
329 - 24db_digital_gain = <&frag1>,"hifiberry,24db_digital_gain?";
330 + 24db_digital_gain = <&frag3>,"hifiberry,24db_digital_gain?";
331 };
332 };
333 --- a/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
334 +++ b/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
335 @@ -6,22 +6,13 @@
336 compatible = "brcm,bcm2708";
337
338 fragment@0 {
339 - target = <&sound>;
340 - __overlay__ {
341 - compatible = "hifiberry,hifiberry-digi";
342 - i2s-controller = <&i2s>;
343 - status = "okay";
344 - };
345 - };
346 -
347 - fragment@1 {
348 target = <&i2s>;
349 __overlay__ {
350 status = "okay";
351 };
352 };
353
354 - fragment@2 {
355 + fragment@1 {
356 target = <&i2c1>;
357 __overlay__ {
358 #address-cells = <1>;
359 @@ -36,4 +27,13 @@
360 };
361 };
362 };
363 +
364 + fragment@2 {
365 + target = <&sound>;
366 + __overlay__ {
367 + compatible = "hifiberry,hifiberry-digi";
368 + i2s-controller = <&i2s>;
369 + status = "okay";
370 + };
371 + };
372 };
373 --- a/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
374 +++ b/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
375 @@ -6,22 +6,13 @@
376 compatible = "brcm,bcm2708";
377
378 fragment@0 {
379 - target = <&sound>;
380 - __overlay__ {
381 - compatible = "iqaudio,iqaudio-dac";
382 - i2s-controller = <&i2s>;
383 - status = "okay";
384 - };
385 - };
386 -
387 - fragment@1 {
388 target = <&i2s>;
389 __overlay__ {
390 status = "okay";
391 };
392 };
393
394 - fragment@2 {
395 + fragment@1 {
396 target = <&i2c1>;
397 __overlay__ {
398 #address-cells = <1>;
399 @@ -36,4 +27,13 @@
400 };
401 };
402 };
403 +
404 + fragment@2 {
405 + target = <&sound>;
406 + __overlay__ {
407 + compatible = "iqaudio,iqaudio-dac";
408 + i2s-controller = <&i2s>;
409 + status = "okay";
410 + };
411 + };
412 };
413 --- a/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
414 +++ b/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
415 @@ -6,22 +6,13 @@
416 compatible = "brcm,bcm2708";
417
418 fragment@0 {
419 - target = <&sound>;
420 - frag0: __overlay__ {
421 - compatible = "iqaudio,iqaudio-dac";
422 - i2s-controller = <&i2s>;
423 - status = "okay";
424 - };
425 - };
426 -
427 - fragment@1 {
428 target = <&i2s>;
429 __overlay__ {
430 status = "okay";
431 };
432 };
433
434 - fragment@2 {
435 + fragment@1 {
436 target = <&i2c1>;
437 __overlay__ {
438 #address-cells = <1>;
439 @@ -37,7 +28,16 @@
440 };
441 };
442
443 + fragment@2 {
444 + target = <&sound>;
445 + frag2: __overlay__ {
446 + compatible = "iqaudio,iqaudio-dac";
447 + i2s-controller = <&i2s>;
448 + status = "okay";
449 + };
450 + };
451 +
452 __overrides__ {
453 - 24db_digital_gain = <&frag0>,"iqaudio,24db_digital_gain?";
454 + 24db_digital_gain = <&frag2>,"iqaudio,24db_digital_gain?";
455 };
456 };
457 --- a/arch/arm/boot/dts/overlays/raspidac3-overlay.dts
458 +++ b/arch/arm/boot/dts/overlays/raspidac3-overlay.dts
459 @@ -6,22 +6,13 @@
460 compatible = "brcm,bcm2708";
461
462 fragment@0 {
463 - target = <&sound>;
464 - __overlay__ {
465 - compatible = "jg,raspidacv3";
466 - i2s-controller = <&i2s>;
467 - status = "okay";
468 - };
469 - };
470 -
471 - fragment@1 {
472 target = <&i2s>;
473 __overlay__ {
474 status = "okay";
475 };
476 };
477
478 - fragment@2 {
479 + fragment@1 {
480 target = <&i2c1>;
481 __overlay__ {
482 #address-cells = <1>;
483 @@ -42,4 +33,13 @@
484 };
485 };
486 };
487 +
488 + fragment@2 {
489 + target = <&sound>;
490 + __overlay__ {
491 + compatible = "jg,raspidacv3";
492 + i2s-controller = <&i2s>;
493 + status = "okay";
494 + };
495 + };
496 };
497 --- a/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
498 +++ b/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
499 @@ -6,23 +6,14 @@
500 compatible = "brcm,bcm2708";
501
502 fragment@0 {
503 - target = <&sound>;
504 - __overlay__ {
505 - compatible = "rpi,rpi-dac";
506 - i2s-controller = <&i2s>;
507 - status = "okay";
508 - };
509 - };
510 -
511 - fragment@1 {
512 target = <&i2s>;
513 __overlay__ {
514 status = "okay";
515 };
516 };
517
518 - fragment@2 {
519 - target-path = "/";
520 + fragment@1 {
521 + target = <&soc>;
522 __overlay__ {
523 pcm1794a-codec {
524 #sound-dai-cells = <0>;
525 @@ -31,4 +22,13 @@
526 };
527 };
528 };
529 +
530 + fragment@2 {
531 + target = <&sound>;
532 + __overlay__ {
533 + compatible = "rpi,rpi-dac";
534 + i2s-controller = <&i2s>;
535 + status = "okay";
536 + };
537 + };
538 };
539 --- a/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
540 +++ b/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
541 @@ -6,22 +6,13 @@
542 compatible = "brcm,bcm2708";
543
544 fragment@0 {
545 - target = <&sound>;
546 - __overlay__ {
547 - compatible = "rpi,rpi-proto";
548 - i2s-controller = <&i2s>;
549 - status = "okay";
550 - };
551 - };
552 -
553 - fragment@1 {
554 target = <&i2s>;
555 __overlay__ {
556 status = "okay";
557 };
558 };
559
560 - fragment@2 {
561 + fragment@1 {
562 target = <&i2c1>;
563 __overlay__ {
564 #address-cells = <1>;
565 @@ -36,4 +27,13 @@
566 };
567 };
568 };
569 +
570 + fragment@2 {
571 + target = <&sound>;
572 + __overlay__ {
573 + compatible = "rpi,rpi-proto";
574 + i2s-controller = <&i2s>;
575 + status = "okay";
576 + };
577 + };
578 };