]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: qcom: kaanapali-mtp: Add audio support (WSA8845, WCD9395, DMIC)
authorPrasad Kumpatla <prasad.kumpatla@oss.qualcomm.com>
Wed, 25 Feb 2026 07:19:23 +0000 (23:19 -0800)
committerBjorn Andersson <andersson@kernel.org>
Thu, 26 Mar 2026 14:40:45 +0000 (09:40 -0500)
Add support for audio on the Kaanapali MTP platform by introducing device
tree nodes for WSA8845 smart speaker amplifier for playback, DMIC
microphone for capture, and sound card routing. The WCD9395 codec is add
to supply MIC-BIAS, for enabling onboard microphone capture.

Signed-off-by: Prasad Kumpatla <prasad.kumpatla@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20260224-knp-dts-misc-v6-8-79d20dab8a60@oss.qualcomm.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
arch/arm64/boot/dts/qcom/kaanapali-mtp.dts

index 3544f744fd1d85647f42b0a63f9b35ed4a8e9d0b..bc57935c042c98377c8e0b0f9d50f19bf09ddefe 100644 (file)
                        clock-div = <2>;
                };
        };
+
+       sound {
+               compatible = "qcom,kaanapali-sndcard", "qcom,sm8450-sndcard";
+               model = "Kaanapali-MTP";
+
+               audio-routing = "SpkrLeft IN", "WSA_SPK1 OUT",
+                               "SpkrRight IN", "WSA_SPK2 OUT",
+                               "IN1_HPHL", "HPHL_OUT",
+                               "IN2_HPHR", "HPHR_OUT",
+                               "AMIC2", "MIC BIAS2",
+                               "VA DMIC0", "MIC BIAS1",
+                               "VA DMIC1", "MIC BIAS1",
+                               "VA DMIC2", "MIC BIAS3",
+                               "VA DMIC3", "MIC BIAS3",
+                               "TX SWR_INPUT1", "ADC2_OUTPUT";
+
+               va-dai-link {
+                       link-name = "VA Capture";
+
+                       codec {
+                               sound-dai = <&lpass_vamacro 0>;
+                       };
+
+                       cpu {
+                               sound-dai = <&q6apmbedai VA_CODEC_DMA_TX_0>;
+                       };
+
+                       platform {
+                               sound-dai = <&q6apm>;
+                       };
+               };
+
+               wcd-capture-dai-link {
+                       link-name = "WCD Capture";
+
+                       codec {
+                               sound-dai = <&wcd939x 1>, <&swr2 0>, <&lpass_txmacro 0>;
+                       };
+
+                       cpu {
+                               sound-dai = <&q6apmbedai TX_CODEC_DMA_TX_3>;
+                       };
+
+                       platform {
+                               sound-dai = <&q6apm>;
+                       };
+               };
+
+               wcd-playback-dai-link {
+                       link-name = "WCD Playback";
+
+                       codec {
+                               sound-dai = <&wcd939x 0>, <&swr1 0>, <&lpass_rxmacro 0>;
+                       };
+
+                       cpu {
+                               sound-dai = <&q6apmbedai RX_CODEC_DMA_RX_0>;
+                       };
+
+                       platform {
+                               sound-dai = <&q6apm>;
+                       };
+               };
+
+               wsa-dai-link {
+                       link-name = "WSA Playback";
+
+                       codec {
+                               sound-dai = <&north_spkr>, <&south_spkr>, <&swr0 0>,
+                                           <&lpass_wsamacro 0>;
+                       };
+
+                       cpu {
+                               sound-dai = <&q6apmbedai WSA_CODEC_DMA_RX_0>;
+                       };
+
+                       platform {
+                               sound-dai = <&q6apm>;
+                       };
+               };
+       };
+
+       wcd939x: audio-codec {
+               compatible = "qcom,wcd9395-codec", "qcom,wcd9390-codec";
+
+               pinctrl-0 = <&wcd_default>;
+               pinctrl-names = "default";
+
+               qcom,micbias1-microvolt = <1800000>;
+               qcom,micbias2-microvolt = <1800000>;
+               qcom,micbias3-microvolt = <1800000>;
+               qcom,micbias4-microvolt = <1800000>;
+               qcom,mbhc-buttons-vthreshold-microvolt = <75000 150000 237000 500000
+                                                         500000 500000 500000 500000>;
+               qcom,mbhc-headset-vthreshold-microvolt = <1700000>;
+               qcom,mbhc-headphone-vthreshold-microvolt = <50000>;
+               qcom,rx-device = <&wcd_rx>;
+               qcom,tx-device = <&wcd_tx>;
+
+               reset-gpios = <&tlmm 161 GPIO_ACTIVE_LOW>;
+
+               vdd-buck-supply = <&vreg_l15b_1p8>;
+               vdd-rxtx-supply = <&vreg_l15b_1p8>;
+               vdd-io-supply = <&vreg_l15b_1p8>;
+               vdd-mic-bias-supply = <&vreg_bob1>;
+               vdd-px-supply = <&vreg_l1g_1p2>;
+
+               #sound-dai-cells = <1>;
+       };
 };
 
 &apps_rsc {
        };
 };
 
+&lpass_vamacro {
+       pinctrl-0 = <&dmic01_default>, <&dmic23_default>;
+       pinctrl-names = "default";
+
+       vdd-micb-supply = <&vreg_l10b_1p8>;
+       qcom,dmic-sample-rate = <4800000>;
+};
+
 &pcie0 {
        pinctrl-0 = <&pcie0_default_state>;
        pinctrl-names = "default";
        status = "okay";
 };
 
+&swr0 {
+       status = "okay";
+
+       /* WSA8845, Speaker North */
+       north_spkr: speaker@0,0 {
+               compatible = "sdw20217020400";
+               reg = <0 0>;
+               pinctrl-0 = <&spkr_0_sd_n_active>;
+               pinctrl-names = "default";
+               powerdown-gpios = <&tlmm 76 GPIO_ACTIVE_LOW>;
+               #sound-dai-cells = <0>;
+               sound-name-prefix = "SpkrLeft";
+               vdd-1p8-supply = <&vreg_l15b_1p8>;
+               vdd-io-supply = <&vreg_l2i_1p2>;
+
+               /*
+                * WSA8845 Port 1 (DAC)     <=> SWR0 Port 1 (SPKR_L)
+                * WSA8845 Port 2 (COMP)    <=> SWR0 Port 2 (SPKR_L_COMP)
+                * WSA8845 Port 3 (BOOST)   <=> SWR0 Port 3 (SPKR_L_BOOST)
+                * WSA8845 Port 4 (PBR)     <=> SWR0 Port 7 (PBR)
+                * WSA8845 Port 5 (VISENSE) <=> SWR0 Port 10 (SPKR_L_VI)
+                * WSA8845 Port 6 (CPS)     <=> SWR0 Port 13 (CPS)
+                */
+               qcom,port-mapping = <1 2 3 7 10 13>;
+       };
+
+       /* WSA8845, Speaker South */
+       south_spkr: speaker@0,1 {
+               compatible = "sdw20217020400";
+               reg = <0 1>;
+               pinctrl-0 = <&spkr_1_sd_n_active>;
+               pinctrl-names = "default";
+               powerdown-gpios = <&tlmm 77 GPIO_ACTIVE_LOW>;
+               #sound-dai-cells = <0>;
+               sound-name-prefix = "SpkrRight";
+               vdd-1p8-supply = <&vreg_l15b_1p8>;
+               vdd-io-supply = <&vreg_l2i_1p2>;
+
+               /*
+                * WSA8845 Port 1 (DAC)     <=> SWR0 Port 4 (SPKR_R)
+                * WSA8845 Port 2 (COMP)    <=> SWR0 Port 5 (SPKR_R_COMP)
+                * WSA8845 Port 3 (BOOST)   <=> SWR0 Port 6 (SPKR_R_BOOST)
+                * WSA8845 Port 4 (PBR)     <=> SWR0 Port 7 (PBR)
+                * WSA8845 Port 5 (VISENSE) <=> SWR0 Port 11 (SPKR_R_VI)
+                * WSA8845 Port 6 (CPS)     <=> SWR0 Port 13 (CPS)
+                */
+               qcom,port-mapping = <4 5 6 7 11 13>;
+       };
+};
+
+&swr1 {
+       status = "okay";
+
+       /* WCD9395 RX */
+       wcd_rx: codec@0,4 {
+               compatible = "sdw20217010e00";
+               reg = <0 4>;
+
+               /*
+                * WCD9395 RX Port 1 (HPH_L/R)      <=> SWR1 Port 1 (HPH_L/R)
+                * WCD9395 RX Port 2 (CLSH)         <=> SWR1 Port 2 (CLSH)
+                * WCD9395 RX Port 3 (COMP_L/R)     <=> SWR1 Port 3 (COMP_L/R)
+                * WCD9395 RX Port 4 (LO)           <=> SWR1 Port 4 (LO)
+                * WCD9395 RX Port 5 (DSD_L/R)      <=> SWR1 Port 5 (DSD_L/R)
+                * WCD9395 RX Port 6 (HIFI_PCM_L/R) <=> SWR1 Port 9 (HIFI_PCM_L/R)
+                */
+               qcom,rx-port-mapping = <1 2 3 4 5 9>;
+       };
+};
+
+&swr2 {
+       status = "okay";
+
+       /* WCD9395 TX */
+       wcd_tx: codec@0,3 {
+               compatible = "sdw20217010e00";
+               reg = <0 3>;
+
+               /*
+                * WCD9395 TX Port 1 (ADC1,2,3,4)         <=> SWR2 Port 2 (TX SWR_INPUT 0,1,2,3)
+                * WCD9395 TX Port 2 (ADC3,4 & DMIC0,1)   <=> SWR2 Port 2 (TX SWR_INPUT 0,1,2,3)
+                * WCD9395 TX Port 3 (DMIC0,1,2,3 & MBHC) <=> SWR2 Port 3 (TX SWR_INPUT 4,5,6,7)
+                * WCD9395 TX Port 4 (DMIC4,5,6,7)        <=> SWR2 Port 4 (TX SWR_INPUT 8,9,10,11)
+                */
+               qcom,tx-port-mapping = <2 2 3 4>;
+       };
+};
+
 &tlmm {
        gpio-reserved-ranges = <36 4>, /* NFC eSE SPI */
                               <74 1>, /* eSE */
                               <119 2>, /* SoCCP */
                               <144 4>; /* CXM UART */
 
+       spkr_0_sd_n_active: spkr-0-sd-n-active-state {
+               pins = "gpio76";
+               function = "gpio";
+               drive-strength = <16>;
+               bias-disable;
+       };
+
+       spkr_1_sd_n_active: spkr-1-sd-n-active-state {
+               pins = "gpio77";
+               function = "gpio";
+               drive-strength = <16>;
+               bias-disable;
+       };
+
        pcie0_default_state: pcie0-default-state {
                perst-n-pins {
                        pins = "gpio102";
                        bias-pull-up;
                };
        };
+
+       wcd_default: wcd-reset-n-active-state {
+               pins = "gpio161";
+               function = "gpio";
+               drive-strength = <16>;
+               bias-disable;
+       };
 };
 
 &uart7 {