Message ID | 20230118103458.107434-4-krzysztof.kozlowski@linaro.org |
---|---|
State | New |
Headers | show |
Series | [RFT,v2,1/6] arm64: dts: qcom: sdm845-db845c: add generic sound compatible | expand |
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@linaro.org> > > --- > > 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>; >
On 20/01/2023 00:24, Caleb Connolly wrote: > > > 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". Thanks for the report. > > Would it be reasonable to add all 6 FE DAI's and then disable the unused > ones on a per-board basis? Or just drop the sound node from the audio DTSI, not sure if there are benefits in such case... > >> >> 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. Please trim your replies - there is a lot of unrelated content here and I don't know if I should keep scrolling to look for something or not. Best regards, Krzysztof
On 20/01/2023 07:42, Krzysztof Kozlowski wrote: > On 20/01/2023 00:24, Caleb Connolly wrote: >> >> >> 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". > > Thanks for the report. > > >> >> Would it be reasonable to add all 6 FE DAI's and then disable the unused >> ones on a per-board basis? > > > Or just drop the sound node from the audio DTSI, not sure if there are > benefits in such case... That sounds reasonable to me. I'd be happy to rebase my OnePlus 6 patch on this. > >> >>> >>> 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. > > Please trim your replies - there is a lot of unrelated content here and > I don't know if I should keep scrolling to look for something or not. Will do, thanks for pointing that out. > > Best regards, > Krzysztof >
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>;
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. 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@linaro.org> --- 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