public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Troy Mitchell <troy.mitchell@linux.spacemit.com>
To: Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	 Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	 Yixun Lan <dlan@kernel.org>,
	Jinmei Wei <weijinmei@linux.spacemit.com>,
	 Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	 Conor Dooley <conor+dt@kernel.org>
Cc: linux-sound@vger.kernel.org, linux-riscv@lists.infradead.org,
	 spacemit@lists.linux.dev, linux-kernel@vger.kernel.org,
	 devicetree@vger.kernel.org,
	 Troy Mitchell <troy.mitchell@linux.spacemit.com>
Subject: [PATCH 6/7] ASoC: spacemit: add fixed-sample-rate constraint support
Date: Wed, 29 Apr 2026 09:38:51 +0800	[thread overview]
Message-ID: <20260429-k3-i2s-v1-6-2fe99db11ecb@linux.spacemit.com> (raw)
In-Reply-To: <20260429-k3-i2s-v1-0-2fe99db11ecb@linux.spacemit.com>

When multiple I2S controllers share a common bclk, they must all use
the same sample rate. Read the optional spacemit,fixed-sample-rate DT
property and apply it as a hardware constraint in the startup callback,
restricting the PCM rate to the specified value.

This applies to both K1 and K3 SoCs and is only needed when two or
more I2S controllers are active simultaneously.

Signed-off-by: Troy Mitchell <troy.mitchell@linux.spacemit.com>
---
 sound/soc/spacemit/k1_i2s.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/sound/soc/spacemit/k1_i2s.c b/sound/soc/spacemit/k1_i2s.c
index cef883ba4de9..7d0794d21ea6 100644
--- a/sound/soc/spacemit/k1_i2s.c
+++ b/sound/soc/spacemit/k1_i2s.c
@@ -3,6 +3,7 @@
 
 #include <linux/bitfield.h>
 #include <linux/clk.h>
+#include <linux/of.h>
 #include <linux/reset.h>
 #include <sound/dmaengine_pcm.h>
 #include <sound/pcm.h>
@@ -54,6 +55,8 @@ struct spacemit_i2s_dev {
 	struct clk *bclk;
 	struct clk *sspa_clk;
 
+	unsigned int fixed_sample_rate;
+
 	struct snd_dmaengine_dai_dma_data capture_dma_data;
 	struct snd_dmaengine_dai_dma_data playback_dma_data;
 
@@ -111,6 +114,13 @@ static int spacemit_i2s_startup(struct snd_pcm_substream *substream,
 {
 	struct spacemit_i2s_dev *i2s = snd_soc_dai_get_drvdata(dai);
 
+	if (i2s->fixed_sample_rate) {
+		snd_pcm_hw_constraint_minmax(substream->runtime,
+					     SNDRV_PCM_HW_PARAM_RATE,
+					     i2s->fixed_sample_rate,
+					     i2s->fixed_sample_rate);
+	}
+
 	switch (i2s->dai_fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
 	case SND_SOC_DAIFMT_I2S:
 		snd_pcm_hw_constraint_minmax(substream->runtime,
@@ -437,6 +447,9 @@ static int spacemit_i2s_probe(struct platform_device *pdev)
 		return dev_err_probe(i2s->dev, PTR_ERR(i2s->sspa_clk),
 				     "failed to enable sspa clock\n");
 
+	of_property_read_u32(i2s->dev->of_node, "spacemit,fixed-sample-rate",
+			     &i2s->fixed_sample_rate);
+
 	i2s->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
 	if (IS_ERR(i2s->base))
 		return dev_err_probe(i2s->dev, PTR_ERR(i2s->base), "failed to map registers\n");

-- 
2.54.0


  parent reply	other threads:[~2026-04-29  1:39 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-29  1:38 [PATCH 0/7] ASoC: spacemit: bug fixes, refactoring, and K3 SoC support Troy Mitchell
2026-04-29  1:38 ` [PATCH 1/7] ASoC: spacemit: fix RX DMA params not set when TX is running Troy Mitchell
2026-04-29  2:28   ` Mark Brown
2026-04-29  7:56     ` Troy Mitchell
2026-04-29  2:35   ` Mark Brown
2026-04-29  8:03     ` Troy Mitchell
2026-04-29  1:38 ` [PATCH 2/7] ASoC: spacemit: move hw constraints from hw_params to startup Troy Mitchell
2026-04-29  1:38 ` [PATCH 3/7] ASoC: spacemit: adjust FIFO trigger threshold to half FIFO size Troy Mitchell
2026-04-29  1:38 ` [PATCH 4/7] ASoC: dt-bindings: add SpacemiT K3 SoC compatible Troy Mitchell
2026-04-29  1:38 ` [PATCH 5/7] ASoC: dt-bindings: add fixed-sample-rate property for SpacemiT K1/K3 Troy Mitchell
2026-04-29  2:18   ` Mark Brown
2026-04-29  8:06     ` Troy Mitchell
2026-04-29  1:38 ` Troy Mitchell [this message]
2026-04-29  1:38 ` [PATCH 7/7] ASoC: spacemit: add K3 SoC support with additional clocks Troy Mitchell
2026-04-29  2:32 ` [PATCH 0/7] ASoC: spacemit: bug fixes, refactoring, and K3 SoC support Mark Brown
2026-04-29  7:58   ` Troy Mitchell
2026-04-29  2:41 ` (subset) " Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260429-k3-i2s-v1-6-2fe99db11ecb@linux.spacemit.com \
    --to=troy.mitchell@linux.spacemit.com \
    --cc=broonie@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dlan@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=perex@perex.cz \
    --cc=robh@kernel.org \
    --cc=spacemit@lists.linux.dev \
    --cc=tiwai@suse.com \
    --cc=weijinmei@linux.spacemit.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox