Loading include/sound/apr_audio-v2.h +16 −0 Original line number Diff line number Diff line Loading @@ -864,6 +864,12 @@ struct adm_cmd_connect_afe_port_v5 { #define AFE_PORT_ID_SECONDARY_PCM_TX 0x100D #define AFE_PORT_ID_MULTICHAN_HDMI_RX 0x100E #define AFE_PORT_ID_SECONDARY_MI2S_RX_SD1 0x1010 #define AFE_PORT_ID_QUINARY_MI2S_RX 0x1016 #define AFE_PORT_ID_QUINARY_MI2S_TX 0x1017 /* ID of the senary MI2S Rx port. */ #define AFE_PORT_ID_SENARY_MI2S_RX 0x1018 /* ID of the senary MI2S Tx port. */ #define AFE_PORT_ID_SENARY_MI2S_TX 0x1019 #define AFE_PORT_ID_SPDIF_RX 0x5000 #define AFE_PORT_ID_RT_PROXY_PORT_001_RX 0x2000 #define AFE_PORT_ID_RT_PROXY_PORT_001_TX 0x2001 Loading Loading @@ -7412,6 +7418,7 @@ struct afe_param_id_clip_bank_sel { /* Supported OSR clock values */ #define Q6AFE_LPASS_OSR_CLK_12_P288_MHZ 0xBB8000 #define Q6AFE_LPASS_OSR_CLK_9_P600_MHZ 0x927C00 #define Q6AFE_LPASS_OSR_CLK_8_P192_MHZ 0x7D0000 #define Q6AFE_LPASS_OSR_CLK_6_P144_MHZ 0x5DC000 #define Q6AFE_LPASS_OSR_CLK_4_P096_MHZ 0x3E8000 Loading Loading @@ -7474,6 +7481,15 @@ enum afe_lpass_clk_mode { /* Clock ID for Speaker I2S OSR */ #define Q6AFE_LPASS_CLK_ID_SPEAKER_I2S_OSR 0x10A /* Clock ID for QUINARY I2S IBIT */ #define Q6AFE_LPASS_CLK_ID_QUI_MI2S_IBIT 0x10B /* Clock ID for QUINARY I2S EBIT */ #define Q6AFE_LPASS_CLK_ID_QUI_MI2S_EBIT 0x10C /* Clock ID for SENARY I2S IBIT */ #define Q6AFE_LPASS_CLK_ID_SEN_MI2S_IBIT 0x10D /* Clock ID for SENARY I2S EBIT */ #define Q6AFE_LPASS_CLK_ID_SEN_MI2S_EBIT 0x10E /* Clock ID for Primary PCM IBIT */ #define Q6AFE_LPASS_CLK_ID_PRI_PCM_IBIT 0x200 /* Clock ID for Primary PCM EBIT */ Loading include/sound/msm-dai-q6-v2.h +5 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2015, 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 Loading @@ -26,6 +26,10 @@ #define MSM_TERT_MI2S 2 #define MSM_QUAT_MI2S 3 #define MSM_SEC_MI2S_SD1 4 #define MSM_QUIN_MI2S 5 #define MSM_SENARY_MI2S 6 #define MSM_MI2S_MIN MSM_PRIM_MI2S #define MSM_MI2S_MAX MSM_SENARY_MI2S struct msm_dai_auxpcm_config { u16 mode; Loading include/sound/q6afe-v2.h +62 −48 Original line number Diff line number Diff line Loading @@ -40,57 +40,71 @@ #define VIRTUAL_ID_TO_PORTID(val) ((val & 0xF) | 0x2000) enum { IDX_PRIMARY_I2S_RX = 0, IDX_PRIMARY_I2S_TX = 1, IDX_AFE_PORT_ID_PRIMARY_PCM_RX = 2, IDX_AFE_PORT_ID_PRIMARY_PCM_TX = 3, IDX_SECONDARY_I2S_RX = 4, IDX_SECONDARY_I2S_TX = 5, IDX_MI2S_RX = 6, IDX_MI2S_TX = 7, IDX_HDMI_RX = 8, IDX_RSVD_2 = 9, IDX_RSVD_3 = 10, IDX_DIGI_MIC_TX = 11, IDX_VOICE_RECORD_RX = 12, IDX_VOICE_RECORD_TX = 13, IDX_VOICE_PLAYBACK_TX = 14, IDX_SLIMBUS_0_RX = 15, IDX_SLIMBUS_0_TX = 16, IDX_SLIMBUS_1_RX = 17, IDX_SLIMBUS_1_TX = 18, IDX_SLIMBUS_2_RX = 19, IDX_SLIMBUS_2_TX = 20, IDX_SLIMBUS_3_RX = 21, IDX_SLIMBUS_3_TX = 22, IDX_SLIMBUS_4_RX = 23, IDX_SLIMBUS_4_TX = 24, IDX_SLIMBUS_5_RX = 25, IDX_SLIMBUS_5_TX = 26, IDX_INT_BT_SCO_RX = 27, IDX_INT_BT_SCO_TX = 28, IDX_INT_BT_A2DP_RX = 29, IDX_INT_FM_RX = 30, IDX_INT_FM_TX = 31, IDX_RT_PROXY_PORT_001_RX = 32, IDX_RT_PROXY_PORT_001_TX = 33, IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX = 34, IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX = 35, IDX_AFE_PORT_ID_SECONDARY_MI2S_RX = 36, IDX_AFE_PORT_ID_SECONDARY_MI2S_TX = 37, IDX_AFE_PORT_ID_TERTIARY_MI2S_RX = 38, IDX_AFE_PORT_ID_TERTIARY_MI2S_TX = 39, IDX_AFE_PORT_ID_PRIMARY_MI2S_RX = 40, IDX_AFE_PORT_ID_PRIMARY_MI2S_TX = 41, IDX_AFE_PORT_ID_SECONDARY_PCM_RX = 42, IDX_AFE_PORT_ID_SECONDARY_PCM_TX = 43, IDX_VOICE2_PLAYBACK_TX = 44, IDX_SLIMBUS_6_RX = 45, IDX_SLIMBUS_6_TX = 46, IDX_SPDIF_RX = 47, /* IDX 0->4 */ IDX_PRIMARY_I2S_RX, IDX_PRIMARY_I2S_TX, IDX_AFE_PORT_ID_PRIMARY_PCM_RX, IDX_AFE_PORT_ID_PRIMARY_PCM_TX, IDX_SECONDARY_I2S_RX, /* IDX 5->9 */ IDX_SECONDARY_I2S_TX, IDX_MI2S_RX, IDX_MI2S_TX, IDX_HDMI_RX, IDX_RSVD_2, /* IDX 10->14 */ IDX_RSVD_3, IDX_DIGI_MIC_TX, IDX_VOICE_RECORD_RX, IDX_VOICE_RECORD_TX, IDX_VOICE_PLAYBACK_TX, /* IDX 15->19 */ IDX_SLIMBUS_0_RX, IDX_SLIMBUS_0_TX, IDX_SLIMBUS_1_RX, IDX_SLIMBUS_1_TX, IDX_SLIMBUS_2_RX, /* IDX 20->24 */ IDX_SLIMBUS_2_TX, IDX_SLIMBUS_3_RX, IDX_SLIMBUS_3_TX, IDX_SLIMBUS_4_RX, IDX_SLIMBUS_4_TX, /* IDX 25->29 */ IDX_SLIMBUS_5_RX, IDX_SLIMBUS_5_TX, IDX_INT_BT_SCO_RX, IDX_INT_BT_SCO_TX, IDX_INT_BT_A2DP_RX, /* IDX 30->34 */ IDX_INT_FM_RX, IDX_INT_FM_TX, IDX_RT_PROXY_PORT_001_RX, IDX_RT_PROXY_PORT_001_TX, IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX, /* IDX 35->39 */ IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX, IDX_AFE_PORT_ID_SECONDARY_MI2S_RX, IDX_AFE_PORT_ID_SECONDARY_MI2S_TX, IDX_AFE_PORT_ID_TERTIARY_MI2S_RX, IDX_AFE_PORT_ID_TERTIARY_MI2S_TX, /* IDX 40->44 */ IDX_AFE_PORT_ID_PRIMARY_MI2S_RX, IDX_AFE_PORT_ID_PRIMARY_MI2S_TX, IDX_AFE_PORT_ID_SECONDARY_PCM_RX, IDX_AFE_PORT_ID_SECONDARY_PCM_TX, IDX_VOICE2_PLAYBACK_TX, /* IDX 45->49 */ IDX_SLIMBUS_6_RX, IDX_SLIMBUS_6_TX, IDX_SPDIF_RX, IDX_GLOBAL_CFG, IDX_AUDIO_PORT_ID_I2S_RX, /* IDX 50->54 */ IDX_AFE_PORT_ID_SECONDARY_MI2S_RX_SD1, IDX_AFE_PORT_ID_QUINARY_MI2S_RX, IDX_AFE_PORT_ID_QUINARY_MI2S_TX, IDX_AFE_PORT_ID_SENARY_MI2S_TX, AFE_MAX_PORTS }; Loading sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c +64 −1 Original line number Diff line number Diff line Loading @@ -2360,6 +2360,9 @@ static const struct snd_kcontrol_new mi2s_config_controls[] = { SOC_ENUM_EXT("QUAT MI2S RX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("QUIN MI2S RX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("PRI MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), Loading @@ -2372,6 +2375,12 @@ static const struct snd_kcontrol_new mi2s_config_controls[] = { SOC_ENUM_EXT("QUAT MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("QUIN MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("SENARY MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), }; static int msm_dai_q6_dai_mi2s_probe(struct snd_soc_dai *dai) Loading @@ -2395,6 +2404,8 @@ static int msm_dai_q6_dai_mi2s_probe(struct snd_soc_dai *dai) ctrl = &mi2s_config_controls[2]; if (dai->id == MSM_QUAT_MI2S) ctrl = &mi2s_config_controls[3]; if (dai->id == MSM_QUIN_MI2S) ctrl = &mi2s_config_controls[4]; } if (ctrl) { Loading @@ -2419,6 +2430,10 @@ static int msm_dai_q6_dai_mi2s_probe(struct snd_soc_dai *dai) ctrl = &mi2s_config_controls[6]; if (dai->id == MSM_QUAT_MI2S) ctrl = &mi2s_config_controls[7]; if (dai->id == MSM_QUIN_MI2S) ctrl = &mi2s_config_controls[9]; if (dai->id == MSM_SENARY_MI2S) ctrl = &mi2s_config_controls[10]; } if (ctrl) { Loading Loading @@ -2496,6 +2511,9 @@ static int msm_mi2s_get_port_id(u32 mi2s_id, int stream, u16 *port_id) case MSM_SEC_MI2S_SD1: *port_id = AFE_PORT_ID_SECONDARY_MI2S_RX_SD1; break; case MSM_QUIN_MI2S: *port_id = AFE_PORT_ID_QUINARY_MI2S_RX; break; break; default: pr_err("%s: playback err id 0x%x\n", Loading @@ -2518,6 +2536,12 @@ static int msm_mi2s_get_port_id(u32 mi2s_id, int stream, u16 *port_id) case MSM_QUAT_MI2S: *port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX; break; case MSM_QUIN_MI2S: *port_id = AFE_PORT_ID_QUINARY_MI2S_TX; break; case MSM_SENARY_MI2S: *port_id = AFE_PORT_ID_SENARY_MI2S_TX; break; default: pr_err("%s: capture err id 0x%x\n", __func__, mi2s_id); ret = -1; Loading Loading @@ -2911,6 +2935,45 @@ static struct snd_soc_dai_driver msm_dai_q6_mi2s_dai[] = { }, .id = MSM_SEC_MI2S_SD1, }, { .playback = { .stream_name = "Quinary MI2S Playback", .aif_name = "QUIN_MI2S_RX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .rate_min = 8000, .rate_max = 48000, }, .capture = { .stream_name = "Quinary MI2S Capture", .aif_name = "QUIN_MI2S_TX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .rate_min = 8000, .rate_max = 48000, }, .ops = &msm_dai_q6_mi2s_ops, .id = MSM_QUIN_MI2S, .probe = msm_dai_q6_dai_mi2s_probe, .remove = msm_dai_q6_dai_mi2s_remove, }, { .capture = { .stream_name = "Senary_mi2s Capture", .aif_name = "SENARY_TX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .rate_min = 8000, .rate_max = 48000, }, .ops = &msm_dai_q6_mi2s_ops, .id = MSM_SENARY_MI2S, .probe = msm_dai_q6_dai_mi2s_probe, .remove = msm_dai_q6_dai_mi2s_remove, }, }; Loading Loading @@ -3078,7 +3141,7 @@ static int msm_dai_q6_mi2s_dev_probe(struct platform_device *pdev) dev_dbg(&pdev->dev, "dev name %s dev id 0x%x\n", dev_name(&pdev->dev), mi2s_intf); if ((mi2s_intf < MSM_PRIM_MI2S || mi2s_intf > MSM_SEC_MI2S_SD1) if ((mi2s_intf < MSM_MI2S_MIN || mi2s_intf > MSM_MI2S_MAX) || (mi2s_intf >= ARRAY_SIZE(msm_dai_q6_mi2s_dai))) { dev_err(&pdev->dev, "%s: Invalid MI2S ID %u from Device Tree\n", Loading sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +170 −2 Original line number Diff line number Diff line Loading @@ -246,9 +246,9 @@ struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = { { SLIMBUS_EXTPROC_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_STUB_TX}, { SLIMBUS_EXTPROC_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_STUB_1_TX}, { AFE_PORT_ID_QUATERNARY_MI2S_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_TERT_MI2S_RX}, LPASS_BE_QUAT_MI2S_RX}, { AFE_PORT_ID_QUATERNARY_MI2S_TX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_TERT_MI2S_TX}, LPASS_BE_QUAT_MI2S_TX}, { AFE_PORT_ID_SECONDARY_MI2S_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_SEC_MI2S_RX}, { AFE_PORT_ID_SECONDARY_MI2S_TX, 0, 0, 0, 0, 0, 0, 0, Loading @@ -273,6 +273,12 @@ struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = { { AFE_PORT_ID_SECONDARY_MI2S_RX_SD1, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_SEC_MI2S_RX_SD1}, { SLIMBUS_5_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_SLIMBUS_5_RX}, { AFE_PORT_ID_QUINARY_MI2S_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_QUIN_MI2S_RX}, { AFE_PORT_ID_QUINARY_MI2S_TX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_QUIN_MI2S_TX}, { AFE_PORT_ID_SENARY_MI2S_TX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_SENARY_MI2S_TX}, }; /* Track ASM playback & capture sessions of DAI */ Loading Loading @@ -2105,6 +2111,57 @@ static const struct snd_kcontrol_new quaternary_mi2s_rx_mixer_controls[] = { msm_routing_put_audio_mixer), }; static const struct snd_kcontrol_new quinary_mi2s_rx_mixer_controls[] = { SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUINARY_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_QUINARY_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_QUINARY_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_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), }; static const struct snd_kcontrol_new tertiary_mi2s_rx_mixer_controls[] = { SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERTIARY_MI2S_RX , MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer, Loading Loading @@ -2676,6 +2733,9 @@ static const struct snd_kcontrol_new mmul1_mixer_controls[] = { SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX, MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_QUINARY_MI2S_TX, MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), }; static const struct snd_kcontrol_new mmul2_mixer_controls[] = { Loading @@ -2697,6 +2757,9 @@ static const struct snd_kcontrol_new mmul2_mixer_controls[] = { SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_QUINARY_MI2S_TX, MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), }; static const struct snd_kcontrol_new mmul4_mixer_controls[] = { Loading Loading @@ -3062,6 +3125,39 @@ static const struct snd_kcontrol_new quat_mi2s_rx_voice_mixer_controls[] = { msm_routing_put_voice_mixer), }; static const struct snd_kcontrol_new quin_mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUINARY_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_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), }; static const struct snd_kcontrol_new afe_pcm_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_AFE_PCM_RX, MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer, Loading Loading @@ -3740,6 +3836,9 @@ static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = { SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer, msm_routing_put_port_mixer), SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_BACKEND_DAI_QUINARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer, msm_routing_put_port_mixer), }; static const struct snd_kcontrol_new quat_mi2s_rx_port_mixer_controls[] = { Loading Loading @@ -4562,6 +4661,10 @@ static const char * const slim0_rx_vi_fb_tx_rch_mux_text[] = { "ZERO", "SLIM4_TX" }; static const char * const mi2s_rx_vi_fb_tx_mux_text[] = { "ZERO", "SENARY_TX" }; static const int const slim0_rx_vi_fb_tx_lch_value[] = { MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX }; Loading @@ -4570,6 +4673,10 @@ static const int const slim0_rx_vi_fb_tx_rch_value[] = { MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX }; static const int const mi2s_rx_vi_fb_tx_value[] = { MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SENARY_MI2S_TX }; static const struct soc_enum slim0_rx_vi_fb_lch_mux_enum = SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_SLIMBUS_0_RX, 0, 0, ARRAY_SIZE(slim0_rx_vi_fb_tx_lch_mux_text), Loading @@ -4580,6 +4687,11 @@ static const struct soc_enum slim0_rx_vi_fb_rch_mux_enum = ARRAY_SIZE(slim0_rx_vi_fb_tx_rch_mux_text), slim0_rx_vi_fb_tx_rch_mux_text, slim0_rx_vi_fb_tx_rch_value); static const struct soc_enum mi2s_rx_vi_fb_mux_enum = SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_PRI_MI2S_RX, 0, 0, ARRAY_SIZE(mi2s_rx_vi_fb_tx_mux_text), mi2s_rx_vi_fb_tx_mux_text, mi2s_rx_vi_fb_tx_value); static const struct snd_kcontrol_new slim0_rx_vi_fb_lch_mux = SOC_DAPM_ENUM_EXT("SLIM0_RX_VI_FB_LCH_MUX", slim0_rx_vi_fb_lch_mux_enum, spkr_prot_get_vi_lch_port, Loading @@ -4590,6 +4702,11 @@ static const struct snd_kcontrol_new slim0_rx_vi_fb_rch_mux = slim0_rx_vi_fb_rch_mux_enum, spkr_prot_get_vi_rch_port, spkr_prot_put_vi_rch_port); static const struct snd_kcontrol_new mi2s_rx_vi_fb_mux = SOC_DAPM_ENUM_EXT("PRI_MI2S_RX_VI_FB_MUX", mi2s_rx_vi_fb_mux_enum, spkr_prot_get_vi_lch_port, spkr_prot_put_vi_lch_port); static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { /* Frontend AIF */ /* Widget name equals to Front-End DAI name<Need confirmation>, Loading Loading @@ -4736,6 +4853,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("PRI_MI2S_RX", "Primary MI2S Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("QUIN_MI2S_RX", "Quinary 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", Loading @@ -4747,6 +4866,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_AIF_IN("SEC_MI2S_TX", "Secondary MI2S Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SLIMBUS_0_TX", "Slimbus Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("QUIN_MI2S_TX", "Quinary MI2S Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("INT_BT_SCO_RX", "Internal BT-SCO Playback", 0, 0, 0 , 0), SND_SOC_DAPM_AIF_IN("INT_BT_SCO_TX", "Internal BT-SCO Capture", Loading @@ -4772,6 +4893,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SLIMBUS_4_TX", "Slimbus4 Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SENARY_TX", "Senary_mi2s Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SLIMBUS_5_TX", "Slimbus5 Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("AUX_PCM_RX", "AUX PCM Playback", 0, 0, 0, 0), Loading Loading @@ -4864,6 +4987,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 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("QUIN_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0, quinary_mi2s_rx_mixer_controls, ARRAY_SIZE(quinary_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, Loading Loading @@ -4941,6 +5067,10 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_NOPM, 0, 0, quat_mi2s_rx_voice_mixer_controls, ARRAY_SIZE(quat_mi2s_rx_voice_mixer_controls)), SND_SOC_DAPM_MIXER("QUIN_MI2S_RX_Voice Mixer", SND_SOC_NOPM, 0, 0, quin_mi2s_rx_voice_mixer_controls, ARRAY_SIZE(quin_mi2s_rx_voice_mixer_controls)), SND_SOC_DAPM_MIXER("Voice_Tx Mixer", SND_SOC_NOPM, 0, 0, tx_voice_mixer_controls, ARRAY_SIZE(tx_voice_mixer_controls)), Loading Loading @@ -5027,6 +5157,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { &slim0_rx_vi_fb_lch_mux), SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_RCH_MUX", SND_SOC_NOPM, 0, 0, &slim0_rx_vi_fb_rch_mux), SND_SOC_DAPM_MUX("PRI_MI2S_RX_VI_FB_MUX", SND_SOC_NOPM, 0, 0, &mi2s_rx_vi_fb_mux), SND_SOC_DAPM_MUX("VOC_EXT_EC MUX", SND_SOC_NOPM, 0, 0, &voc_ext_ec_mux), Loading Loading @@ -5155,6 +5287,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SPDIF_RX Audio Mixer", "MultiMedia16", "MM_DL16"}, {"SPDIF_RX", NULL, "SPDIF_RX Audio Mixer"}, /* incall */ {"Incall_Music Audio Mixer", "MultiMedia1", "MM_DL1"}, {"Incall_Music Audio Mixer", "MultiMedia2", "MM_DL2"}, Loading Loading @@ -5278,12 +5411,32 @@ static const struct snd_soc_dapm_route intercon[] = { {"PRI_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"}, {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"}, {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX Audio Mixer"}, {"TERT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, {"MultiMedia1 Mixer", "PRI_TX", "PRI_I2S_TX"}, {"MultiMedia1 Mixer", "MI2S_TX", "MI2S_TX"}, {"MultiMedia2 Mixer", "MI2S_TX", "MI2S_TX"}, {"MultiMedia5 Mixer", "MI2S_TX", "MI2S_TX"}, {"MultiMedia1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, {"MultiMedia2 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, {"MultiMedia1 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"}, {"MultiMedia2 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"}, {"MultiMedia1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"}, {"MultiMedia2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"}, {"MultiMedia1 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, Loading Loading @@ -5568,6 +5721,17 @@ static const struct snd_soc_dapm_route intercon[] = { {"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"}, {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"}, {"QUIN_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"QUIN_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX_Voice Mixer"}, {"VOC_EXT_EC MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, {"VOC_EXT_EC MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, {"VOC_EXT_EC MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, Loading Loading @@ -5948,6 +6112,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"BE_OUT", NULL, "SPDIF_RX"}, {"BE_OUT", NULL, "MI2S_RX"}, {"BE_OUT", NULL, "QUAT_MI2S_RX"}, {"BE_OUT", NULL, "QUIN_MI2S_RX"}, {"BE_OUT", NULL, "TERT_MI2S_RX"}, {"BE_OUT", NULL, "SEC_MI2S_RX"}, {"BE_OUT", NULL, "SEC_MI2S_RX_SD1"}, Loading @@ -5973,6 +6138,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"PRI_MI2S_TX", NULL, "BE_IN"}, {"TERT_MI2S_TX", NULL, "BE_IN"}, {"SEC_MI2S_TX", NULL, "BE_IN"}, {"SENARY_MI2S_TX", NULL, "BE_IN" }, {"SLIMBUS_0_TX", NULL, "BE_IN" }, {"SLIMBUS_1_TX", NULL, "BE_IN" }, {"SLIMBUS_3_TX", NULL, "BE_IN" }, Loading @@ -5993,8 +6159,10 @@ static const struct snd_soc_dapm_route intercon[] = { {"INCALL_RECORD_RX", NULL, "BE_IN"}, {"SLIM0_RX_VI_FB_LCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"}, {"SLIM0_RX_VI_FB_RCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"}, {"PRI_MI2S_RX_VI_FB_MUX", "SENARY_TX", "SENARY_TX"}, {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_LCH_MUX"}, {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_RCH_MUX"}, {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_VI_FB_MUX"}, }; static int msm_pcm_routing_hw_params(struct snd_pcm_substream *substream, Loading Loading
include/sound/apr_audio-v2.h +16 −0 Original line number Diff line number Diff line Loading @@ -864,6 +864,12 @@ struct adm_cmd_connect_afe_port_v5 { #define AFE_PORT_ID_SECONDARY_PCM_TX 0x100D #define AFE_PORT_ID_MULTICHAN_HDMI_RX 0x100E #define AFE_PORT_ID_SECONDARY_MI2S_RX_SD1 0x1010 #define AFE_PORT_ID_QUINARY_MI2S_RX 0x1016 #define AFE_PORT_ID_QUINARY_MI2S_TX 0x1017 /* ID of the senary MI2S Rx port. */ #define AFE_PORT_ID_SENARY_MI2S_RX 0x1018 /* ID of the senary MI2S Tx port. */ #define AFE_PORT_ID_SENARY_MI2S_TX 0x1019 #define AFE_PORT_ID_SPDIF_RX 0x5000 #define AFE_PORT_ID_RT_PROXY_PORT_001_RX 0x2000 #define AFE_PORT_ID_RT_PROXY_PORT_001_TX 0x2001 Loading Loading @@ -7412,6 +7418,7 @@ struct afe_param_id_clip_bank_sel { /* Supported OSR clock values */ #define Q6AFE_LPASS_OSR_CLK_12_P288_MHZ 0xBB8000 #define Q6AFE_LPASS_OSR_CLK_9_P600_MHZ 0x927C00 #define Q6AFE_LPASS_OSR_CLK_8_P192_MHZ 0x7D0000 #define Q6AFE_LPASS_OSR_CLK_6_P144_MHZ 0x5DC000 #define Q6AFE_LPASS_OSR_CLK_4_P096_MHZ 0x3E8000 Loading Loading @@ -7474,6 +7481,15 @@ enum afe_lpass_clk_mode { /* Clock ID for Speaker I2S OSR */ #define Q6AFE_LPASS_CLK_ID_SPEAKER_I2S_OSR 0x10A /* Clock ID for QUINARY I2S IBIT */ #define Q6AFE_LPASS_CLK_ID_QUI_MI2S_IBIT 0x10B /* Clock ID for QUINARY I2S EBIT */ #define Q6AFE_LPASS_CLK_ID_QUI_MI2S_EBIT 0x10C /* Clock ID for SENARY I2S IBIT */ #define Q6AFE_LPASS_CLK_ID_SEN_MI2S_IBIT 0x10D /* Clock ID for SENARY I2S EBIT */ #define Q6AFE_LPASS_CLK_ID_SEN_MI2S_EBIT 0x10E /* Clock ID for Primary PCM IBIT */ #define Q6AFE_LPASS_CLK_ID_PRI_PCM_IBIT 0x200 /* Clock ID for Primary PCM EBIT */ Loading
include/sound/msm-dai-q6-v2.h +5 −1 Original line number Diff line number Diff line /* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2015, 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 Loading @@ -26,6 +26,10 @@ #define MSM_TERT_MI2S 2 #define MSM_QUAT_MI2S 3 #define MSM_SEC_MI2S_SD1 4 #define MSM_QUIN_MI2S 5 #define MSM_SENARY_MI2S 6 #define MSM_MI2S_MIN MSM_PRIM_MI2S #define MSM_MI2S_MAX MSM_SENARY_MI2S struct msm_dai_auxpcm_config { u16 mode; Loading
include/sound/q6afe-v2.h +62 −48 Original line number Diff line number Diff line Loading @@ -40,57 +40,71 @@ #define VIRTUAL_ID_TO_PORTID(val) ((val & 0xF) | 0x2000) enum { IDX_PRIMARY_I2S_RX = 0, IDX_PRIMARY_I2S_TX = 1, IDX_AFE_PORT_ID_PRIMARY_PCM_RX = 2, IDX_AFE_PORT_ID_PRIMARY_PCM_TX = 3, IDX_SECONDARY_I2S_RX = 4, IDX_SECONDARY_I2S_TX = 5, IDX_MI2S_RX = 6, IDX_MI2S_TX = 7, IDX_HDMI_RX = 8, IDX_RSVD_2 = 9, IDX_RSVD_3 = 10, IDX_DIGI_MIC_TX = 11, IDX_VOICE_RECORD_RX = 12, IDX_VOICE_RECORD_TX = 13, IDX_VOICE_PLAYBACK_TX = 14, IDX_SLIMBUS_0_RX = 15, IDX_SLIMBUS_0_TX = 16, IDX_SLIMBUS_1_RX = 17, IDX_SLIMBUS_1_TX = 18, IDX_SLIMBUS_2_RX = 19, IDX_SLIMBUS_2_TX = 20, IDX_SLIMBUS_3_RX = 21, IDX_SLIMBUS_3_TX = 22, IDX_SLIMBUS_4_RX = 23, IDX_SLIMBUS_4_TX = 24, IDX_SLIMBUS_5_RX = 25, IDX_SLIMBUS_5_TX = 26, IDX_INT_BT_SCO_RX = 27, IDX_INT_BT_SCO_TX = 28, IDX_INT_BT_A2DP_RX = 29, IDX_INT_FM_RX = 30, IDX_INT_FM_TX = 31, IDX_RT_PROXY_PORT_001_RX = 32, IDX_RT_PROXY_PORT_001_TX = 33, IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX = 34, IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX = 35, IDX_AFE_PORT_ID_SECONDARY_MI2S_RX = 36, IDX_AFE_PORT_ID_SECONDARY_MI2S_TX = 37, IDX_AFE_PORT_ID_TERTIARY_MI2S_RX = 38, IDX_AFE_PORT_ID_TERTIARY_MI2S_TX = 39, IDX_AFE_PORT_ID_PRIMARY_MI2S_RX = 40, IDX_AFE_PORT_ID_PRIMARY_MI2S_TX = 41, IDX_AFE_PORT_ID_SECONDARY_PCM_RX = 42, IDX_AFE_PORT_ID_SECONDARY_PCM_TX = 43, IDX_VOICE2_PLAYBACK_TX = 44, IDX_SLIMBUS_6_RX = 45, IDX_SLIMBUS_6_TX = 46, IDX_SPDIF_RX = 47, /* IDX 0->4 */ IDX_PRIMARY_I2S_RX, IDX_PRIMARY_I2S_TX, IDX_AFE_PORT_ID_PRIMARY_PCM_RX, IDX_AFE_PORT_ID_PRIMARY_PCM_TX, IDX_SECONDARY_I2S_RX, /* IDX 5->9 */ IDX_SECONDARY_I2S_TX, IDX_MI2S_RX, IDX_MI2S_TX, IDX_HDMI_RX, IDX_RSVD_2, /* IDX 10->14 */ IDX_RSVD_3, IDX_DIGI_MIC_TX, IDX_VOICE_RECORD_RX, IDX_VOICE_RECORD_TX, IDX_VOICE_PLAYBACK_TX, /* IDX 15->19 */ IDX_SLIMBUS_0_RX, IDX_SLIMBUS_0_TX, IDX_SLIMBUS_1_RX, IDX_SLIMBUS_1_TX, IDX_SLIMBUS_2_RX, /* IDX 20->24 */ IDX_SLIMBUS_2_TX, IDX_SLIMBUS_3_RX, IDX_SLIMBUS_3_TX, IDX_SLIMBUS_4_RX, IDX_SLIMBUS_4_TX, /* IDX 25->29 */ IDX_SLIMBUS_5_RX, IDX_SLIMBUS_5_TX, IDX_INT_BT_SCO_RX, IDX_INT_BT_SCO_TX, IDX_INT_BT_A2DP_RX, /* IDX 30->34 */ IDX_INT_FM_RX, IDX_INT_FM_TX, IDX_RT_PROXY_PORT_001_RX, IDX_RT_PROXY_PORT_001_TX, IDX_AFE_PORT_ID_QUATERNARY_MI2S_RX, /* IDX 35->39 */ IDX_AFE_PORT_ID_QUATERNARY_MI2S_TX, IDX_AFE_PORT_ID_SECONDARY_MI2S_RX, IDX_AFE_PORT_ID_SECONDARY_MI2S_TX, IDX_AFE_PORT_ID_TERTIARY_MI2S_RX, IDX_AFE_PORT_ID_TERTIARY_MI2S_TX, /* IDX 40->44 */ IDX_AFE_PORT_ID_PRIMARY_MI2S_RX, IDX_AFE_PORT_ID_PRIMARY_MI2S_TX, IDX_AFE_PORT_ID_SECONDARY_PCM_RX, IDX_AFE_PORT_ID_SECONDARY_PCM_TX, IDX_VOICE2_PLAYBACK_TX, /* IDX 45->49 */ IDX_SLIMBUS_6_RX, IDX_SLIMBUS_6_TX, IDX_SPDIF_RX, IDX_GLOBAL_CFG, IDX_AUDIO_PORT_ID_I2S_RX, /* IDX 50->54 */ IDX_AFE_PORT_ID_SECONDARY_MI2S_RX_SD1, IDX_AFE_PORT_ID_QUINARY_MI2S_RX, IDX_AFE_PORT_ID_QUINARY_MI2S_TX, IDX_AFE_PORT_ID_SENARY_MI2S_TX, AFE_MAX_PORTS }; Loading
sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c +64 −1 Original line number Diff line number Diff line Loading @@ -2360,6 +2360,9 @@ static const struct snd_kcontrol_new mi2s_config_controls[] = { SOC_ENUM_EXT("QUAT MI2S RX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("QUIN MI2S RX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("PRI MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), Loading @@ -2372,6 +2375,12 @@ static const struct snd_kcontrol_new mi2s_config_controls[] = { SOC_ENUM_EXT("QUAT MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("QUIN MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), SOC_ENUM_EXT("SENARY MI2S TX Format", mi2s_config_enum[0], msm_dai_q6_mi2s_format_get, msm_dai_q6_mi2s_format_put), }; static int msm_dai_q6_dai_mi2s_probe(struct snd_soc_dai *dai) Loading @@ -2395,6 +2404,8 @@ static int msm_dai_q6_dai_mi2s_probe(struct snd_soc_dai *dai) ctrl = &mi2s_config_controls[2]; if (dai->id == MSM_QUAT_MI2S) ctrl = &mi2s_config_controls[3]; if (dai->id == MSM_QUIN_MI2S) ctrl = &mi2s_config_controls[4]; } if (ctrl) { Loading @@ -2419,6 +2430,10 @@ static int msm_dai_q6_dai_mi2s_probe(struct snd_soc_dai *dai) ctrl = &mi2s_config_controls[6]; if (dai->id == MSM_QUAT_MI2S) ctrl = &mi2s_config_controls[7]; if (dai->id == MSM_QUIN_MI2S) ctrl = &mi2s_config_controls[9]; if (dai->id == MSM_SENARY_MI2S) ctrl = &mi2s_config_controls[10]; } if (ctrl) { Loading Loading @@ -2496,6 +2511,9 @@ static int msm_mi2s_get_port_id(u32 mi2s_id, int stream, u16 *port_id) case MSM_SEC_MI2S_SD1: *port_id = AFE_PORT_ID_SECONDARY_MI2S_RX_SD1; break; case MSM_QUIN_MI2S: *port_id = AFE_PORT_ID_QUINARY_MI2S_RX; break; break; default: pr_err("%s: playback err id 0x%x\n", Loading @@ -2518,6 +2536,12 @@ static int msm_mi2s_get_port_id(u32 mi2s_id, int stream, u16 *port_id) case MSM_QUAT_MI2S: *port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX; break; case MSM_QUIN_MI2S: *port_id = AFE_PORT_ID_QUINARY_MI2S_TX; break; case MSM_SENARY_MI2S: *port_id = AFE_PORT_ID_SENARY_MI2S_TX; break; default: pr_err("%s: capture err id 0x%x\n", __func__, mi2s_id); ret = -1; Loading Loading @@ -2911,6 +2935,45 @@ static struct snd_soc_dai_driver msm_dai_q6_mi2s_dai[] = { }, .id = MSM_SEC_MI2S_SD1, }, { .playback = { .stream_name = "Quinary MI2S Playback", .aif_name = "QUIN_MI2S_RX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .rate_min = 8000, .rate_max = 48000, }, .capture = { .stream_name = "Quinary MI2S Capture", .aif_name = "QUIN_MI2S_TX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .rate_min = 8000, .rate_max = 48000, }, .ops = &msm_dai_q6_mi2s_ops, .id = MSM_QUIN_MI2S, .probe = msm_dai_q6_dai_mi2s_probe, .remove = msm_dai_q6_dai_mi2s_remove, }, { .capture = { .stream_name = "Senary_mi2s Capture", .aif_name = "SENARY_TX", .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, .formats = SNDRV_PCM_FMTBIT_S16_LE, .rate_min = 8000, .rate_max = 48000, }, .ops = &msm_dai_q6_mi2s_ops, .id = MSM_SENARY_MI2S, .probe = msm_dai_q6_dai_mi2s_probe, .remove = msm_dai_q6_dai_mi2s_remove, }, }; Loading Loading @@ -3078,7 +3141,7 @@ static int msm_dai_q6_mi2s_dev_probe(struct platform_device *pdev) dev_dbg(&pdev->dev, "dev name %s dev id 0x%x\n", dev_name(&pdev->dev), mi2s_intf); if ((mi2s_intf < MSM_PRIM_MI2S || mi2s_intf > MSM_SEC_MI2S_SD1) if ((mi2s_intf < MSM_MI2S_MIN || mi2s_intf > MSM_MI2S_MAX) || (mi2s_intf >= ARRAY_SIZE(msm_dai_q6_mi2s_dai))) { dev_err(&pdev->dev, "%s: Invalid MI2S ID %u from Device Tree\n", Loading
sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +170 −2 Original line number Diff line number Diff line Loading @@ -246,9 +246,9 @@ struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = { { SLIMBUS_EXTPROC_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_STUB_TX}, { SLIMBUS_EXTPROC_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_STUB_1_TX}, { AFE_PORT_ID_QUATERNARY_MI2S_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_TERT_MI2S_RX}, LPASS_BE_QUAT_MI2S_RX}, { AFE_PORT_ID_QUATERNARY_MI2S_TX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_TERT_MI2S_TX}, LPASS_BE_QUAT_MI2S_TX}, { AFE_PORT_ID_SECONDARY_MI2S_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_SEC_MI2S_RX}, { AFE_PORT_ID_SECONDARY_MI2S_TX, 0, 0, 0, 0, 0, 0, 0, Loading @@ -273,6 +273,12 @@ struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = { { AFE_PORT_ID_SECONDARY_MI2S_RX_SD1, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_SEC_MI2S_RX_SD1}, { SLIMBUS_5_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_SLIMBUS_5_RX}, { AFE_PORT_ID_QUINARY_MI2S_RX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_QUIN_MI2S_RX}, { AFE_PORT_ID_QUINARY_MI2S_TX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_QUIN_MI2S_TX}, { AFE_PORT_ID_SENARY_MI2S_TX, 0, 0, 0, 0, 0, 0, 0, LPASS_BE_SENARY_MI2S_TX}, }; /* Track ASM playback & capture sessions of DAI */ Loading Loading @@ -2105,6 +2111,57 @@ static const struct snd_kcontrol_new quaternary_mi2s_rx_mixer_controls[] = { msm_routing_put_audio_mixer), }; static const struct snd_kcontrol_new quinary_mi2s_rx_mixer_controls[] = { SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_QUINARY_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_QUINARY_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_QUINARY_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_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia5", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia6", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia7", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia8", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia9", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia10", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia11", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia12", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia13", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia14", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia15", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("MultiMedia16", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), }; static const struct snd_kcontrol_new tertiary_mi2s_rx_mixer_controls[] = { SOC_SINGLE_EXT("MultiMedia1", MSM_BACKEND_DAI_TERTIARY_MI2S_RX , MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer, Loading Loading @@ -2676,6 +2733,9 @@ static const struct snd_kcontrol_new mmul1_mixer_controls[] = { SOC_SINGLE_EXT("SLIM_6_TX", MSM_BACKEND_DAI_SLIMBUS_6_TX, MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_QUINARY_MI2S_TX, MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), }; static const struct snd_kcontrol_new mmul2_mixer_controls[] = { Loading @@ -2697,6 +2757,9 @@ static const struct snd_kcontrol_new mmul2_mixer_controls[] = { SOC_SINGLE_EXT("SLIM_0_TX", MSM_BACKEND_DAI_SLIMBUS_0_TX, MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_QUINARY_MI2S_TX, MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer, msm_routing_put_audio_mixer), }; static const struct snd_kcontrol_new mmul4_mixer_controls[] = { Loading Loading @@ -3062,6 +3125,39 @@ static const struct snd_kcontrol_new quat_mi2s_rx_voice_mixer_controls[] = { msm_routing_put_voice_mixer), }; static const struct snd_kcontrol_new quin_mi2s_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("Voice2", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOICE2, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer, msm_routing_put_voice_stub_mixer), SOC_SINGLE_EXT("VoLTE", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOLTE, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("VoWLAN", MSM_BACKEND_DAI_QUINARY_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_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_QUINARY_MI2S_RX, MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer, msm_routing_put_voice_mixer), }; static const struct snd_kcontrol_new afe_pcm_rx_voice_mixer_controls[] = { SOC_SINGLE_EXT("CSVoice", MSM_BACKEND_DAI_AFE_PCM_RX, MSM_FRONTEND_DAI_CS_VOICE, 1, 0, msm_routing_get_voice_mixer, Loading Loading @@ -3740,6 +3836,9 @@ static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = { SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer, msm_routing_put_port_mixer), SOC_SINGLE_EXT("QUIN_MI2S_TX", MSM_BACKEND_DAI_PRI_MI2S_RX, MSM_BACKEND_DAI_QUINARY_MI2S_TX, 1, 0, msm_routing_get_port_mixer, msm_routing_put_port_mixer), }; static const struct snd_kcontrol_new quat_mi2s_rx_port_mixer_controls[] = { Loading Loading @@ -4562,6 +4661,10 @@ static const char * const slim0_rx_vi_fb_tx_rch_mux_text[] = { "ZERO", "SLIM4_TX" }; static const char * const mi2s_rx_vi_fb_tx_mux_text[] = { "ZERO", "SENARY_TX" }; static const int const slim0_rx_vi_fb_tx_lch_value[] = { MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX }; Loading @@ -4570,6 +4673,10 @@ static const int const slim0_rx_vi_fb_tx_rch_value[] = { MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SLIMBUS_4_TX }; static const int const mi2s_rx_vi_fb_tx_value[] = { MSM_BACKEND_DAI_MAX, MSM_BACKEND_DAI_SENARY_MI2S_TX }; static const struct soc_enum slim0_rx_vi_fb_lch_mux_enum = SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_SLIMBUS_0_RX, 0, 0, ARRAY_SIZE(slim0_rx_vi_fb_tx_lch_mux_text), Loading @@ -4580,6 +4687,11 @@ static const struct soc_enum slim0_rx_vi_fb_rch_mux_enum = ARRAY_SIZE(slim0_rx_vi_fb_tx_rch_mux_text), slim0_rx_vi_fb_tx_rch_mux_text, slim0_rx_vi_fb_tx_rch_value); static const struct soc_enum mi2s_rx_vi_fb_mux_enum = SOC_VALUE_ENUM_DOUBLE(0, MSM_BACKEND_DAI_PRI_MI2S_RX, 0, 0, ARRAY_SIZE(mi2s_rx_vi_fb_tx_mux_text), mi2s_rx_vi_fb_tx_mux_text, mi2s_rx_vi_fb_tx_value); static const struct snd_kcontrol_new slim0_rx_vi_fb_lch_mux = SOC_DAPM_ENUM_EXT("SLIM0_RX_VI_FB_LCH_MUX", slim0_rx_vi_fb_lch_mux_enum, spkr_prot_get_vi_lch_port, Loading @@ -4590,6 +4702,11 @@ static const struct snd_kcontrol_new slim0_rx_vi_fb_rch_mux = slim0_rx_vi_fb_rch_mux_enum, spkr_prot_get_vi_rch_port, spkr_prot_put_vi_rch_port); static const struct snd_kcontrol_new mi2s_rx_vi_fb_mux = SOC_DAPM_ENUM_EXT("PRI_MI2S_RX_VI_FB_MUX", mi2s_rx_vi_fb_mux_enum, spkr_prot_get_vi_lch_port, spkr_prot_put_vi_lch_port); static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { /* Frontend AIF */ /* Widget name equals to Front-End DAI name<Need confirmation>, Loading Loading @@ -4736,6 +4853,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("PRI_MI2S_RX", "Primary MI2S Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("QUIN_MI2S_RX", "Quinary 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", Loading @@ -4747,6 +4866,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_AIF_IN("SEC_MI2S_TX", "Secondary MI2S Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SLIMBUS_0_TX", "Slimbus Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("QUIN_MI2S_TX", "Quinary MI2S Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("INT_BT_SCO_RX", "Internal BT-SCO Playback", 0, 0, 0 , 0), SND_SOC_DAPM_AIF_IN("INT_BT_SCO_TX", "Internal BT-SCO Capture", Loading @@ -4772,6 +4893,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SLIMBUS_4_TX", "Slimbus4 Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SENARY_TX", "Senary_mi2s Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SLIMBUS_5_TX", "Slimbus5 Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("AUX_PCM_RX", "AUX PCM Playback", 0, 0, 0, 0), Loading Loading @@ -4864,6 +4987,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 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("QUIN_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0, quinary_mi2s_rx_mixer_controls, ARRAY_SIZE(quinary_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, Loading Loading @@ -4941,6 +5067,10 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_NOPM, 0, 0, quat_mi2s_rx_voice_mixer_controls, ARRAY_SIZE(quat_mi2s_rx_voice_mixer_controls)), SND_SOC_DAPM_MIXER("QUIN_MI2S_RX_Voice Mixer", SND_SOC_NOPM, 0, 0, quin_mi2s_rx_voice_mixer_controls, ARRAY_SIZE(quin_mi2s_rx_voice_mixer_controls)), SND_SOC_DAPM_MIXER("Voice_Tx Mixer", SND_SOC_NOPM, 0, 0, tx_voice_mixer_controls, ARRAY_SIZE(tx_voice_mixer_controls)), Loading Loading @@ -5027,6 +5157,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { &slim0_rx_vi_fb_lch_mux), SND_SOC_DAPM_MUX("SLIM0_RX_VI_FB_RCH_MUX", SND_SOC_NOPM, 0, 0, &slim0_rx_vi_fb_rch_mux), SND_SOC_DAPM_MUX("PRI_MI2S_RX_VI_FB_MUX", SND_SOC_NOPM, 0, 0, &mi2s_rx_vi_fb_mux), SND_SOC_DAPM_MUX("VOC_EXT_EC MUX", SND_SOC_NOPM, 0, 0, &voc_ext_ec_mux), Loading Loading @@ -5155,6 +5287,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"SPDIF_RX Audio Mixer", "MultiMedia16", "MM_DL16"}, {"SPDIF_RX", NULL, "SPDIF_RX Audio Mixer"}, /* incall */ {"Incall_Music Audio Mixer", "MultiMedia1", "MM_DL1"}, {"Incall_Music Audio Mixer", "MultiMedia2", "MM_DL2"}, Loading Loading @@ -5278,12 +5411,32 @@ static const struct snd_soc_dapm_route intercon[] = { {"PRI_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"}, {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia2", "MM_DL2"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia3", "MM_DL3"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia4", "MM_DL4"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia5", "MM_DL5"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia6", "MM_DL6"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia7", "MM_DL7"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia8", "MM_DL8"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia10", "MM_DL10"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia11", "MM_DL11"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia12", "MM_DL12"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia13", "MM_DL13"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"}, {"QUIN_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"}, {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX Audio Mixer"}, {"TERT_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"}, {"MultiMedia1 Mixer", "PRI_TX", "PRI_I2S_TX"}, {"MultiMedia1 Mixer", "MI2S_TX", "MI2S_TX"}, {"MultiMedia2 Mixer", "MI2S_TX", "MI2S_TX"}, {"MultiMedia5 Mixer", "MI2S_TX", "MI2S_TX"}, {"MultiMedia1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, {"MultiMedia2 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"}, {"MultiMedia1 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"}, {"MultiMedia2 Mixer", "QUIN_MI2S_TX", "QUIN_MI2S_TX"}, {"MultiMedia1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"}, {"MultiMedia2 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"}, {"MultiMedia1 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, Loading Loading @@ -5568,6 +5721,17 @@ static const struct snd_soc_dapm_route intercon[] = { {"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"}, {"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"}, {"QUIN_MI2S_RX_Voice Mixer", "CSVoice", "CS-VOICE_DL1"}, {"QUIN_MI2S_RX_Voice Mixer", "Voice2", "VOICE2_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "VoLTE", "VoLTE_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "VoWLAN", "VoWLAN_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"}, {"QUIN_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"}, {"QUIN_MI2S_RX", NULL, "QUIN_MI2S_RX_Voice Mixer"}, {"VOC_EXT_EC MUX", "PRI_MI2S_TX" , "PRI_MI2S_TX"}, {"VOC_EXT_EC MUX", "SEC_MI2S_TX" , "SEC_MI2S_TX"}, {"VOC_EXT_EC MUX", "TERT_MI2S_TX" , "TERT_MI2S_TX"}, Loading Loading @@ -5948,6 +6112,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"BE_OUT", NULL, "SPDIF_RX"}, {"BE_OUT", NULL, "MI2S_RX"}, {"BE_OUT", NULL, "QUAT_MI2S_RX"}, {"BE_OUT", NULL, "QUIN_MI2S_RX"}, {"BE_OUT", NULL, "TERT_MI2S_RX"}, {"BE_OUT", NULL, "SEC_MI2S_RX"}, {"BE_OUT", NULL, "SEC_MI2S_RX_SD1"}, Loading @@ -5973,6 +6138,7 @@ static const struct snd_soc_dapm_route intercon[] = { {"PRI_MI2S_TX", NULL, "BE_IN"}, {"TERT_MI2S_TX", NULL, "BE_IN"}, {"SEC_MI2S_TX", NULL, "BE_IN"}, {"SENARY_MI2S_TX", NULL, "BE_IN" }, {"SLIMBUS_0_TX", NULL, "BE_IN" }, {"SLIMBUS_1_TX", NULL, "BE_IN" }, {"SLIMBUS_3_TX", NULL, "BE_IN" }, Loading @@ -5993,8 +6159,10 @@ static const struct snd_soc_dapm_route intercon[] = { {"INCALL_RECORD_RX", NULL, "BE_IN"}, {"SLIM0_RX_VI_FB_LCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"}, {"SLIM0_RX_VI_FB_RCH_MUX", "SLIM4_TX", "SLIMBUS_4_TX"}, {"PRI_MI2S_RX_VI_FB_MUX", "SENARY_TX", "SENARY_TX"}, {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_LCH_MUX"}, {"SLIMBUS_0_RX", NULL, "SLIM0_RX_VI_FB_RCH_MUX"}, {"PRI_MI2S_RX", NULL, "PRI_MI2S_RX_VI_FB_MUX"}, }; static int msm_pcm_routing_hw_params(struct snd_pcm_substream *substream, Loading