arm64: dts: qcom: sdm845-oneplus-*: add audio devices
authorCaleb Connolly <caleb.connolly@linaro.org>
Wed, 25 Jan 2023 23:18:28 +0000 (23:18 +0000)
committerBjorn Andersson <andersson@kernel.org>
Thu, 9 Feb 2023 00:02:16 +0000 (16:02 -0800)
Populate the audio devices found on the OnePlus 6 and 6T using the
sdm845-sndcard driver.

Both devices have the earpiece and headphone jack connected to the
WCD9341 codec. The OnePlus 6 uses the MAX98927 speaker codec which is
already supported upstream. The OnePlus 6T uses a currently unsupported
TFA9894 codec.

Two internal microphones are supported, as well as an external headset
mic. Each DAI link is expected to be used for a single device.

Alsa UCM2 configs for this setup can be found here, they are not yet
upstream and include support for call audio which is missing in this
patch

https://gitlab.com/sdm845-mainline/alsa-ucm-conf/-/tree/9ed12836b269764c4a853411d38ccb6abb70b383/ucm2/OnePlus

Co-developed-by: Dylan Van Assche <me@dylanvanassche.be>
Signed-off-by: Dylan Van Assche <me@dylanvanassche.be>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230125231829.2621768-1-caleb.connolly@linaro.org
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
arch/arm64/boot/dts/qcom/sdm845-oneplus-enchilada.dts
arch/arm64/boot/dts/qcom/sdm845-oneplus-fajita.dts

index 548e346..9b08c7f 100644 (file)
@@ -9,8 +9,11 @@
 
 #include <dt-bindings/input/linux-event-codes.h>
 #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+#include <dt-bindings/sound/qcom,q6afe.h>
+#include <dt-bindings/sound/qcom,q6asm.h>
 
 #include "sdm845.dtsi"
+#include "sdm845-wcd9340.dtsi"
 #include "pm8998.dtsi"
 #include "pmi8998.dtsi"
 
        status = "okay";
 };
 
+&q6afedai {
+       qi2s@22 {
+               reg = <22>;
+               qcom,sd-lines = <1>;
+       };
+
+       qi2s@23 {
+               reg = <23>;
+               qcom,sd-lines = <0>;
+       };
+};
+
+&q6asmdai {
+       dai@0 {
+               reg = <0>;
+       };
+
+       dai@1 {
+               reg = <1>;
+       };
+
+       dai@2 {
+               reg = <2>;
+       };
+
+       dai@3 {
+               reg = <3>;
+       };
+
+       dai@4 {
+               reg = <4>;
+       };
+
+       dai@5 {
+               reg = <5>;
+       };
+};
+
 &qupv3_id_1 {
        status = "okay";
 };
        bias-disable;
 };
 
+&sound {
+       compatible = "qcom,sdm845-sndcard";
+       pinctrl-0 = <&quat_mi2s_active &quat_mi2s_sd0_active &quat_mi2s_sd1_active>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       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>;
+               };
+       };
+
+       mm4-dai-link {
+               link-name = "MultiMedia4";
+               cpu {
+                       sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA4>;
+               };
+       };
+
+       mm5-dai-link {
+               link-name = "MultiMedia5";
+               cpu {
+                       sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA5>;
+               };
+       };
+
+       mm6-dai-link {
+               link-name = "MultiMedia6";
+               cpu {
+                       sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA6>;
+               };
+       };
+
+       speaker_playback_dai: speaker-dai-link {
+               link-name = "Speaker Playback";
+               cpu {
+                       sound-dai = <&q6afedai QUATERNARY_MI2S_RX>;
+               };
+
+               platform {
+                       sound-dai = <&q6routing>;
+               };
+       };
+
+       slim-dai-link {
+               link-name = "SLIM Playback 1";
+               cpu {
+                       sound-dai = <&q6afedai SLIMBUS_0_RX>;
+               };
+
+               platform {
+                       sound-dai = <&q6routing>;
+               };
+
+               codec {
+                       sound-dai = <&wcd9340 0>;
+               };
+       };
+
+       slimcap-dai-link {
+               link-name = "SLIM Capture 1";
+               cpu {
+                       sound-dai = <&q6afedai SLIMBUS_0_TX>;
+               };
+
+               platform {
+                       sound-dai = <&q6routing>;
+               };
+
+               codec {
+                       sound-dai = <&wcd9340 1>;
+               };
+       };
+
+       slim2-dai-link {
+               link-name = "SLIM Playback 2";
+               cpu {
+                       sound-dai = <&q6afedai SLIMBUS_1_RX>;
+               };
+
+               platform {
+                       sound-dai = <&q6routing>;
+               };
+
+               codec {
+                       sound-dai = <&wcd9340 2>; /* AIF2_PB */
+               };
+       };
+
+       slimcap2-dai-link {
+               link-name = "SLIM Capture 2";
+               cpu {
+                       sound-dai = <&q6afedai SLIMBUS_1_TX>;
+               };
+
+               platform {
+                       sound-dai = <&q6routing>;
+               };
+
+               codec {
+                       sound-dai = <&wcd9340 3>; /* AIF2_CAP */
+               };
+       };
+
+       slimcap3-dai-link {
+               link-name = "SLIM Capture 3";
+               cpu {
+                       sound-dai = <&q6afedai SLIMBUS_2_TX>;
+               };
+
+               platform {
+                       sound-dai = <&q6routing>;
+               };
+
+               codec {
+                       sound-dai = <&wcd9340 5>; /* AIF3_CAP */
+               };
+       };
+};
+
 &uart6 {
        status = "okay";
 
                bias-pull-down;
                input-enable;
        };
+
+       speaker_default: speaker-default-state {
+               mux {
+                       pins = "gpio69";
+                       function = "gpio";
+                       drive-strength = <16>;
+                       bias-pull-up;
+                       output-high;
+               };
+       };
 };
 
 &venus {
        firmware-name = "qcom/sdm845/oneplus6/venus.mbn";
 };
 
+&wcd9340 {
+       pinctrl-0 = <&wcd_intr_default>;
+       pinctrl-names = "default";
+       reset-gpios = <&tlmm 64 GPIO_ACTIVE_HIGH>;
+       vdd-buck-supply = <&vreg_s4a_1p8>;
+       vdd-buck-sido-supply = <&vreg_s4a_1p8>;
+       vdd-tx-supply = <&vreg_s4a_1p8>;
+       vdd-rx-supply = <&vreg_s4a_1p8>;
+       vdd-io-supply = <&vreg_s4a_1p8>;
+};
+
 &wifi {
        status = "okay";
        vdd-0.8-cx-mx-supply = <&vreg_l5a_0p8>;
index bf2cf92..6cdda97 100644 (file)
 &bq27441_fg {
        monitored-battery = <&battery>;
 };
+
+&i2c4 {
+       status = "okay";
+
+       max98927_codec: max98927@3a {
+               compatible = "maxim,max98927";
+               reg = <0x3a>;
+               #sound-dai-cells = <1>;
+
+               pinctrl-0 = <&speaker_default>;
+               pinctrl-names = "default";
+
+               reset-gpios = <&tlmm 69 GPIO_ACTIVE_LOW>;
+
+               vmon-slot-no = <1>;
+               imon-slot-no = <0>;
+       };
+};
+
+&sound {
+       model = "OnePlus 6";
+       audio-routing = "RX_BIAS", "MCLK",
+                       "AMIC2", "MIC BIAS2",
+                       "AMIC3", "MIC BIAS4",
+                       "AMIC4", "MIC BIAS1",
+                       "AMIC5", "MIC BIAS4";
+};
+
+&speaker_playback_dai {
+       codec {
+               sound-dai = <&max98927_codec 0>;
+       };
+};
+
+&wcd9340 {
+       qcom,micbias1-microvolt = <1800000>;
+       qcom,micbias2-microvolt = <2700000>;
+       qcom,micbias3-microvolt = <1800000>;
+       qcom,micbias4-microvolt = <1800000>;
+};
index 1b6b5bf..086d14e 100644 (file)
        compatible = "samsung,s6e3fc2x01";
 };
 
+&i2c4 {
+       /* nxp,tfa9894 @ 0x34 */
+};
+
 &bq27441_fg {
        monitored-battery = <&battery>;
 };
 
+&sound {
+       model = "OnePlus 6T";
+       audio-routing = "RX_BIAS", "MCLK",
+                       "AMIC1", "MIC BIAS3",
+                       "AMIC2", "MIC BIAS2",
+                       "AMIC3", "MIC BIAS4",
+                       "AMIC4", "MIC BIAS1",
+                       "AMIC5", "MIC BIAS3";
+
+};
+
+/*
+ * The TFA9894 codec is currently unsupported.
+ * We need to delete the node to allow the soundcard
+ * to probe for headphones/earpiece.
+ */
+/delete-node/ &speaker_playback_dai;
+
 &rmi4_f12 {
        touchscreen-y-mm = <148>;
 };
+
+&wcd9340 {
+       qcom,micbias1-microvolt = <2700000>;
+       qcom,micbias2-microvolt = <2700000>;
+       qcom,micbias3-microvolt = <2700000>;
+       qcom,micbias4-microvolt = <2700000>;
+};