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 = <<9611_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)