mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 12:25:00 -04:00
Merge "ASoC: msm: Add second proxy tx device FE and AFE Rx BE"
This commit is contained in:
commit
30f23bd6ea
7 changed files with 240 additions and 41 deletions
42
asoc/msm-dai-q6-v2.c
Normal file → Executable file
42
asoc/msm-dai-q6-v2.c
Normal file → Executable file
|
|
@ -2769,6 +2769,7 @@ static int msm_dai_q6_hw_params(struct snd_pcm_substream *substream,
|
|||
case RT_PROXY_DAI_002_TX:
|
||||
case RT_PROXY_DAI_002_RX:
|
||||
case RT_PROXY_DAI_003_TX:
|
||||
case RT_PROXY_DAI_003_RX:
|
||||
case RT_PROXY_PORT_002_TX:
|
||||
case RT_PROXY_PORT_002_RX:
|
||||
rc = msm_dai_q6_afe_rtproxy_hw_params(params, dai);
|
||||
|
|
@ -4091,6 +4092,10 @@ static const struct soc_enum rt_proxy_1_rx_enum =
|
|||
SOC_ENUM_SINGLE(RT_PROXY_PORT_001_RX, 0, ARRAY_SIZE(afe_cal_mode_text),
|
||||
afe_cal_mode_text);
|
||||
|
||||
static const struct soc_enum rt_proxy_2_rx_enum =
|
||||
SOC_ENUM_SINGLE(RT_PROXY_PORT_002_RX, 0, ARRAY_SIZE(afe_cal_mode_text),
|
||||
afe_cal_mode_text);
|
||||
|
||||
static const struct soc_enum rt_proxy_1_tx_enum =
|
||||
SOC_ENUM_SINGLE(RT_PROXY_PORT_001_TX, 0, ARRAY_SIZE(afe_cal_mode_text),
|
||||
afe_cal_mode_text);
|
||||
|
|
@ -4112,11 +4117,14 @@ static const struct snd_kcontrol_new sb_config_controls[] = {
|
|||
|
||||
static const struct snd_kcontrol_new rt_proxy_config_controls[] = {
|
||||
SOC_ENUM_EXT("RT_PROXY_1_RX SetCalMode", rt_proxy_1_rx_enum,
|
||||
msm_dai_q6_cal_info_get,
|
||||
msm_dai_q6_cal_info_put),
|
||||
msm_dai_q6_cal_info_get,
|
||||
msm_dai_q6_cal_info_put),
|
||||
SOC_ENUM_EXT("RT_PROXY_1_TX SetCalMode", rt_proxy_1_tx_enum,
|
||||
msm_dai_q6_cal_info_get,
|
||||
msm_dai_q6_cal_info_put),
|
||||
msm_dai_q6_cal_info_get,
|
||||
msm_dai_q6_cal_info_put),
|
||||
SOC_ENUM_EXT("RT_PROXY_2_RX SetCalMode", rt_proxy_2_rx_enum,
|
||||
msm_dai_q6_cal_info_get,
|
||||
msm_dai_q6_cal_info_put),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new usb_audio_cfg_controls[] = {
|
||||
|
|
@ -4284,6 +4292,11 @@ static int msm_dai_q6_dai_probe(struct snd_soc_dai *dai)
|
|||
snd_ctl_new1(&rt_proxy_config_controls[1],
|
||||
dai_data));
|
||||
break;
|
||||
case RT_PROXY_DAI_003_RX:
|
||||
rc = snd_ctl_add(dai->component->card->snd_card,
|
||||
snd_ctl_new1(&rt_proxy_config_controls[2],
|
||||
dai_data));
|
||||
break;
|
||||
case AFE_PORT_ID_USB_RX:
|
||||
rc = snd_ctl_add(dai->component->card->snd_card,
|
||||
snd_ctl_new1(&usb_audio_cfg_controls[0],
|
||||
|
|
@ -4381,6 +4394,24 @@ static struct snd_soc_dai_driver msm_dai_q6_afe_rx_dai[] = {
|
|||
.probe = msm_dai_q6_dai_probe,
|
||||
.remove = msm_dai_q6_dai_remove,
|
||||
},
|
||||
{
|
||||
.playback = {
|
||||
.stream_name = "AFE Playback1",
|
||||
.aif_name = "PCM_RX1",
|
||||
.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 |
|
||||
SNDRV_PCM_RATE_16000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE,
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &msm_dai_q6_ops,
|
||||
.id = RT_PROXY_DAI_003_RX,
|
||||
.probe = msm_dai_q6_dai_probe,
|
||||
.remove = msm_dai_q6_dai_remove,
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_driver msm_dai_q6_afe_lb_tx_dai[] = {
|
||||
|
|
@ -7616,6 +7647,9 @@ register_slim_capture:
|
|||
case RT_PROXY_DAI_001_RX:
|
||||
strlcpy(stream_name, "AFE Playback", 80);
|
||||
goto register_afe_playback;
|
||||
case RT_PROXY_DAI_003_RX:
|
||||
strlcpy(stream_name, "AFE Playback1", 80);
|
||||
goto register_afe_playback;
|
||||
case RT_PROXY_DAI_002_RX:
|
||||
strlcpy(stream_name, "AFE-PROXY RX", 80);
|
||||
register_afe_playback:
|
||||
|
|
|
|||
126
asoc/msm-pcm-routing-v2.c
Normal file → Executable file
126
asoc/msm-pcm-routing-v2.c
Normal file → Executable file
|
|
@ -478,7 +478,8 @@ static void msm_pcm_routng_cfg_matrix_map_pp(struct route_payload payload,
|
|||
is_custom_stereo_on) {
|
||||
for (itr = 0; itr < payload.num_copps; itr++) {
|
||||
if ((payload.port_id[itr] != SLIMBUS_0_RX) &&
|
||||
(payload.port_id[itr] != RT_PROXY_PORT_001_RX)) {
|
||||
(payload.port_id[itr] != RT_PROXY_PORT_001_RX) &&
|
||||
(payload.port_id[itr] != RT_PROXY_PORT_002_RX)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -886,6 +887,8 @@ struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = {
|
|||
{ RT_PROXY_PORT_002_RX, 0, {0}, {0}, 0, 0, 0, 0, LPASS_BE_PROXY_RX},
|
||||
{ RT_PROXY_PORT_002_TX, 0, {0}, {0}, 0, 0, 0, 0, LPASS_BE_PROXY_TX},
|
||||
{ HDMI_RX_MS, 0, {0}, {0}, 0, 0, 0, 0, LPASS_BE_HDMI_MS},
|
||||
{ RT_PROXY_PORT_002_RX, 0, {0}, {0}, 0, 0, 0, 0,
|
||||
LPASS_BE_AFE_PCM_RX1},
|
||||
};
|
||||
|
||||
/* Track ASM playback & capture sessions of DAI
|
||||
|
|
@ -3746,7 +3749,7 @@ static const char *const be_name[] = {
|
|||
"RX_CDC_DMA_RX_6", "RX_CDC_DMA_RX_7",
|
||||
"PRI_SPDIF_TX", "SEC_SPDIF_RX", "SEC_SPDIF_TX",
|
||||
"SLIM_9_RX", "SLIM_9_TX", "AFE_LOOPBACK_TX", "PRI_META_MI2S_RX",
|
||||
"SEC_META_MI2S_RX", "PROXY_RX", "PROXY_TX", "HDMI_RX_MS"
|
||||
"SEC_META_MI2S_RX", "PROXY_RX", "PROXY_TX", "HDMI_RX_MS", "AFE_PCM_RX1"
|
||||
};
|
||||
|
||||
static SOC_ENUM_SINGLE_DECL(mm1_channel_mux,
|
||||
|
|
@ -9983,6 +9986,101 @@ static const struct snd_kcontrol_new afe_pcm_rx_mixer_controls[] = {
|
|||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new afe_pcm_rx_1_mixer_controls[] = {
|
||||
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia2", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia3", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia4", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia5", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia6", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia7", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia8", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia9", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia10", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia11", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia12", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia13", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia14", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia15", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia16", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia17", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA17, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia18", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA18, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia19", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia26", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA26, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia28", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA28, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia29", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA29, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia30", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA30, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
#ifndef CONFIG_AUXPCM_DISABLE
|
||||
static const struct snd_kcontrol_new auxpcm_rx_mixer_controls[] = {
|
||||
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
|
||||
|
|
@ -23067,6 +23165,7 @@ static int msm_routing_put_stereo_to_custom_stereo_control(
|
|||
continue;
|
||||
if ((port_id != SLIMBUS_0_RX) &&
|
||||
(port_id != RT_PROXY_PORT_001_RX) &&
|
||||
(port_id != RT_PROXY_PORT_002_RX) &&
|
||||
(port_id != AFE_PORT_ID_PRIMARY_MI2S_RX) &&
|
||||
(port_id != AFE_PORT_ID_INT4_MI2S_RX))
|
||||
continue;
|
||||
|
|
@ -24504,6 +24603,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
|||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("PCM_TX", "AFE Capture",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("PCM_RX1", "AFE Playback1",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("WSA_CDC_DMA_RX_0", "WSA CDC DMA0 Playback",
|
||||
0, 0, 0, 0),
|
||||
SND_SOC_DAPM_AIF_IN("WSA_CDC_DMA_TX_0", "WSA CDC DMA0 Capture",
|
||||
|
|
@ -24808,6 +24909,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
|
|||
int_fm_rx_mixer_controls, ARRAY_SIZE(int_fm_rx_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("AFE_PCM_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
|
||||
afe_pcm_rx_mixer_controls, ARRAY_SIZE(afe_pcm_rx_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("AFE_PCM_RX1 Audio Mixer", SND_SOC_NOPM, 0, 0,
|
||||
afe_pcm_rx_1_mixer_controls, ARRAY_SIZE(afe_pcm_rx_1_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("Voice Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
|
||||
tx_voice_stub_mixer_controls, ARRAY_SIZE(tx_voice_stub_mixer_controls)),
|
||||
SND_SOC_DAPM_MIXER("Voice2 Stub Tx Mixer", SND_SOC_NOPM, 0, 0,
|
||||
|
|
@ -26916,6 +27019,24 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"AFE_PCM_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
|
||||
{"PCM_RX", NULL, "AFE_PCM_RX Audio Mixer"},
|
||||
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia1", "MM_DL1"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia2", "MM_DL2"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia3", "MM_DL3"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia4", "MM_DL4"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia5", "MM_DL5"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia6", "MM_DL6"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia7", "MM_DL7"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia8", "MM_DL8"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia9", "MM_DL9"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia10", "MM_DL10"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia11", "MM_DL11"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia12", "MM_DL12"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia13", "MM_DL13"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia14", "MM_DL14"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia15", "MM_DL15"},
|
||||
{"AFE_PCM_RX1 Audio Mixer", "MultiMedia16", "MM_DL16"},
|
||||
{"PCM_RX1", NULL, "AFE_PCM_RX1 Audio Mixer"},
|
||||
|
||||
{"MultiMedia1 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
|
||||
{"MultiMedia3 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
|
||||
{"MultiMedia4 Mixer", "INTERNAL_BT_SCO_TX", "INT_BT_SCO_TX"},
|
||||
|
|
@ -27452,6 +27573,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"BE_OUT", NULL, "RX_CDC_DMA_RX_6"},
|
||||
{"BE_OUT", NULL, "RX_CDC_DMA_RX_7"},
|
||||
{"BE_OUT", NULL, "PROXY_RX"},
|
||||
{"BE_OUT", NULL, "PCM_RX1"},
|
||||
|
||||
{"SLIMBUS_0_TX", NULL, "BE_IN" },
|
||||
{"SLIMBUS_1_TX", NULL, "BE_IN" },
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#define LPASS_BE_INT_FM_TX "INT_FM_TX"
|
||||
#define LPASS_BE_AFE_PCM_RX "RT_PROXY_DAI_001_RX"
|
||||
#define LPASS_BE_AFE_PCM_TX "RT_PROXY_DAI_002_TX"
|
||||
#define LPASS_BE_AFE_PCM_RX1 "RT_PROXY_DAI_003_RX"
|
||||
#define LPASS_BE_AUXPCM_RX "AUX_PCM_RX"
|
||||
#define LPASS_BE_AUXPCM_TX "AUX_PCM_TX"
|
||||
#define LPASS_BE_SEC_AUXPCM_RX "SEC_AUX_PCM_RX"
|
||||
|
|
@ -513,6 +514,7 @@ enum {
|
|||
MSM_BACKEND_DAI_PROXY_RX,
|
||||
MSM_BACKEND_DAI_PROXY_TX,
|
||||
MSM_BACKEND_DAI_HDMI_RX_MS,
|
||||
MSM_BACKEND_DAI_AFE_PCM_RX1,
|
||||
MSM_BACKEND_DAI_MAX,
|
||||
};
|
||||
|
||||
|
|
|
|||
107
dsp/q6afe.c
107
dsp/q6afe.c
|
|
@ -339,15 +339,17 @@ static struct afe_ctl this_afe;
|
|||
#define TIMEOUT_MS 1000
|
||||
#define Q6AFE_MAX_VOLUME 0x3FFF
|
||||
|
||||
static int pcm_afe_instance[2];
|
||||
static int proxy_afe_instance[2];
|
||||
bool afe_close_done[2] = {true, true};
|
||||
static int pcm_afe_instance[3];
|
||||
static int proxy_afe_instance[3];
|
||||
bool afe_close_done[3] = {true, true, true};
|
||||
|
||||
static bool proxy_afe_started = false;
|
||||
|
||||
#define SIZEOF_CFG_CMD(y) \
|
||||
(sizeof(struct apr_hdr) + sizeof(u16) + (sizeof(struct y)))
|
||||
|
||||
static bool is_afe_proxy_port(int port_id);
|
||||
|
||||
static void q6afe_unload_avcs_modules(u16 port_id, int index)
|
||||
{
|
||||
int ret = 0;
|
||||
|
|
@ -5737,28 +5739,30 @@ static int __afe_port_start(u16 port_id, union afe_port_config *afe_config,
|
|||
proxy_afe_started = true;
|
||||
}
|
||||
if ((port_id == RT_PROXY_DAI_001_RX) ||
|
||||
(port_id == RT_PROXY_DAI_002_TX)) {
|
||||
(port_id == RT_PROXY_DAI_002_TX) ||
|
||||
(port_id == RT_PROXY_DAI_003_RX)) {
|
||||
pr_debug("%s: before incrementing pcm_afe_instance %d port_id 0x%x\n",
|
||||
__func__,
|
||||
pcm_afe_instance[port_id & 0x1], port_id);
|
||||
pcm_afe_instance[port_id & 0x3], port_id);
|
||||
port_id = VIRTUAL_ID_TO_PORTID(port_id);
|
||||
pcm_afe_instance[port_id & 0x1]++;
|
||||
pcm_afe_instance[port_id & 0x3]++;
|
||||
return 0;
|
||||
}
|
||||
if ((port_id == RT_PROXY_DAI_002_RX) ||
|
||||
(port_id == RT_PROXY_DAI_001_TX)) {
|
||||
(port_id == RT_PROXY_DAI_001_TX) ||
|
||||
(port_id == RT_PROXY_DAI_003_TX)) {
|
||||
pr_debug("%s: before incrementing proxy_afe_instance %d port_id 0x%x\n",
|
||||
__func__,
|
||||
proxy_afe_instance[port_id & 0x1], port_id);
|
||||
proxy_afe_instance[port_id & 0x3], port_id);
|
||||
|
||||
if (!afe_close_done[port_id & 0x1]) {
|
||||
if (!afe_close_done[port_id & 0x3]) {
|
||||
/*close pcm dai corresponding to the proxy dai*/
|
||||
afe_close(port_id - 0x10);
|
||||
pcm_afe_instance[port_id & 0x1]++;
|
||||
pcm_afe_instance[port_id & 0x3]++;
|
||||
pr_debug("%s: reconfigure afe port again\n", __func__);
|
||||
}
|
||||
proxy_afe_instance[port_id & 0x1]++;
|
||||
afe_close_done[port_id & 0x1] = false;
|
||||
proxy_afe_instance[port_id & 0x3]++;
|
||||
afe_close_done[port_id & 0x3] = false;
|
||||
port_id = VIRTUAL_ID_TO_PORTID(port_id);
|
||||
}
|
||||
|
||||
|
|
@ -6654,12 +6658,14 @@ int afe_open(u16 port_id,
|
|||
}
|
||||
|
||||
if ((port_id == RT_PROXY_DAI_001_RX) ||
|
||||
(port_id == RT_PROXY_DAI_002_TX)) {
|
||||
(port_id == RT_PROXY_DAI_002_TX) ||
|
||||
(port_id == RT_PROXY_DAI_003_RX)) {
|
||||
pr_err("%s: wrong port 0x%x\n", __func__, port_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
if ((port_id == RT_PROXY_DAI_002_RX) ||
|
||||
(port_id == RT_PROXY_DAI_001_TX))
|
||||
(port_id == RT_PROXY_DAI_001_TX) ||
|
||||
(port_id == RT_PROXY_DAI_003_TX))
|
||||
port_id = VIRTUAL_ID_TO_PORTID(port_id);
|
||||
|
||||
ret = afe_q6_interface_prepare();
|
||||
|
|
@ -8828,6 +8834,29 @@ int afe_validate_port(u16 port_id)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static bool is_afe_proxy_port(int port_id)
|
||||
{
|
||||
bool ret = false;
|
||||
switch(port_id) {
|
||||
case RT_PROXY_DAI_001_RX:
|
||||
case RT_PROXY_DAI_001_TX:
|
||||
case RT_PROXY_DAI_002_RX:
|
||||
case RT_PROXY_DAI_002_TX:
|
||||
case RT_PROXY_DAI_003_RX:
|
||||
case RT_PROXY_DAI_003_TX:
|
||||
{
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
pr_debug("%s: afe port %d is not a proxy port\n",
|
||||
__func__, port_id);
|
||||
ret = false;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int afe_convert_virtual_to_portid(u16 port_id)
|
||||
{
|
||||
int ret;
|
||||
|
|
@ -8841,6 +8870,7 @@ int afe_convert_virtual_to_portid(u16 port_id)
|
|||
port_id == RT_PROXY_DAI_001_TX ||
|
||||
port_id == RT_PROXY_DAI_002_RX ||
|
||||
port_id == RT_PROXY_DAI_002_TX ||
|
||||
port_id == RT_PROXY_DAI_003_RX ||
|
||||
port_id == RT_PROXY_DAI_003_TX) {
|
||||
ret = VIRTUAL_ID_TO_PORTID(port_id);
|
||||
} else {
|
||||
|
|
@ -8903,43 +8933,50 @@ int afe_close(int port_id)
|
|||
|
||||
if (this_afe.apr == NULL) {
|
||||
pr_err("%s: AFE is already closed\n", __func__);
|
||||
if ((port_id == RT_PROXY_DAI_001_RX) ||
|
||||
(port_id == RT_PROXY_DAI_002_TX))
|
||||
pcm_afe_instance[port_id & 0x1] = 0;
|
||||
if ((port_id == RT_PROXY_DAI_002_RX) ||
|
||||
(port_id == RT_PROXY_DAI_001_TX))
|
||||
proxy_afe_instance[port_id & 0x1] = 0;
|
||||
afe_close_done[port_id & 0x1] = true;
|
||||
|
||||
if (is_afe_proxy_port(port_id)) {
|
||||
if ((port_id == RT_PROXY_DAI_001_RX) ||
|
||||
(port_id == RT_PROXY_DAI_002_TX) ||
|
||||
(port_id == RT_PROXY_DAI_003_RX))
|
||||
pcm_afe_instance[port_id & 0x3] = 0;
|
||||
if ((port_id == RT_PROXY_DAI_002_RX) ||
|
||||
(port_id == RT_PROXY_DAI_001_TX) ||
|
||||
(port_id == RT_PROXY_DAI_003_TX))
|
||||
proxy_afe_instance[port_id & 0x3] = 0;
|
||||
afe_close_done[port_id & 0x3] = true;
|
||||
}
|
||||
ret = -EINVAL;
|
||||
goto fail_cmd;
|
||||
}
|
||||
pr_debug("%s: port_id = 0x%x\n", __func__, port_id);
|
||||
if ((port_id == RT_PROXY_DAI_001_RX) ||
|
||||
(port_id == RT_PROXY_DAI_002_TX)) {
|
||||
(port_id == RT_PROXY_DAI_002_TX) ||
|
||||
(port_id == RT_PROXY_DAI_003_RX)) {
|
||||
pr_debug("%s: before decrementing pcm_afe_instance %d\n",
|
||||
__func__, pcm_afe_instance[port_id & 0x1]);
|
||||
__func__, pcm_afe_instance[port_id & 0x3]);
|
||||
port_id = VIRTUAL_ID_TO_PORTID(port_id);
|
||||
pcm_afe_instance[port_id & 0x1]--;
|
||||
if ((!(pcm_afe_instance[port_id & 0x1] == 0 &&
|
||||
proxy_afe_instance[port_id & 0x1] == 0)) ||
|
||||
afe_close_done[port_id & 0x1] == true)
|
||||
pcm_afe_instance[port_id & 0x3]--;
|
||||
if ((!(pcm_afe_instance[port_id & 0x3] == 0 &&
|
||||
proxy_afe_instance[port_id & 0x3] == 0)) ||
|
||||
afe_close_done[port_id & 0x3] == true)
|
||||
return 0;
|
||||
|
||||
afe_close_done[port_id & 0x1] = true;
|
||||
afe_close_done[port_id & 0x3] = true;
|
||||
}
|
||||
|
||||
if ((port_id == RT_PROXY_DAI_002_RX) ||
|
||||
(port_id == RT_PROXY_DAI_001_TX)) {
|
||||
(port_id == RT_PROXY_DAI_001_TX) ||
|
||||
(port_id == RT_PROXY_DAI_003_TX)) {
|
||||
pr_debug("%s: before decrementing proxy_afe_instance %d\n",
|
||||
__func__, proxy_afe_instance[port_id & 0x1]);
|
||||
__func__, proxy_afe_instance[port_id & 0x3]);
|
||||
port_id = VIRTUAL_ID_TO_PORTID(port_id);
|
||||
proxy_afe_instance[port_id & 0x1]--;
|
||||
if ((!(pcm_afe_instance[port_id & 0x1] == 0 &&
|
||||
proxy_afe_instance[port_id & 0x1] == 0)) ||
|
||||
afe_close_done[port_id & 0x1] == true)
|
||||
proxy_afe_instance[port_id & 0x3]--;
|
||||
if ((!(pcm_afe_instance[port_id & 0x3] == 0 &&
|
||||
proxy_afe_instance[port_id & 0x3] == 0)) ||
|
||||
afe_close_done[port_id & 0x3] == true)
|
||||
return 0;
|
||||
|
||||
afe_close_done[port_id & 0x1] = true;
|
||||
afe_close_done[port_id & 0x3] = true;
|
||||
}
|
||||
|
||||
if (port_id == RT_PROXY_PORT_002_RX && proxy_afe_started)
|
||||
|
|
|
|||
|
|
@ -795,6 +795,7 @@ int q6audio_convert_virtual_to_portid(u16 port_id)
|
|||
port_id == RT_PROXY_DAI_001_TX ||
|
||||
port_id == RT_PROXY_DAI_002_RX ||
|
||||
port_id == RT_PROXY_DAI_002_TX ||
|
||||
port_id == RT_PROXY_DAI_003_RX ||
|
||||
port_id == RT_PROXY_DAI_003_TX)
|
||||
ret = VIRTUAL_ID_TO_PORTID(port_id);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1358,6 +1358,7 @@ struct adm_cmd_connect_afe_port_v5 {
|
|||
#define INT_FM_TX 0x3005
|
||||
#define RT_PROXY_PORT_001_RX 0x2000
|
||||
#define RT_PROXY_PORT_001_TX 0x2001
|
||||
#define RT_PROXY_PORT_002_RX 0x2002
|
||||
#define AFE_LOOPBACK_TX 0x6001
|
||||
#define HDMI_RX_MS 0x6002
|
||||
#define DISPLAY_PORT_RX 0x6020
|
||||
|
|
@ -1521,6 +1522,7 @@ struct adm_cmd_connect_afe_port_v5 {
|
|||
|
||||
#define AFE_PORT_ID_RT_PROXY_PORT_001_RX 0x2000
|
||||
#define AFE_PORT_ID_RT_PROXY_PORT_001_TX 0x2001
|
||||
#define AFE_PORT_ID_RT_PROXY_PORT_002_RX 0x2002
|
||||
#define AFE_PORT_ID_INTERNAL_BT_SCO_RX 0x3000
|
||||
#define AFE_PORT_ID_INTERNAL_BT_SCO_TX 0x3001
|
||||
#define AFE_PORT_ID_INTERNAL_BT_A2DP_RX 0x3002
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#define RT_PROXY_DAI_001_TX 0xF0
|
||||
#define RT_PROXY_DAI_002_RX 0xF1
|
||||
#define RT_PROXY_DAI_002_TX 0xE1
|
||||
#define RT_PROXY_DAI_003_RX 0xE2
|
||||
#define RT_PROXY_DAI_003_TX 0xF2
|
||||
#define VIRTUAL_ID_TO_PORTID(val) ((val & 0xF) | 0x2000)
|
||||
#define PORTID_TO_IDX(val) ((val & 0xF) >> 1)
|
||||
|
|
|
|||
Loading…
Reference in a new issue