1 From 5bab2e037ad60c491b7a48171b33fb1413e91352 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] BCM270X_DT: Sound DT adjustments for Dynamic DT
6 There are a number of issues when loading and unloading overlays for
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.
17 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
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(-)
34 --- a/arch/arm/boot/dts/bcm2708_common.dtsi
35 +++ b/arch/arm/boot/dts/bcm2708_common.dtsi
42 - compatible = "brcm,bcm2835-audio";
43 - brcm,pwm-channels = <8>;
44 - status = "disabled";
47 - /* External sound card */
52 compatible = "simple-bus";
55 compatible = "brcm,bcm2835-thermal";
56 firmware = <&firmware>;
61 + compatible = "brcm,bcm2835-audio";
62 + brcm,pwm-channels = <8>;
63 + status = "disabled";
66 + /* External sound card */
68 + status = "disabled";
73 --- a/arch/arm/boot/dts/overlays/akkordion-iqdacplus-overlay.dts
74 +++ b/arch/arm/boot/dts/overlays/akkordion-iqdacplus-overlay.dts
76 compatible = "brcm,bcm2708";
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>;
101 #address-cells = <1>;
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>;
119 - 24db_digital_gain = <&frag0>,"iqaudio,24db_digital_gain?";
120 + 24db_digital_gain = <&frag2>,"iqaudio,24db_digital_gain?";
123 --- a/arch/arm/boot/dts/overlays/boomberry-dac-overlay.dts
124 +++ b/arch/arm/boot/dts/overlays/boomberry-dac-overlay.dts
126 compatible = "brcm,bcm2708";
130 - frag0: __overlay__ {
131 - compatible = "boomberry,boomberry-dac";
132 - i2s-controller = <&i2s>;
148 #address-cells = <1>;
155 + frag2: __overlay__ {
156 + compatible = "boomberry,boomberry-dac";
157 + i2s-controller = <&i2s>;
163 - 24db_digital_gain = <&frag0>,"boomberry,24db_digital_gain?";
164 + 24db_digital_gain = <&frag2>,"boomberry,24db_digital_gain?";
167 --- a/arch/arm/boot/dts/overlays/boomberry-digi-overlay.dts
168 +++ b/arch/arm/boot/dts/overlays/boomberry-digi-overlay.dts
170 compatible = "brcm,bcm2708";
175 - compatible = "boomberry,boomberry-digi";
176 - i2s-controller = <&i2s>;
192 #address-cells = <1>;
201 + compatible = "boomberry,boomberry-digi";
202 + i2s-controller = <&i2s>;
207 --- a/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
208 +++ b/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
210 compatible = "brcm,bcm2708";
215 - compatible = "hifiberry,hifiberry-amp";
216 - i2s-controller = <&i2s>;
232 #address-cells = <1>;
241 + compatible = "hifiberry,hifiberry-amp";
242 + i2s-controller = <&i2s>;
247 --- a/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
248 +++ b/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
250 compatible = "brcm,bcm2708";
255 - compatible = "hifiberry,hifiberry-dac";
256 - i2s-controller = <&i2s>;
274 #sound-dai-cells = <0>;
283 + compatible = "hifiberry,hifiberry-dac";
284 + i2s-controller = <&i2s>;
289 --- a/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
290 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
296 - frag1: __overlay__ {
297 - compatible = "hifiberry,hifiberry-dacplus";
298 - i2s-controller = <&i2s>;
314 #address-cells = <1>;
321 + frag3: __overlay__ {
322 + compatible = "hifiberry,hifiberry-dacplus";
323 + i2s-controller = <&i2s>;
329 - 24db_digital_gain = <&frag1>,"hifiberry,24db_digital_gain?";
330 + 24db_digital_gain = <&frag3>,"hifiberry,24db_digital_gain?";
333 --- a/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
334 +++ b/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
336 compatible = "brcm,bcm2708";
341 - compatible = "hifiberry,hifiberry-digi";
342 - i2s-controller = <&i2s>;
358 #address-cells = <1>;
367 + compatible = "hifiberry,hifiberry-digi";
368 + i2s-controller = <&i2s>;
373 --- a/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
374 +++ b/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
376 compatible = "brcm,bcm2708";
381 - compatible = "iqaudio,iqaudio-dac";
382 - i2s-controller = <&i2s>;
398 #address-cells = <1>;
407 + compatible = "iqaudio,iqaudio-dac";
408 + i2s-controller = <&i2s>;
413 --- a/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
414 +++ b/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
416 compatible = "brcm,bcm2708";
420 - frag0: __overlay__ {
421 - compatible = "iqaudio,iqaudio-dac";
422 - i2s-controller = <&i2s>;
438 #address-cells = <1>;
445 + frag2: __overlay__ {
446 + compatible = "iqaudio,iqaudio-dac";
447 + i2s-controller = <&i2s>;
453 - 24db_digital_gain = <&frag0>,"iqaudio,24db_digital_gain?";
454 + 24db_digital_gain = <&frag2>,"iqaudio,24db_digital_gain?";
457 --- a/arch/arm/boot/dts/overlays/raspidac3-overlay.dts
458 +++ b/arch/arm/boot/dts/overlays/raspidac3-overlay.dts
460 compatible = "brcm,bcm2708";
465 - compatible = "jg,raspidacv3";
466 - i2s-controller = <&i2s>;
482 #address-cells = <1>;
491 + compatible = "jg,raspidacv3";
492 + i2s-controller = <&i2s>;
497 --- a/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
498 +++ b/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
500 compatible = "brcm,bcm2708";
505 - compatible = "rpi,rpi-dac";
506 - i2s-controller = <&i2s>;
524 #sound-dai-cells = <0>;
533 + compatible = "rpi,rpi-dac";
534 + i2s-controller = <&i2s>;
539 --- a/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
540 +++ b/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
542 compatible = "brcm,bcm2708";
547 - compatible = "rpi,rpi-proto";
548 - i2s-controller = <&i2s>;
564 #address-cells = <1>;
573 + compatible = "rpi,rpi-proto";
574 + i2s-controller = <&i2s>;