mirror of
https://github.com/LineageOS/android_kernel_samsung_msm8226.git
synced 2026-09-28 00:00:22 +02:00
ASoC: msm: Add support for primary MI2S changes
8x10 helicon codec uses MI2S instead of slimbus. Add support for primary MI2S changes. Change-Id: I52bdffe0affbb1ab84fccd4e2bfa4b0f67f90c58 Signed-off-by: Fred Oh <fred@codeaurora.org>
This commit is contained in:
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user