Re: [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: add internal mi2s support
Srinivas Kandagatla <[email protected]> Thu, 30 Jul 2026 23:55:13 +0100
| Newsgroups | org.kernel.vger.linux-sound,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree |
|---|---|
| Message-ID | <[email protected]> |
On 7/30/26 6:43 PM, Richard Acayan wrote: > 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 <[email protected]> > --- Reviewed-by: Srinivas Kandagatla <[email protected]> --srini > sound/soc/qcom/qdsp6/q6afe-dai.c | 48 ++++++++++++++++++++++++++++++++ > 1 file changed, 48 insertions(+) > > diff --git a/sound/soc/qcom/qdsp6/q6afe-dai.c b/sound/soc/qcom/qdsp6/q6afe-dai.c > index a0d21034a626..920345609d2c 100644 > --- a/sound/soc/qcom/qdsp6/q6afe-dai.c > +++ b/sound/soc/qcom/qdsp6/q6afe-dai.c > @@ -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",