Re: [PATCH v2 4/7] ASoC: apple: mca: Support FEs being clock consumers
From: Joshua Peisach
Date: Mon Jun 29 2026 - 09:32:34 EST
On Sun Jun 28, 2026 at 7:42 AM EDT, James Calligeros wrote:
From: Martin Povišer <povik+lin@xxxxxxxxxxx>
Support FEs being I2S clock consumers. This does not mean we support
accepting clocks from outside the SoC (although it paves the way for
that support in the future), but it means multiple FEs can attach to one
BE, one being clock producer and the rest clock consumers.
This is useful for grabbing I/V sense data on some machines, since in
such a scenario the format of the sense data on the I2S bus differs
from that of the audio data (the two formats differing in slot width).
With two FEs attached to the bus, we can split the responsibilities and
command different slot widths to the two.
Signed-off-by: Martin Povišer <povik+lin@xxxxxxxxxxx>
Signed-off-by: James Calligeros <jcalligeros99@xxxxxxxxx>
---
sound/soc/apple/mca.c | 129 ++++++++++++++++++++-----
1 file changed, 106 insertions(+), 23 deletions(-)
diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c
index 730ffe0805e1..0c1fc8242907 100644
--- a/sound/soc/apple/mca.c
+++ b/sound/soc/apple/mca.c
@@ -380,6 +406,57 @@ static int mca_be_hw_free(struct snd_pcm_substream *substream,
return 0;
}
+static int mca_fe_prepare(struct snd_pcm_substream *substream,
+ struct snd_soc_dai *dai)
+{
+ struct mca_cluster *cl = mca_dai_to_cluster(dai);
+ struct mca_data *mca = cl->host;
+
+ if (cl->clk_provider)
+ return 0;
+
+ /* Turn on the cluster power domain if not already in use */
+ if (!cl->syncgen_in_use) {
+ int port = mca_fe_get_port(substream);
+
+ cl->pd_link = device_link_add(mca->dev, cl->pd_dev,
+ DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME |
+ DL_FLAG_RPM_ACTIVE);
+ if (!cl->pd_link) {
+ dev_err(mca->dev,
+ "cluster %d: unable to prop-up power domain\n", cl->no);
+ return -EINVAL;
+ }
+
+ writel_relaxed(port + 6 + 1,
+ cl->base + REG_SYNCGEN_MCLK_SEL);
Where does the "6 + 1" come from, and should it have its own #define?
-Josh