ASoC: soc: qdsp6v2: add support for slimbus VI recording
Add a new dailink for slimbus VI sense recording. SLIMBUS_TX_VI and SLIMBUS_4_TX can coexist. VI recording and speaker protection cannot work simultaneoulsy due to shared physical afe port. CRs-Fixed: 1087025 Change-Id: If074b7042e09d1e69147546461e6fa42d427350e Signed-off-by: Xiaojun Sang <xsang@codeaurora.org>
This commit is contained in:
parent
9f45a559c7
commit
641fb2817f
6 changed files with 71 additions and 2 deletions
|
@ -788,6 +788,7 @@ struct adm_cmd_connect_afe_port_v5 {
|
|||
#define SLIMBUS_3_TX 0x4007
|
||||
#define SLIMBUS_4_RX 0x4008
|
||||
#define SLIMBUS_4_TX 0x4009
|
||||
#define SLIMBUS_TX_VI 0x4f09
|
||||
#define SLIMBUS_5_RX 0x400a
|
||||
#define SLIMBUS_5_TX 0x400b
|
||||
#define SLIMBUS_6_RX 0x400c
|
||||
|
|
|
@ -1757,6 +1757,7 @@ static int msm_dai_q6_hw_params(struct snd_pcm_substream *substream,
|
|||
case SLIMBUS_2_TX:
|
||||
case SLIMBUS_3_TX:
|
||||
case SLIMBUS_4_TX:
|
||||
case SLIMBUS_TX_VI:
|
||||
case SLIMBUS_5_TX:
|
||||
case SLIMBUS_6_TX:
|
||||
case SLIMBUS_7_TX:
|
||||
|
@ -1906,6 +1907,7 @@ static int msm_dai_q6_set_channel_map(struct snd_soc_dai *dai,
|
|||
case SLIMBUS_2_TX:
|
||||
case SLIMBUS_3_TX:
|
||||
case SLIMBUS_4_TX:
|
||||
case SLIMBUS_TX_VI:
|
||||
case SLIMBUS_5_TX:
|
||||
case SLIMBUS_6_TX:
|
||||
case SLIMBUS_7_TX:
|
||||
|
@ -2283,6 +2285,9 @@ static const struct snd_kcontrol_new sb_config_controls[] = {
|
|||
msm_dai_q6_cal_info_get,
|
||||
msm_dai_q6_cal_info_put),
|
||||
SOC_ENUM_EXT("SLIM_2_RX Format", sb_config_enum[0],
|
||||
msm_dai_q6_sb_format_get,
|
||||
msm_dai_q6_sb_format_put),
|
||||
SOC_ENUM_EXT("SLIM_TX_VI Format", sb_config_enum[0],
|
||||
msm_dai_q6_sb_format_get,
|
||||
msm_dai_q6_sb_format_put)
|
||||
};
|
||||
|
@ -2336,6 +2341,11 @@ static int msm_dai_q6_dai_probe(struct snd_soc_dai *dai)
|
|||
snd_ctl_new1(&sb_config_controls[0],
|
||||
dai_data));
|
||||
break;
|
||||
case SLIMBUS_TX_VI:
|
||||
rc = snd_ctl_add(dai->component->card->snd_card,
|
||||
snd_ctl_new1(&sb_config_controls[3],
|
||||
dai_data));
|
||||
break;
|
||||
case SLIMBUS_2_RX:
|
||||
rc = snd_ctl_add(dai->component->card->snd_card,
|
||||
snd_ctl_new1(&sb_config_controls[1],
|
||||
|
@ -3216,6 +3226,25 @@ static struct snd_soc_dai_driver msm_dai_q6_slimbus_tx_dai[] = {
|
|||
.probe = msm_dai_q6_dai_probe,
|
||||
.remove = msm_dai_q6_dai_remove,
|
||||
},
|
||||
{
|
||||
.capture = {
|
||||
.stream_name = "Slimbus VI Capture",
|
||||
.aif_name = "SLIMBUS_TX_VI",
|
||||
.rates = SNDRV_PCM_RATE_8000_96000 |
|
||||
SNDRV_PCM_RATE_192000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE,
|
||||
.channels_min = 1,
|
||||
.channels_max = 4,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
},
|
||||
.ops = &msm_dai_q6_ops,
|
||||
.id = SLIMBUS_TX_VI,
|
||||
.probe = msm_dai_q6_dai_probe,
|
||||
.remove = msm_dai_q6_dai_remove,
|
||||
},
|
||||
{
|
||||
.capture = {
|
||||
.stream_name = "Slimbus5 Capture",
|
||||
|
@ -4523,6 +4552,9 @@ register_slim_playback:
|
|||
case SLIMBUS_4_TX:
|
||||
strlcpy(stream_name, "Slimbus4 Capture", 80);
|
||||
goto register_slim_capture;
|
||||
case SLIMBUS_TX_VI:
|
||||
strlcpy(stream_name, "Slimbus VI Capture", 80);
|
||||
goto register_slim_capture;
|
||||
case SLIMBUS_5_TX:
|
||||
strlcpy(stream_name, "Slimbus5 Capture", 80);
|
||||
goto register_slim_capture;
|
||||
|
|
|
@ -80,14 +80,15 @@ enum {
|
|||
#define SLIMBUS_2_TX_TEXT "SLIMBUS_2_TX"
|
||||
#define SLIMBUS_3_TX_TEXT "SLIMBUS_3_TX"
|
||||
#define SLIMBUS_4_TX_TEXT "SLIMBUS_4_TX"
|
||||
#define SLIMBUS_TX_VI_TEXT "SLIMBUS_TX_VI"
|
||||
#define SLIMBUS_5_TX_TEXT "SLIMBUS_5_TX"
|
||||
#define TERT_MI2S_TX_TEXT "TERT_MI2S_TX"
|
||||
#define LSM_FUNCTION_TEXT "LSM Function"
|
||||
static const char * const mad_audio_mux_text[] = {
|
||||
"None",
|
||||
SLIMBUS_0_TX_TEXT, SLIMBUS_1_TX_TEXT, SLIMBUS_2_TX_TEXT,
|
||||
SLIMBUS_3_TX_TEXT, SLIMBUS_4_TX_TEXT, SLIMBUS_5_TX_TEXT,
|
||||
TERT_MI2S_TX_TEXT
|
||||
SLIMBUS_3_TX_TEXT, SLIMBUS_4_TX_TEXT, SLIMBUS_TX_VI_TEXT,
|
||||
SLIMBUS_5_TX_TEXT, TERT_MI2S_TX_TEXT
|
||||
};
|
||||
|
||||
struct msm_pcm_route_bdai_pp_params {
|
||||
|
@ -110,6 +111,9 @@ static int msm_routing_get_bit_width(unsigned int format)
|
|||
int bit_width;
|
||||
|
||||
switch (format) {
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
bit_width = 32;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
case SNDRV_PCM_FORMAT_S24_3LE:
|
||||
bit_width = 24;
|
||||
|
@ -495,6 +499,7 @@ struct msm_pcm_routing_bdai_data msm_bedais[MSM_BACKEND_DAI_MAX] = {
|
|||
LPASS_BE_INT6_MI2S_RX},
|
||||
{ AFE_PORT_ID_INT6_MI2S_TX, 0, 0, {0}, 0, 0, 0, 0, 0,
|
||||
LPASS_BE_INT6_MI2S_TX},
|
||||
{ SLIMBUS_TX_VI, 0, 0, {0}, 0, 0, 0, 0, 0, LPASS_BE_SLIMBUS_TX_VI},
|
||||
};
|
||||
|
||||
/* Track ASM playback & capture sessions of DAI */
|
||||
|
@ -4741,6 +4746,9 @@ static const struct snd_kcontrol_new mmul1_mixer_controls[] = {
|
|||
SOC_SINGLE_EXT("SLIM_4_TX", MSM_BACKEND_DAI_SLIMBUS_4_TX,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_SINGLE_EXT("SLIM_TX_VI", MSM_BACKEND_DAI_SLIMBUS_TX_VI,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
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),
|
||||
|
@ -8864,6 +8872,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("SLIMBUS_TX_VI", "Slimbus VI 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),
|
||||
|
@ -9545,6 +9555,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"MultiMedia4 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
|
||||
{"MultiMedia8 Mixer", "VOC_REC_DL", "INCALL_RECORD_RX"},
|
||||
{"MultiMedia1 Mixer", "SLIM_4_TX", "SLIMBUS_4_TX"},
|
||||
{"MultiMedia1 Mixer", "SLIM_TX_VI", "SLIMBUS_TX_VI"},
|
||||
{"MultiMedia1 Mixer", "SLIM_6_TX", "SLIMBUS_6_TX"},
|
||||
{"MultiMedia1 Mixer", "SLIM_7_TX", "SLIMBUS_7_TX"},
|
||||
{"MultiMedia1 Mixer", "SLIM_8_TX", "SLIMBUS_8_TX"},
|
||||
|
@ -11281,6 +11292,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
|||
{"SLIMBUS_1_TX", NULL, "BE_IN" },
|
||||
{"SLIMBUS_3_TX", NULL, "BE_IN" },
|
||||
{"SLIMBUS_4_TX", NULL, "BE_IN" },
|
||||
{"SLIMBUS_TX_VI", NULL, "BE_IN" },
|
||||
{"SLIMBUS_5_TX", NULL, "BE_IN" },
|
||||
{"SLIMBUS_6_TX", NULL, "BE_IN" },
|
||||
{"SLIMBUS_7_TX", NULL, "BE_IN" },
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
#define LPASS_BE_SLIMBUS_4_RX "SLIMBUS_4_RX"
|
||||
#define LPASS_BE_SLIMBUS_4_TX "SLIMBUS_4_TX"
|
||||
#define LPASS_BE_SLIMBUS_5_RX "SLIMBUS_5_RX"
|
||||
#define LPASS_BE_SLIMBUS_TX_VI "SLIMBUS_TX_VI"
|
||||
#define LPASS_BE_SLIMBUS_5_TX "SLIMBUS_5_TX"
|
||||
#define LPASS_BE_SLIMBUS_6_RX "SLIMBUS_6_RX"
|
||||
#define LPASS_BE_SLIMBUS_6_TX "SLIMBUS_6_TX"
|
||||
|
@ -355,6 +356,7 @@ enum {
|
|||
MSM_BACKEND_DAI_INT5_MI2S_TX,
|
||||
MSM_BACKEND_DAI_INT6_MI2S_RX,
|
||||
MSM_BACKEND_DAI_INT6_MI2S_TX,
|
||||
MSM_BACKEND_DAI_SLIMBUS_TX_VI,
|
||||
MSM_BACKEND_DAI_MAX,
|
||||
};
|
||||
|
||||
|
|
|
@ -503,6 +503,7 @@ int afe_get_port_type(u16 port_id)
|
|||
case SLIMBUS_2_TX:
|
||||
case SLIMBUS_3_TX:
|
||||
case SLIMBUS_4_TX:
|
||||
case SLIMBUS_TX_VI:
|
||||
case SLIMBUS_5_TX:
|
||||
case SLIMBUS_6_TX:
|
||||
case SLIMBUS_7_TX:
|
||||
|
@ -607,6 +608,7 @@ int afe_sizeof_cfg_cmd(u16 port_id)
|
|||
case SLIMBUS_3_TX:
|
||||
case SLIMBUS_4_RX:
|
||||
case SLIMBUS_4_TX:
|
||||
case SLIMBUS_TX_VI:
|
||||
case SLIMBUS_5_RX:
|
||||
case SLIMBUS_5_TX:
|
||||
case SLIMBUS_6_RX:
|
||||
|
@ -2785,6 +2787,13 @@ static int __afe_port_start(u16 port_id, union afe_port_config *afe_config,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Virtual SLIMBUS_TX_VI shares afe port with SLIMBUS_4_TX.
|
||||
* port_id changes to physical port of SLIMBUS_4_TX.
|
||||
*/
|
||||
if (port_id == SLIMBUS_TX_VI)
|
||||
port_id = SLIMBUS_4_TX;
|
||||
|
||||
if ((port_id == RT_PROXY_DAI_001_RX) ||
|
||||
(port_id == RT_PROXY_DAI_002_TX)) {
|
||||
pr_debug("%s: before incrementing pcm_afe_instance %d"\
|
||||
|
@ -2950,6 +2959,7 @@ static int __afe_port_start(u16 port_id, union afe_port_config *afe_config,
|
|||
case SLIMBUS_3_TX:
|
||||
case SLIMBUS_4_RX:
|
||||
case SLIMBUS_4_TX:
|
||||
case SLIMBUS_TX_VI:
|
||||
case SLIMBUS_5_RX:
|
||||
case SLIMBUS_5_TX:
|
||||
case SLIMBUS_6_RX:
|
||||
|
@ -3143,6 +3153,7 @@ 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 SLIMBUS_TX_VI: return IDX_SLIMBUS_4_TX;
|
||||
case SLIMBUS_5_RX: return IDX_SLIMBUS_5_RX;
|
||||
case SLIMBUS_5_TX: return IDX_SLIMBUS_5_TX;
|
||||
case SLIMBUS_6_RX: return IDX_SLIMBUS_6_RX;
|
||||
|
@ -5070,6 +5081,14 @@ int afe_close(int port_id)
|
|||
goto fail_cmd;
|
||||
}
|
||||
pr_debug("%s: port_id = 0x%x\n", __func__, port_id);
|
||||
|
||||
/*
|
||||
* Virtual SLIMBUS_TX_VI shares afe port with SLIMBUS_4_TX.
|
||||
* port_id changes to physical port of SLIMBUS_4_TX.
|
||||
*/
|
||||
if (port_id == SLIMBUS_TX_VI)
|
||||
port_id = SLIMBUS_4_TX;
|
||||
|
||||
if ((port_id == RT_PROXY_DAI_001_RX) ||
|
||||
(port_id == RT_PROXY_DAI_002_TX)) {
|
||||
pr_debug("%s: before decrementing pcm_afe_instance %d\n",
|
||||
|
|
|
@ -64,6 +64,7 @@ int q6audio_get_port_index(u16 port_id)
|
|||
case SLIMBUS_3_TX: return IDX_SLIMBUS_3_TX;
|
||||
case SLIMBUS_4_RX: return IDX_SLIMBUS_4_RX;
|
||||
case SLIMBUS_4_TX: return IDX_SLIMBUS_4_TX;
|
||||
case SLIMBUS_TX_VI: return IDX_SLIMBUS_4_TX;
|
||||
case SLIMBUS_5_RX: return IDX_SLIMBUS_5_RX;
|
||||
case SLIMBUS_5_TX: return IDX_SLIMBUS_5_TX;
|
||||
case SLIMBUS_6_RX: return IDX_SLIMBUS_6_RX;
|
||||
|
@ -311,6 +312,7 @@ int q6audio_get_port_id(u16 port_id)
|
|||
case SLIMBUS_3_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_3_TX;
|
||||
case SLIMBUS_4_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_4_RX;
|
||||
case SLIMBUS_4_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_4_TX;
|
||||
case SLIMBUS_TX_VI: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_4_TX;
|
||||
case SLIMBUS_5_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_RX;
|
||||
case SLIMBUS_5_TX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;
|
||||
case SLIMBUS_6_RX: return AFE_PORT_ID_SLIMBUS_MULTI_CHAN_6_RX;
|
||||
|
@ -688,6 +690,7 @@ int q6audio_validate_port(u16 port_id)
|
|||
case SLIMBUS_3_TX:
|
||||
case SLIMBUS_4_RX:
|
||||
case SLIMBUS_4_TX:
|
||||
case SLIMBUS_TX_VI:
|
||||
case SLIMBUS_5_RX:
|
||||
case SLIMBUS_5_TX:
|
||||
case SLIMBUS_6_RX:
|
||||
|
|
Loading…
Add table
Reference in a new issue