summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2020-09-01 22:28:05 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2020-09-01 22:28:05 -0700
commit90b9e556cfd9ac01ea9280f257adfeddd3839f2d (patch)
treeaa2dd59c3a4124f57351208b614ebb18005ca6d8
parent9b9b52f62baa4eb251389215056856608eb54c25 (diff)
parent8d23afe69d5505556635f208016a1cb8e24876c1 (diff)
Merge "soc: add proxy ports for call screening in machine driver"
-rw-r--r--include/sound/apr_audio-v2.h13
-rw-r--r--include/sound/q6afe-v2.h5
-rw-r--r--sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c49
-rw-r--r--sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c41
-rw-r--r--sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h4
-rw-r--r--sound/soc/msm/qdsp6v2/q6afe.c12
-rw-r--r--sound/soc/msm/qdsp6v2/q6audio-v2.c12
-rw-r--r--sound/soc/msm/sdm660-ext-dai-links.c30
-rw-r--r--sound/soc/msm/sdm660-internal.c29
9 files changed, 184 insertions, 11 deletions
diff --git a/include/sound/apr_audio-v2.h b/include/sound/apr_audio-v2.h
index 89e05abfd74b..f312284024a9 100644
--- a/include/sound/apr_audio-v2.h
+++ b/include/sound/apr_audio-v2.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2018, 2020, 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
@@ -1429,7 +1429,7 @@ struct adm_cmd_connect_afe_port_v5 {
#define AFE_PORT_ID_SLIMBUS_RANGE_SIZE 0xA
/* Size of the range of port IDs for real-time proxy ports. */
-#define AFE_PORT_ID_RT_PROXY_PORT_RANGE_SIZE 0x2
+#define AFE_PORT_ID_RT_PROXY_PORT_RANGE_SIZE 0x4
/* Size of the range of port IDs for pseudoports. */
#define AFE_PORT_ID_PSEUDOPORT_RANGE_SIZE 0x5
@@ -1643,6 +1643,15 @@ struct adm_cmd_connect_afe_port_v5 {
*/
#define AFE_PORT_ID_VOICE2_PLAYBACK_TX 0x8002
#define AFE_PORT_ID_VOICE_PLAYBACK_TX 0x8005
+/*
+ * Proxyport used for voice call data processing.
+ * In cases like call-screening feature, where user can communicate
+ * with caller with the help of "call screen" mode, and without
+ * connecting the call with any HW input/output devices in the phon,
+ * voice call can use Pseudo port to start voice data processing.
+ */
+#define RT_PROXY_PORT_002_TX 0x2003
+#define RT_PROXY_PORT_002_RX 0x2002
#define AFE_PORT_ID_PRIMARY_TDM_RX \
(AFE_PORT_ID_TDM_PORT_RANGE_START + 0x00)
diff --git a/include/sound/q6afe-v2.h b/include/sound/q6afe-v2.h
index a6d697d6a8f8..e171028839f7 100644
--- a/include/sound/q6afe-v2.h
+++ b/include/sound/q6afe-v2.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2018, 2020, 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
@@ -235,6 +235,9 @@ enum {
IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX_2,
IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX_3,
IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX_4,
+ /* IDX 167 -> 168 */
+ IDX_RT_PROXY_PORT_002_RX,
+ IDX_RT_PROXY_PORT_002_TX,
AFE_MAX_PORTS
};
diff --git a/sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c
index 39abecb64f0e..ec590593e7c4 100644
--- a/sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c
+++ b/sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2020, 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
@@ -1876,6 +1876,8 @@ static int msm_dai_q6_hw_params(struct snd_pcm_substream *substream,
case RT_PROXY_DAI_001_RX:
case RT_PROXY_DAI_002_TX:
case RT_PROXY_DAI_002_RX:
+ case RT_PROXY_PORT_002_TX:
+ case RT_PROXY_PORT_002_RX:
rc = msm_dai_q6_afe_rtproxy_hw_params(params, dai);
break;
case VOICE_PLAYBACK_TX:
@@ -2872,6 +2874,42 @@ static struct snd_soc_dai_driver msm_dai_q6_incall_record_dai[] = {
},
};
+static struct snd_soc_dai_driver msm_dai_q6_proxy_tx_dai = {
+ .capture = {
+ .stream_name = "Proxy Capture",
+ .aif_name = "PROXY_TX",
+ .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
+ SNDRV_PCM_RATE_16000,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
+ .channels_min = 1,
+ .channels_max = 2,
+ .rate_min = 8000,
+ .rate_max = 48000,
+ },
+ .ops = &msm_dai_q6_ops,
+ .id = RT_PROXY_PORT_002_TX,
+ .probe = msm_dai_q6_dai_probe,
+ .remove = msm_dai_q6_dai_remove,
+};
+
+static struct snd_soc_dai_driver msm_dai_q6_proxy_rx_dai = {
+ .playback = {
+ .stream_name = "Proxy Playback",
+ .aif_name = "PROXY_RX",
+ .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
+ SNDRV_PCM_RATE_16000,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
+ .channels_min = 1,
+ .channels_max = 2,
+ .rate_min = 8000,
+ .rate_max = 48000,
+ },
+ .ops = &msm_dai_q6_ops,
+ .id = RT_PROXY_PORT_002_RX,
+ .probe = msm_dai_q6_dai_probe,
+ .remove = msm_dai_q6_dai_remove,
+};
+
static struct snd_soc_dai_driver msm_dai_q6_usb_rx_dai = {
.playback = {
.stream_name = "USB Audio Playback",
@@ -5872,7 +5910,14 @@ register_uplink_capture:
pr_err("%s: Device not found stream name %s\n",
__func__, stream_name);
break;
-
+ case RT_PROXY_PORT_002_RX:
+ rc = snd_soc_register_component(&pdev->dev,
+ &msm_dai_q6_component, &msm_dai_q6_proxy_rx_dai, 1);
+ break;
+ case RT_PROXY_PORT_002_TX:
+ rc = snd_soc_register_component(&pdev->dev,
+ &msm_dai_q6_component, &msm_dai_q6_proxy_tx_dai, 1);
+ break;
default:
rc = -ENODEV;
break;
diff --git a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c
index a5c02b2dc1a3..e0a41de1e095 100644
--- a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c
+++ b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c
@@ -593,7 +593,11 @@ struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = {
{ AFE_PORT_ID_QUATERNARY_MI2S_TX_3, 0, {0}, {0}, 0, 0, 0, 0, {0},
LPASS_BE_QUAT_MI2S_TX_3},
{ AFE_PORT_ID_QUATERNARY_MI2S_TX_4, 0, {0}, {0}, 0, 0, 0, 0, {0},
- LPASS_BE_QUAT_MI2S_TX_4}
+ LPASS_BE_QUAT_MI2S_TX_4},
+ { RT_PROXY_PORT_002_RX, 0, {0}, {0}, 0, 0, 0, 0, {0},
+ LPASS_BE_PROXY_RX},
+ { RT_PROXY_PORT_002_TX, 0, {0}, {0}, 0, 0, 0, 0, {0},
+ LPASS_BE_PROXY_TX}
};
/* Track ASM playback & capture sessions of DAI
@@ -3028,7 +3032,7 @@ static const char *const be_name[] = {
"INT0_MI2S_RX", "INT0_MI2S_TX", "INT1_MI2S_RX", "INT1_MI2S_TX",
"INT2_MI2S_RX", "INT2_MI2S_TX", "INT3_MI2S_RX", "INT3_MI2S_TX",
"INT4_MI2S_RX", "INT4_MI2S_TX", "INT5_MI2S_RX", "INT5_MI2S_TX",
-"INT6_MI2S_RX", "INT6_MI2S_TX"
+"INT6_MI2S_RX", "INT6_MI2S_TX", "PROXY_RX", "PROXY_TX"
};
static SOC_ENUM_SINGLE_DECL(mm1_channel_mux,
@@ -13262,6 +13266,17 @@ static const struct snd_kcontrol_new tx_vowlan_mixer_controls[] = {
msm_routing_put_voice_mixer),
};
+static const struct snd_kcontrol_new proxy_rx_voice_mixer_controls[] = {
+ SOC_DOUBLE_EXT("VoiceMMode1", SND_SOC_NOPM,
+ MSM_BACKEND_DAI_PROXY_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+ SOC_DOUBLE_EXT("VoiceMMode2", SND_SOC_NOPM,
+ MSM_BACKEND_DAI_PROXY_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+};
+
static const struct snd_kcontrol_new tx_voicemmode1_mixer_controls[] = {
SOC_DOUBLE_EXT("PRI_TX_MMode1", SND_SOC_NOPM,
MSM_BACKEND_DAI_PRI_I2S_TX,
@@ -13314,6 +13329,12 @@ static const struct snd_kcontrol_new tx_voicemmode1_mixer_controls[] = {
SOC_DOUBLE_EXT("QUAT_TDM_TX_0_MMode1", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUAT_TDM_TX_0, MSM_FRONTEND_DAI_VOICEMMODE1,
1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
+ SOC_DOUBLE_EXT("PROXY_TX_MMode1", SND_SOC_NOPM,
+ MSM_BACKEND_DAI_PROXY_TX, MSM_FRONTEND_DAI_VOICEMMODE1,
+ 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
+ SOC_DOUBLE_EXT("PROXY_TX_MMode2", SND_SOC_NOPM,
+ MSM_BACKEND_DAI_PROXY_TX, MSM_FRONTEND_DAI_VOICEMMODE2,
+ 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer),
};
static const struct snd_kcontrol_new tx_voicemmode2_mixer_controls[] = {
@@ -17636,6 +17657,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
SND_SOC_DAPM_AIF_IN("SLIMBUS_8_TX", "Slimbus8 Capture", 0, 0, 0, 0),
SND_SOC_DAPM_AIF_OUT("USB_AUDIO_RX", "USB Audio Playback", 0, 0, 0, 0),
SND_SOC_DAPM_AIF_IN("USB_AUDIO_TX", "USB Audio Capture", 0, 0, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("PROXY_RX", "Proxy Playback", 0, 0, 0, 0),
+ SND_SOC_DAPM_AIF_IN("PROXY_TX", "Proxy Capture", 0, 0, 0, 0),
/* Switch Definitions */
SND_SOC_DAPM_SWITCH("SLIMBUS_DL_HL", SND_SOC_NOPM, 0, 0,
@@ -17985,6 +18008,10 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
SND_SOC_DAPM_MIXER("Voice2_Tx Mixer",
SND_SOC_NOPM, 0, 0, tx_voice2_mixer_controls,
ARRAY_SIZE(tx_voice2_mixer_controls)),
+ SND_SOC_DAPM_MIXER("PROXY_RX_Voice Mixer",
+ SND_SOC_NOPM, 0, 0,
+ proxy_rx_voice_mixer_controls,
+ ARRAY_SIZE(proxy_rx_voice_mixer_controls)),
SND_SOC_DAPM_MIXER("Voip_Tx Mixer",
SND_SOC_NOPM, 0, 0, tx_voip_mixer_controls,
ARRAY_SIZE(tx_voip_mixer_controls)),
@@ -20334,6 +20361,12 @@ static const struct snd_soc_dapm_route intercon[] = {
{"QUAT_TDM_RX_2_Voice Mixer", "DTMF", "DTMF_DL_HL"},
{"QUAT_TDM_RX_2", NULL, "QUAT_TDM_RX_2_Voice Mixer"},
+ {"PROXY_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
+ {"PROXY_RX", NULL, "PROXY_RX_Voice Mixer"},
+
+ {"PROXY_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
+ {"PROXY_RX", NULL, "PROXY_RX_Voice Mixer"},
+
{"VOC_EXT_EC MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"},
{"VOC_EXT_EC MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"},
{"VOC_EXT_EC MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"},
@@ -20524,6 +20557,7 @@ static const struct snd_soc_dapm_route intercon[] = {
{"VoiceMMode1_Tx Mixer", "TERT_AUX_PCM_TX_MMode1", "TERT_AUX_PCM_TX"},
{"VoiceMMode1_Tx Mixer", "QUAT_AUX_PCM_TX_MMode1", "QUAT_AUX_PCM_TX"},
{"VoiceMMode1_Tx Mixer", "QUAT_TDM_TX_0_MMode1", "QUAT_TDM_TX_0"},
+ {"VoiceMMode1_Tx Mixer", "PROXY_TX_MMode1", "PROXY_TX"},
{"VOICEMMODE1_UL", NULL, "VoiceMMode1_Tx Mixer"},
{"VoiceMMode2_Tx Mixer", "PRI_TX_MMode2", "PRI_I2S_TX"},
@@ -20541,6 +20575,7 @@ static const struct snd_soc_dapm_route intercon[] = {
{"VoiceMMode2_Tx Mixer", "SEC_AUX_PCM_TX_MMode2", "SEC_AUX_PCM_TX"},
{"VoiceMMode2_Tx Mixer", "TERT_AUX_PCM_TX_MMode2", "TERT_AUX_PCM_TX"},
{"VoiceMMode2_Tx Mixer", "QUAT_AUX_PCM_TX_MMode2", "QUAT_AUX_PCM_TX"},
+ {"VoiceMMode2_Tx Mixer", "PROXY_TX_MMode2", "PROXY_TX"},
{"VOICEMMODE2_UL", NULL, "VoiceMMode2_Tx Mixer"},
{"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"},
@@ -21370,6 +21405,7 @@ static const struct snd_soc_dapm_route intercon[] = {
{"BE_OUT", NULL, "QUAT_MI2S_RX_2"},
{"BE_OUT", NULL, "QUAT_MI2S_RX_3"},
{"BE_OUT", NULL, "QUAT_MI2S_RX_4"},
+ {"BE_OUT", NULL, "PROXY_RX"},
{"PRI_I2S_TX", NULL, "BE_IN"},
{"MI2S_TX", NULL, "BE_IN"},
@@ -21445,6 +21481,7 @@ static const struct snd_soc_dapm_route intercon[] = {
{"QUAT_TDM_TX_1", NULL, "BE_IN"},
{"QUAT_TDM_TX_2", NULL, "BE_IN"},
{"QUAT_TDM_TX_3", NULL, "BE_IN"},
+ {"PROXY_TX", NULL, "BE_IN"},
};
static int msm_pcm_routing_hw_params(struct snd_pcm_substream *substream,
diff --git a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h
index 70a4152ad05a..30b66bb7ae63 100644
--- a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h
+++ b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h
@@ -45,6 +45,8 @@
#define LPASS_BE_VOICE2_PLAYBACK_TX "VOICE2_PLAYBACK_TX"
#define LPASS_BE_INCALL_RECORD_RX "INCALL_RECORD_RX"
#define LPASS_BE_INCALL_RECORD_TX "INCALL_RECORD_TX"
+#define LPASS_BE_PROXY_RX "PROXY_RX"
+#define LPASS_BE_PROXY_TX "PROXY_TX"
#define LPASS_BE_SEC_I2S_RX "SECONDARY_I2S_RX"
#define LPASS_BE_SPDIF_RX "SPDIF_RX"
@@ -429,6 +431,8 @@ enum {
MSM_BACKEND_DAI_QUATERNARY_MI2S_TX_2,
MSM_BACKEND_DAI_QUATERNARY_MI2S_TX_3,
MSM_BACKEND_DAI_QUATERNARY_MI2S_TX_4,
+ MSM_BACKEND_DAI_PROXY_RX,
+ MSM_BACKEND_DAI_PROXY_TX,
MSM_BACKEND_DAI_MAX,
};
diff --git a/sound/soc/msm/qdsp6v2/q6afe.c b/sound/soc/msm/qdsp6v2/q6afe.c
index 7ee774ddccf7..610604fcfe15 100644
--- a/sound/soc/msm/qdsp6v2/q6afe.c
+++ b/sound/soc/msm/qdsp6v2/q6afe.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2020, 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
@@ -785,6 +785,8 @@ int afe_get_port_type(u16 port_id)
case VOICE_PLAYBACK_TX:
case VOICE2_PLAYBACK_TX:
case RT_PROXY_PORT_001_RX:
+ case RT_PROXY_PORT_002_RX:
+ case RT_PROXY_PORT_002_TX:
case AUDIO_PORT_ID_I2S_RX:
case AFE_PORT_ID_PRIMARY_MI2S_RX:
case AFE_PORT_ID_SECONDARY_MI2S_RX:
@@ -3422,6 +3424,8 @@ static int __afe_port_start(u16 port_id, union afe_port_config *afe_config,
break;
case RT_PROXY_PORT_001_RX:
case RT_PROXY_PORT_001_TX:
+ case RT_PROXY_PORT_002_RX:
+ case RT_PROXY_PORT_002_TX:
cfg_type = AFE_PARAM_ID_RT_PROXY_CONFIG;
break;
case INT_BT_SCO_RX:
@@ -3833,6 +3837,10 @@ int afe_get_port_index(u16 port_id)
return IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX_3;
case AFE_PORT_ID_QUATERNARY_MI2S_RX_4:
return IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX_4;
+ case RT_PROXY_PORT_002_RX:
+ return IDX_RT_PROXY_PORT_002_RX;
+ case RT_PROXY_PORT_002_TX:
+ return IDX_RT_PROXY_PORT_002_TX;
default:
pr_err("%s: port 0x%x\n", __func__, port_id);
return -EINVAL;
@@ -5810,6 +5818,8 @@ int afe_validate_port(u16 port_id)
case AFE_PORT_ID_INT4_MI2S_TX:
case AFE_PORT_ID_INT5_MI2S_TX:
case AFE_PORT_ID_INT6_MI2S_TX:
+ case RT_PROXY_PORT_002_RX:
+ case RT_PROXY_PORT_002_TX:
{
ret = 0;
break;
diff --git a/sound/soc/msm/qdsp6v2/q6audio-v2.c b/sound/soc/msm/qdsp6v2/q6audio-v2.c
index 94a6b0c42dee..9faf85e11ed7 100644
--- a/sound/soc/msm/qdsp6v2/q6audio-v2.c
+++ b/sound/soc/msm/qdsp6v2/q6audio-v2.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2018, 2020, 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
@@ -309,6 +309,10 @@ int q6audio_get_port_index(u16 port_id)
return IDX_AFE_PORT_ID_INT6_MI2S_RX;
case AFE_PORT_ID_INT6_MI2S_TX:
return IDX_AFE_PORT_ID_INT6_MI2S_TX;
+ case RT_PROXY_PORT_002_RX:
+ return IDX_RT_PROXY_PORT_002_RX;
+ case RT_PROXY_PORT_002_TX:
+ return IDX_RT_PROXY_PORT_002_TX;
default: return -EINVAL;
}
}
@@ -604,6 +608,10 @@ int q6audio_get_port_id(u16 port_id)
return AFE_PORT_ID_INT6_MI2S_RX;
case AFE_PORT_ID_INT6_MI2S_TX:
return AFE_PORT_ID_INT6_MI2S_TX;
+ case RT_PROXY_PORT_002_RX:
+ return RT_PROXY_PORT_002_RX;
+ case RT_PROXY_PORT_002_TX:
+ return RT_PROXY_PORT_002_TX;
default:
pr_warn("%s: Invalid port_id %d\n", __func__, port_id);
return -EINVAL;
@@ -939,6 +947,8 @@ int q6audio_validate_port(u16 port_id)
case AFE_PORT_ID_QUATERNARY_MI2S_TX_2:
case AFE_PORT_ID_QUATERNARY_MI2S_TX_3:
case AFE_PORT_ID_QUATERNARY_MI2S_TX_4:
+ case RT_PROXY_PORT_002_RX:
+ case RT_PROXY_PORT_002_TX:
{
ret = 0;
break;
diff --git a/sound/soc/msm/sdm660-ext-dai-links.c b/sound/soc/msm/sdm660-ext-dai-links.c
index 9a3e8e2fad51..fb0042f48d84 100644
--- a/sound/soc/msm/sdm660-ext-dai-links.c
+++ b/sound/soc/msm/sdm660-ext-dai-links.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015-2018, 2020, 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
@@ -1449,6 +1449,34 @@ static struct snd_soc_dai_link msm_ext_common_be_dai[] = {
.be_hw_params_fixup = msm_ext_be_hw_params_fixup,
.ignore_suspend = 1,
},
+ /* Proxy Tx BACK END DAI Link */
+ {
+ .name = LPASS_BE_PROXY_TX,
+ .stream_name = "Proxy Capture",
+ .cpu_dai_name = "msm-dai-q6-dev.8195",
+ .platform_name = "msm-pcm-routing",
+ .codec_name = "msm-stub-codec.1",
+ .codec_dai_name = "msm-stub-tx",
+ .no_pcm = 1,
+ .dpcm_capture = 1,
+ .be_id = MSM_BACKEND_DAI_PROXY_TX,
+ .ignore_suspend = 1,
+ },
+ /* Proxy Rx BACK END DAI Link */
+ {
+ .name = LPASS_BE_PROXY_RX,
+ .stream_name = "Proxy Playback",
+ .cpu_dai_name = "msm-dai-q6-dev.8194",
+ .platform_name = "msm-pcm-routing",
+ .codec_name = "msm-stub-codec.1",
+ .codec_dai_name = "msm-stub-rx",
+ .no_pcm = 1,
+ .dpcm_playback = 1,
+ .be_id = MSM_BACKEND_DAI_PROXY_RX,
+ .ignore_pmdown_time = 1,
+ .ignore_suspend = 1,
+ },
+
{
.name = LPASS_BE_USB_AUDIO_RX,
.stream_name = "USB Audio Playback",
diff --git a/sound/soc/msm/sdm660-internal.c b/sound/soc/msm/sdm660-internal.c
index e4a6d86e908d..929020f32213 100644
--- a/sound/soc/msm/sdm660-internal.c
+++ b/sound/soc/msm/sdm660-internal.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015-2018, 2020, 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
@@ -2587,6 +2587,33 @@ static struct snd_soc_dai_link msm_int_be_dai[] = {
.be_hw_params_fixup = msm_be_hw_params_fixup,
.ignore_suspend = 1,
},
+ /* Proxy Tx BACK END DAI Link */
+ {
+ .name = LPASS_BE_PROXY_TX,
+ .stream_name = "Proxy Capture",
+ .cpu_dai_name = "msm-dai-q6-dev.8195",
+ .platform_name = "msm-pcm-routing",
+ .codec_name = "msm-stub-codec.1",
+ .codec_dai_name = "msm-stub-tx",
+ .no_pcm = 1,
+ .dpcm_capture = 1,
+ .be_id = MSM_BACKEND_DAI_PROXY_TX,
+ .ignore_suspend = 1,
+ },
+ /* Proxy Rx BACK END DAI Link */
+ {
+ .name = LPASS_BE_PROXY_RX,
+ .stream_name = "Proxy Playback",
+ .cpu_dai_name = "msm-dai-q6-dev.8194",
+ .platform_name = "msm-pcm-routing",
+ .codec_name = "msm-stub-codec.1",
+ .codec_dai_name = "msm-stub-rx",
+ .no_pcm = 1,
+ .dpcm_playback = 1,
+ .be_id = MSM_BACKEND_DAI_PROXY_RX,
+ .ignore_pmdown_time = 1,
+ .ignore_suspend = 1,
+ },
{
.name = LPASS_BE_USB_AUDIO_RX,
.stream_name = "USB Audio Playback",