ASoC: qdsp6: q6afe-dai: add internal mi2s support

The bindings for LPI MI2S ports, originally exclusive to q6apm, can be
used for internal MI2S ports on q6afe. Add the internal MI2S ports found
on the SDM660 internal sound card using the LPI MI2S bindings.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Link: https://patch.msgid.link/20260730174353.108023-9-mailingradian@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Richard Acayan 2026-07-30 13:43:46 -04:00 committed by Mark Brown
parent bfe9098dc2
commit 0b494ae6a5
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -412,6 +412,8 @@ static int q6afe_dai_prepare(struct snd_pcm_substream *substream,
case SENARY_MI2S_RX ... SENARY_MI2S_TX:
case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4:
case LPI_MI2S_RX_5 ... LPI_MI2S_TX_6:
rc = q6afe_i2s_port_prepare(dai_data->port[dai->id],
&dai_data->port_config[dai->id].i2s_cfg);
if (rc < 0) {
@ -665,6 +667,21 @@ static const struct snd_soc_dapm_route q6afe_dapm_routes[] = {
/* USB playback AFE port receives data for playback, hence use the RX port */
{"USB Playback", NULL, "USB_RX"},
{"LPI RX0 MI2S Playback", NULL, "LPI_MI2S_RX_0"},
{"LPI_MI2S_TX_0", NULL, "LPI TX0 MI2S Capture"},
{"LPI RX1 MI2S Playback", NULL, "LPI_MI2S_RX_1"},
{"LPI_MI2S_TX_1", NULL, "LPI TX1 MI2S Capture"},
{"LPI RX2 MI2S Playback", NULL, "LPI_MI2S_RX_2"},
{"LPI_MI2S_TX_2", NULL, "LPI TX2 MI2S Capture"},
{"LPI RX3 MI2S Playback", NULL, "LPI_MI2S_RX_3"},
{"LPI_MI2S_TX_3", NULL, "LPI TX3 MI2S Capture"},
{"LPI RX4 MI2S Playback", NULL, "LPI_MI2S_RX_4"},
{"LPI_MI2S_TX_4", NULL, "LPI TX4 MI2S Capture"},
{"LPI RX5 MI2S Playback", NULL, "LPI_MI2S_RX_5"},
{"LPI_MI2S_TX_5", NULL, "LPI TX5 MI2S Capture"},
{"LPI RX6 MI2S Playback", NULL, "LPI_MI2S_RX_6"},
{"LPI_MI2S_TX_6", NULL, "LPI TX6 MI2S Capture"},
};
static int msm_dai_q6_dai_probe(struct snd_soc_dai *dai)
@ -1011,6 +1028,35 @@ static const struct snd_soc_dapm_widget q6afe_dai_widgets[] = {
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("USB_RX", NULL, 0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_0", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_0", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_1", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_1", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_2", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_2", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_3", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_3", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_4", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_4", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_5", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_5", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_6", NULL,
0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_6", NULL,
0, SND_SOC_NOPM, 0, 0),
};
static const struct snd_soc_component_driver q6afe_dai_component = {
@ -1045,6 +1091,8 @@ static void of_q6afe_parse_dai_data(struct device *dev,
case SENARY_MI2S_RX ... SENARY_MI2S_TX:
case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4:
case LPI_MI2S_RX_5 ... LPI_MI2S_TX_6:
priv = &data->priv[id];
ret = of_property_read_variable_u32_array(node,
"qcom,sd-lines",