summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTroy Mitchell <troy.mitchell@linux.spacemit.com>2026-04-29 12:00:50 +0300
committerMark Brown <broonie@kernel.org>2026-05-04 16:02:50 +0300
commitec0611868f2fcf29e4c2bebdc6702d3e1f272fec (patch)
treeea325a6760dfc0aad3abd40ce2d7377fb2aee2da
parente366ce8b22ec68189ffea2bb8009f7b20d549b0f (diff)
downloadlinux-ec0611868f2fcf29e4c2bebdc6702d3e1f272fec.tar.xz
ASoC: spacemit: fix RX DMA params not set when TX is running
When TX is already running (SSCR_SSE is set), the hw_params callback returns early before setting up DMA parameters for the RX stream. This prevents the capture path from configuring its DMA data properly. Move the SSCR_SSE check after DMA parameter setup and format constraints, so both TX and RX streams get their DMA configuration regardless of whether the hardware is already enabled. The early return now only skips the register writes that would disrupt an active stream. Fixes: fce217449075 ("ASoC: spacemit: add i2s support for K1 SoC") Signed-off-by: Troy Mitchell <troy.mitchell@linux.spacemit.com> Link: https://patch.msgid.link/20260429-k1-i2s-fix-v2-1-8d67835aaddc@linux.spacemit.com Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/spacemit/k1_i2s.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sound/soc/spacemit/k1_i2s.c b/sound/soc/spacemit/k1_i2s.c
index 43481f387c44..5420ca2aefbd 100644
--- a/sound/soc/spacemit/k1_i2s.c
+++ b/sound/soc/spacemit/k1_i2s.c
@@ -148,10 +148,6 @@ static int spacemit_i2s_hw_params(struct snd_pcm_substream *substream,
u32 val;
int ret;
- val = readl(i2s->base + SSCR);
- if (val & SSCR_SSE)
- return 0;
-
dma_data = &i2s->playback_dma_data;
if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
@@ -199,6 +195,9 @@ static int spacemit_i2s_hw_params(struct snd_pcm_substream *substream,
}
val = readl(i2s->base + SSCR);
+ if (val & SSCR_SSE)
+ return 0;
+
val &= ~SSCR_DW_32BYTE;
val |= data_width;
writel(val, i2s->base + SSCR);