|
@@ -2056,7 +2056,13 @@ static void msm_pcm_routing_process_audio(u16 reg, u16 val, int set)
|
|
|
|
|
|
pr_debug("%s: reg %x val %x set %x\n", __func__, reg, val, set);
|
|
|
|
|
|
- if (!is_mm_lsm_fe_id(val)) {
|
|
|
+ if (val == MSM_FRONTEND_DAI_DTMF_RX &&
|
|
|
+ afe_get_port_type(msm_bedais[reg].port_id) ==
|
|
|
+ MSM_AFE_PORT_TYPE_RX) {
|
|
|
+ pr_debug("%s(): set=%d port id=0x%x for dtmf generation\n",
|
|
|
+ __func__, set, msm_bedais[reg].port_id);
|
|
|
+ afe_set_dtmf_gen_rx_portid(msm_bedais[reg].port_id, set);
|
|
|
+ } else if (!is_mm_lsm_fe_id(val)) {
|
|
|
/* recheck FE ID in the mixer control defined in this file */
|
|
|
pr_err("%s: bad MM ID\n", __func__);
|
|
|
return;
|
|
@@ -7040,7 +7046,10 @@ static const struct snd_kcontrol_new primary_mi2s_rx_mixer_controls[] = {
|
|
|
MSM_BACKEND_DAI_PRI_MI2S_RX,
|
|
|
MSM_FRONTEND_DAI_MULTIMEDIA30, 1, 0, msm_routing_get_audio_mixer,
|
|
|
msm_routing_put_audio_mixer),
|
|
|
-
|
|
|
+ SOC_DOUBLE_EXT("DTMF", SND_SOC_NOPM,
|
|
|
+ MSM_BACKEND_DAI_PRI_MI2S_RX,
|
|
|
+ MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_audio_mixer,
|
|
|
+ msm_routing_put_audio_mixer),
|
|
|
};
|
|
|
|
|
|
static const struct snd_kcontrol_new int0_mi2s_rx_mixer_controls[] = {
|
|
@@ -24885,6 +24894,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|
|
{"PRI_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
|
|
|
{"PRI_MI2S_RX Audio Mixer", "MultiMedia26", "MM_DL26"},
|
|
|
{"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"},
|
|
|
+ {"PRI_MI2S_RX Audio Mixer", "DTMF", "DTMF_DL_HL"},
|
|
|
|
|
|
{"INT0_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
|
|
|
{"INT0_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"},
|