Re: [RFT PATCH v2 4/6] arm64: dts: qcom: sdm845: move audio to separate file

From: Caleb Connolly
Date: Thu Jan 19 2023 - 18:24:33 EST




On 18/01/2023 10:34, Krzysztof Kozlowski wrote:
> Re-organize SDM845 sound components into separate, audio DTSI which
> should be included and customized by the SDM845 boards wanting audio.
> The DTSI includes:
> 1. WCD9340 codec node because it is not a property of the SoC, but board.
> 2. Common sound DAI links, shared with all sound cards.

Hi Krzysztof,

I know I already reported this on IRC, I thought I'd duplicate the info
here for completeness sake.

Due to how the sound node is parsed the device numbers in alsa are
derived from the index of the sound/mmX-dai-link child nodes.

For boards which use more than 3 FE's this causes breaking changes in
userspace, as the slim-dai-link and slimcap-dai-link nodes now come
before the other mmX-dai-link nodes, for example with my OnePlus 6
patches "aplay -l" shows:

card 0: O6 [OnePlus 6], device 0: MultiMedia1 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: O6 [OnePlus 6], device 1: MultiMedia2 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: O6 [OnePlus 6], device 2: MultiMedia3 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: O6 [OnePlus 6], device 5: MultiMedia4 (*) [] <-- 5 instead of 3
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: O6 [OnePlus 6], device 6: MultiMedia5 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: O6 [OnePlus 6], device 7: MultiMedia6 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0

This breaks the UCM configs shipped by postmarketOS and Mobian - though
none of it is "upstream".

Would it be reasonable to add all 6 FE DAI's and then disable the unused
ones on a per-board basis?

>
> The Xiaomi Polaris, although includes WCD9340 codec, it lacks sound
> node, so it stays disabled.
>
> On all others boards not using audio, keep the Slimbus node disabled as
> it is empty.
>
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
>
> ---
>
> Changes since v1:
> 1. Move also sound node.
> 2. Rewrite commit msg.
>
> RFC - please kindly test the boards.
> ---
> .../boot/dts/qcom/sdm845-audio-wcd9340.dtsi | 125 ++++++++++++++++++
> arch/arm64/boot/dts/qcom/sdm845-db845c.dts | 55 +-------
> .../qcom/sdm845-xiaomi-beryllium-common.dtsi | 53 +-------
> .../boot/dts/qcom/sdm845-xiaomi-polaris.dts | 1 +
> arch/arm64/boot/dts/qcom/sdm845.dtsi | 60 +--------
> .../boot/dts/qcom/sdm850-lenovo-yoga-c630.dts | 59 ++-------
> .../boot/dts/qcom/sdm850-samsung-w737.dts | 60 ++-------
> 7 files changed, 151 insertions(+), 262 deletions(-)
> create mode 100644 arch/arm64/boot/dts/qcom/sdm845-audio-wcd9340.dtsi
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-audio-wcd9340.dtsi b/arch/arm64/boot/dts/qcom/sdm845-audio-wcd9340.dtsi
> new file mode 100644
> index 000000000000..0a94fde6741d
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sdm845-audio-wcd9340.dtsi
> @@ -0,0 +1,125 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * SDM845 SoC device tree source
> + *
> + * Copyright (c) 2018, The Linux Foundation. All rights reserved.
> + */
> +
> +&slim {
> + status = "okay";
> +
> + slim@1 {
> + reg = <1>;
> + #address-cells = <2>;
> + #size-cells = <0>;
> +
> + wcd9340_ifd: ifd@0,0 {
> + compatible = "slim217,250";
> + reg = <0 0>;
> + };
> +
> + wcd9340: codec@1,0 {
> + compatible = "slim217,250";
> + reg = <1 0>;
> + slim-ifc-dev = <&wcd9340_ifd>;
> +
> + #sound-dai-cells = <1>;
> +
> + interrupts-extended = <&tlmm 54 IRQ_TYPE_LEVEL_HIGH>;
> + interrupt-controller;
> + #interrupt-cells = <1>;
> +
> + #clock-cells = <0>;
> + clock-frequency = <9600000>;
> + clock-output-names = "mclk";
> + qcom,micbias1-microvolt = <1800000>;
> + qcom,micbias2-microvolt = <1800000>;
> + qcom,micbias3-microvolt = <1800000>;
> + qcom,micbias4-microvolt = <1800000>;
> +
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + wcdgpio: gpio-controller@42 {
> + compatible = "qcom,wcd9340-gpio";
> + gpio-controller;
> + #gpio-cells = <2>;
> + reg = <0x42 0x2>;
> + };
> +
> + swm: swm@c85 {
> + compatible = "qcom,soundwire-v1.3.0";
> + reg = <0xc85 0x40>;
> + interrupts-extended = <&wcd9340 20>;
> +
> + qcom,dout-ports = <6>;
> + qcom,din-ports = <2>;
> + qcom,ports-sinterval-low = /bits/ 8 <0x07 0x1f 0x3f 0x7 0x1f 0x3f 0x0f 0x0f>;
> + qcom,ports-offset1 = /bits/ 8 <0x01 0x02 0x0c 0x6 0x12 0x0d 0x07 0x0a>;
> + qcom,ports-offset2 = /bits/ 8 <0x00 0x00 0x1f 0x00 0x00 0x1f 0x00 0x00>;
> +
> + #sound-dai-cells = <1>;
> + clocks = <&wcd9340>;
> + clock-names = "iface";
> + #address-cells = <2>;
> + #size-cells = <0>;
> + };
> + };
> + };
> +};
> +
> +&sound {
> + compatible = "qcom,sdm845-sndcard";
> + status = "disabled";
> +
> + mm1-dai-link {
> + link-name = "MultiMedia1";
> + cpu {
> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>;
> + };
> + };
> +
> + mm2-dai-link {
> + link-name = "MultiMedia2";
> + cpu {
> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>;
> + };
> + };
> +
> + mm3-dai-link {
> + link-name = "MultiMedia3";
> + cpu {
> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>;
> + };
> + };
> +
> + sound_slim_dai_link: slim-dai-link {
> + link-name = "SLIM Playback";
> + cpu {
> + sound-dai = <&q6afedai SLIMBUS_0_RX>;
> + };
> +
> + platform {
> + sound-dai = <&q6routing>;
> + };
> +
> + codec {
> + sound-dai = <&wcd9340 0>;
> + };
> + };
> +
> + slimcap-dai-link {
> + link-name = "SLIM Capture";
> + cpu {
> + sound-dai = <&q6afedai SLIMBUS_0_TX>;
> + };
> +
> + platform {
> + sound-dai = <&q6routing>;
> + };
> +
> + codec {
> + sound-dai = <&wcd9340 1>;
> + };
> + };
> +};
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
> index 4833e89affc2..11b0554a6aea 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
> @@ -11,6 +11,7 @@
> #include <dt-bindings/sound/qcom,q6afe.h>
> #include <dt-bindings/sound/qcom,q6asm.h>
> #include "sdm845.dtsi"
> +#include "sdm845-audio-wcd9340.dtsi"
> #include "pm8998.dtsi"
> #include "pmi8998.dtsi"
>
> @@ -726,27 +727,7 @@ &quat_mi2s_sd2_active
> "MM_DL2", "MultiMedia2 Playback",
> "MM_DL4", "MultiMedia4 Playback",
> "MultiMedia3 Capture", "MM_UL3";
> -
> - mm1-dai-link {
> - link-name = "MultiMedia1";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>;
> - };
> - };
> -
> - mm2-dai-link {
> - link-name = "MultiMedia2";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>;
> - };
> - };
> -
> - mm3-dai-link {
> - link-name = "MultiMedia3";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>;
> - };
> - };
> + status = "okay";
>
> mm4-dai-link {
> link-name = "MultiMedia4";
> @@ -769,35 +750,11 @@ codec {
> sound-dai = <&lt9611_codec 0>;
> };
> };
> +};
>
> - slim-dai-link {
> - link-name = "SLIM Playback";
> - cpu {
> - sound-dai = <&q6afedai SLIMBUS_0_RX>;
> - };
> -
> - platform {
> - sound-dai = <&q6routing>;
> - };
> -
> - codec {
> - sound-dai = <&left_spkr>, <&right_spkr>, <&swm 0>, <&wcd9340 0>;
> - };
> - };
> -
> - slimcap-dai-link {
> - link-name = "SLIM Capture";
> - cpu {
> - sound-dai = <&q6afedai SLIMBUS_0_TX>;
> - };
> -
> - platform {
> - sound-dai = <&q6routing>;
> - };
> -
> - codec {
> - sound-dai = <&wcd9340 1>;
> - };
> +&sound_slim_dai_link {
> + codec {
> + sound-dai = <&left_spkr>, <&right_spkr>, <&swm 0>, <&wcd9340 0>;
> };
> };
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi
> index 5de8b4c372fc..54eabacdc031 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi
> @@ -7,6 +7,7 @@
> #include <dt-bindings/sound/qcom,q6afe.h>
> #include <dt-bindings/sound/qcom,q6asm.h>
> #include "sdm845.dtsi"
> +#include "sdm845-audio-wcd9340.dtsi"
> #include "pm8998.dtsi"
> #include "pmi8998.dtsi"
>
> @@ -384,57 +385,7 @@ &sound {
> "AMIC1", "MIC BIAS1",
> "AMIC2", "MIC BIAS2",
> "AMIC3", "MIC BIAS3";
> -
> - mm1-dai-link {
> - link-name = "MultiMedia1";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>;
> - };
> - };
> -
> - mm2-dai-link {
> - link-name = "MultiMedia2";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>;
> - };
> - };
> -
> - mm3-dai-link {
> - link-name = "MultiMedia3";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>;
> - };
> - };
> -
> - slim-dai-link {
> - link-name = "SLIM Playback";
> - cpu {
> - sound-dai = <&q6afedai SLIMBUS_0_RX>;
> - };
> -
> - platform {
> - sound-dai = <&q6routing>;
> - };
> -
> - codec {
> - sound-dai = <&wcd9340 0>;
> - };
> - };
> -
> - slimcap-dai-link {
> - link-name = "SLIM Capture";
> - cpu {
> - sound-dai = <&q6afedai SLIMBUS_0_TX>;
> - };
> -
> - platform {
> - sound-dai = <&q6routing>;
> - };
> -
> - codec {
> - sound-dai = <&wcd9340 1>;
> - };
> - };
> + status = "okay";
> };
>
> &tlmm {
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts
> index a80c3dd9a2da..f81619c8a3ba 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts
> @@ -13,6 +13,7 @@
> #include <dt-bindings/sound/qcom,q6afe.h>
> #include <dt-bindings/sound/qcom,q6asm.h>
> #include "sdm845.dtsi"
> +#include "sdm845-audio-wcd9340.dtsi"
> #include "pm8998.dtsi"
> #include "pmi8998.dtsi"
> #include "pm8005.dtsi"
> diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi
> index 0f1cb2c8addd..27d1917f5358 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi
> @@ -3831,65 +3831,7 @@ slim: slim-ngd@171c0000 {
> iommus = <&apps_smmu 0x1806 0x0>;
> #address-cells = <1>;
> #size-cells = <0>;
> -
> - slim@1 {
> - reg = <1>;
> - #address-cells = <2>;
> - #size-cells = <0>;
> -
> - wcd9340_ifd: ifd@0,0 {
> - compatible = "slim217,250";
> - reg = <0 0>;
> - };
> -
> - wcd9340: codec@1,0 {
> - compatible = "slim217,250";
> - reg = <1 0>;
> - slim-ifc-dev = <&wcd9340_ifd>;
> -
> - #sound-dai-cells = <1>;
> -
> - interrupts-extended = <&tlmm 54 IRQ_TYPE_LEVEL_HIGH>;
> - interrupt-controller;
> - #interrupt-cells = <1>;
> -
> - #clock-cells = <0>;
> - clock-frequency = <9600000>;
> - clock-output-names = "mclk";
> - qcom,micbias1-microvolt = <1800000>;
> - qcom,micbias2-microvolt = <1800000>;
> - qcom,micbias3-microvolt = <1800000>;
> - qcom,micbias4-microvolt = <1800000>;
> -
> - #address-cells = <1>;
> - #size-cells = <1>;
> -
> - wcdgpio: gpio-controller@42 {
> - compatible = "qcom,wcd9340-gpio";
> - gpio-controller;
> - #gpio-cells = <2>;
> - reg = <0x42 0x2>;
> - };
> -
> - swm: swm@c85 {
> - compatible = "qcom,soundwire-v1.3.0";
> - reg = <0xc85 0x40>;
> - interrupts-extended = <&wcd9340 20>;
> -
> - qcom,dout-ports = <6>;
> - qcom,din-ports = <2>;
> - qcom,ports-sinterval-low = /bits/ 8 <0x07 0x1f 0x3f 0x7 0x1f 0x3f 0x0f 0x0f>;
> - qcom,ports-offset1 = /bits/ 8 <0x01 0x02 0x0c 0x6 0x12 0x0d 0x07 0x0a>;
> - qcom,ports-offset2 = /bits/ 8 <0x00 0x00 0x1f 0x00 0x00 0x1f 0x00 0x00>;
> -
> - #sound-dai-cells = <1>;
> - clocks = <&wcd9340>;
> - clock-names = "iface";
> - #address-cells = <2>;
> - #size-cells = <0>;
> - };
> - };
> - };
> + status = "disabled";
> };
>
> lmh_cluster1: lmh@17d70800 {
> diff --git a/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts b/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts
> index d55ffd69155e..b979d8ae8698 100644
> --- a/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts
> @@ -13,6 +13,7 @@
> #include <dt-bindings/sound/qcom,q6afe.h>
> #include <dt-bindings/sound/qcom,q6asm.h>
> #include "sdm850.dtsi"
> +#include "sdm845-audio-wcd9340.dtsi"
> #include "pm8998.dtsi"
>
> /*
> @@ -522,57 +523,7 @@ &sound {
> "MM_DL1", "MultiMedia1 Playback",
> "MM_DL3", "MultiMedia3 Playback",
> "MultiMedia2 Capture", "MM_UL2";
> -
> - mm1-dai-link {
> - link-name = "MultiMedia1";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>;
> - };
> - };
> -
> - mm2-dai-link {
> - link-name = "MultiMedia2";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>;
> - };
> - };
> -
> - mm3-dai-link {
> - link-name = "MultiMedia3";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>;
> - };
> - };
> -
> - slim-dai-link {
> - link-name = "SLIM Playback";
> - cpu {
> - sound-dai = <&q6afedai SLIMBUS_0_RX>;
> - };
> -
> - platform {
> - sound-dai = <&q6routing>;
> - };
> -
> - codec {
> - sound-dai = <&left_spkr>, <&right_spkr>, <&swm 0>, <&wcd9340 0>;
> - };
> - };
> -
> - slimcap-dai-link {
> - link-name = "SLIM Capture";
> - cpu {
> - sound-dai = <&q6afedai SLIMBUS_0_TX>;
> - };
> -
> - platform {
> - sound-dai = <&q6routing>;
> - };
> -
> - codec {
> - sound-dai = <&wcd9340 1>;
> - };
> - };
> + status = "okay";
>
> slim-wcd-dai-link {
> link-name = "SLIM WCD Playback";
> @@ -590,6 +541,12 @@ codec {
> };
> };
>
> +&sound_slim_dai_link {
> + codec {
> + sound-dai = <&left_spkr>, <&right_spkr>, <&swm 0>, <&wcd9340 0>;
> + };
> +};
> +
> &tlmm {
> gpio-reserved-ranges = <0 4>, <81 4>;
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm850-samsung-w737.dts b/arch/arm64/boot/dts/qcom/sdm850-samsung-w737.dts
> index 6730804f4e3e..75773b06701b 100644
> --- a/arch/arm64/boot/dts/qcom/sdm850-samsung-w737.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm850-samsung-w737.dts
> @@ -14,6 +14,7 @@
> #include <dt-bindings/sound/qcom,q6afe.h>
> #include <dt-bindings/sound/qcom,q6asm.h>
> #include "sdm850.dtsi"
> +#include "sdm845-audio-wcd9340.dtsi"
> #include "pm8998.dtsi"
>
> /*
> @@ -436,7 +437,6 @@ dai@2 {
> };
>
> &sound {
> - compatible = "qcom,sdm845-sndcard";
> model = "Samsung-W737";
>
> audio-routing =
> @@ -447,57 +447,7 @@ &sound {
> "MM_DL1", "MultiMedia1 Playback",
> "MM_DL3", "MultiMedia3 Playback",
> "MultiMedia2 Capture", "MM_UL2";
> -
> - mm1-dai-link {
> - link-name = "MultiMedia1";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>;
> - };
> - };
> -
> - mm2-dai-link {
> - link-name = "MultiMedia2";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>;
> - };
> - };
> -
> - mm3-dai-link {
> - link-name = "MultiMedia3";
> - cpu {
> - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>;
> - };
> - };
> -
> - slim-dai-link {
> - link-name = "SLIM Playback";
> - cpu {
> - sound-dai = <&q6afedai SLIMBUS_0_RX>;
> - };
> -
> - platform {
> - sound-dai = <&q6routing>;
> - };
> -
> - codec {
> - sound-dai = <&left_spkr>, <&right_spkr>, <&swm 0>, <&wcd9340 0>;
> - };
> - };
> -
> - slimcap-dai-link {
> - link-name = "SLIM Capture";
> - cpu {
> - sound-dai = <&q6afedai SLIMBUS_0_TX>;
> - };
> -
> - platform {
> - sound-dai = <&q6routing>;
> - };
> -
> - codec {
> - sound-dai = <&wcd9340 1>;
> - };
> - };
> + status = "okay";
>
> slim-wcd-dai-link {
> link-name = "SLIM WCD Playback";
> @@ -515,6 +465,12 @@ codec {
> };
> };
>
> +&sound_slim_dai_link {
> + codec {
> + sound-dai = <&left_spkr>, <&right_spkr>, <&swm 0>, <&wcd9340 0>;
> + };
> +};
> +
> &tlmm {
> gpio-reserved-ranges = <0 6>, <85 4>;
>

--
Kind Regards,
Caleb (they/them)