diff --git a/include/sound/q6afe-v2.h b/include/sound/q6afe-v2.h index b6499d754f2..506e87765ac 100644 --- a/include/sound/q6afe-v2.h +++ b/include/sound/q6afe-v2.h @@ -75,6 +75,10 @@ enum { IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX = 33, IDX_AFE_PORT_ID_SECONDARY_MI2S_RX = 34, IDX_AFE_PORT_ID_SECONDARY_MI2S_TX = 35, + IDX_AFE_PORT_ID_TERTIARY_MI2S_RX = 36, + IDX_AFE_PORT_ID_TERTIARY_MI2S_TX = 37, + IDX_AFE_PORT_ID_PRIMARY_MI2S_RX = 38, + IDX_AFE_PORT_ID_PRIMARY_MI2S_TX = 39, AFE_MAX_PORTS }; diff --git a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c index ad6d5e88f6b..f6bb6956f75 100644 --- a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +++ b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c @@ -188,8 +188,13 @@ static struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = { { SLIMBUS_EXTPROC_RX, 0, 0, 0, 0, 0}, { AFE_PORT_ID_QUATERNARY_MI2S_RX, 0, 0, 0, 0, 0}, { AFE_PORT_ID_QUATERNARY_MI2S_TX, 0, 0, 0, 0, 0}, - { AFE_PORT_ID_SECONDARY_MI2S_RX, 0, 0, 0, 0, 0}, - { AFE_PORT_ID_SECONDARY_MI2S_TX, 0, 0, 0, 0, 0}, + { AFE_PORT_ID_SECONDARY_MI2S_RX, 0, 0, 0, 0, 0}, + { AFE_PORT_ID_SECONDARY_MI2S_TX, 0, 0, 0, 0, 0}, + { AFE_PORT_ID_PRIMARY_MI2S_RX, 0, 0, 0, 0, 0}, + { AFE_PORT_ID_PRIMARY_MI2S_TX, 0, 0, 0, 0, 0}, + { AFE_PORT_ID_TERTIARY_MI2S_RX, 0, 0, 0, 0, 0}, + { AFE_PORT_ID_TERTIARY_MI2S_TX, 0, 0, 0, 0, 0}, + { AUDIO_PORT_ID_I2S_RX, 0, 0, 0, 0, 0}, }; @@ -1155,6 +1160,21 @@ static const struct snd_kcontrol_new secondary_mi2s_rx_mixer_controls[] = { msm_routing_put_audio_mixer), }; +static const struct snd_kcontrol_new primary_mi2s_rx_mixer_controls[] = { + SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_PRI_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_PRI_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_PRI_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_PRI_MI2S_RX, + MSM_FRONTEND_DAI_MULTIMEDIA4, 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, @@ -1605,6 +1625,12 @@ static const struct snd_kcontrol_new mi2s_rx_port_mixer_controls[] = { msm_routing_put_port_mixer), }; +static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = { + SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, + MSM_BACKEND_DAI_SECONDARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer, + msm_routing_put_port_mixer), +}; + static const struct snd_kcontrol_new fm_switch_mixer_controls = SOC_SINGLE_EXT("Switch", SND_SOC_NOPM, 0, 1, 0, msm_routing_get_switch_mixer, @@ -1943,6 +1969,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("SEC_MI2S_RX", "Secondary MI2S Playback", 0, 0, 0, 0), + SND_SOC_DAPM_AIF_OUT("PRI_MI2S_RX", "Primary MI2S Playback", + 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("PRI_I2S_TX", "Primary I2S Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("MI2S_TX", "MI2S Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("QUAT_MI2S_TX", "Quaternary MI2S Capture", @@ -2014,6 +2042,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_MIXER("SEC_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0, secondary_mi2s_rx_mixer_controls, ARRAY_SIZE(secondary_mi2s_rx_mixer_controls)), + 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("MultiMedia1 Mixer", SND_SOC_NOPM, 0, 0, mmul1_mixer_controls, ARRAY_SIZE(mmul1_mixer_controls)), SND_SOC_DAPM_MIXER("MultiMedia2 Mixer", SND_SOC_NOPM, 0, 0, @@ -2108,7 +2139,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { ARRAY_SIZE(sbus_3_rx_port_mixer_controls)), SND_SOC_DAPM_MIXER("MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0, mi2s_rx_port_mixer_controls, ARRAY_SIZE(mi2s_rx_port_mixer_controls)), - + SND_SOC_DAPM_MIXER("PRI_MI2S_RX Port Mixer", SND_SOC_NOPM, 0, 0, + primary_mi2s_rx_port_mixer_controls, + ARRAY_SIZE(primary_mi2s_rx_port_mixer_controls)), /* Virtual Pins to force backends ON atm */ SND_SOC_DAPM_OUTPUT("BE_OUT"), SND_SOC_DAPM_INPUT("BE_IN"), @@ -2170,6 +2203,12 @@ static const struct snd_soc_dapm_route intercon[] = { {"SEC_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, {"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Audio Mixer"}, + {"PRI_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, + {"PRI_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, + {"PRI_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, + {"PRI_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, + {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"}, + {"MultiMedia1 Mixer", "PRI_TX", "PRI_I2S_TX"}, {"MultiMedia1 Mixer", "MI2S_TX", "MI2S_TX"}, {"MultiMedia2 Mixer", "MI2S_TX", "MI2S_TX"}, @@ -2355,6 +2394,10 @@ static const struct snd_soc_dapm_route intercon[] = { {"MI2S_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, {"MI2S_RX Port Mixer", "MI2S_TX", "MI2S_TX"}, {"MI2S_RX", NULL, "MI2S_RX Port Mixer"}, + + {"PRI_MI2S_RX Port Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"}, + {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Port Mixer"}, + /* Backend Enablement */ {"BE_OUT", NULL, "PRI_I2S_RX"}, @@ -2367,6 +2410,13 @@ static const struct snd_soc_dapm_route intercon[] = { {"BE_OUT", NULL, "MI2S_RX"}, {"BE_OUT", NULL, "QUAT_MI2S_RX"}, {"BE_OUT", NULL, "SEC_MI2S_RX"}, + {"BE_OUT", NULL, "PRI_MI2S_RX"}, + {"BE_OUT", NULL, "INT_BT_SCO_RX"}, + {"BE_OUT", NULL, "INT_FM_RX"}, + {"BE_OUT", NULL, "PCM_RX"}, + {"BE_OUT", NULL, "SLIMBUS_3_RX"}, + {"BE_OUT", NULL, "AUX_PCM_RX"}, + {"PRI_I2S_TX", NULL, "BE_IN"}, {"MI2S_TX", NULL, "BE_IN"}, {"QUAT_MI2S_TX", NULL, "BE_IN"}, diff --git a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h index 443e4619c9d..cf24f9acf18 100644 --- a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h +++ b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h @@ -37,6 +37,11 @@ #define LPASS_BE_QUAT_MI2S_TX "QUAT_MI2S_TX" #define LPASS_BE_SEC_MI2S_RX "SEC_MI2S_RX" #define LPASS_BE_SEC_MI2S_TX "SEC_MI2S_TX" +#define LPASS_BE_PRI_MI2S_RX "PRI_MI2S_RX" +#define LPASS_BE_PRI_MI2S_TX "PRI_MI2S_TX" +#define LPASS_BE_TERT_MI2S_RX "TERTIARY_MI2S_RX" +#define LPASS_BE_TERT_MI2S_TX "TERTIARY_MI2S_TX" +#define LPASS_BE_AUDIO_I2S_RX "AUDIO_I2S_RX" #define LPASS_BE_STUB_RX "STUB_RX" #define LPASS_BE_STUB_TX "STUB_TX" #define LPASS_BE_SLIMBUS_1_RX "SLIMBUS_1_RX" @@ -104,6 +109,11 @@ enum { MSM_BACKEND_DAI_QUATERNARY_MI2S_TX, MSM_BACKEND_DAI_SECONDARY_MI2S_RX, MSM_BACKEND_DAI_SECONDARY_MI2S_TX, + MSM_BACKEND_DAI_PRI_MI2S_RX, + MSM_BACKEND_DAI_PRI_MI2S_TX, + MSM_BACKEND_DAI_TERTIARY_MI2S_RX, + MSM_BACKEND_DAI_TERTIARY_MI2S_TX, + MSM_BACKEND_DAI_AUDIO_I2S_RX, MSM_BACKEND_DAI_MAX, }; diff --git a/sound/soc/msm/qdsp6v2/q6afe.c b/sound/soc/msm/qdsp6v2/q6afe.c index 1dcadda35a1..634537bac2e 100644 --- a/sound/soc/msm/qdsp6v2/q6afe.c +++ b/sound/soc/msm/qdsp6v2/q6afe.c @@ -175,6 +175,7 @@ int afe_get_port_type(u16 port_id) case INT_FM_RX: case VOICE_PLAYBACK_TX: case RT_PROXY_PORT_001_RX: + case AFE_PORT_ID_PRIMARY_MI2S_RX: case AFE_PORT_ID_QUATERNARY_MI2S_RX: case AFE_PORT_ID_SECONDARY_MI2S_RX: ret = MSM_AFE_PORT_TYPE_RX; @@ -219,6 +220,7 @@ int afe_sizeof_cfg_cmd(u16 port_id) case SECONDARY_I2S_TX: case MI2S_RX: case MI2S_TX: + case AFE_PORT_ID_PRIMARY_MI2S_RX: ret_size = SIZEOF_CFG_CMD(afe_param_id_i2s_cfg); break; case HDMI_RX: @@ -407,6 +409,7 @@ int afe_port_start(u16 port_id, union afe_port_config *afe_config, case SECONDARY_I2S_TX: case MI2S_RX: case MI2S_TX: + case AFE_PORT_ID_PRIMARY_MI2S_RX: case AFE_PORT_ID_SECONDARY_MI2S_RX: case AFE_PORT_ID_SECONDARY_MI2S_TX: case AFE_PORT_ID_TERTIARY_MI2S_RX: @@ -564,6 +567,8 @@ int afe_get_port_index(u16 port_id) case RT_PROXY_PORT_001_TX: return IDX_RT_PROXY_PORT_001_TX; case SLIMBUS_4_RX: return IDX_SLIMBUS_4_RX; case SLIMBUS_4_TX: return IDX_SLIMBUS_4_TX; + case AFE_PORT_ID_PRIMARY_MI2S_RX: + return IDX_AFE_PORT_ID_PRIMARY_MI2S_RX; case AFE_PORT_ID_QUATERNARY_MI2S_RX: return IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX; case AFE_PORT_ID_QUATERNARY_MI2S_TX: @@ -633,6 +638,7 @@ int afe_open(u16 port_id, break; case SECONDARY_I2S_RX: case SECONDARY_I2S_TX: + case AFE_PORT_ID_PRIMARY_MI2S_RX: case MI2S_RX: case MI2S_TX: cfg_type = AFE_PARAM_ID_I2S_CONFIG; @@ -1996,6 +2002,7 @@ int afe_validate_port(u16 port_id) case RT_PROXY_PORT_001_TX: case SLIMBUS_4_RX: case SLIMBUS_4_TX: + case AFE_PORT_ID_PRIMARY_MI2S_RX: { ret = 0; break; diff --git a/sound/soc/msm/qdsp6v2/q6audio-v2.c b/sound/soc/msm/qdsp6v2/q6audio-v2.c index 985a33dcf54..03dd7c2a7ac 100644 --- a/sound/soc/msm/qdsp6v2/q6audio-v2.c +++ b/sound/soc/msm/qdsp6v2/q6audio-v2.c @@ -48,6 +48,8 @@ int q6audio_get_port_index(u16 port_id) case INT_FM_TX: return IDX_INT_FM_TX; case RT_PROXY_PORT_001_RX: return IDX_RT_PROXY_PORT_001_RX; case RT_PROXY_PORT_001_TX: return IDX_RT_PROXY_PORT_001_TX; + case AFE_PORT_ID_PRIMARY_MI2S_RX: + return IDX_AFE_PORT_ID_PRIMARY_MI2S_RX; case AFE_PORT_ID_QUATERNARY_MI2S_RX: return IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX; case AFE_PORT_ID_QUATERNARY_MI2S_TX: @@ -90,6 +92,8 @@ int q6audio_get_port_id(u16 port_id) case INT_FM_TX: return AFE_PORT_ID_INTERNAL_FM_TX; case RT_PROXY_PORT_001_RX: return AFE_PORT_ID_RT_PROXY_PORT_001_RX; case RT_PROXY_PORT_001_TX: return AFE_PORT_ID_RT_PROXY_PORT_001_TX; + case AFE_PORT_ID_PRIMARY_MI2S_RX: + return AFE_PORT_ID_PRIMARY_MI2S_RX; case AFE_PORT_ID_QUATERNARY_MI2S_RX: return AFE_PORT_ID_QUATERNARY_MI2S_RX; case AFE_PORT_ID_QUATERNARY_MI2S_TX: @@ -179,6 +183,7 @@ int q6audio_validate_port(u16 port_id) case INT_FM_TX: case RT_PROXY_PORT_001_RX: case RT_PROXY_PORT_001_TX: + case AFE_PORT_ID_PRIMARY_MI2S_RX: case AFE_PORT_ID_QUATERNARY_MI2S_RX: case AFE_PORT_ID_QUATERNARY_MI2S_TX: case AFE_PORT_ID_SECONDARY_MI2S_RX: