Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84364cee authored by Xiaoyu Ye's avatar Xiaoyu Ye
Browse files

ARM: dts: msm: add audio support for SDXPOORWILLS targets



Add common audio support with WCD934x codec and WSA881x for
SDXPOORWILLS targets.

Change-Id: I0548f8a030fff87540ac2d9f59447b8d21c5bcc0
Signed-off-by: default avatarXiaoyu Ye <benyxy@codeaurora.org>
parent 76913944
Loading
Loading
Loading
Loading
+60 −0
Original line number Original line Diff line number Diff line
@@ -2016,6 +2016,66 @@ Example:
		qcom,aux-codec = <&stub_codec>;
		qcom,aux-codec = <&stub_codec>;
	};
	};


* SDX ASoC Machine driver

Required properties:
- compatible : "qcom,sdx-asoc-snd-tavil"
- qcom,model : The user-visible name of this sound card.
- qcom,prim_mi2s_aux_master : Handle to prim_master pinctrl configurations
- qcom,prim_mi2s_aux_slave : Handle to prim_slave pinctrl configurations
- qcom,sec_mi2s_aux_master : Handle to sec_master pinctrl configurations
- qcom,sec_mi2s_aux_slave : Handle to sec_slave pinctrl configurations
- asoc-platform: This is phandle list containing the references to platform device
		nodes that are used as part of the sound card dai-links.
- asoc-platform-names: This property contains list of platform names. The order of
		the platform names should match to that of the phandle order
		given in "asoc-platform".
- asoc-cpu: This is phandle list containing the references to cpu dai device nodes
		that are used as part of the sound card dai-links.
- asoc-cpu-names: This property contains list of cpu dai names. The order of the
		cpu dai names should match to that of the phandle order give
		in "asoc-cpu". The cpu names are in the form of "%s.%d" form,
		where the id (%d) field represents the back-end AFE port id that
		this CPU dai is associated with.

Example:

	sound-tavil {
		compatible = "qcom,sdx-asoc-snd-tavil";
		qcom,model = "sdx-tavil-i2s-snd-card";
		qcom,prim_mi2s_aux_master = <&prim_master>;
		qcom,prim_mi2s_aux_slave = <&prim_slave>;
		qcom,sec_mi2s_aux_master = <&sec_master>;
		qcom,sec_mi2s_aux_slave = <&sec_slave>;

		asoc-platform = <&pcm0>, <&pcm1>, <&voip>, <&voice>,
				<&loopback>, <&hostless>, <&afe>, <&routing>,
				<&pcm_dtmf>, <&host_pcm>, <&compress>;
		asoc-platform-names = "msm-pcm-dsp.0", "msm-pcm-dsp.1",
				"msm-voip-dsp", "msm-pcm-voice",
				"msm-pcm-loopback", "msm-pcm-hostless",
				"msm-pcm-afe", "msm-pcm-routing",
				"msm-pcm-dtmf", "msm-voice-host-pcm",
				"msm-compress-dsp";
		asoc-cpu = <&dai_pri_auxpcm>, <&mi2s_prim>, <&mi2s_sec>,
				<&dtmf_tx>,
				<&rx_capture_tx>, <&rx_playback_rx>,
				<&tx_capture_tx>, <&tx_playback_rx>,
				<&afe_pcm_rx>, <&afe_pcm_tx>, <&afe_proxy_rx>,
				<&afe_proxy_tx>, <&incall_record_rx>,
				<&incall_record_tx>, <&incall_music_rx>,
				<&dai_sec_auxpcm>;
		asoc-cpu-names = "msm-dai-q6-auxpcm.1",
				"msm-dai-q6-mi2s.0", "msm-dai-q6-mi2s.1",
				"msm-dai-stub-dev.4", "msm-dai-stub-dev.5",
				"msm-dai-stub-dev.6", "msm-dai-stub-dev.7",
				"msm-dai-stub-dev.8", "msm-dai-q6-dev.224",
				"msm-dai-q6-dev.225", "msm-dai-q6-dev.241",
				"msm-dai-q6-dev.240", "msm-dai-q6-dev.32771",
				"msm-dai-q6-dev.32772", "msm-dai-q6-dev.32773",
				"msm-dai-q6-auxpcm.2";
	};

* APQ8096 Automotive ASoC Machine driver
* APQ8096 Automotive ASoC Machine driver


Required properties:
Required properties:
+1 −1
Original line number Original line Diff line number Diff line
@@ -3,7 +3,7 @@ WCD audio CODEC
Required properties:
Required properties:


 - compatible : "qcom,tasha-slim-pgd" or "qcom,tasha-i2c-pgd" for Tasha Codec
 - compatible : "qcom,tasha-slim-pgd" or "qcom,tasha-i2c-pgd" for Tasha Codec
		or "qcom,tavil-slim-pgd" for Tavil Codec
		"qcom,tavil-slim-pgd" or "qcom,tavil-i2c-pgd" for Tavil Codec
 - elemental-addr: codec slimbus slave PGD enumeration address.(48 bits)
 - elemental-addr: codec slimbus slave PGD enumeration address.(48 bits)


 - qcom,cdc-reset-gpio: gpio used for codec SOC reset.
 - qcom,cdc-reset-gpio: gpio used for codec SOC reset.
+261 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

&soc {
	qcom,msm-adsp-loader {
		compatible = "qcom,adsp-loader";
		qcom,adsp-state = <0>;
		qcom,proc-img-to-load = "modem";
	};

	qcom,msm-audio-ion {
		compatible = "qcom,msm-audio-ion";
		qcom,scm-mp-enabled;
		memory-region = <&audio_mem>;
	};

	pcm0: qcom,msm-pcm {
		compatible = "qcom,msm-pcm-dsp";
		qcom,msm-pcm-dsp-id = <0>;
	};

	routing: qcom,msm-pcm-routing {
		compatible = "qcom,msm-pcm-routing";
	};

	pcm1: qcom,msm-pcm-low-latency {
		compatible = "qcom,msm-pcm-dsp";
		qcom,msm-pcm-dsp-id = <1>;
		qcom,msm-pcm-low-latency;
		qcom,latency-level = "ultra";
	};

	qcom,msm-compr-dsp {
		compatible = "qcom,msm-compr-dsp";
	};

	voip: qcom,msm-voip-dsp {
		compatible = "qcom,msm-voip-dsp";
	};

	voice: qcom,msm-pcm-voice {
		compatible = "qcom,msm-pcm-voice";
		qcom,destroy-cvd;
	};

	stub_codec: qcom,msm-stub-codec {
		compatible = "qcom,msm-stub-codec";
	};

	qcom,msm-dai-fe {
		compatible = "qcom,msm-dai-fe";
	};

	afe: qcom,msm-pcm-afe {
		compatible = "qcom,msm-pcm-afe";
	};

	 hostless: qcom,msm-pcm-hostless {
		compatible = "qcom,msm-pcm-hostless";
	};

	host_pcm: qcom,msm-voice-host-pcm {
		compatible = "qcom,msm-voice-host-pcm";
	};

	loopback: qcom,msm-pcm-loopback {
		compatible = "qcom,msm-pcm-loopback";
	};

	compress: qcom,msm-compress-dsp {
		compatible = "qcom,msm-compress-dsp";
		qcom,adsp-version = "MDSP 1.2";
	};

	qcom,msm-dai-stub {
		compatible = "qcom,msm-dai-stub";
		dtmf_tx: qcom,msm-dai-stub-dtmf-tx {
			compatible = "qcom,msm-dai-stub-dev";
			qcom,msm-dai-stub-dev-id = <4>;
		};

		rx_capture_tx: qcom,msm-dai-stub-host-rx-capture-tx {
			compatible = "qcom,msm-dai-stub-dev";
			qcom,msm-dai-stub-dev-id = <5>;
		};

		rx_playback_rx: qcom,msm-dai-stub-host-rx-playback-rx {
			compatible = "qcom,msm-dai-stub-dev";
			qcom,msm-dai-stub-dev-id = <6>;
		};

		tx_capture_tx: qcom,msm-dai-stub-host-tx-capture-tx {
			compatible = "qcom,msm-dai-stub-dev";
			qcom,msm-dai-stub-dev-id = <7>;
		};

		tx_playback_rx: qcom,msm-dai-stub-host-tx-playback-rx {
			compatible = "qcom,msm-dai-stub-dev";
			qcom,msm-dai-stub-dev-id = <8>;
		};
	};

	qcom,msm-dai-q6 {
		compatible = "qcom,msm-dai-q6";
		afe_pcm_rx: qcom,msm-dai-q6-be-afe-pcm-rx {
			compatible = "qcom,msm-dai-q6-dev";
			qcom,msm-dai-q6-dev-id = <224>;
		};

		afe_pcm_tx: qcom,msm-dai-q6-be-afe-pcm-tx {
			compatible = "qcom,msm-dai-q6-dev";
			qcom,msm-dai-q6-dev-id = <225>;
		};

		afe_proxy_rx: qcom,msm-dai-q6-afe-proxy-rx {
			compatible = "qcom,msm-dai-q6-dev";
			qcom,msm-dai-q6-dev-id = <241>;
		};

		afe_proxy_tx: qcom,msm-dai-q6-afe-proxy-tx {
			compatible = "qcom,msm-dai-q6-dev";
			qcom,msm-dai-q6-dev-id = <240>;
		};

		incall_record_rx: qcom,msm-dai-q6-incall-record-rx {
			compatible = "qcom,msm-dai-q6-dev";
			qcom,msm-dai-q6-dev-id = <32771>;
		};

		incall_record_tx: qcom,msm-dai-q6-incall-record-tx {
			compatible = "qcom,msm-dai-q6-dev";
			qcom,msm-dai-q6-dev-id = <32772>;
		};

		incall_music_rx: qcom,msm-dai-q6-incall-music-rx {
			compatible = "qcom,msm-dai-q6-dev";
			qcom,msm-dai-q6-dev-id = <32773>;
		};
	};

	pcm_dtmf: qcom,msm-pcm-dtmf {
		compatible = "qcom,msm-pcm-dtmf";
	};

	cpu-pmu {
		compatible = "arm,cortex-a7-pmu";
		qcom,irq-is-percpu;
		interrupts = <1 8 0x100>;
	};

	dai_pri_auxpcm: qcom,msm-pri-auxpcm {
		compatible = "qcom,msm-auxpcm-dev";
		qcom,msm-cpudai-auxpcm-mode = <0>, <0>;
		qcom,msm-cpudai-auxpcm-sync = <1>, <1>;
		qcom,msm-cpudai-auxpcm-frame = <5>, <4>;
		qcom,msm-cpudai-auxpcm-quant = <2>, <2>;
		qcom,msm-cpudai-auxpcm-num-slots = <1>, <1>;
		qcom,msm-cpudai-auxpcm-slot-mapping = <1>, <1>;
		qcom,msm-cpudai-auxpcm-data = <0>, <0>;
		qcom,msm-cpudai-auxpcm-pcm-clk-rate = <2048000>, <2048000>;
		qcom,msm-auxpcm-interface = "primary";
		qcom,msm-cpudai-afe-clk-ver = <2>;
	};

	dai_sec_auxpcm: qcom,msm-sec-auxpcm {
		compatible = "qcom,msm-auxpcm-dev";
		qcom,msm-cpudai-auxpcm-mode = <0>, <0>;
		qcom,msm-cpudai-auxpcm-sync = <1>, <1>;
		qcom,msm-cpudai-auxpcm-frame = <5>, <4>;
		qcom,msm-cpudai-auxpcm-quant = <2>, <2>;
		qcom,msm-cpudai-auxpcm-num-slots = <1>, <1>;
		qcom,msm-cpudai-auxpcm-slot-mapping = <1>, <1>;
		qcom,msm-cpudai-auxpcm-data = <0>, <0>;
		qcom,msm-cpudai-auxpcm-pcm-clk-rate = <2048000>, <2048000>;
		qcom,msm-auxpcm-interface = "secondary";
		qcom,msm-cpudai-afe-clk-ver = <2>;
	};

	qcom,msm-dai-mi2s {
		compatible = "qcom,msm-dai-mi2s";
		mi2s_prim: qcom,msm-dai-q6-mi2s-prim {
			compatible = "qcom,msm-dai-q6-mi2s";
			qcom,msm-dai-q6-mi2s-dev-id = <0>;
			qcom,msm-mi2s-rx-lines = <2>;
			qcom,msm-mi2s-tx-lines = <1>;
		};
		mi2s_sec: qcom,msm-dai-q6-mi2s-sec {
			compatible = "qcom,msm-dai-q6-mi2s";
			qcom,msm-dai-q6-mi2s-dev-id = <1>;
			qcom,msm-mi2s-rx-lines = <2>;
			qcom,msm-mi2s-tx-lines = <1>;
		};

	};

	prim_master: prim_master_pinctrl {
		compatible = "qcom,msm-cdc-pinctrl";
		pinctrl-names = "aud_active", "aud_sleep";
		pinctrl-0 = <&pri_ws_active_master
				&pri_sck_active_master
				&pri_dout_active
				&pri_din_active>;
		pinctrl-1 = <&pri_ws_sleep
				&pri_sck_sleep
				&pri_dout_sleep
				&pri_din_sleep>;
		qcom,mi2s-auxpcm-cdc-gpios;
	};

	prim_slave: prim_slave_pinctrl {
		compatible = "qcom,msm-cdc-pinctrl";
		pinctrl-names = "aud_active", "aud_sleep";
		pinctrl-0 = <&pri_ws_active_slave
				&pri_sck_active_slave
				&pri_dout_active
				&pri_din_active>;
		pinctrl-1 = <&pri_ws_sleep
				&pri_sck_sleep
				&pri_dout_sleep
				&pri_din_sleep>;
		qcom,mi2s-auxpcm-cdc-gpios;
	};

	sec_master: sec_master_pinctrl {
		compatible = "qcom,msm-cdc-pinctrl";
		pinctrl-names = "aud_active", "aud_sleep";
		pinctrl-0 = <&sec_ws_active_master
				&sec_sck_active_master
				&sec_dout_active
				&sec_din_active>;
		pinctrl-1 = <&sec_ws_sleep
				&sec_sck_sleep
				&sec_dout_sleep
				&sec_din_sleep>;
		qcom,mi2s-auxpcm-cdc-gpios;
	};

	sec_slave: sec_slave_pinctrl {
		compatible = "qcom,msm-cdc-pinctrl";
		pinctrl-names = "aud_active", "aud_sleep";
		pinctrl-0 = <&sec_ws_active_slave
				&sec_sck_active_slave
				&sec_dout_active
				&sec_din_active>;
		pinctrl-1 = <&sec_ws_sleep
				&sec_sck_sleep
				&sec_dout_sleep
				&sec_din_sleep>;
		qcom,mi2s-auxpcm-cdc-gpios;
	};
};
+45 −0
Original line number Original line Diff line number Diff line
/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

&i2c_3 {
	tavil_codec {
		swr_master {
			compatible = "qcom,swr-wcd";
			#address-cells = <2>;
			#size-cells = <0>;

			wsa881x_0211: wsa881x@20170211 {
				compatible = "qcom,wsa881x";
				reg = <0x00 0x20170211>;
				qcom,spkr-sd-n-node = <&wsa_spkr_wcd_sd1>;
			};

			wsa881x_0212: wsa881x@20170212 {
				compatible = "qcom,wsa881x";
				reg = <0x00 0x20170212>;
				qcom,spkr-sd-n-node = <&wsa_spkr_wcd_sd2>;
			};

			wsa881x_0213: wsa881x@21170213 {
				compatible = "qcom,wsa881x";
				reg = <0x00 0x21170213>;
				qcom,spkr-sd-n-node = <&wsa_spkr_wcd_sd1>;
			};

			wsa881x_0214: wsa881x@21170214 {
				compatible = "qcom,wsa881x";
				reg = <0x00 0x21170214>;
				qcom,spkr-sd-n-node = <&wsa_spkr_wcd_sd2>;
			};
		};
	};
};
+143 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (c) 2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include "sdxpoorwills-wcd.dtsi"
#include "sdx-wsa881x.dtsi"
#include <dt-bindings/clock/qcom,audio-ext-clk.h>

&snd_934x {
	qcom,audio-routing =
		"AIF4 VI", "MCLK",
		"RX_BIAS", "MCLK",
		"MADINPUT", "MCLK",
		"AMIC2", "MIC BIAS2",
		"MIC BIAS2", "Headset Mic",
		"AMIC3", "MIC BIAS2",
		"MIC BIAS2", "ANCRight Headset Mic",
		"AMIC4", "MIC BIAS2",
		"MIC BIAS2", "ANCLeft Headset Mic",
		"AMIC5", "MIC BIAS3",
		"MIC BIAS3", "Handset Mic",
		"DMIC0", "MIC BIAS1",
		"MIC BIAS1", "Digital Mic0",
		"DMIC1", "MIC BIAS1",
		"MIC BIAS1", "Digital Mic1",
		"DMIC2", "MIC BIAS3",
		"MIC BIAS3", "Digital Mic2",
		"DMIC3", "MIC BIAS3",
		"MIC BIAS3", "Digital Mic3",
		"DMIC4", "MIC BIAS4",
		"MIC BIAS4", "Digital Mic4",
		"DMIC5", "MIC BIAS4",
		"MIC BIAS4", "Digital Mic5",
		"SpkrLeft IN", "SPK1 OUT",
		"SpkrRight IN", "SPK2 OUT";

	qcom,msm-mbhc-hphl-swh = <1>;
	qcom,msm-mbhc-gnd-swh = <1>;
	qcom,msm-mbhc-hs-mic-max-threshold-mv = <1700>;
	qcom,msm-mbhc-hs-mic-min-threshold-mv = <50>;
	qcom,tavil-mclk-clk-freq = <12288000>;

	asoc-codec = <&stub_codec>;
	asoc-codec-names = "msm-stub-codec.1";

	qcom,wsa-max-devs = <2>;
	qcom,wsa-devs = <&wsa881x_0211>, <&wsa881x_0212>,
			<&wsa881x_0213>, <&wsa881x_0214>;
	qcom,wsa-aux-dev-prefix = "SpkrLeft", "SpkrRight",
				  "SpkrLeft", "SpkrRight";
};

&soc {
	wcd9xxx_intc: wcd9xxx-irq {
		status = "ok";
		compatible = "qcom,wcd9xxx-irq";
		interrupt-controller;
		#interrupt-cells = <1>;
		interrupt-parent = <&tlmm>;
		qcom,gpio-connect = <&tlmm 71 0>;
		pinctrl-names = "default";
		pinctrl-0 = <&wcd_intr_default>;
	};

	clock_audio_up: audio_ext_clk_up {
		compatible = "qcom,audio-ref-clk";
		qcom,codec-mclk-clk-freq = <12288000>;
		pinctrl-names = "sleep", "active";
		pinctrl-0 = <&i2s_mclk_sleep>;
		pinctrl-1 = <&i2s_mclk_active>;
		#clock-cells = <1>;
	};

	wcd_rst_gpio: msm_cdc_pinctrl@77 {
		compatible = "qcom,msm-cdc-pinctrl";
		qcom,cdc-rst-n-gpio = <&tlmm 77 0>;
		pinctrl-names = "aud_active", "aud_sleep";
		pinctrl-0 = <&cdc_reset_active>;
		pinctrl-1 = <&cdc_reset_sleep>;
	};
};

&i2c_3 {
	wcd934x_cdc: tavil_codec {
		compatible = "qcom,tavil-i2c-pgd";
		elemental-addr = [00 01 50 02 17 02];

		interrupt-parent = <&wcd9xxx_intc>;
		interrupts = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
			      17 18 19 20 21 22 23 24 25 26 27 28 29
			      30 31>;

		qcom,wcd-rst-gpio-node = <&wcd_rst_gpio>;

		clock-names = "wcd_clk";
		clocks = <&clock_audio_up AUDIO_LPASS_MCLK>;

		cdc-vdd-buck-supply = <&pmxpoorwills_l6>;
		qcom,cdc-vdd-buck-voltage = <1800000 1800000>;
		qcom,cdc-vdd-buck-current = <650000>;

		cdc-buck-sido-supply = <&pmxpoorwills_l6>;
		qcom,cdc-buck-sido-voltage = <1800000 1800000>;
		qcom,cdc-buck-sido-current = <250000>;

		cdc-vdd-tx-h-supply = <&pmxpoorwills_l6>;
		qcom,cdc-vdd-tx-h-voltage = <1800000 1800000>;
		qcom,cdc-vdd-tx-h-current = <25000>;

		cdc-vdd-rx-h-supply = <&pmxpoorwills_l6>;
		qcom,cdc-vdd-rx-h-voltage = <1800000 1800000>;
		qcom,cdc-vdd-rx-h-current = <25000>;

		cdc-vddpx-1-supply = <&pmxpoorwills_l6>;
		qcom,cdc-vddpx-1-voltage = <1800000 1800000>;
		qcom,cdc-vddpx-1-current = <10000>;

		qcom,cdc-static-supplies = "cdc-vdd-buck",
					   "cdc-buck-sido",
					   "cdc-vdd-tx-h",
					   "cdc-vdd-rx-h",
					   "cdc-vddpx-1";

		qcom,cdc-micbias1-mv = <1800>;
		qcom,cdc-micbias2-mv = <1800>;
		qcom,cdc-micbias3-mv = <1800>;
		qcom,cdc-micbias4-mv = <1800>;

		qcom,cdc-mclk-clk-rate = <12288000>;
		qcom,cdc-dmic-sample-rate = <4800000>;

		qcom,wdsp-cmpnt-dev-name = "tavil_codec";
	};
};
Loading