[PATCH RFC 12/23] ASoC: qcom: lpass: add support for MI2S_SENARY & MI2S_SEPTENARY
From: Neil Armstrong
Date: Fri Nov 13 2026 - 15:26:27 EST
Now we use the helper to translate the DAI id into a proper
MI2S port index, we can add support for the MI2S_SENARY &
MI2S_SEPTENARY ports.
Signed-off-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx>
---
sound/soc/qcom/lpass-platform.c | 14 +++++++++++++-
sound/soc/qcom/lpass.h | 3 +++
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c
index 574b46e2176d..2400a6d16bb8 100644
--- a/sound/soc/qcom/lpass-platform.c
+++ b/sound/soc/qcom/lpass-platform.c
@@ -274,6 +274,7 @@ static int lpass_platform_pcmops_open(struct snd_soc_component *component,
switch (dai_id) {
case MI2S_PRIMARY ... MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
port_id = mi2s_port_id(dai_id);
map = drvdata->mi2s_lpaif[port_id]->map;
drvdata->mi2s_lpaif[port_id]->substream[dma_ch] = substream;
@@ -303,6 +304,7 @@ static int lpass_platform_pcmops_open(struct snd_soc_component *component,
data->dma_ch = dma_ch;
switch (dai_id) {
case MI2S_PRIMARY ... MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
case LPASS_DP_RX:
ret = regmap_write(map, LPAIF_DMACTL_REG(v, dma_ch, dir, data->i2s_port), 0);
if (ret) {
@@ -361,6 +363,7 @@ static int lpass_platform_pcmops_close(struct snd_soc_component *component,
switch (dai_id) {
case MI2S_PRIMARY ... MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
port_id = mi2s_port_id(dai_id);
drvdata->mi2s_lpaif[port_id]->substream[data->dma_ch] = NULL;
break;
@@ -400,6 +403,7 @@ static struct lpaif_dmactl *__lpass_get_dmactl_handle(const struct snd_pcm_subst
switch (cpu_dai->driver->id) {
case MI2S_PRIMARY ... MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
port_id = mi2s_port_id(cpu_dai->driver->id);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
dmactl = drvdata->mi2s_lpaif[port_id]->rd_dmactl;
@@ -442,6 +446,7 @@ static int __lpass_get_id(const struct snd_pcm_substream *substream,
switch (cpu_dai->driver->id) {
case MI2S_PRIMARY ... MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
id = pcm_data->dma_ch;
else
@@ -481,6 +486,7 @@ static struct regmap *__lpass_get_regmap_handle(const struct snd_pcm_substream *
switch (cpu_dai->driver->id) {
case MI2S_PRIMARY ... MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
port_id = mi2s_port_id(cpu_dai->driver->id);
map = drvdata->mi2s_lpaif[port_id]->map;
break;
@@ -518,6 +524,7 @@ static int lpass_platform_pcmops_hw_params(struct snd_soc_component *component,
int id;
int bitwidth;
unsigned int dai_id = cpu_dai->driver->id;
+ unsigned int port_id;
int ret, dma_port;
dmactl = __lpass_get_dmactl_handle(substream, component);
@@ -568,7 +575,9 @@ static int lpass_platform_pcmops_hw_params(struct snd_soc_component *component,
case MI2S_TERTIARY:
case MI2S_QUATERNARY:
case MI2S_QUINARY:
- dma_port = drvdata->mi2s_intf[dai_id] + v->dmactl_audif_start;
+ case MI2S_SENARY ... MI2S_SEPTENARY:
+ port_id = mi2s_port_id(dai_id);
+ dma_port = drvdata->mi2s_intf[port_id] + v->dmactl_audif_start;
ret = regmap_fields_write(dmactl->intf, id,
LPAIF_DMACTL_AUDINTF(dma_port));
if (ret) {
@@ -811,6 +820,7 @@ static int lpass_platform_pcmops_trigger(struct snd_soc_component *component,
case MI2S_TERTIARY:
case MI2S_QUATERNARY:
case MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
reg_irqclr = LPAIF_IRQCLEAR_REG(v, LPAIF_IRQ_PORT_HOST);
val_irqclr = LPAIF_IRQ_ALL(ch);
@@ -910,6 +920,7 @@ static int lpass_platform_pcmops_trigger(struct snd_soc_component *component,
case MI2S_TERTIARY:
case MI2S_QUATERNARY:
case MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
reg_irqen = LPAIF_IRQEN_REG(v, LPAIF_IRQ_PORT_HOST);
val_mask = LPAIF_IRQ_ALL(ch);
val_irqen = 0;
@@ -1073,6 +1084,7 @@ static irqreturn_t lpass_dma_interrupt_handler(
case MI2S_TERTIARY:
case MI2S_QUATERNARY:
case MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
port_id = mi2s_port_id(dai_id);
map = drvdata->mi2s_lpaif[port_id]->map;
reg = LPAIF_IRQCLEAR_REG(v, LPAIF_IRQ_PORT_HOST);
diff --git a/sound/soc/qcom/lpass.h b/sound/soc/qcom/lpass.h
index 78125048b064..4407996fb145 100644
--- a/sound/soc/qcom/lpass.h
+++ b/sound/soc/qcom/lpass.h
@@ -45,6 +45,7 @@ static inline bool is_mi2s_port_id(int dai_id)
{
switch (dai_id) {
case MI2S_PRIMARY ... MI2S_QUINARY:
+ case MI2S_SENARY ... MI2S_SEPTENARY:
return true;
default:
return false;
@@ -56,6 +57,8 @@ static inline int mi2s_port_id(int dai_id)
switch (dai_id) {
case MI2S_PRIMARY ... MI2S_QUINARY:
return dai_id;
+ case MI2S_SENARY ... MI2S_SEPTENARY:
+ return MI2S_QUINARY + (dai_id - MI2S_SENARY) + 1;
default:
return 0;
}
--
2.34.1