aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.4/950-0763-snd_bcm2835-disable-HDMI-audio-when-vc4-is-used-3640.patch
blob: ed454102948a6f4672b151a3a2efdf39241be766 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
From 744543757bef8621f7791e28ecb894b2627cb449 Mon Sep 17 00:00:00 2001
From: Hristo Venev <hristo@venev.name>
Date: Fri, 5 Jun 2020 09:22:49 +0000
Subject: [PATCH] snd_bcm2835: disable HDMI audio when vc4 is used
 (#3640)

Things don't work too well when both the vc4 driver and the firmware
driver are trying to control the same audio output:

[  763.569406] bcm2835_audio bcm2835_audio: vchi message timeout, msg=5

Hence, when the vc4 HDMI driver is used, let it control audio. This is done
by introducing a new device tree property to the audio node, and
extending the vc4-kms-v3d overlays to set it appropriately.

Signed-off-by: Hristo Venev <hristo@venev.name>
---
 arch/arm/boot/dts/overlays/README                      |  2 ++
 arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts     | 10 +++++++++-
 arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts |  8 ++++++++
 drivers/staging/vc04_services/bcm2835-audio/bcm2835.c  |  4 +++-
 4 files changed, 22 insertions(+), 2 deletions(-)

--- a/arch/arm/boot/dts/overlays/README
+++ b/arch/arm/boot/dts/overlays/README
@@ -2745,6 +2745,7 @@ Params: cma-256                 CMA is 2
         cma-size                CMA size in bytes, 4MB aligned
         cma-default             Use upstream's default value
         audio                   Enable or disable audio over HDMI (default "on")
+        noaudio                 Disable all HDMI audio (default "off")
 
 
 Name:   vc4-kms-v3d-pi4
@@ -2761,6 +2762,7 @@ Params: cma-256                 CMA is 2
                                 "on")
         audio1                  Enable or disable audio over HDMI1 (default
                                 "on")
+        noaudio                 Disable all HDMI audio (default "off")
 
 
 Name:   vga666
--- a/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts
+++ b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts
@@ -108,7 +108,15 @@
 		};
 	};
 
+	fragment@14 {
+		target = <&audio>;
+		__overlay__  {
+		    brcm,disable-hdmi;
+		};
+	};
+
 	__overrides__ {
-		audio   = <0>,"!13";
+		audio   = <0>,"!13", <0>,"=14";
+		noaudio = <0>,"=13", <0>,"!14";
 	};
 };
--- a/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts
+++ b/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4-overlay.dts
@@ -138,8 +138,16 @@
 		};
 	};
 
+	fragment@19 {
+		target = <&audio>;
+		__overlay__  {
+		    brcm,disable-hdmi;
+		};
+	};
+
 	__overrides__ {
 		audio   = <0>,"!17";
 		audio1   = <0>,"!18";
+		noaudio = <0>,"=17", <0>,"=18", <0>,"!19";
 	};
 };
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
@@ -381,7 +381,9 @@ static int snd_bcm2835_alsa_probe(struct
 	}
 
 	if (!enable_compat_alsa) {
-		set_hdmi_enables(dev);
+		if (!of_property_read_bool(dev->of_node, "brcm,disable-hdmi"))
+			set_hdmi_enables(dev);
+
 		// In this mode, always enable analog output
 		enable_headphones = true;
 	} else {