Merge "ASoC: msm: refactor machine driver for msmfalcon"
This commit is contained in:
commit
73ab51e35d
22 changed files with 8778 additions and 96 deletions
|
@ -1606,6 +1606,130 @@ Example:
|
|||
asoc-wsa-codec-prefixes = "SpkrMono";
|
||||
};
|
||||
|
||||
* MSMFALCON ASoC Machine driver
|
||||
|
||||
Required properties:
|
||||
- compatible : "qcom,msmfalcon-asoc-snd"
|
||||
- qcom,model : The user-visible name of this sound card.
|
||||
- qcom,msm-hs-micbias-type : This property is used to recognize the headset
|
||||
micbias type, internal or external.
|
||||
- qcom,msm-mbhc-hphl-swh: This property is used to distinguish headset HPHL
|
||||
switch type on target typically the switch type will be normally open or
|
||||
normally close, value for this property 0 for normally close and 1 for
|
||||
normally open.
|
||||
- qcom,msm-mbhc-gnd-swh: This property is used to distinguish headset GND
|
||||
switch type on target typically the switch type will be normally open or
|
||||
normally close, value for this property 0 for normally close and 1 for
|
||||
normally open.
|
||||
- qcom,audio-routing : A list of the connections between audio components.
|
||||
- qcom,msm-gpios : Lists down all the gpio sets that are supported.
|
||||
- qcom,pinctrl-names : Lists all the possible combinations of the gpio sets
|
||||
mentioned in qcom,msm-gpios.
|
||||
- pinctrl-names : The combinations of gpio sets from above that are supported in
|
||||
the flavor.
|
||||
- pinctrl-# : Pinctrl states as mentioned in pinctrl-names.
|
||||
|
||||
Optional properties:
|
||||
- qcom,cdc-us-euro-gpios : GPIO on which gnd/mic swap signal is coming.
|
||||
- qcom,msm-micbias1-ext-cap : Boolean. Enable micbias1 external
|
||||
capacitor mode.
|
||||
- qcom,msm-micbias2-ext-cap : Boolean. Enable micbias2 external
|
||||
capacitor mode.
|
||||
- qcom,msm-spk-ext-pa : GPIO which enables external speaker pa.
|
||||
- qcom,msm-mclk-freq : This property is used to inform machine driver about
|
||||
mclk frequency needs to be configured for internal and external PA.
|
||||
- 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 given.
|
||||
- asoc-codec: This is phandle list containing the references to codec dai device
|
||||
nodes that are used as part of the sound card dai-links.
|
||||
- asoc-codec-names: This property contains list of codec dai names. The order of the
|
||||
codec dai names should match to that of the phandle order given
|
||||
in "asoc-codec".
|
||||
- qcom,wsa-max-devs : Maximum number of WSA881x devices present in the target
|
||||
- qcom,wsa-devs : List of phandles for all possible WSA881x devices supported for the target
|
||||
- qcom,wsa-aux-dev-prefix : Name prefix with Left/Right configuration for WSA881x device
|
||||
|
||||
Example:
|
||||
sound {
|
||||
compatible = "qcom,msmfalcon-asoc-snd";
|
||||
qcom,model = "msmfalcon-snd-card";
|
||||
qcom,msm-mclk-freq = <9600000>;
|
||||
qcom,msm-mbhc-hphl-swh = <0>;
|
||||
qcom,msm-mbhc-gnd-swh = <0>;
|
||||
qcom,msm-hs-micbias-type = "internal";
|
||||
qcom,msm-micbias1-ext-cap;
|
||||
qcom,audio-routing =
|
||||
"RX_BIAS", "MCLK",
|
||||
"SPK_RX_BIAS", "MCLK",
|
||||
"INT_LDO_H", "MCLK",
|
||||
"MIC BIAS External", "Handset Mic",
|
||||
"MIC BIAS Internal2", "Headset Mic",
|
||||
"MIC BIAS External", "Secondary Mic",
|
||||
"AMIC1", "MIC BIAS External",
|
||||
"AMIC2", "MIC BIAS Internal2",
|
||||
"AMIC3", "MIC BIAS External";
|
||||
qcom,msm-gpios =
|
||||
"int_pdm",
|
||||
"us_eu_gpio";
|
||||
qcom,pinctrl-names =
|
||||
"all_off",
|
||||
"int_pdm_act",
|
||||
"us_eu_gpio_act",
|
||||
"int_pdm_us_eu_gpio_act";
|
||||
pinctrl-names =
|
||||
"all_off",
|
||||
"int_pdm_act",
|
||||
"us_eu_gpio_act",
|
||||
"int_pdm_us_eu_gpio_act";
|
||||
pinctrl-0 = <&cdc_pdm_lines_sus &cdc_pdm_lines_2_sus &cross_conn_det_sus>;
|
||||
pinctrl-1 = <&cdc_pdm_lines_act &cdc_pdm_lines_2_act &cross_conn_det_sus>;
|
||||
pinctrl-2 = <&cdc_pdm_lines_sus &cdc_pdm_lines_2_sus &cross_conn_det_act>;
|
||||
pinctrl-3 = <&cdc_pdm_lines_act &cdc_pdm_lines_2_act &cross_conn_det_act>;
|
||||
qcom,cdc-us-euro-gpios = <&msm_gpio 63 0>;
|
||||
asoc-platform = <&pcm0>, <&pcm1>, <&voip>, <&voice>,
|
||||
<&loopback>, <&compress>, <&hostless>,
|
||||
<&afe>, <&lsm>, <&routing>, <&lpa>;
|
||||
asoc-platform-names = "msm-pcm-dsp.0", "msm-pcm-dsp.1",
|
||||
"msm-voip-dsp", "msm-pcm-voice", "msm-pcm-loopback",
|
||||
"msm-compress-dsp", "msm-pcm-hostless", "msm-pcm-afe",
|
||||
"msm-lsm-client", "msm-pcm-routing", "msm-pcm-lpa";
|
||||
asoc-cpu = <&dai_pri_auxpcm>, <&dai_hdmi>,
|
||||
<&dai_mi2s0>, <&dai_mi2s1>, <&dai_mi2s2>, <&dai_mi2s3>,
|
||||
<&sb_0_rx>, <&sb_0_tx>, <&sb_1_rx>, <&sb_1_tx>,
|
||||
<&sb_3_rx>, <&sb_3_tx>, <&sb_4_rx>, <&sb_4_tx>,
|
||||
<&bt_sco_rx>, <&bt_sco_tx>, <&int_fm_rx>, <&int_fm_tx>,
|
||||
<&afe_pcm_rx>, <&afe_pcm_tx>, <&afe_proxy_rx>, <&afe_proxy_tx>,
|
||||
<&incall_record_rx>, <&incall_record_tx>, <&incall_music_rx>,
|
||||
<&incall_music_2_rx>;
|
||||
asoc-cpu-names = "msm-dai-q6-auxpcm.1", "msm-dai-q6-hdmi.8",
|
||||
"msm-dai-q6-mi2s.0", "msm-dai-q6-mi2s.1",
|
||||
"msm-dai-q6-mi2s.2", "msm-dai-q6-mi2s.3",
|
||||
"msm-dai-q6-dev.16384", "msm-dai-q6-dev.16385",
|
||||
"msm-dai-q6-dev.16386", "msm-dai-q6-dev.16387",
|
||||
"msm-dai-q6-dev.16390", "msm-dai-q6-dev.16391",
|
||||
"msm-dai-q6-dev.16392", "msm-dai-q6-dev.16393",
|
||||
"msm-dai-q6-dev.12288", "msm-dai-q6-dev.12289",
|
||||
"msm-dai-q6-dev.12292", "msm-dai-q6-dev.12293",
|
||||
"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-dev.32770";
|
||||
asoc-codec = <&stub_codec>;
|
||||
asoc-codec-names = "msm-stub-codec.1";
|
||||
qcom,wsa-max-devs = <2>;
|
||||
qcom,wsa-devs = <&wsa881x_211>, <&wsa881x_212>,
|
||||
<&wsa881x_213>, <&wsa881x_214>;
|
||||
qcom,wsa-aux-dev-prefix = "SpkrRight", "SpkrLeft",
|
||||
"SpkrRight", "SpkrLeft";
|
||||
};
|
||||
|
||||
* MSM8952 Slimbus ASoC Machine driver
|
||||
|
||||
Required properties:
|
||||
|
@ -2032,6 +2156,139 @@ Example:
|
|||
asoc-codec-names = "msm-stub-codec.1";
|
||||
};
|
||||
|
||||
* MSMFALCON ASoC Slimbus Machine driver
|
||||
|
||||
Required properties:
|
||||
- compatible : "qcom,msmfalcon-asoc-snd-tasha" for tasha codec,
|
||||
"qcom,msmfalcon-asoc-snd-tavil" for tavil codec.
|
||||
- qcom,model : The user-visible name of this sound card.
|
||||
- qcom,msm-mclk-freq : MCLK frequency value for external codec
|
||||
- qcom,msm-gpios : Lists down all the gpio sets that are supported.
|
||||
- qcom,pinctrl-names : Lists all the possible combinations of the gpio sets
|
||||
mentioned in qcom,msm-gpios. Say we have 2^N combinations for N GPIOs,
|
||||
this would list all the 2^N combinations.
|
||||
- pinctrl-names : The combinations of gpio sets from above that are supported in
|
||||
the flavor. This can be sometimes same as qcom, pinctrl-names i.e with 2^N
|
||||
combinations or will have less incase if some combination is not supported.
|
||||
- pinctrl-# : Pinctrl states as mentioned in pinctrl-names.
|
||||
- qcom,audio-routing : A list of the connections between audio components.
|
||||
- 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 given
|
||||
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.
|
||||
- asoc-codec: This is phandle list containing the references to codec dai device
|
||||
nodes that are used as part of the sound card dai-links.
|
||||
- asoc-codec-names: This property contains list of codec dai names. The order of the
|
||||
codec dai names should match to that of the phandle order given
|
||||
in "asoc-codec".
|
||||
Optional properties:
|
||||
- qcom,cdc-us-euro-gpios : GPIO on which gnd/mic swap signal is coming.
|
||||
- clock-names : clock name defined for external clock.
|
||||
- clocks : external clock defined for codec clock.
|
||||
- qcom,wsa-max-devs : Maximum number of WSA881x devices present in the target
|
||||
- qcom,wsa-devs : List of phandles for all possible WSA881x devices supported for the target
|
||||
- qcom,wsa-aux-dev-prefix : Name prefix with Left/Right configuration for WSA881x device
|
||||
|
||||
Example:
|
||||
|
||||
sound-9335 {
|
||||
compatible = "qcom,msmfalcon-asoc-snd-tasha";
|
||||
qcom,model = "msmfalcon-tasha-snd-card";
|
||||
|
||||
qcom,audio-routing =
|
||||
"RX_BIAS", "MCLK",
|
||||
"LDO_H", "MCLK",
|
||||
"AIF4 MAD", "MCLK",
|
||||
"ultrasound amp", "LINEOUT1",
|
||||
"ultrasound amp", "LINEOUT3",
|
||||
"AMIC1", "MIC BIAS1 Internal1",
|
||||
"MIC BIAS1 Internal1", "Handset Mic",
|
||||
"AMIC2", "MIC BIAS2 External",
|
||||
"MIC BIAS2 External", "Headset Mic",
|
||||
"AMIC3", "MIC BIAS2 External",
|
||||
"MIC BIAS2 External", "ANCRight Headset Mic",
|
||||
"AMIC4", "MIC BIAS2 External",
|
||||
"MIC BIAS2 External", "ANCLeft Headset Mic",
|
||||
"DMIC1", "MIC BIAS1 External",
|
||||
"MIC BIAS1 External", "Digital Mic1",
|
||||
"DMIC2", "MIC BIAS1 External",
|
||||
"MIC BIAS1 External", "Digital Mic2",
|
||||
"DMIC3", "MIC BIAS3 External",
|
||||
"MIC BIAS3 External", "Digital Mic3",
|
||||
"DMIC4", "MIC BIAS3 External",
|
||||
"MIC BIAS3 External", "Digital Mic4",
|
||||
"DMIC5", "MIC BIAS4 External",
|
||||
"MIC BIAS4 External", "Digital Mic5",
|
||||
"DMIC6", "MIC BIAS4 External",
|
||||
"MIC BIAS4 External", "Digital Mic6";
|
||||
|
||||
qcom,msm-mbhc-hphl-swh = <0>;
|
||||
qcom,msm-mbhc-gnd-swh = <0>;
|
||||
qcom,msm-mclk-freq = <9600000>;
|
||||
qcom,msm-gpios =
|
||||
"slim",
|
||||
"us_eu_gpio";
|
||||
qcom,pinctrl-names =
|
||||
"all_off",
|
||||
"slim_act",
|
||||
"us_eu_gpio_act",
|
||||
"slim_us_eu_gpio_act";
|
||||
pinctrl-names =
|
||||
"all_off",
|
||||
"slim_act",
|
||||
"us_eu_gpio_act",
|
||||
"slim_us_eu_gpio_act";
|
||||
pinctrl-0 = <&cdc_slim_lines_sus &cross_conn_det_sus>;
|
||||
pinctrl-1 = <&cdc_slim_lines_act &cross_conn_det_sus>;
|
||||
pinctrl-2 = <&cdc_slim_lines_sus &cross_conn_det_act>;
|
||||
pinctrl-3 = <&cdc_slim_lines_act &cross_conn_det_act>;
|
||||
qcom,cdc-us-euro-gpios = <&msm_gpio 63 0>;
|
||||
asoc-platform = <&pcm0>, <&pcm1>, <&pcm2>, <&voip>, <&voice>,
|
||||
<&loopback>, <&compress>, <&hostless>,
|
||||
<&afe>, <&lsm>, <&routing>, <&cpe>, <&compr>;
|
||||
asoc-platform-names = "msm-pcm-dsp.0", "msm-pcm-dsp.1",
|
||||
"msm-pcm-dsp.2", "msm-voip-dsp",
|
||||
"msm-pcm-voice", "msm-pcm-loopback",
|
||||
"msm-compress-dsp", "msm-pcm-hostless",
|
||||
"msm-pcm-afe", "msm-lsm-client",
|
||||
"msm-pcm-routing", "msm-cpe-lsm",
|
||||
"msm-compr-dsp";
|
||||
asoc-cpu = <&dai_hdmi>,
|
||||
<&sb_0_rx>, <&sb_0_tx>, <&sb_1_rx>, <&sb_1_tx>,
|
||||
<&sb_2_rx>, <&sb_2_tx>, <&sb_3_rx>, <&sb_3_tx>,
|
||||
<&sb_4_rx>, <&sb_4_tx>, <&sb_5_tx>,
|
||||
<&afe_pcm_rx>, <&afe_pcm_tx>, <&afe_proxy_rx>,
|
||||
<&afe_proxy_tx>, <&incall_record_rx>,
|
||||
<&incall_record_tx>, <&incall_music_rx>,
|
||||
<&incall_music_2_rx>, <&sb_5_rx>;
|
||||
asoc-cpu-names = "msm-dai-q6-hdmi.8",
|
||||
"msm-dai-q6-dev.16384", "msm-dai-q6-dev.16385",
|
||||
"msm-dai-q6-dev.16386", "msm-dai-q6-dev.16387",
|
||||
"msm-dai-q6-dev.16388", "msm-dai-q6-dev.16389",
|
||||
"msm-dai-q6-dev.16390", "msm-dai-q6-dev.16391",
|
||||
"msm-dai-q6-dev.16392", "msm-dai-q6-dev.16393",
|
||||
"msm-dai-q6-dev.16395", "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-dev.32770", "msm-dai-q6-dev.16394";
|
||||
asoc-codec = <&stub_codec>;
|
||||
asoc-codec-names = "msm-stub-codec.1";
|
||||
qcom,wsa-max-devs = <2>;
|
||||
qcom,wsa-devs = <&wsa881x_211>, <&wsa881x_212>,
|
||||
<&wsa881x_213>, <&wsa881x_214>;
|
||||
qcom,wsa-aux-dev-prefix = "SpkrRight", "SpkrLeft",
|
||||
"SpkrRight", "SpkrLeft";
|
||||
};
|
||||
|
||||
* MSMCOBALT ASoC Machine driver
|
||||
|
||||
Required properties:
|
||||
|
|
|
@ -914,6 +914,34 @@ struct adm_cmd_connect_afe_port_v5 {
|
|||
#define AFE_PORT_ID_SENARY_MI2S_RX 0x1018
|
||||
/* ID of the senary MI2S Tx port. */
|
||||
#define AFE_PORT_ID_SENARY_MI2S_TX 0x1019
|
||||
/* ID of the Internal 0 MI2S Rx port */
|
||||
#define AFE_PORT_ID_INT0_MI2S_RX 0x102E
|
||||
/* ID of the Internal 0 MI2S Tx port */
|
||||
#define AFE_PORT_ID_INT0_MI2S_TX 0x102F
|
||||
/* ID of the Internal 1 MI2S Rx port */
|
||||
#define AFE_PORT_ID_INT1_MI2S_RX 0x1030
|
||||
/* ID of the Internal 1 MI2S Tx port */
|
||||
#define AFE_PORT_ID_INT1_MI2S_TX 0x1031
|
||||
/* ID of the Internal 2 MI2S Rx port */
|
||||
#define AFE_PORT_ID_INT2_MI2S_RX 0x1032
|
||||
/* ID of the Internal 2 MI2S Tx port */
|
||||
#define AFE_PORT_ID_INT2_MI2S_TX 0x1033
|
||||
/* ID of the Internal 3 MI2S Rx port */
|
||||
#define AFE_PORT_ID_INT3_MI2S_RX 0x1034
|
||||
/* ID of the Internal 3 MI2S Tx port */
|
||||
#define AFE_PORT_ID_INT3_MI2S_TX 0x1035
|
||||
/* ID of the Internal 4 MI2S Rx port */
|
||||
#define AFE_PORT_ID_INT4_MI2S_RX 0x1036
|
||||
/* ID of the Internal 4 MI2S Tx port */
|
||||
#define AFE_PORT_ID_INT4_MI2S_TX 0x1037
|
||||
/* ID of the Internal 5 MI2S Rx port */
|
||||
#define AFE_PORT_ID_INT5_MI2S_RX 0x1038
|
||||
/* ID of the Internal 5 MI2S Tx port */
|
||||
#define AFE_PORT_ID_INT5_MI2S_TX 0x1039
|
||||
/* ID of the Internal 6 MI2S Rx port */
|
||||
#define AFE_PORT_ID_INT6_MI2S_RX 0x103A
|
||||
/* ID of the Internal 6 MI2S Tx port */
|
||||
#define AFE_PORT_ID_INT6_MI2S_TX 0x103B
|
||||
#define AFE_PORT_ID_SPDIF_RX 0x5000
|
||||
#define AFE_PORT_ID_RT_PROXY_PORT_001_RX 0x2000
|
||||
#define AFE_PORT_ID_RT_PROXY_PORT_001_TX 0x2001
|
||||
|
@ -8858,6 +8886,20 @@ enum afe_lpass_clk_mode {
|
|||
#define Q6AFE_LPASS_CLK_ID_SEN_MI2S_IBIT 0x10D
|
||||
/* Clock ID for SENARY I2S EBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_SEN_MI2S_EBIT 0x10E
|
||||
/* Clock ID for INT0 I2S IBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT0_MI2S_IBIT 0x10F
|
||||
/* Clock ID for INT1 I2S IBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT1_MI2S_IBIT 0x110
|
||||
/* Clock ID for INT2 I2S IBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT2_MI2S_IBIT 0x111
|
||||
/* Clock ID for INT3 I2S IBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT3_MI2S_IBIT 0x112
|
||||
/* Clock ID for INT4 I2S IBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT4_MI2S_IBIT 0x113
|
||||
/* Clock ID for INT5 I2S IBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT5_MI2S_IBIT 0x114
|
||||
/* Clock ID for INT6 I2S IBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT6_MI2S_IBIT 0x115
|
||||
|
||||
/* Clock ID for Primary PCM IBIT */
|
||||
#define Q6AFE_LPASS_CLK_ID_PRI_PCM_IBIT 0x200
|
||||
|
@ -8899,8 +8941,19 @@ enum afe_lpass_clk_mode {
|
|||
#define Q6AFE_LPASS_CLK_ID_MCLK_2 0x301
|
||||
/* Clock ID for MCLK3 */
|
||||
#define Q6AFE_LPASS_CLK_ID_MCLK_3 0x302
|
||||
/* Clock ID for MCLK4 */
|
||||
#define Q6AFE_LPASS_CLK_ID_MCLK_4 0x304
|
||||
/* Clock ID for Internal Digital Codec Core */
|
||||
#define Q6AFE_LPASS_CLK_ID_INTERNAL_DIGITAL_CODEC_CORE 0x303
|
||||
/* Clock ID for INT MCLK0 */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT_MCLK_0 0x305
|
||||
/* Clock ID for INT MCLK1 */
|
||||
#define Q6AFE_LPASS_CLK_ID_INT_MCLK_1 0x306
|
||||
/*
|
||||
* Clock ID for soundwire NPL.
|
||||
* This is the clock to be used to enable NPL clock for internal Soundwire.
|
||||
*/
|
||||
#define AFE_CLOCK_SET_CLOCK_ID_SWR_NPL_CLK 0x307
|
||||
|
||||
/* Clock ID for AHB HDMI input */
|
||||
#define Q6AFE_LPASS_CLK_ID_AHB_HDMI_INPUT 0x400
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
|
||||
/* Copyright (c) 2012-2016, 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
|
||||
|
@ -28,8 +28,15 @@
|
|||
#define MSM_SEC_MI2S_SD1 4
|
||||
#define MSM_QUIN_MI2S 5
|
||||
#define MSM_SENARY_MI2S 6
|
||||
#define MSM_INT0_MI2S 7
|
||||
#define MSM_INT1_MI2S 8
|
||||
#define MSM_INT2_MI2S 9
|
||||
#define MSM_INT3_MI2S 10
|
||||
#define MSM_INT4_MI2S 11
|
||||
#define MSM_INT5_MI2S 12
|
||||
#define MSM_INT6_MI2S 13
|
||||
#define MSM_MI2S_MIN MSM_PRIM_MI2S
|
||||
#define MSM_MI2S_MAX MSM_SENARY_MI2S
|
||||
#define MSM_MI2S_MAX MSM_INT6_MI2S
|
||||
|
||||
struct msm_dai_auxpcm_config {
|
||||
u16 mode;
|
||||
|
|
|
@ -183,10 +183,26 @@ enum {
|
|||
IDX_AFE_PORT_ID_USB_TX,
|
||||
/* IDX 124 */
|
||||
IDX_DISPLAY_PORT_RX,
|
||||
/* IDX 125-> 128 */
|
||||
IDX_AFE_PORT_ID_TERTIARY_PCM_RX,
|
||||
IDX_AFE_PORT_ID_TERTIARY_PCM_TX,
|
||||
IDX_AFE_PORT_ID_QUATERNARY_PCM_RX,
|
||||
IDX_AFE_PORT_ID_QUATERNARY_PCM_TX,
|
||||
/* IDX 129-> 142 */
|
||||
IDX_AFE_PORT_ID_INT0_MI2S_RX,
|
||||
IDX_AFE_PORT_ID_INT0_MI2S_TX,
|
||||
IDX_AFE_PORT_ID_INT1_MI2S_RX,
|
||||
IDX_AFE_PORT_ID_INT1_MI2S_TX,
|
||||
IDX_AFE_PORT_ID_INT2_MI2S_RX,
|
||||
IDX_AFE_PORT_ID_INT2_MI2S_TX,
|
||||
IDX_AFE_PORT_ID_INT3_MI2S_RX,
|
||||
IDX_AFE_PORT_ID_INT3_MI2S_TX,
|
||||
IDX_AFE_PORT_ID_INT4_MI2S_RX,
|
||||
IDX_AFE_PORT_ID_INT4_MI2S_TX,
|
||||
IDX_AFE_PORT_ID_INT5_MI2S_RX,
|
||||
IDX_AFE_PORT_ID_INT5_MI2S_TX,
|
||||
IDX_AFE_PORT_ID_INT6_MI2S_RX,
|
||||
IDX_AFE_PORT_ID_INT6_MI2S_TX,
|
||||
AFE_MAX_PORTS
|
||||
};
|
||||
|
||||
|
|
|
@ -40,9 +40,10 @@
|
|||
#include <sound/tlv.h>
|
||||
#include <sound/q6core.h>
|
||||
#include <soc/qcom/subsystem_notif.h>
|
||||
#include "msm8x16-wcd.h"
|
||||
#include "../../msm/msmfalcon-common.h"
|
||||
#include "../wcd-mbhc-v2.h"
|
||||
#include "msm8916-wcd-irq.h"
|
||||
#include "msm8x16-wcd.h"
|
||||
|
||||
#define DRV_NAME "msm-codec"
|
||||
#define MSM89XX_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
|
||||
|
@ -253,8 +254,6 @@ static struct wcd_mbhc_register
|
|||
WCD_MBHC_REGISTER("WCD_MBHC_SWCH_LEVEL_REMOVE",
|
||||
MSM89XX_PMIC_ANALOG_MBHC_ZDET_ELECT_RESULT,
|
||||
0x10, 4, 0),
|
||||
WCD_MBHC_REGISTER("WCD_MBHC_MOISTURE_VREF",
|
||||
0, 0, 0, 0),
|
||||
WCD_MBHC_REGISTER("WCD_MBHC_PULLDOWN_CTRL",
|
||||
MSM89XX_PMIC_ANALOG_MICB_2_EN, 0x20, 5, 0),
|
||||
WCD_MBHC_REGISTER("WCD_MBHC_ANC_DET_EN",
|
||||
|
@ -295,7 +294,7 @@ static int msm8x16_wcd_dt_parse_vreg_info(struct device *dev,
|
|||
const char *vreg_name, bool ondemand);
|
||||
static struct msm8x16_wcd_pdata *msm8x16_wcd_populate_dt_pdata(
|
||||
struct device *dev);
|
||||
static int msm8x16_wcd_enable_ext_mb_source(struct snd_soc_codec *codec,
|
||||
static int msm8x16_wcd_enable_ext_mb_source(struct wcd_mbhc *mbhc,
|
||||
bool turn_on);
|
||||
static void msm8x16_trim_btn_reg(struct snd_soc_codec *codec);
|
||||
static void msm8x16_wcd_set_micb_v(struct snd_soc_codec *codec);
|
||||
|
@ -335,35 +334,28 @@ static int get_codec_version(struct msm8x16_wcd_priv *msm8x16_wcd)
|
|||
static int msm_digcdc_clock_control(bool flag)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(registered_codec->component.card);
|
||||
|
||||
if (flag) {
|
||||
mutex_lock(&pdata->cdc_mclk_mutex);
|
||||
if (atomic_read(&pdata->mclk_enabled) == false) {
|
||||
if (pdata->afe_clk_ver == AFE_CLK_VERSION_V1) {
|
||||
pdata->digital_cdc_clk.clk_val =
|
||||
pdata->mclk_freq;
|
||||
ret = afe_set_digital_codec_core_clock(
|
||||
AFE_PORT_ID_PRIMARY_MI2S_RX,
|
||||
&pdata->digital_cdc_clk);
|
||||
} else {
|
||||
mutex_lock(&pdata->cdc_int_mclk0_mutex);
|
||||
if (atomic_read(&pdata->int_mclk0_enabled) == false) {
|
||||
pdata->digital_cdc_core_clk.enable = 1;
|
||||
ret = afe_set_lpass_clock_v2(
|
||||
AFE_PORT_ID_PRIMARY_MI2S_RX,
|
||||
AFE_PORT_ID_INT0_MI2S_RX,
|
||||
&pdata->digital_cdc_core_clk);
|
||||
}
|
||||
if (ret < 0) {
|
||||
pr_err("failed to enable the MCLK\n");
|
||||
goto err;
|
||||
pr_err("failed to enable the INT_MCLK0\n");
|
||||
goto err_mclk;
|
||||
}
|
||||
pr_err("enabled digital codec core clk\n");
|
||||
atomic_set(&pdata->mclk_enabled, true);
|
||||
schedule_delayed_work(&pdata->disable_mclk_work, 50);
|
||||
atomic_set(&pdata->int_mclk0_enabled, true);
|
||||
schedule_delayed_work(&pdata->disable_int_mclk0_work,
|
||||
50);
|
||||
}
|
||||
err:
|
||||
mutex_unlock(&pdata->cdc_mclk_mutex);
|
||||
err_mclk:
|
||||
mutex_unlock(&pdata->cdc_int_mclk0_mutex);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
|
@ -617,11 +609,12 @@ static void msm8x16_wcd_compute_impedance(struct snd_soc_codec *codec, s16 l,
|
|||
}
|
||||
|
||||
static struct firmware_cal *msm8x16_wcd_get_hwdep_fw_cal(
|
||||
struct snd_soc_codec *codec,
|
||||
struct wcd_mbhc *mbhc,
|
||||
enum wcd_cal_type type)
|
||||
{
|
||||
struct msm8x16_wcd_priv *msm8x16_wcd;
|
||||
struct firmware_cal *hwdep_cal;
|
||||
struct snd_soc_codec *codec = mbhc->codec;
|
||||
|
||||
if (!codec) {
|
||||
pr_err("%s: NULL codec pointer\n", __func__);
|
||||
|
@ -1063,10 +1056,11 @@ exit:
|
|||
pr_err("%s: Impedance detection completed\n", __func__);
|
||||
}
|
||||
|
||||
static int msm8x16_register_notifier(struct snd_soc_codec *codec,
|
||||
static int msm8x16_register_notifier(struct wcd_mbhc *mbhc,
|
||||
struct notifier_block *nblock,
|
||||
bool enable)
|
||||
{
|
||||
struct snd_soc_codec *codec = mbhc->codec;
|
||||
struct msm8x16_wcd_priv *msm8x16_wcd =
|
||||
snd_soc_codec_get_drvdata(codec);
|
||||
|
||||
|
@ -1624,7 +1618,7 @@ out:
|
|||
static int msm8x16_wcd_codec_enable_clock_block(struct snd_soc_codec *codec,
|
||||
int enable)
|
||||
{
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(codec->component.card);
|
||||
if (enable) {
|
||||
|
@ -1776,7 +1770,7 @@ static int msm8x16_wcd_loopback_mode_get(struct snd_kcontrol *kcontrol,
|
|||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(codec->component.card);
|
||||
dev_err(codec->dev, "%s: ucontrol->value.integer.value[0] = %ld\n",
|
||||
|
@ -1789,7 +1783,7 @@ static int msm8x16_wcd_loopback_mode_put(struct snd_kcontrol *kcontrol,
|
|||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(codec->component.card);
|
||||
dev_err(codec->dev, "%s: ucontrol->value.integer.value[0] = %ld\n",
|
||||
|
@ -3061,7 +3055,7 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w,
|
|||
{
|
||||
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||
struct msm8x16_wcd_priv *msm8x16_wcd = snd_soc_codec_get_drvdata(codec);
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(codec->component.card);
|
||||
|
||||
|
@ -3202,11 +3196,12 @@ static void msm8x16_trim_btn_reg(struct snd_soc_codec *codec)
|
|||
pr_err("%s: This device is trimmed at ATE\n", __func__);
|
||||
}
|
||||
}
|
||||
static int msm8x16_wcd_enable_ext_mb_source(struct snd_soc_codec *codec,
|
||||
static int msm8x16_wcd_enable_ext_mb_source(struct wcd_mbhc *mbhc,
|
||||
bool turn_on)
|
||||
{
|
||||
int ret = 0;
|
||||
static int count;
|
||||
struct snd_soc_codec *codec = mbhc->codec;
|
||||
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||
|
||||
dev_err(codec->dev, "%s turn_on: %d count: %d\n", __func__, turn_on,
|
||||
|
@ -3405,7 +3400,7 @@ static int msm8x16_wcd_codec_enable_dec(struct snd_soc_dapm_widget *w,
|
|||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
unsigned int decimator;
|
||||
struct msm8x16_wcd_priv *msm8x16_wcd = snd_soc_codec_get_drvdata(codec);
|
||||
char *dec_name = NULL;
|
||||
|
@ -4328,14 +4323,14 @@ int msm8x16_wcd_mclk_enable(struct snd_soc_codec *codec,
|
|||
dev_err(codec->dev, "%s: mclk_enable = %u, dapm = %d\n",
|
||||
__func__, mclk_enable, dapm);
|
||||
if (mclk_enable) {
|
||||
msm8x16_wcd->mclk_enabled = true;
|
||||
msm8x16_wcd->int_mclk0_enabled = true;
|
||||
msm8x16_wcd_codec_enable_clock_block(codec, 1);
|
||||
} else {
|
||||
if (!msm8x16_wcd->mclk_enabled) {
|
||||
if (!msm8x16_wcd->int_mclk0_enabled) {
|
||||
dev_err(codec->dev, "Error, MCLK already diabled\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
msm8x16_wcd->mclk_enabled = false;
|
||||
msm8x16_wcd->int_mclk0_enabled = false;
|
||||
msm8x16_wcd_codec_enable_clock_block(codec, 0);
|
||||
}
|
||||
return 0;
|
||||
|
@ -5178,7 +5173,7 @@ static struct regulator *wcd8x16_wcd_codec_find_regulator(
|
|||
|
||||
static int msm8x16_wcd_device_down(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
struct msm8x16_wcd_priv *msm8x16_wcd_priv =
|
||||
snd_soc_codec_get_drvdata(codec);
|
||||
int i;
|
||||
|
@ -5250,7 +5245,7 @@ static int msm8x16_wcd_device_down(struct snd_soc_codec *codec)
|
|||
MSM89XX_PMIC_ANALOG_SPKR_DAC_CTL, 0x93);
|
||||
|
||||
msm8x16_wcd_bringup(codec);
|
||||
atomic_set(&pdata->mclk_enabled, false);
|
||||
atomic_set(&pdata->int_mclk0_enabled, false);
|
||||
set_bit(BUS_DOWN, &msm8x16_wcd_priv->status_mask);
|
||||
snd_soc_card_change_online_state(codec->component.card, 0);
|
||||
return 0;
|
||||
|
@ -5399,7 +5394,7 @@ static void msm8x16_wcd_configure_cap(struct snd_soc_codec *codec,
|
|||
bool micbias1, bool micbias2)
|
||||
{
|
||||
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(codec->component.card);
|
||||
|
||||
|
@ -5553,7 +5548,7 @@ static int msm8x16_wcd_codec_probe(struct snd_soc_codec *codec)
|
|||
wcd_mbhc_init(&msm8x16_wcd_priv->mbhc, codec, &mbhc_cb, &intr_ids,
|
||||
wcd_mbhc_registers, true);
|
||||
|
||||
msm8x16_wcd_priv->mclk_enabled = false;
|
||||
msm8x16_wcd_priv->int_mclk0_enabled = false;
|
||||
msm8x16_wcd_priv->clock_active = false;
|
||||
msm8x16_wcd_priv->config_mode_active = false;
|
||||
|
||||
|
@ -5654,33 +5649,23 @@ static int msm8x16_wcd_disable_static_supplies_to_optimum(
|
|||
|
||||
int msm8x16_wcd_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
struct msm8x16_wcd *msm8x16 = codec->control_data;
|
||||
struct msm8x16_wcd_pdata *msm8x16_pdata = msm8x16->dev->platform_data;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(codec->component.card);
|
||||
pr_err("%s: mclk cnt = %d, mclk_enabled = %d\n",
|
||||
__func__, atomic_read(&pdata->mclk_rsc_ref),
|
||||
atomic_read(&pdata->mclk_enabled));
|
||||
if (atomic_read(&pdata->mclk_enabled) == true) {
|
||||
__func__, atomic_read(&pdata->int_mclk0_rsc_ref),
|
||||
atomic_read(&pdata->int_mclk0_enabled));
|
||||
if (atomic_read(&pdata->int_mclk0_enabled) == true) {
|
||||
cancel_delayed_work_sync(
|
||||
&pdata->disable_mclk_work);
|
||||
mutex_lock(&pdata->cdc_mclk_mutex);
|
||||
if (atomic_read(&pdata->mclk_enabled) == true) {
|
||||
if (pdata->afe_clk_ver == AFE_CLK_VERSION_V1) {
|
||||
pdata->digital_cdc_clk.clk_val = 0;
|
||||
afe_set_digital_codec_core_clock(
|
||||
AFE_PORT_ID_PRIMARY_MI2S_RX,
|
||||
&pdata->digital_cdc_clk);
|
||||
} else {
|
||||
&pdata->disable_int_mclk0_work);
|
||||
mutex_lock(&pdata->cdc_int_mclk0_mutex);
|
||||
pdata->digital_cdc_core_clk.enable = 0;
|
||||
afe_set_lpass_clock_v2(
|
||||
AFE_PORT_ID_PRIMARY_MI2S_RX,
|
||||
afe_set_lpass_clock_v2(AFE_PORT_ID_INT0_MI2S_RX,
|
||||
&pdata->digital_cdc_core_clk);
|
||||
}
|
||||
atomic_set(&pdata->mclk_enabled, false);
|
||||
}
|
||||
mutex_unlock(&pdata->cdc_mclk_mutex);
|
||||
atomic_set(&pdata->int_mclk0_enabled, false);
|
||||
mutex_unlock(&pdata->cdc_int_mclk0_mutex);
|
||||
}
|
||||
msm8x16_wcd_disable_static_supplies_to_optimum(msm8x16, msm8x16_pdata);
|
||||
return 0;
|
||||
|
@ -5688,7 +5673,7 @@ int msm8x16_wcd_suspend(struct snd_soc_codec *codec)
|
|||
|
||||
int msm8x16_wcd_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct msm8916_asoc_mach_data *pdata = NULL;
|
||||
struct msm_asoc_mach_data *pdata = NULL;
|
||||
struct msm8x16_wcd *msm8x16 = codec->control_data;
|
||||
struct msm8x16_wcd_pdata *msm8x16_pdata = msm8x16->dev->platform_data;
|
||||
|
||||
|
|
|
@ -221,31 +221,6 @@ struct wcd_imped_i_ref {
|
|||
int offset;
|
||||
};
|
||||
|
||||
struct msm8916_asoc_mach_data {
|
||||
int codec_type;
|
||||
int ext_pa;
|
||||
int us_euro_gpio;
|
||||
int spk_ext_pa_gpio;
|
||||
int mclk_freq;
|
||||
int lb_mode;
|
||||
int afe_clk_ver;
|
||||
u8 micbias1_cap_mode;
|
||||
u8 micbias2_cap_mode;
|
||||
atomic_t mclk_rsc_ref;
|
||||
atomic_t mclk_enabled;
|
||||
atomic_t wsa_mclk_rsc_ref;
|
||||
struct mutex cdc_mclk_mutex;
|
||||
struct mutex wsa_mclk_mutex;
|
||||
struct delayed_work disable_mclk_work;
|
||||
struct afe_digital_clk_cfg digital_cdc_clk;
|
||||
struct afe_clk_set digital_cdc_core_clk;
|
||||
void __iomem *vaddr_gpio_mux_spkr_ctl;
|
||||
void __iomem *vaddr_gpio_mux_mic_ctl;
|
||||
void __iomem *vaddr_gpio_mux_quin_ctl;
|
||||
void __iomem *vaddr_gpio_mux_pcm_ctl;
|
||||
struct on_demand_supply wsa_switch_supply;
|
||||
};
|
||||
|
||||
struct msm8x16_wcd_pdata {
|
||||
int irq;
|
||||
int irq_base;
|
||||
|
@ -291,7 +266,7 @@ struct msm8x16_wcd_priv {
|
|||
u32 rx_bias_count;
|
||||
s32 dmic_1_2_clk_cnt;
|
||||
u32 mute_mask;
|
||||
bool mclk_enabled;
|
||||
bool int_mclk0_enabled;
|
||||
bool clock_active;
|
||||
bool config_mode_active;
|
||||
u16 boost_option;
|
||||
|
|
|
@ -98,6 +98,70 @@ config SND_SOC_CPE
|
|||
The configuration includes the cpe lsm driver to enable
|
||||
listen on codec.
|
||||
|
||||
config SND_SOC_INT_CODEC
|
||||
tristate "SoC Machine driver for MSMFALCON_INT"
|
||||
depends on ARCH_QCOM
|
||||
select SND_SOC_QDSP6V2
|
||||
select SND_SOC_MSM_STUB
|
||||
select SND_SOC_MSM_HOSTLESS_PCM
|
||||
select SND_DYNAMIC_MINORS
|
||||
select MSM_QDSP6_APRV2_GLINK
|
||||
select MSM_QDSP6_SSR
|
||||
select MSM_QDSP6_PDR
|
||||
select MSM_QDSP6_NOTIFIER
|
||||
select MSM_QDSP6V2_CODECS
|
||||
select SND_SOC_MSM_SWR
|
||||
select SND_SOC_MSM8X16_WCD
|
||||
select QTI_PP
|
||||
select DTS_SRS_TM
|
||||
select DOLBY_DAP
|
||||
select DOLBY_DS2
|
||||
select SND_HWDEP
|
||||
select MSM_ULTRASOUND
|
||||
select DTS_EAGLE
|
||||
select SND_SOC_MSMFALCON_COMMON
|
||||
select SND_SOC_COMPRESS
|
||||
help
|
||||
To add support for SoC audio on MSM_INT.
|
||||
This will enable sound soc drivers which
|
||||
interfaces with DSP, also it will enable
|
||||
the machine driver and the corresponding
|
||||
DAI-links
|
||||
|
||||
config SND_SOC_EXT_CODEC
|
||||
tristate "SoC Machine driver for MSMFALCON_EXT"
|
||||
depends on ARCH_QCOM
|
||||
select SND_SOC_QDSP6V2
|
||||
select SND_SOC_MSM_STUB
|
||||
select SND_SOC_MSM_HOSTLESS_PCM
|
||||
select SND_DYNAMIC_MINORS
|
||||
select MSM_QDSP6_APRV2_GLINK
|
||||
select MSM_QDSP6_SSR
|
||||
select MSM_QDSP6_PDR
|
||||
select MSM_QDSP6_NOTIFIER
|
||||
select MSM_QDSP6V2_CODECS
|
||||
select SND_SOC_WCD9335
|
||||
select SND_SOC_WCD934X
|
||||
select SND_SOC_WSA881X
|
||||
select MFD_CORE
|
||||
select QTI_PP
|
||||
select DTS_SRS_TM
|
||||
select DOLBY_DAP
|
||||
select DOLBY_DS2
|
||||
select SND_SOC_CPE
|
||||
select SND_SOC_WCD_CPE
|
||||
select SND_HWDEP
|
||||
select MSM_ULTRASOUND
|
||||
select DTS_EAGLE
|
||||
select SND_SOC_MSMFALCON_COMMON
|
||||
select SND_SOC_COMPRESS
|
||||
help
|
||||
To add support for SoC audio on MSM_EXT.
|
||||
This will enable sound soc drivers which
|
||||
interfaces with DSP, also it will enable
|
||||
the machine driver and the corresponding
|
||||
DAI-links
|
||||
|
||||
config SND_SOC_MSM8996
|
||||
tristate "SoC Machine driver for MSM8996 boards"
|
||||
depends on ARCH_MSM8996
|
||||
|
@ -157,4 +221,16 @@ config SND_SOC_MSMCOBALT
|
|||
the machine driver and the corresponding
|
||||
DAI-links
|
||||
|
||||
config SND_SOC_FALCON
|
||||
tristate "SoC Machine driver for MSMFALCON boards"
|
||||
depends on ARCH_MSMFALCON
|
||||
select SND_SOC_INT_CODEC
|
||||
select SND_SOC_EXT_CODEC
|
||||
help
|
||||
To add support for SoC audio on MSMFALCON.
|
||||
This will enable sound soc drivers which
|
||||
interfaces with DSP, also it will enable
|
||||
the machine driver and the corresponding
|
||||
DAI-links
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -19,3 +19,18 @@ obj-$(CONFIG_SND_SOC_MSM8996) += snd-soc-msm8996.o
|
|||
# for MSMCOBALT sound card driver
|
||||
snd-soc-msmcobalt-objs := msmcobalt.o
|
||||
obj-$(CONFIG_SND_SOC_MSMCOBALT) += snd-soc-msmcobalt.o
|
||||
|
||||
# for MSMFALCON sound card driver
|
||||
snd-soc-msmfalcon-common-objs := msm-audio-pinctrl.o msmfalcon-common.o
|
||||
obj-$(CONFIG_SND_SOC_MSMFALCON_COMMON) += snd-soc-msmfalcon-common.o
|
||||
|
||||
# for MSMFALCON sound card driver
|
||||
snd-soc-int-codec-objs := msmfalcon-internal.o
|
||||
obj-$(CONFIG_SND_SOC_INT_CODEC) += snd-soc-msmfalcon-common.o
|
||||
obj-$(CONFIG_SND_SOC_INT_CODEC) += snd-soc-int-codec.o
|
||||
|
||||
# for MSMFALCON sound card driver
|
||||
snd-soc-ext-codec-objs := msmfalcon-external.o msmfalcon-ext-dai-links.o
|
||||
obj-$(CONFIG_SND_SOC_EXT_CODEC) += snd-soc-msmfalcon-common.o
|
||||
obj-$(CONFIG_SND_SOC_EXT_CODEC) += snd-soc-ext-codec.o
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
||||
/* Copyright (c) 2015-2016, 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
|
||||
|
@ -14,8 +14,7 @@
|
|||
#define __MSM_AUDIO_PINCTRL_H
|
||||
|
||||
enum pinctrl_client {
|
||||
CLIENT_WCD_INT,
|
||||
CLIENT_WCD_EXT,
|
||||
CLIENT_WCD,
|
||||
CLIENT_WSA_BONGO_1,
|
||||
CLIENT_WSA_BONGO_2,
|
||||
MAX_PINCTRL_CLIENT,
|
||||
|
|
|
@ -870,6 +870,38 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
.name = "QUAT_MI2S_RX_HOSTLESS",
|
||||
.probe = fe_dai_probe,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT0 MI2S_RX Hostless Playback",
|
||||
.aif_name = "INT0_MI2S_DL_HL",
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
},
|
||||
.ops = &msm_fe_dai_ops,
|
||||
.name = "INT0_MI2S_RX_HOSTLESS",
|
||||
.probe = fe_dai_probe,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT4 MI2S_RX Hostless Playback",
|
||||
.aif_name = "INT4_MI2S_DL_HL",
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
},
|
||||
.ops = &msm_fe_dai_ops,
|
||||
.name = "INT4_MI2S_RX_HOSTLESS",
|
||||
.probe = fe_dai_probe,
|
||||
},
|
||||
/* TDM Hostless */
|
||||
{
|
||||
.capture = {
|
||||
|
|
1768
sound/soc/msm/msmfalcon-common.c
Normal file
1768
sound/soc/msm/msmfalcon-common.c
Normal file
File diff suppressed because it is too large
Load diff
69
sound/soc/msm/msmfalcon-common.h
Normal file
69
sound/soc/msm/msmfalcon-common.h
Normal file
|
@ -0,0 +1,69 @@
|
|||
/* Copyright (c) 2015-2016, 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.
|
||||
*/
|
||||
|
||||
#ifndef __MSM_COMMON
|
||||
#define __MSM_COMMON
|
||||
|
||||
#include <sound/soc.h>
|
||||
#include <sound/q6afe-v2.h>
|
||||
#include "../codecs/wcd-mbhc-v2.h"
|
||||
|
||||
#define SAMPLING_RATE_8KHZ 8000
|
||||
#define SAMPLING_RATE_11P025KHZ 11025
|
||||
#define SAMPLING_RATE_16KHZ 16000
|
||||
#define SAMPLING_RATE_22P05KHZ 22050
|
||||
#define SAMPLING_RATE_32KHZ 32000
|
||||
#define SAMPLING_RATE_44P1KHZ 44100
|
||||
#define SAMPLING_RATE_48KHZ 48000
|
||||
#define SAMPLING_RATE_88P2KHZ 88200
|
||||
#define SAMPLING_RATE_96KHZ 96000
|
||||
#define SAMPLING_RATE_176P4KHZ 176400
|
||||
#define SAMPLING_RATE_192KHZ 192000
|
||||
#define SAMPLING_RATE_352P8KHZ 352800
|
||||
#define SAMPLING_RATE_384KHZ 384000
|
||||
|
||||
extern const struct snd_kcontrol_new msm_common_snd_controls[];
|
||||
struct msmfalcon_codec {
|
||||
void* (*get_afe_config_fn)(struct snd_soc_codec *codec,
|
||||
enum afe_config_type config_type);
|
||||
};
|
||||
|
||||
struct msm_asoc_mach_data {
|
||||
int us_euro_gpio; /* used by gpio driver API */
|
||||
int hph_en1_gpio;
|
||||
int hph_en0_gpio;
|
||||
struct device_node *us_euro_gpio_p; /* used by pinctrl API */
|
||||
struct device_node *hph_en1_gpio_p; /* used by pinctrl API */
|
||||
struct device_node *hph_en0_gpio_p; /* used by pinctrl API */
|
||||
struct snd_soc_codec *codec;
|
||||
struct msmfalcon_codec msmfalcon_codec_fn;
|
||||
struct snd_info_entry *codec_root;
|
||||
int spk_ext_pa_gpio;
|
||||
int mclk_freq;
|
||||
int lb_mode;
|
||||
u8 micbias1_cap_mode;
|
||||
u8 micbias2_cap_mode;
|
||||
atomic_t int_mclk0_rsc_ref;
|
||||
atomic_t int_mclk0_enabled;
|
||||
struct mutex cdc_int_mclk0_mutex;
|
||||
struct delayed_work disable_int_mclk0_work;
|
||||
struct afe_clk_set digital_cdc_core_clk;
|
||||
bool int_codec;
|
||||
};
|
||||
|
||||
int msm_common_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_pcm_hw_params *params);
|
||||
int msm_aux_pcm_snd_startup(struct snd_pcm_substream *substream);
|
||||
void msm_aux_pcm_snd_shutdown(struct snd_pcm_substream *substream);
|
||||
int msm_mi2s_snd_startup(struct snd_pcm_substream *substream);
|
||||
void msm_mi2s_snd_shutdown(struct snd_pcm_substream *substream);
|
||||
#endif
|
1527
sound/soc/msm/msmfalcon-ext-dai-links.c
Normal file
1527
sound/soc/msm/msmfalcon-ext-dai-links.c
Normal file
File diff suppressed because it is too large
Load diff
1700
sound/soc/msm/msmfalcon-external.c
Normal file
1700
sound/soc/msm/msmfalcon-external.c
Normal file
File diff suppressed because it is too large
Load diff
44
sound/soc/msm/msmfalcon-external.h
Normal file
44
sound/soc/msm/msmfalcon-external.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
/* Copyright (c) 2015-2016, 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.
|
||||
*/
|
||||
|
||||
#ifndef __MSMFALCON_EXTERNAL
|
||||
#define __MSMFALCON_EXTERNAL
|
||||
|
||||
int msm_snd_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params);
|
||||
int msm_ext_slimbus_2_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params);
|
||||
int msm_btsco_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_pcm_hw_params *params);
|
||||
int msm_proxy_rx_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_pcm_hw_params *params);
|
||||
int msm_proxy_tx_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_pcm_hw_params *params);
|
||||
int msm_audrx_init(struct snd_soc_pcm_runtime *rtd);
|
||||
int msm_snd_cpe_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params);
|
||||
struct snd_soc_card *populate_snd_card_dailinks(struct device *dev);
|
||||
int msm_ext_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_pcm_hw_params *params);
|
||||
#ifdef CONFIG_SND_SOC_EXT_CODEC
|
||||
int msm_ext_cdc_init(struct platform_device *, struct msm_asoc_mach_data *,
|
||||
struct snd_soc_card **, struct wcd_mbhc_config *);
|
||||
#else
|
||||
inline int msm_ext_cdc_init(struct platform_device *pdev,
|
||||
struct msm_asoc_mach_data *pdata,
|
||||
struct snd_soc_card **card,
|
||||
struct wcd_mbhc_config *wcd_mbhc_cfg_ptr1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
2453
sound/soc/msm/msmfalcon-internal.c
Normal file
2453
sound/soc/msm/msmfalcon-internal.c
Normal file
File diff suppressed because it is too large
Load diff
32
sound/soc/msm/msmfalcon-internal.h
Normal file
32
sound/soc/msm/msmfalcon-internal.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
/* Copyright (c) 2016, 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.
|
||||
*/
|
||||
|
||||
#ifndef __MSMFALCON_INTERNAL
|
||||
#define __MSMFALCON_INTERNAL
|
||||
|
||||
#include <sound/soc.h>
|
||||
|
||||
#ifdef CONFIG_SND_SOC_INT_CODEC
|
||||
int msm_int_cdc_init(struct platform_device *pdev,
|
||||
struct msm_asoc_mach_data *pdata,
|
||||
struct snd_soc_card **card,
|
||||
struct wcd_mbhc_config *mbhc_cfg);
|
||||
#else
|
||||
int msm_int_cdc_init(struct platform_device *pdev,
|
||||
struct msm_asoc_mach_data *pdata,
|
||||
struct snd_soc_card **card,
|
||||
struct wcd_mbhc_config *mbhc_cfg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -3481,6 +3481,26 @@ static int msm_mi2s_get_port_id(u32 mi2s_id, int stream, u16 *port_id)
|
|||
case MSM_QUIN_MI2S:
|
||||
*port_id = AFE_PORT_ID_QUINARY_MI2S_RX;
|
||||
break;
|
||||
case MSM_INT0_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT0_MI2S_RX;
|
||||
break;
|
||||
case MSM_INT1_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT1_MI2S_RX;
|
||||
break;
|
||||
case MSM_INT2_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT2_MI2S_RX;
|
||||
break;
|
||||
case MSM_INT3_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT3_MI2S_RX;
|
||||
break;
|
||||
case MSM_INT4_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT4_MI2S_RX;
|
||||
break;
|
||||
case MSM_INT5_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT5_MI2S_RX;
|
||||
break;
|
||||
case MSM_INT6_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT6_MI2S_RX;
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: playback err id 0x%x\n",
|
||||
|
@ -3509,6 +3529,27 @@ static int msm_mi2s_get_port_id(u32 mi2s_id, int stream, u16 *port_id)
|
|||
case MSM_SENARY_MI2S:
|
||||
*port_id = AFE_PORT_ID_SENARY_MI2S_TX;
|
||||
break;
|
||||
case MSM_INT0_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT0_MI2S_TX;
|
||||
break;
|
||||
case MSM_INT1_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT1_MI2S_TX;
|
||||
break;
|
||||
case MSM_INT2_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT2_MI2S_TX;
|
||||
break;
|
||||
case MSM_INT3_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT3_MI2S_TX;
|
||||
break;
|
||||
case MSM_INT4_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT4_MI2S_TX;
|
||||
break;
|
||||
case MSM_INT5_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT5_MI2S_TX;
|
||||
break;
|
||||
case MSM_INT6_MI2S:
|
||||
*port_id = AFE_PORT_ID_INT6_MI2S_TX;
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: capture err id 0x%x\n", __func__, mi2s_id);
|
||||
ret = -1;
|
||||
|
@ -3968,6 +4009,188 @@ static struct snd_soc_dai_driver msm_dai_q6_mi2s_dai[] = {
|
|||
.probe = msm_dai_q6_dai_mi2s_probe,
|
||||
.remove = msm_dai_q6_dai_mi2s_remove,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT0 MI2S Playback",
|
||||
.aif_name = "INT0_MI2S_RX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_44100,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "INT0 MI2S Capture",
|
||||
.aif_name = "INT0_MI2S_TX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &msm_dai_q6_mi2s_ops,
|
||||
.id = MSM_INT0_MI2S,
|
||||
.probe = msm_dai_q6_dai_mi2s_probe,
|
||||
.remove = msm_dai_q6_dai_mi2s_remove,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT1 MI2S Playback",
|
||||
.aif_name = "INT1_MI2S_RX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "INT1 MI2S Capture",
|
||||
.aif_name = "INT1_MI2S_TX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &msm_dai_q6_mi2s_ops,
|
||||
.id = MSM_INT1_MI2S,
|
||||
.probe = msm_dai_q6_dai_mi2s_probe,
|
||||
.remove = msm_dai_q6_dai_mi2s_remove,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT2 MI2S Playback",
|
||||
.aif_name = "INT2_MI2S_RX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "INT2 MI2S Capture",
|
||||
.aif_name = "INT2_MI2S_TX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &msm_dai_q6_mi2s_ops,
|
||||
.id = MSM_INT2_MI2S,
|
||||
.probe = msm_dai_q6_dai_mi2s_probe,
|
||||
.remove = msm_dai_q6_dai_mi2s_remove,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT3 MI2S Playback",
|
||||
.aif_name = "INT3_MI2S_RX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "INT3 MI2S Capture",
|
||||
.aif_name = "INT3_MI2S_TX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &msm_dai_q6_mi2s_ops,
|
||||
.id = MSM_INT3_MI2S,
|
||||
.probe = msm_dai_q6_dai_mi2s_probe,
|
||||
.remove = msm_dai_q6_dai_mi2s_remove,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT4 MI2S Playback",
|
||||
.aif_name = "INT4_MI2S_RX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "INT4 MI2S Capture",
|
||||
.aif_name = "INT4_MI2S_TX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &msm_dai_q6_mi2s_ops,
|
||||
.id = MSM_INT4_MI2S,
|
||||
.probe = msm_dai_q6_dai_mi2s_probe,
|
||||
.remove = msm_dai_q6_dai_mi2s_remove,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT5 MI2S Playback",
|
||||
.aif_name = "INT5_MI2S_RX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "INT5 MI2S Capture",
|
||||
.aif_name = "INT5_MI2S_TX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &msm_dai_q6_mi2s_ops,
|
||||
.id = MSM_INT5_MI2S,
|
||||
.probe = msm_dai_q6_dai_mi2s_probe,
|
||||
.remove = msm_dai_q6_dai_mi2s_remove,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "INT6 MI2S Playback",
|
||||
.aif_name = "INT6_MI2S_RX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "INT6 MI2S Capture",
|
||||
.aif_name = "INT6_MI2S_TX",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &msm_dai_q6_mi2s_ops,
|
||||
.id = MSM_INT6_MI2S,
|
||||
.probe = msm_dai_q6_dai_mi2s_probe,
|
||||
.remove = msm_dai_q6_dai_mi2s_remove,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -466,6 +466,34 @@ struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = {
|
|||
LPASS_BE_QUAT_AUXPCM_RX},
|
||||
{ AFE_PORT_ID_QUATERNARY_PCM_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_QUAT_AUXPCM_TX},
|
||||
{ AFE_PORT_ID_INT0_MI2S_RX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT0_MI2S_RX},
|
||||
{ AFE_PORT_ID_INT0_MI2S_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT0_MI2S_TX},
|
||||
{ AFE_PORT_ID_INT1_MI2S_RX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT1_MI2S_RX},
|
||||
{ AFE_PORT_ID_INT1_MI2S_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT1_MI2S_TX},
|
||||
{ AFE_PORT_ID_INT2_MI2S_RX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT2_MI2S_RX},
|
||||
{ AFE_PORT_ID_INT2_MI2S_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT2_MI2S_TX},
|
||||
{ AFE_PORT_ID_INT3_MI2S_RX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT3_MI2S_RX},
|
||||
{ AFE_PORT_ID_INT3_MI2S_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT3_MI2S_TX},
|
||||
{ AFE_PORT_ID_INT4_MI2S_RX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT4_MI2S_RX},
|
||||
{ AFE_PORT_ID_INT4_MI2S_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT4_MI2S_TX},
|
||||
{ AFE_PORT_ID_INT5_MI2S_RX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT5_MI2S_RX},
|
||||
{ AFE_PORT_ID_INT5_MI2S_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT5_MI2S_TX},
|
||||
{ AFE_PORT_ID_INT6_MI2S_RX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT6_MI2S_RX},
|
||||
{ AFE_PORT_ID_INT6_MI2S_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT6_MI2S_TX},
|
||||
};
|
||||
|
||||
/* Track ASM playback & capture sessions of DAI */
|
||||
|
@ -2919,6 +2947,108 @@ static const struct snd_kcontrol_new primary_mi2s_rx_mixer_controls[] = {
|
|||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new int0_mi2s_rx_mixer_controls[] = {
|
||||
SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new int4_mi2s_rx_mixer_controls[] = {
|
||||
SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia2", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia3", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia4", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new hdmi_mixer_controls[] = {
|
||||
SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_HDMI_RX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
|
@ -4358,6 +4488,12 @@ static const struct snd_kcontrol_new mmul1_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
|
@ -4451,6 +4587,12 @@ static const struct snd_kcontrol_new mmul2_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
|
@ -4526,6 +4668,12 @@ static const struct snd_kcontrol_new mmul3_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
|
@ -4604,6 +4752,12 @@ static const struct snd_kcontrol_new mmul4_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
|
@ -4646,6 +4800,12 @@ static const struct snd_kcontrol_new mmul5_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("TERT_TDM_TX_0", MSM_BACKEND_DAI_TERT_TDM_TX_0,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
|
@ -4703,6 +4863,12 @@ static const struct snd_kcontrol_new mmul6_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
|
@ -4760,6 +4926,12 @@ static const struct snd_kcontrol_new mmul8_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT2_MI2S_TX", MSM_BACKEND_DAI_INT2_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
|
@ -5113,6 +5285,42 @@ static const struct snd_kcontrol_new pri_mi2s_rx_voice_mixer_controls[] = {
|
|||
msm_routing_put_voice_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new int0_mi2s_rx_voice_mixer_controls[] = {
|
||||
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new int4_mi2s_rx_voice_mixer_controls[] = {
|
||||
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new tert_mi2s_rx_voice_mixer_controls[] = {
|
||||
SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
|
||||
MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer,
|
||||
|
@ -5777,6 +5985,9 @@ static const struct snd_kcontrol_new tx_voicemmode1_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX_MMode1",
|
||||
MSM_BACKEND_DAI_TERTIARY_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
|
||||
1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX_MMode1",
|
||||
MSM_BACKEND_DAI_INT3_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
|
||||
1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("SLIM_7_TX_MMode1",
|
||||
MSM_BACKEND_DAI_SLIMBUS_7_TX, MSM_FRONTEND_DAI_VOICEMMODE1, 1,
|
||||
0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
|
||||
|
@ -5822,6 +6033,9 @@ static const struct snd_kcontrol_new tx_voicemmode2_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX_MMode2",
|
||||
MSM_BACKEND_DAI_TERTIARY_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
|
||||
1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX_MMode2",
|
||||
MSM_BACKEND_DAI_INT3_MI2S_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
|
||||
1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("SLIM_7_TX_MMode2",
|
||||
MSM_BACKEND_DAI_SLIMBUS_7_TX, MSM_FRONTEND_DAI_VOICEMMODE2, 1,
|
||||
0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
|
||||
|
@ -5867,6 +6081,9 @@ static const struct snd_kcontrol_new tx_voip_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX_Voip", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX_Voip", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("SLIM_7_TX_Voip", MSM_BACKEND_DAI_SLIMBUS_7_TX,
|
||||
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
|
@ -5900,6 +6117,9 @@ static const struct snd_kcontrol_new tx_voice_stub_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
|
||||
msm_routing_put_voice_stub_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
|
||||
msm_routing_put_voice_stub_mixer),
|
||||
SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
|
||||
msm_routing_put_voice_stub_mixer),
|
||||
|
@ -6056,6 +6276,9 @@ static const struct snd_kcontrol_new tx_qchat_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("TERT_MI2S_TX_QCHAT", MSM_BACKEND_DAI_TERTIARY_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("INT3_MI2S_TX_QCHAT", MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
SOC_SINGLE_EXT("SLIM_7_TX_QCHAT", MSM_BACKEND_DAI_SLIMBUS_7_TX,
|
||||
MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
|
||||
msm_routing_put_voice_mixer),
|
||||
|
@ -7877,6 +8100,12 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
|||
SND_SOC_DAPM_AIF_IN("HDMI_DL_HL", "HDMI_HOSTLESS Playback", 0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SEC_I2S_DL_HL", "SEC_I2S_RX_HOSTLESS Playback",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("INT0_MI2S_DL_HL",
|
||||
"INT0 MI2S_RX Hostless Playback",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("INT4_MI2S_DL_HL",
|
||||
"INT4 MI2S_RX Hostless Playback",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("PRI_MI2S_DL_HL",
|
||||
"Primary MI2S_RX Hostless Playback",
|
||||
0, 0, 0, 0),
|
||||
|
@ -8150,6 +8379,10 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
|||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("PRI_MI2S_RX", "Primary MI2S Playback",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("INT0_MI2S_RX", "INT0 MI2S Playback",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("INT4_MI2S_RX", "INT4 MI2S Playback",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("QUIN_MI2S_RX", "Quinary MI2S Playback",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("PRI_I2S_TX", "Primary I2S Capture", 0, 0, 0, 0),
|
||||
|
@ -8160,6 +8393,10 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
|||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("TERT_MI2S_TX", "Tertiary MI2S Capture",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("INT2_MI2S_TX", "INT2 MI2S Capture",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("INT3_MI2S_TX", "INT3 MI2S Capture",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SEC_MI2S_TX", "Secondary MI2S Capture",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMBUS_0_TX", "Slimbus Capture", 0, 0, 0, 0),
|
||||
|
@ -8444,6 +8681,12 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
|||
SND_SOC_DAPM_MIXER("PRI_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
|
||||
primary_mi2s_rx_mixer_controls,
|
||||
ARRAY_SIZE(primary_mi2s_rx_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("INT0_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
|
||||
int0_mi2s_rx_mixer_controls,
|
||||
ARRAY_SIZE(int0_mi2s_rx_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("INT4_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
|
||||
int4_mi2s_rx_mixer_controls,
|
||||
ARRAY_SIZE(int4_mi2s_rx_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("QUIN_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
|
||||
quinary_mi2s_rx_mixer_controls,
|
||||
ARRAY_SIZE(quinary_mi2s_rx_mixer_controls)),
|
||||
|
@ -8581,6 +8824,14 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
|||
SND_SOC_NOPM, 0, 0,
|
||||
pri_mi2s_rx_voice_mixer_controls,
|
||||
ARRAY_SIZE(pri_mi2s_rx_voice_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("INT0_MI2S_RX_Voice Mixer",
|
||||
SND_SOC_NOPM, 0, 0,
|
||||
int0_mi2s_rx_voice_mixer_controls,
|
||||
ARRAY_SIZE(int0_mi2s_rx_voice_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("INT4_MI2S_RX_Voice Mixer",
|
||||
SND_SOC_NOPM, 0, 0,
|
||||
int4_mi2s_rx_voice_mixer_controls,
|
||||
ARRAY_SIZE(int4_mi2s_rx_voice_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("TERT_MI2S_RX_Voice Mixer",
|
||||
SND_SOC_NOPM, 0, 0,
|
||||
tert_mi2s_rx_voice_mixer_controls,
|
||||
|
@ -9082,6 +9333,42 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"PRI_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
|
||||
{"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"},
|
||||
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
|
||||
{"INT0_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
|
||||
{"INT0_MI2S_RX", NULL, "INT0_MI2S_RX Audio Mixer"},
|
||||
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
|
||||
{"INT4_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
|
||||
{"INT4_MI2S_RX", NULL, "INT4_MI2S_RX Audio Mixer"},
|
||||
|
||||
{"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
|
||||
{"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
|
||||
{"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
|
||||
{"QUIN_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
|
||||
{"QUIN_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"},
|
||||
|
@ -9363,6 +9650,10 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"MultiMedia2 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"},
|
||||
{"MultiMedia1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"MultiMedia2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"MultiMedia1 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
|
||||
{"MultiMedia2 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
|
||||
{"MultiMedia1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
|
||||
{"MultiMedia2 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
|
||||
{"MultiMedia1 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
|
||||
{"MultiMedia1 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
|
||||
{"MultiMedia3 Mixer", "AUX_PCM_TX", "AUX_PCM_TX"},
|
||||
|
@ -9384,6 +9675,12 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"MultiMedia6 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"MultiMedia3 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"MultiMedia5 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"MultiMedia6 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
|
||||
{"MultiMedia3 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
|
||||
{"MultiMedia5 Mixer", "INT2_MI2S_TX", "INT2_MI2S_TX"},
|
||||
{"MultiMedia6 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
|
||||
{"MultiMedia3 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
|
||||
{"MultiMedia5 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
|
||||
{"MultiMedia6 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
|
||||
{"MultiMedia6 Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"},
|
||||
{"MultiMedia6 Mixer", "SEC_AUX_PCM_UL_TX", "SEC_AUX_PCM_TX"},
|
||||
|
@ -9821,6 +10118,20 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"PRI_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
|
||||
{"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_Voice Mixer"},
|
||||
|
||||
{"INT0_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
|
||||
{"INT0_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
|
||||
{"INT0_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
|
||||
{"INT0_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
|
||||
{"INT0_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
|
||||
{"INT0_MI2S_RX", NULL, "INT0_MI2S_RX_Voice Mixer"},
|
||||
|
||||
{"INT4_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
|
||||
{"INT4_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
|
||||
{"INT4_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
|
||||
{"INT4_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
|
||||
{"INT4_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
|
||||
{"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_Voice Mixer"},
|
||||
|
||||
{"TERT_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"},
|
||||
{"TERT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"},
|
||||
{"TERT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
|
||||
|
@ -9992,6 +10303,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"VoiceMMode1_Tx Mixer", "PRI_MI2S_TX_MMode1", "PRI_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "MI2S_TX_MMode1", "MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "TERT_MI2S_TX_MMode1", "TERT_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "INT3_MI2S_TX_MMode1", "INT3_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SLIM_0_TX_MMode1", "SLIMBUS_0_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SLIM_7_TX_MMode1", "SLIMBUS_7_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SLIM_8_TX_MMode1", "SLIMBUS_8_TX"},
|
||||
|
@ -10008,6 +10320,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"VoiceMMode2_Tx Mixer", "PRI_MI2S_TX_MMode2", "PRI_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "MI2S_TX_MMode2", "MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "TERT_MI2S_TX_MMode2", "TERT_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "INT3_MI2S_TX_MMode2", "INT3_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SLIM_0_TX_MMode2", "SLIMBUS_0_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SLIM_7_TX_MMode2", "SLIMBUS_7_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SLIM_8_TX_MMode2", "SLIMBUS_8_TX"},
|
||||
|
@ -10023,6 +10336,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"},
|
||||
{"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"},
|
||||
{"Voip_Tx Mixer", "TERT_MI2S_TX_Voip", "TERT_MI2S_TX"},
|
||||
{"Voip_Tx Mixer", "INT3_MI2S_TX_Voip", "INT3_MI2S_TX"},
|
||||
{"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"},
|
||||
{"Voip_Tx Mixer", "SLIM_7_TX_Voip", "SLIMBUS_7_TX"},
|
||||
{"Voip_Tx Mixer", "SLIM_8_TX_Voip", "SLIMBUS_8_TX"},
|
||||
|
@ -10132,6 +10446,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"QCHAT_Tx Mixer", "MI2S_TX_QCHAT", "MI2S_TX"},
|
||||
{"QCHAT_Tx Mixer", "PRI_MI2S_TX_QCHAT", "PRI_MI2S_TX"},
|
||||
{"QCHAT_Tx Mixer", "TERT_MI2S_TX_QCHAT", "TERT_MI2S_TX"},
|
||||
{"QCHAT_Tx Mixer", "INT3_MI2S_TX_QCHAT", "INT3_MI2S_TX"},
|
||||
{"QCHAT_Tx Mixer", "USB_AUDIO_TX_QCHAT", "USB_AUDIO_TX"},
|
||||
{"QCHAT_UL", NULL, "QCHAT_Tx Mixer"},
|
||||
|
||||
|
@ -10149,6 +10464,10 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"MI2S_UL_HL", NULL, "MI2S_TX"},
|
||||
{"PCM_RX_DL_HL", "Switch", "SLIM0_DL_HL"},
|
||||
{"PCM_RX", NULL, "PCM_RX_DL_HL"},
|
||||
{"INT0_MI2S_RX_DL_HL", "Switch", "INT0_MI2S_DL_HL"},
|
||||
{"INT0_MI2S_RX", NULL, "INT0_MI2S_RX_DL_HL"},
|
||||
{"INT4_MI2S_RX_DL_HL", "Switch", "INT4_MI2S_DL_HL"},
|
||||
{"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_DL_HL"},
|
||||
{"PRI_MI2S_RX_DL_HL", "Switch", "PRI_MI2S_DL_HL"},
|
||||
{"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_DL_HL"},
|
||||
{"SEC_MI2S_RX_DL_HL", "Switch", "SEC_MI2S_DL_HL"},
|
||||
|
@ -10384,6 +10703,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"Voice Stub Tx Mixer", "MI2S_TX", "MI2S_TX"},
|
||||
{"Voice Stub Tx Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
|
||||
{"Voice Stub Tx Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"Voice Stub Tx Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
|
||||
{"Voice Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
|
||||
{"Voice Stub Tx Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
|
||||
{"Voice Stub Tx Mixer", "SLIM_3_TX", "SLIMBUS_3_TX"},
|
||||
|
@ -10561,6 +10881,8 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"BE_OUT", NULL, "SEC_MI2S_RX"},
|
||||
{"BE_OUT", NULL, "SEC_MI2S_RX_SD1"},
|
||||
{"BE_OUT", NULL, "PRI_MI2S_RX"},
|
||||
{"BE_OUT", NULL, "INT0_MI2S_RX"},
|
||||
{"BE_OUT", NULL, "INT4_MI2S_RX"},
|
||||
{"BE_OUT", NULL, "INT_BT_SCO_RX"},
|
||||
{"BE_OUT", NULL, "INT_BT_A2DP_RX"},
|
||||
{"BE_OUT", NULL, "INT_FM_RX"},
|
||||
|
@ -10593,6 +10915,8 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"QUIN_MI2S_TX", NULL, "BE_IN"},
|
||||
{"PRI_MI2S_TX", NULL, "BE_IN"},
|
||||
{"TERT_MI2S_TX", NULL, "BE_IN"},
|
||||
{"INT2_MI2S_TX", NULL, "BE_IN"},
|
||||
{"INT3_MI2S_TX", NULL, "BE_IN"},
|
||||
{"SEC_MI2S_TX", NULL, "BE_IN"},
|
||||
{"SENARY_MI2S_TX", NULL, "BE_IN" },
|
||||
{"SLIMBUS_0_TX", NULL, "BE_IN" },
|
||||
|
|
|
@ -143,6 +143,21 @@
|
|||
|
||||
#define LPASS_BE_USB_AUDIO_RX "USB_AUDIO_RX"
|
||||
#define LPASS_BE_USB_AUDIO_TX "USB_AUDIO_TX"
|
||||
|
||||
#define LPASS_BE_INT0_MI2S_RX "INT0_MI2S_RX"
|
||||
#define LPASS_BE_INT0_MI2S_TX "INT0_MI2S_TX"
|
||||
#define LPASS_BE_INT1_MI2S_RX "INT1_MI2S_RX"
|
||||
#define LPASS_BE_INT1_MI2S_TX "INT1_MI2S_TX"
|
||||
#define LPASS_BE_INT2_MI2S_RX "INT2_MI2S_RX"
|
||||
#define LPASS_BE_INT2_MI2S_TX "INT2_MI2S_TX"
|
||||
#define LPASS_BE_INT3_MI2S_RX "INT3_MI2S_RX"
|
||||
#define LPASS_BE_INT3_MI2S_TX "INT3_MI2S_TX"
|
||||
#define LPASS_BE_INT4_MI2S_RX "INT4_MI2S_RX"
|
||||
#define LPASS_BE_INT4_MI2S_TX "INT4_MI2S_TX"
|
||||
#define LPASS_BE_INT5_MI2S_RX "INT5_MI2S_RX"
|
||||
#define LPASS_BE_INT5_MI2S_TX "INT5_MI2S_TX"
|
||||
#define LPASS_BE_INT6_MI2S_RX "INT6_MI2S_RX"
|
||||
#define LPASS_BE_INT6_MI2S_TX "INT6_MI2S_TX"
|
||||
/* For multimedia front-ends, asm session is allocated dynamically.
|
||||
* Hence, asm session/multimedia front-end mapping has to be maintained.
|
||||
* Due to this reason, additional multimedia front-end must be placed before
|
||||
|
@ -321,6 +336,20 @@ enum {
|
|||
MSM_BACKEND_DAI_TERT_AUXPCM_TX,
|
||||
MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
|
||||
MSM_BACKEND_DAI_QUAT_AUXPCM_TX,
|
||||
MSM_BACKEND_DAI_INT0_MI2S_RX,
|
||||
MSM_BACKEND_DAI_INT0_MI2S_TX,
|
||||
MSM_BACKEND_DAI_INT1_MI2S_RX,
|
||||
MSM_BACKEND_DAI_INT1_MI2S_TX,
|
||||
MSM_BACKEND_DAI_INT2_MI2S_RX,
|
||||
MSM_BACKEND_DAI_INT2_MI2S_TX,
|
||||
MSM_BACKEND_DAI_INT3_MI2S_RX,
|
||||
MSM_BACKEND_DAI_INT3_MI2S_TX,
|
||||
MSM_BACKEND_DAI_INT4_MI2S_RX,
|
||||
MSM_BACKEND_DAI_INT4_MI2S_TX,
|
||||
MSM_BACKEND_DAI_INT5_MI2S_RX,
|
||||
MSM_BACKEND_DAI_INT5_MI2S_TX,
|
||||
MSM_BACKEND_DAI_INT6_MI2S_RX,
|
||||
MSM_BACKEND_DAI_INT6_MI2S_TX,
|
||||
MSM_BACKEND_DAI_MAX,
|
||||
};
|
||||
|
||||
|
|
|
@ -483,6 +483,13 @@ int afe_get_port_type(u16 port_id)
|
|||
case AFE_PORT_ID_QUATERNARY_TDM_RX_6:
|
||||
case AFE_PORT_ID_QUATERNARY_TDM_RX_7:
|
||||
case AFE_PORT_ID_USB_RX:
|
||||
case AFE_PORT_ID_INT0_MI2S_RX:
|
||||
case AFE_PORT_ID_INT1_MI2S_RX:
|
||||
case AFE_PORT_ID_INT2_MI2S_RX:
|
||||
case AFE_PORT_ID_INT3_MI2S_RX:
|
||||
case AFE_PORT_ID_INT4_MI2S_RX:
|
||||
case AFE_PORT_ID_INT5_MI2S_RX:
|
||||
case AFE_PORT_ID_INT6_MI2S_RX:
|
||||
ret = MSM_AFE_PORT_TYPE_RX;
|
||||
break;
|
||||
|
||||
|
@ -547,6 +554,13 @@ int afe_get_port_type(u16 port_id)
|
|||
case AFE_PORT_ID_QUATERNARY_TDM_TX_6:
|
||||
case AFE_PORT_ID_QUATERNARY_TDM_TX_7:
|
||||
case AFE_PORT_ID_USB_TX:
|
||||
case AFE_PORT_ID_INT0_MI2S_TX:
|
||||
case AFE_PORT_ID_INT1_MI2S_TX:
|
||||
case AFE_PORT_ID_INT2_MI2S_TX:
|
||||
case AFE_PORT_ID_INT3_MI2S_TX:
|
||||
case AFE_PORT_ID_INT4_MI2S_TX:
|
||||
case AFE_PORT_ID_INT5_MI2S_TX:
|
||||
case AFE_PORT_ID_INT6_MI2S_TX:
|
||||
ret = MSM_AFE_PORT_TYPE_TX;
|
||||
break;
|
||||
|
||||
|
|
|
@ -233,6 +233,34 @@ int q6audio_get_port_index(u16 port_id)
|
|||
return IDX_AFE_PORT_ID_USB_RX;
|
||||
case AFE_PORT_ID_USB_TX:
|
||||
return IDX_AFE_PORT_ID_USB_TX;
|
||||
case AFE_PORT_ID_INT0_MI2S_RX:
|
||||
return IDX_AFE_PORT_ID_INT0_MI2S_RX;
|
||||
case AFE_PORT_ID_INT0_MI2S_TX:
|
||||
return IDX_AFE_PORT_ID_INT0_MI2S_TX;
|
||||
case AFE_PORT_ID_INT1_MI2S_RX:
|
||||
return IDX_AFE_PORT_ID_INT1_MI2S_RX;
|
||||
case AFE_PORT_ID_INT1_MI2S_TX:
|
||||
return IDX_AFE_PORT_ID_INT1_MI2S_TX;
|
||||
case AFE_PORT_ID_INT2_MI2S_RX:
|
||||
return IDX_AFE_PORT_ID_INT2_MI2S_RX;
|
||||
case AFE_PORT_ID_INT2_MI2S_TX:
|
||||
return IDX_AFE_PORT_ID_INT2_MI2S_TX;
|
||||
case AFE_PORT_ID_INT3_MI2S_RX:
|
||||
return IDX_AFE_PORT_ID_INT3_MI2S_RX;
|
||||
case AFE_PORT_ID_INT3_MI2S_TX:
|
||||
return IDX_AFE_PORT_ID_INT3_MI2S_TX;
|
||||
case AFE_PORT_ID_INT4_MI2S_RX:
|
||||
return IDX_AFE_PORT_ID_INT4_MI2S_RX;
|
||||
case AFE_PORT_ID_INT4_MI2S_TX:
|
||||
return IDX_AFE_PORT_ID_INT4_MI2S_TX;
|
||||
case AFE_PORT_ID_INT5_MI2S_RX:
|
||||
return IDX_AFE_PORT_ID_INT5_MI2S_RX;
|
||||
case AFE_PORT_ID_INT5_MI2S_TX:
|
||||
return IDX_AFE_PORT_ID_INT5_MI2S_TX;
|
||||
case AFE_PORT_ID_INT6_MI2S_RX:
|
||||
return IDX_AFE_PORT_ID_INT6_MI2S_RX;
|
||||
case AFE_PORT_ID_INT6_MI2S_TX:
|
||||
return IDX_AFE_PORT_ID_INT6_MI2S_TX;
|
||||
default: return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
@ -452,6 +480,34 @@ int q6audio_get_port_id(u16 port_id)
|
|||
return AFE_PORT_ID_USB_RX;
|
||||
case AFE_PORT_ID_USB_TX:
|
||||
return AFE_PORT_ID_USB_TX;
|
||||
case AFE_PORT_ID_INT0_MI2S_RX:
|
||||
return AFE_PORT_ID_INT0_MI2S_RX;
|
||||
case AFE_PORT_ID_INT0_MI2S_TX:
|
||||
return AFE_PORT_ID_INT0_MI2S_TX;
|
||||
case AFE_PORT_ID_INT1_MI2S_RX:
|
||||
return AFE_PORT_ID_INT1_MI2S_RX;
|
||||
case AFE_PORT_ID_INT1_MI2S_TX:
|
||||
return AFE_PORT_ID_INT1_MI2S_TX;
|
||||
case AFE_PORT_ID_INT2_MI2S_RX:
|
||||
return AFE_PORT_ID_INT2_MI2S_RX;
|
||||
case AFE_PORT_ID_INT2_MI2S_TX:
|
||||
return AFE_PORT_ID_INT2_MI2S_TX;
|
||||
case AFE_PORT_ID_INT3_MI2S_RX:
|
||||
return AFE_PORT_ID_INT3_MI2S_RX;
|
||||
case AFE_PORT_ID_INT3_MI2S_TX:
|
||||
return AFE_PORT_ID_INT3_MI2S_TX;
|
||||
case AFE_PORT_ID_INT4_MI2S_RX:
|
||||
return AFE_PORT_ID_INT4_MI2S_RX;
|
||||
case AFE_PORT_ID_INT4_MI2S_TX:
|
||||
return AFE_PORT_ID_INT4_MI2S_TX;
|
||||
case AFE_PORT_ID_INT5_MI2S_RX:
|
||||
return AFE_PORT_ID_INT5_MI2S_RX;
|
||||
case AFE_PORT_ID_INT5_MI2S_TX:
|
||||
return AFE_PORT_ID_INT5_MI2S_TX;
|
||||
case AFE_PORT_ID_INT6_MI2S_RX:
|
||||
return AFE_PORT_ID_INT6_MI2S_RX;
|
||||
case AFE_PORT_ID_INT6_MI2S_TX:
|
||||
return AFE_PORT_ID_INT6_MI2S_TX;
|
||||
default:
|
||||
pr_warn("%s: Invalid port_id %d\n", __func__, port_id);
|
||||
return -EINVAL;
|
||||
|
@ -572,6 +628,20 @@ int q6audio_is_digital_pcm_interface(u16 port_id)
|
|||
case AFE_PORT_ID_QUATERNARY_TDM_RX_7:
|
||||
case AFE_PORT_ID_QUATERNARY_TDM_TX_7:
|
||||
case AFE_PORT_ID_SENARY_MI2S_TX:
|
||||
case AFE_PORT_ID_INT0_MI2S_RX:
|
||||
case AFE_PORT_ID_INT0_MI2S_TX:
|
||||
case AFE_PORT_ID_INT1_MI2S_RX:
|
||||
case AFE_PORT_ID_INT1_MI2S_TX:
|
||||
case AFE_PORT_ID_INT2_MI2S_RX:
|
||||
case AFE_PORT_ID_INT2_MI2S_TX:
|
||||
case AFE_PORT_ID_INT3_MI2S_RX:
|
||||
case AFE_PORT_ID_INT3_MI2S_TX:
|
||||
case AFE_PORT_ID_INT4_MI2S_RX:
|
||||
case AFE_PORT_ID_INT4_MI2S_TX:
|
||||
case AFE_PORT_ID_INT5_MI2S_RX:
|
||||
case AFE_PORT_ID_INT5_MI2S_TX:
|
||||
case AFE_PORT_ID_INT6_MI2S_RX:
|
||||
case AFE_PORT_ID_INT6_MI2S_TX:
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
@ -710,6 +780,20 @@ int q6audio_validate_port(u16 port_id)
|
|||
case AFE_PORT_ID_SENARY_MI2S_TX:
|
||||
case AFE_PORT_ID_USB_RX:
|
||||
case AFE_PORT_ID_USB_TX:
|
||||
case AFE_PORT_ID_INT0_MI2S_RX:
|
||||
case AFE_PORT_ID_INT0_MI2S_TX:
|
||||
case AFE_PORT_ID_INT1_MI2S_RX:
|
||||
case AFE_PORT_ID_INT1_MI2S_TX:
|
||||
case AFE_PORT_ID_INT2_MI2S_RX:
|
||||
case AFE_PORT_ID_INT2_MI2S_TX:
|
||||
case AFE_PORT_ID_INT3_MI2S_RX:
|
||||
case AFE_PORT_ID_INT3_MI2S_TX:
|
||||
case AFE_PORT_ID_INT4_MI2S_RX:
|
||||
case AFE_PORT_ID_INT4_MI2S_TX:
|
||||
case AFE_PORT_ID_INT5_MI2S_RX:
|
||||
case AFE_PORT_ID_INT5_MI2S_TX:
|
||||
case AFE_PORT_ID_INT6_MI2S_RX:
|
||||
case AFE_PORT_ID_INT6_MI2S_TX:
|
||||
{
|
||||
ret = 0;
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue