History

ASoC: qcom: q6dsp: Add Senary MI2S audio interface support

Introduces support for the Senary MI2S audio interface in the Qualcomm q6dsp. Add new AFE port IDs for Senary MI2S RX and TX and include the necessary mappings in the port configuration to allow audio routing over the Senary MI2S interface.

Mohammad Rafi Shaik committed 7 months ago

Commit ae0de4e1 parent bcd0df13 files · +43 −0Browse files

Unified · Split

3 files
  1. sound/soc/qcom/qdsp6/q6afe-dai.c +6 −0
  2. sound/soc/qcom/qdsp6/q6afe.c +8 −0
  3. sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c +29 −0
sound/soc/qcom/qdsp6/q6afe-dai.c+6−0
@@ -409,6 +409,7 @@ static int q6afe_dai_prepare(struct snd_pcm_substream *substream, · 408 unmodified lines
409409 q6afe_slim_port_prepare(dai_data->port[dai->id],
410410 &dai_data->port_config[dai->id].slim);
411411 break;
412+ case SENARY_MI2S_RX ... SENARY_MI2S_TX:
412413 case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
413414 case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
414415 rc = q6afe_i2s_port_prepare(dai_data->port[dai->id],
@@ -540,6 +541,7 @@ static const struct snd_soc_dapm_route q6afe_dapm_routes[] = { · 125 unmodified lines
540541 {"Tertiary MI2S Playback", NULL, "TERT_MI2S_RX"},
541542 {"Quaternary MI2S Playback", NULL, "QUAT_MI2S_RX"},
542543 {"Quinary MI2S Playback", NULL, "QUIN_MI2S_RX"},
544+ {"Senary MI2S Playback", NULL, "SEN_MI2S_RX"},
543545
544546 {"Primary TDM0 Playback", NULL, "PRIMARY_TDM_RX_0"},
545547 {"Primary TDM1 Playback", NULL, "PRIMARY_TDM_RX_1"},
@@ -636,6 +638,7 @@ static const struct snd_soc_dapm_route q6afe_dapm_routes[] = { · 90 unmodified lines
636638 {"SEC_MI2S_TX", NULL, "Secondary MI2S Capture"},
637639 {"QUAT_MI2S_TX", NULL, "Quaternary MI2S Capture"},
638640 {"QUIN_MI2S_TX", NULL, "Quinary MI2S Capture"},
641+ {"SEN_MI2S_TX", NULL, "Senary MI2S Capture"},
639642
640643 {"WSA_CODEC_DMA_RX_0 Playback", NULL, "WSA_CODEC_DMA_RX_0"},
641644 {"WSA_CODEC_DMA_TX_0", NULL, "WSA_CODEC_DMA_TX_0 Capture"},
@@ -770,6 +773,8 @@ static const struct snd_soc_dapm_widget q6afe_dai_widgets[] = { · 128 unmodified lines
770773 SND_SOC_DAPM_AIF_OUT("SLIMBUS_4_TX", NULL, 0, SND_SOC_NOPM, 0, 0),
771774 SND_SOC_DAPM_AIF_OUT("SLIMBUS_5_TX", NULL, 0, SND_SOC_NOPM, 0, 0),
772775 SND_SOC_DAPM_AIF_OUT("SLIMBUS_6_TX", NULL, 0, SND_SOC_NOPM, 0, 0),
776+ SND_SOC_DAPM_AIF_IN("SEN_MI2S_RX", NULL, 0, SND_SOC_NOPM, 0, 0),
777+ SND_SOC_DAPM_AIF_OUT("SEN_MI2S_TX", NULL, 0, SND_SOC_NOPM, 0, 0),
773778 SND_SOC_DAPM_AIF_IN("QUIN_MI2S_RX", NULL,
774779 0, SND_SOC_NOPM, 0, 0),
775780 SND_SOC_DAPM_AIF_OUT("QUIN_MI2S_TX", NULL,
@@ -1037,6 +1042,7 @@ static void of_q6afe_parse_dai_data(struct device *dev, · 261 unmodified lines
10371042
10381043 switch (id) {
10391044 /* MI2S specific properties */
1045+ case SENARY_MI2S_RX ... SENARY_MI2S_TX:
10401046 case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
10411047 case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
10421048 priv = &data->priv[id];
sound/soc/qcom/qdsp6/q6afe.c+8−0
@@ -130,6 +130,8 @@ · 129 unmodified lines
130130 #define AFE_PORT_ID_QUATERNARY_MI2S_TX 0x1007
131131 #define AFE_PORT_ID_QUINARY_MI2S_RX 0x1016
132132 #define AFE_PORT_ID_QUINARY_MI2S_TX 0x1017
133+#define AFE_PORT_ID_SENARY_MI2S_RX 0x1018
134+#define AFE_PORT_ID_SENARY_MI2S_TX 0x1019
133135
134136 /* Start of the range of port IDs for TDM devices. */
135137 #define AFE_PORT_ID_TDM_PORT_RANGE_START 0x9000
@@ -718,6 +720,10 @@ static struct afe_port_map port_maps[AFE_PORT_MAX] = { · 582 unmodified lines
718720 QUINARY_MI2S_RX, 1, 1},
719721 [QUINARY_MI2S_TX] = { AFE_PORT_ID_QUINARY_MI2S_TX,
720722 QUINARY_MI2S_TX, 0, 1},
723+ [SENARY_MI2S_RX] = { AFE_PORT_ID_SENARY_MI2S_RX,
724+ SENARY_MI2S_RX, 1, 1},
725+ [SENARY_MI2S_TX] = { AFE_PORT_ID_SENARY_MI2S_TX,
726+ SENARY_MI2S_TX, 0, 1},
721727 [PRIMARY_TDM_RX_0] = { AFE_PORT_ID_PRIMARY_TDM_RX,
722728 PRIMARY_TDM_RX_0, 1, 1},
723729 [PRIMARY_TDM_TX_0] = { AFE_PORT_ID_PRIMARY_TDM_TX,
@@ -1777,6 +1783,8 @@ struct q6afe_port *q6afe_port_get_from_id(struct device *dev, int id) · 1053 unmodified lines
17771783 case AFE_PORT_ID_QUATERNARY_MI2S_TX:
17781784 case AFE_PORT_ID_QUINARY_MI2S_RX:
17791785 case AFE_PORT_ID_QUINARY_MI2S_TX:
1786+ case AFE_PORT_ID_SENARY_MI2S_RX:
1787+ case AFE_PORT_ID_SENARY_MI2S_TX:
17801788 cfg_type = AFE_PARAM_ID_I2S_CONFIG;
17811789 break;
17821790 case AFE_PORT_ID_PRIMARY_TDM_RX ... AFE_PORT_ID_QUINARY_TDM_TX_7:
sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c+29−0
@@ -519,6 +519,34 @@ static struct snd_soc_dai_driver q6dsp_audio_fe_dais[] = { · 518 unmodified lines
519519 },
520520 .id = QUINARY_MI2S_TX,
521521 .name = "QUIN_MI2S_TX",
522+ }, {
523+ .playback = {
524+ .stream_name = "Senary MI2S Playback",
525+ .rates = SNDRV_PCM_RATE_8000_192000,
526+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
527+ SNDRV_PCM_FMTBIT_S24_LE |
528+ SNDRV_PCM_FMTBIT_S32_LE,
529+ .channels_min = 1,
530+ .channels_max = 8,
531+ .rate_min = 8000,
532+ .rate_max = 192000,
533+ },
534+ .id = SENARY_MI2S_RX,
535+ .name = "SEN_MI2S_RX",
536+ }, {
537+ .capture = {
538+ .stream_name = "Senary MI2S Capture",
539+ .rates = SNDRV_PCM_RATE_8000_192000,
540+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
541+ SNDRV_PCM_FMTBIT_S24_LE |
542+ SNDRV_PCM_FMTBIT_S32_LE,
543+ .channels_min = 1,
544+ .channels_max = 8,
545+ .rate_min = 8000,
546+ .rate_max = 192000,
547+ },
548+ .id = SENARY_MI2S_TX,
549+ .name = "SEN_MI2S_TX",
522550 },
523551 Q6AFE_MI2S_RX_DAI("LPI RX0", LPI_MI2S_RX_0),
524552 Q6AFE_MI2S_RX_DAI("LPI RX1", LPI_MI2S_RX_1),
@@ -680,6 +708,7 @@ struct snd_soc_dai_driver *q6dsp_audio_ports_set_config(struct device *dev, · 155 unmodified lines
680708 case SLIMBUS_0_RX ... SLIMBUS_6_TX:
681709 q6dsp_audio_fe_dais[i].ops = cfg->q6slim_ops;
682710 break;
711+ case SENARY_MI2S_RX ... SENARY_MI2S_TX:
683712 case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
684713 case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
685714 case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4: