From 744543757bef8621f7791e28ecb894b2627cb449 Mon Sep 17 00:00:00 2001 From: Hristo Venev 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 --- 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 {