Loading sound/soc/msm/msm-dai-fe.c +24 −0 Original line number Diff line number Diff line Loading @@ -986,6 +986,30 @@ static struct snd_soc_dai_driver msm_fe_dais[] = { .name = "LSM8", .probe = fe_dai_probe, }, { .playback = { .stream_name = "VoWLAN Playback", .aif_name = "VoWLAN_DL", .rates = SNDRV_PCM_RATE_8000_48000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .channels_min = 1, .channels_max = 2, .rate_min = 8000, .rate_max = 48000, }, .capture = { .stream_name = "VoWLAN Capture", .aif_name = "VoWLAN_UL", .rates = SNDRV_PCM_RATE_8000_48000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .channels_min = 1, .channels_max = 2, .rate_min = 8000, .rate_max = 48000, }, .ops = &msm_fe_dai_ops, .name = "VoWLAN", }, }; static int msm_fe_dai_dev_probe(struct platform_device *pdev) Loading sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +93 −0 Original line number Diff line number Diff line Loading @@ -662,6 +662,8 @@ static void msm_pcm_routing_process_voice(u16 reg, u16 val, int set) session_id = voc_get_session_id(VOICE_SESSION_NAME); else if (val == MSM_FRONTEND_DAI_VOLTE) session_id = voc_get_session_id(VOLTE_SESSION_NAME); else if (val == MSM_FRONTEND_DAI_VOWLAN) session_id = voc_get_session_id(VOWLAN_SESSION_NAME); else if (val == MSM_FRONTEND_DAI_VOICE2) session_id = voc_get_session_id(VOICE2_SESSION_NAME); else if (val == MSM_FRONTEND_DAI_QCHAT) Loading Loading @@ -1826,6 +1828,9 @@ static const struct snd_kcontrol_new pri_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_I2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_I2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_I2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1847,6 +1852,9 @@ static const struct snd_kcontrol_new sec_i2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_I2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_I2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_I2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1868,6 +1876,9 @@ static const struct snd_kcontrol_new sec_mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SECONDARY_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SECONDARY_MI2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SECONDARY_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading Loading @@ -1898,6 +1909,9 @@ static const struct snd_kcontrol_new slimbus_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX, MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_RX , MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_0_RX , MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1922,6 +1936,9 @@ static const struct snd_kcontrol_new bt_sco_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_INT_BT_SCO_RX , MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_INT_BT_SCO_RX , MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT_BT_SCO_RX , MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1946,6 +1963,9 @@ static const struct snd_kcontrol_new mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_MI2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading Loading @@ -1973,6 +1993,9 @@ static const struct snd_kcontrol_new pri_mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1997,6 +2020,9 @@ static const struct snd_kcontrol_new quat_mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading Loading @@ -2027,6 +2053,9 @@ static const struct snd_kcontrol_new afe_pcm_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AFE_PCM_RX, MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AFE_PCM_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AFE_PCM_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading Loading @@ -2057,6 +2086,9 @@ static const struct snd_kcontrol_new aux_pcm_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AUXPCM_RX, MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AUXPCM_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AUXPCM_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -2078,6 +2110,9 @@ static const struct snd_kcontrol_new sec_aux_pcm_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_AUXPCM_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_AUXPCM_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -2099,6 +2134,9 @@ static const struct snd_kcontrol_new hdmi_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_HDMI_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_HDMI_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_HDMI_RX, MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), Loading Loading @@ -2230,6 +2268,33 @@ static const struct snd_kcontrol_new tx_volte_mixer_controls[] = { msm_routing_put_voice_mixer), }; static const struct snd_kcontrol_new tx_vowlan_mixer_controls[] = { SOC_SINGLE_EXT("PRI_TX_VoWLAN", MSM_BACKEND_DAI_PRI_I2S_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("SLIM_0_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_VoWLAN", MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("AFE_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AFE_PCM_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AUXPCM_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("SEC_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("MI2S_TX_VoWLAN", MSM_BACKEND_DAI_MI2S_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("PRI_MI2S_TX_VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), }; static const struct snd_kcontrol_new tx_voip_mixer_controls[] = { SOC_SINGLE_EXT("PRI_TX_Voip", MSM_BACKEND_DAI_PRI_I2S_TX, MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer, Loading Loading @@ -2842,6 +2907,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_AIF_OUT("VOICE2_UL", "Voice2 Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("VoLTE_DL", "VoLTE Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("VoLTE_UL", "VoLTE Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("VoWLAN_DL", "VoWLAN Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("VoWLAN_UL", "VoWLAN Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("VOIP_UL", "VoIP Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SLIM0_DL_HL", "SLIMBUS0_HOSTLESS Playback", 0, 0, 0, 0), Loading Loading @@ -3140,6 +3207,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_MIXER("VoLTE_Tx Mixer", SND_SOC_NOPM, 0, 0, tx_volte_mixer_controls, ARRAY_SIZE(tx_volte_mixer_controls)), SND_SOC_DAPM_MIXER("VoWLAN_Tx Mixer", SND_SOC_NOPM, 0, 0, tx_vowlan_mixer_controls, ARRAY_SIZE(tx_vowlan_mixer_controls)), SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Audio Mixer", SND_SOC_NOPM, 0, 0, int_bt_sco_rx_mixer_controls, ARRAY_SIZE(int_bt_sco_rx_mixer_controls)), SND_SOC_DAPM_MIXER("INTERNAL_FM_RX Audio Mixer", SND_SOC_NOPM, 0, 0, Loading Loading @@ -3448,6 +3518,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"PRI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"PRI_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"PRI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"PRI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"PRI_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"PRI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"PRI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3456,6 +3527,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SEC_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"SEC_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"SEC_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"SEC_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"SEC_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"SEC_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"SEC_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3464,6 +3536,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SEC_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"SEC_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"SEC_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"SEC_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"SEC_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"SEC_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"SEC_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3472,6 +3545,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SLIM_0_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"SLIM_0_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"SLIM_0_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"SLIM_0_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"SLIM_0_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"SLIM_0_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"SLIM_0_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, Loading @@ -3483,6 +3557,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"INTERNAL_BT_SCO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3491,6 +3566,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"AFE_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"AFE_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"AFE_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"AFE_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"AFE_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"AFE_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"AFE_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3499,6 +3575,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, Loading @@ -3509,6 +3586,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SEC_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"SEC_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"SEC_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"SEC_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"SEC_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"SEC_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, Loading @@ -3518,6 +3596,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"HDMI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"HDMI_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"HDMI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"HDMI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"HDMI_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"HDMI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"HDMI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3528,6 +3607,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"}, Loading @@ -3536,6 +3616,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"PRI_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"PRI_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"PRI_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"PRI_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"PRI_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, {"PRI_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, {"PRI_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3545,6 +3626,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"QUAT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"}, Loading Loading @@ -3583,6 +3665,17 @@ static const struct snd_soc_dapm_route intercon[] = { {"VoLTE_Tx Mixer", "MI2S_TX_VoLTE", "MI2S_TX"}, {"VoLTE_Tx Mixer", "PRI_MI2S_TX_VoLTE", "PRI_MI2S_TX"}, {"VoLTE_UL", NULL, "VoLTE_Tx Mixer"}, {"VoWLAN_Tx Mixer", "PRI_TX_VoWLAN", "PRI_I2S_TX"}, {"VoWLAN_Tx Mixer", "SLIM_0_TX_VoWLAN", "SLIMBUS_0_TX"}, {"VoWLAN_Tx Mixer", "INTERNAL_BT_SCO_TX_VoWLAN", "INT_BT_SCO_TX"}, {"VoWLAN_Tx Mixer", "AFE_PCM_TX_VoWLAN", "PCM_TX"}, {"VoWLAN_Tx Mixer", "AUX_PCM_TX_VoWLAN", "AUX_PCM_TX"}, {"VoWLAN_Tx Mixer", "SEC_AUX_PCM_TX_VoWLAN", "SEC_AUX_PCM_TX"}, {"VoWLAN_Tx Mixer", "MI2S_TX_VoWLAN", "MI2S_TX"}, {"VoWLAN_Tx Mixer", "PRI_MI2S_TX_VoWLAN", "PRI_MI2S_TX"}, {"VoWLAN_UL", NULL, "VoWLAN_Tx Mixer"}, {"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"}, {"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"}, {"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"}, Loading sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h +1 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ enum { MSM_FRONTEND_DAI_LSM7, MSM_FRONTEND_DAI_LSM8, MSM_FRONTEND_DAI_VOICE2_STUB, MSM_FRONTEND_DAI_VOWLAN, MSM_FRONTEND_DAI_MAX, }; Loading sound/soc/msm/qdsp6v2/msm-pcm-voice-v2.c +15 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,14 @@ static bool is_qchat(struct msm_voice *pqchat) return false; } static bool is_vowlan(struct msm_voice *pvowlan) { if (pvowlan == &voice_info[VOWLAN_SESSION_INDEX]) return true; else return false; } static uint32_t get_session_id(struct msm_voice *pvoc) { uint32_t session_id = 0; Loading @@ -85,6 +93,8 @@ static uint32_t get_session_id(struct msm_voice *pvoc) session_id = voc_get_session_id(VOICE2_SESSION_NAME); else if (is_qchat(pvoc)) session_id = voc_get_session_id(QCHAT_SESSION_NAME); else if (is_vowlan(pvoc)) session_id = voc_get_session_id(VOWLAN_SESSION_NAME); else session_id = voc_get_session_id(VOICE_SESSION_NAME); Loading Loading @@ -134,6 +144,10 @@ static int msm_pcm_open(struct snd_pcm_substream *substream) voice = &voice_info[QCHAT_SESSION_INDEX]; pr_debug("%s: Open QCHAT Substream Id=%s\n", __func__, substream->pcm->id); } else if (!strncmp("VoWLAN", substream->pcm->id, 6)) { voice = &voice_info[VOWLAN_SESSION_INDEX]; pr_debug("%s: Open VoWLAN Substream Id=%s\n", __func__, substream->pcm->id); } else { voice = &voice_info[VOICE_SESSION_INDEX]; pr_debug("%s: Open VOICE Substream Id=%s\n", Loading Loading @@ -448,6 +462,7 @@ static int msm_voice_tty_mode_put(struct snd_kcontrol *kcontrol, voc_set_tty_mode(voc_get_session_id(VOICE_SESSION_NAME), tty_mode); voc_set_tty_mode(voc_get_session_id(VOICE2_SESSION_NAME), tty_mode); voc_set_tty_mode(voc_get_session_id(VOLTE_SESSION_NAME), tty_mode); voc_set_tty_mode(voc_get_session_id(VOWLAN_SESSION_NAME), tty_mode); return 0; } Loading sound/soc/msm/qdsp6v2/msm-pcm-voice-v2.h +2 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2014, 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 Loading @@ -18,6 +18,7 @@ enum { VOLTE_SESSION_INDEX, VOICE2_SESSION_INDEX, QCHAT_SESSION_INDEX, VOWLAN_SESSION_INDEX, VOICE_SESSION_INDEX_MAX, }; Loading Loading
sound/soc/msm/msm-dai-fe.c +24 −0 Original line number Diff line number Diff line Loading @@ -986,6 +986,30 @@ static struct snd_soc_dai_driver msm_fe_dais[] = { .name = "LSM8", .probe = fe_dai_probe, }, { .playback = { .stream_name = "VoWLAN Playback", .aif_name = "VoWLAN_DL", .rates = SNDRV_PCM_RATE_8000_48000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .channels_min = 1, .channels_max = 2, .rate_min = 8000, .rate_max = 48000, }, .capture = { .stream_name = "VoWLAN Capture", .aif_name = "VoWLAN_UL", .rates = SNDRV_PCM_RATE_8000_48000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .channels_min = 1, .channels_max = 2, .rate_min = 8000, .rate_max = 48000, }, .ops = &msm_fe_dai_ops, .name = "VoWLAN", }, }; static int msm_fe_dai_dev_probe(struct platform_device *pdev) Loading
sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +93 −0 Original line number Diff line number Diff line Loading @@ -662,6 +662,8 @@ static void msm_pcm_routing_process_voice(u16 reg, u16 val, int set) session_id = voc_get_session_id(VOICE_SESSION_NAME); else if (val == MSM_FRONTEND_DAI_VOLTE) session_id = voc_get_session_id(VOLTE_SESSION_NAME); else if (val == MSM_FRONTEND_DAI_VOWLAN) session_id = voc_get_session_id(VOWLAN_SESSION_NAME); else if (val == MSM_FRONTEND_DAI_VOICE2) session_id = voc_get_session_id(VOICE2_SESSION_NAME); else if (val == MSM_FRONTEND_DAI_QCHAT) Loading Loading @@ -1826,6 +1828,9 @@ static const struct snd_kcontrol_new pri_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_I2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_I2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_I2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1847,6 +1852,9 @@ static const struct snd_kcontrol_new sec_i2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_I2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_I2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_I2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1868,6 +1876,9 @@ static const struct snd_kcontrol_new sec_mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SECONDARY_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SECONDARY_MI2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SECONDARY_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading Loading @@ -1898,6 +1909,9 @@ static const struct snd_kcontrol_new slimbus_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX, MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_RX , MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_0_RX , MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1922,6 +1936,9 @@ static const struct snd_kcontrol_new bt_sco_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_INT_BT_SCO_RX , MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_INT_BT_SCO_RX , MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT_BT_SCO_RX , MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1946,6 +1963,9 @@ static const struct snd_kcontrol_new mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_MI2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading Loading @@ -1973,6 +1993,9 @@ static const struct snd_kcontrol_new pri_mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -1997,6 +2020,9 @@ static const struct snd_kcontrol_new quat_mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading Loading @@ -2027,6 +2053,9 @@ static const struct snd_kcontrol_new afe_pcm_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AFE_PCM_RX, MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AFE_PCM_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AFE_PCM_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading Loading @@ -2057,6 +2086,9 @@ static const struct snd_kcontrol_new aux_pcm_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AUXPCM_RX, MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_AUXPCM_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AUXPCM_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -2078,6 +2110,9 @@ static const struct snd_kcontrol_new sec_aux_pcm_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_SEC_AUXPCM_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_AUXPCM_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), Loading @@ -2099,6 +2134,9 @@ static const struct snd_kcontrol_new hdmi_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_HDMI_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_HDMI_RX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_HDMI_RX, MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), Loading Loading @@ -2230,6 +2268,33 @@ static const struct snd_kcontrol_new tx_volte_mixer_controls[] = { msm_routing_put_voice_mixer), }; static const struct snd_kcontrol_new tx_vowlan_mixer_controls[] = { SOC_SINGLE_EXT("PRI_TX_VoWLAN", MSM_BACKEND_DAI_PRI_I2S_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("SLIM_0_TX_VoWLAN", MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("INTERNAL_BT_SCO_TX_VoWLAN", MSM_BACKEND_DAI_INT_BT_SCO_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("AFE_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AFE_PCM_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_AUXPCM_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("SEC_AUX_PCM_TX_VoWLAN", MSM_BACKEND_DAI_SEC_AUXPCM_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("MI2S_TX_VoWLAN", MSM_BACKEND_DAI_MI2S_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("PRI_MI2S_TX_VoWLAN", MSM_BACKEND_DAI_PRI_MI2S_TX, MSM_FRONTEND_DAI_VOWLAN, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), }; static const struct snd_kcontrol_new tx_voip_mixer_controls[] = { SOC_SINGLE_EXT("PRI_TX_Voip", MSM_BACKEND_DAI_PRI_I2S_TX, MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer, Loading Loading @@ -2842,6 +2907,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_AIF_OUT("VOICE2_UL", "Voice2 Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("VoLTE_DL", "VoLTE Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("VoLTE_UL", "VoLTE Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("VoWLAN_DL", "VoWLAN Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("VoWLAN_UL", "VoWLAN Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("VOIP_UL", "VoIP Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SLIM0_DL_HL", "SLIMBUS0_HOSTLESS Playback", 0, 0, 0, 0), Loading Loading @@ -3140,6 +3207,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_MIXER("VoLTE_Tx Mixer", SND_SOC_NOPM, 0, 0, tx_volte_mixer_controls, ARRAY_SIZE(tx_volte_mixer_controls)), SND_SOC_DAPM_MIXER("VoWLAN_Tx Mixer", SND_SOC_NOPM, 0, 0, tx_vowlan_mixer_controls, ARRAY_SIZE(tx_vowlan_mixer_controls)), SND_SOC_DAPM_MIXER("INTERNAL_BT_SCO_RX Audio Mixer", SND_SOC_NOPM, 0, 0, int_bt_sco_rx_mixer_controls, ARRAY_SIZE(int_bt_sco_rx_mixer_controls)), SND_SOC_DAPM_MIXER("INTERNAL_FM_RX Audio Mixer", SND_SOC_NOPM, 0, 0, Loading Loading @@ -3448,6 +3518,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"PRI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"PRI_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"PRI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"PRI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"PRI_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"PRI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"PRI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3456,6 +3527,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SEC_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"SEC_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"SEC_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"SEC_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"SEC_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"SEC_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"SEC_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3464,6 +3536,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SEC_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"SEC_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"SEC_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"SEC_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"SEC_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"SEC_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"SEC_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3472,6 +3545,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SLIM_0_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"SLIM_0_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"SLIM_0_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"SLIM_0_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"SLIM_0_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"SLIM_0_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"SLIM_0_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, Loading @@ -3483,6 +3557,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"INTERNAL_BT_SCO_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"INTERNAL_BT_SCO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3491,6 +3566,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"AFE_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"AFE_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"AFE_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"AFE_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"AFE_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"AFE_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"AFE_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3499,6 +3575,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"AUX_PCM_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, Loading @@ -3509,6 +3586,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SEC_AUX_PCM_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"SEC_AUX_PCM_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"SEC_AUX_PCM_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"SEC_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"SEC_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"SEC_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, Loading @@ -3518,6 +3596,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"HDMI_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"HDMI_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"HDMI_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"HDMI_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"HDMI_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"HDMI_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"}, {"HDMI_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3528,6 +3607,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, {"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, {"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"}, Loading @@ -3536,6 +3616,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"PRI_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"PRI_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"PRI_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"PRI_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"PRI_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, {"PRI_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, {"PRI_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, Loading @@ -3545,6 +3626,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"QUAT_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, {"QUAT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"}, Loading Loading @@ -3583,6 +3665,17 @@ static const struct snd_soc_dapm_route intercon[] = { {"VoLTE_Tx Mixer", "MI2S_TX_VoLTE", "MI2S_TX"}, {"VoLTE_Tx Mixer", "PRI_MI2S_TX_VoLTE", "PRI_MI2S_TX"}, {"VoLTE_UL", NULL, "VoLTE_Tx Mixer"}, {"VoWLAN_Tx Mixer", "PRI_TX_VoWLAN", "PRI_I2S_TX"}, {"VoWLAN_Tx Mixer", "SLIM_0_TX_VoWLAN", "SLIMBUS_0_TX"}, {"VoWLAN_Tx Mixer", "INTERNAL_BT_SCO_TX_VoWLAN", "INT_BT_SCO_TX"}, {"VoWLAN_Tx Mixer", "AFE_PCM_TX_VoWLAN", "PCM_TX"}, {"VoWLAN_Tx Mixer", "AUX_PCM_TX_VoWLAN", "AUX_PCM_TX"}, {"VoWLAN_Tx Mixer", "SEC_AUX_PCM_TX_VoWLAN", "SEC_AUX_PCM_TX"}, {"VoWLAN_Tx Mixer", "MI2S_TX_VoWLAN", "MI2S_TX"}, {"VoWLAN_Tx Mixer", "PRI_MI2S_TX_VoWLAN", "PRI_MI2S_TX"}, {"VoWLAN_UL", NULL, "VoWLAN_Tx Mixer"}, {"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"}, {"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"}, {"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"}, Loading
sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h +1 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ enum { MSM_FRONTEND_DAI_LSM7, MSM_FRONTEND_DAI_LSM8, MSM_FRONTEND_DAI_VOICE2_STUB, MSM_FRONTEND_DAI_VOWLAN, MSM_FRONTEND_DAI_MAX, }; Loading
sound/soc/msm/qdsp6v2/msm-pcm-voice-v2.c +15 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,14 @@ static bool is_qchat(struct msm_voice *pqchat) return false; } static bool is_vowlan(struct msm_voice *pvowlan) { if (pvowlan == &voice_info[VOWLAN_SESSION_INDEX]) return true; else return false; } static uint32_t get_session_id(struct msm_voice *pvoc) { uint32_t session_id = 0; Loading @@ -85,6 +93,8 @@ static uint32_t get_session_id(struct msm_voice *pvoc) session_id = voc_get_session_id(VOICE2_SESSION_NAME); else if (is_qchat(pvoc)) session_id = voc_get_session_id(QCHAT_SESSION_NAME); else if (is_vowlan(pvoc)) session_id = voc_get_session_id(VOWLAN_SESSION_NAME); else session_id = voc_get_session_id(VOICE_SESSION_NAME); Loading Loading @@ -134,6 +144,10 @@ static int msm_pcm_open(struct snd_pcm_substream *substream) voice = &voice_info[QCHAT_SESSION_INDEX]; pr_debug("%s: Open QCHAT Substream Id=%s\n", __func__, substream->pcm->id); } else if (!strncmp("VoWLAN", substream->pcm->id, 6)) { voice = &voice_info[VOWLAN_SESSION_INDEX]; pr_debug("%s: Open VoWLAN Substream Id=%s\n", __func__, substream->pcm->id); } else { voice = &voice_info[VOICE_SESSION_INDEX]; pr_debug("%s: Open VOICE Substream Id=%s\n", Loading Loading @@ -448,6 +462,7 @@ static int msm_voice_tty_mode_put(struct snd_kcontrol *kcontrol, voc_set_tty_mode(voc_get_session_id(VOICE_SESSION_NAME), tty_mode); voc_set_tty_mode(voc_get_session_id(VOICE2_SESSION_NAME), tty_mode); voc_set_tty_mode(voc_get_session_id(VOLTE_SESSION_NAME), tty_mode); voc_set_tty_mode(voc_get_session_id(VOWLAN_SESSION_NAME), tty_mode); return 0; } Loading
sound/soc/msm/qdsp6v2/msm-pcm-voice-v2.h +2 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2014, 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 Loading @@ -18,6 +18,7 @@ enum { VOLTE_SESSION_INDEX, VOICE2_SESSION_INDEX, QCHAT_SESSION_INDEX, VOWLAN_SESSION_INDEX, VOICE_SESSION_INDEX_MAX, }; Loading