* [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links
@ 2025-01-10 21:07 Martin Blumenstingl
2025-01-10 21:07 ` [RFC v2 1/2] ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally Martin Blumenstingl
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Martin Blumenstingl @ 2025-01-10 21:07 UTC (permalink / raw)
To: linux-sound, linux-amlogic
Cc: s.nawrocki, lgirdwood, broonie, linux-kernel, jbrunet,
Martin Blumenstingl
Hello,
the DRM subsystem has recently gained a HDMI audio codec framework [0].
This is already queued for Linux 6.14.
I want to implement a HDMI controller driver for the Amlogic
Meson8/8b/8m2 SoCs using the DRM HDMI audio codec framework. Internally
the DRM HDMI audio codec framework relies on hdmi-codec's .prepare
callback to be called. This unfortunately is not happening on Amlogic
Meson8/8b/8m2 platforms [1].
Jerome suggested that this may be because of the codec-to-codec link on
our Amlogic AIU audio driver [2]. He encouraged me to send this series
to allow hdmi-codec's .prepare() callback to be called - even on
platforms that connect it via a codec-to-codec link.
The reason why this series is marked as RFC is that I'm not familiar
with the ASoC subsystem and lot of the functionality and terminology
is new to me.
Also I Cc'ed Sylwester Nawrocki (Samsung maintainer) as codec-to-codec
links seem to be most heavily used on Samsung and Amlogic platforms.
Changes since v1 at [3]:
- updated patch #2 to also prepare the source side of the link for
consistency reasons (as suggested by Jerome and Mark)
[0] https://lore.kernel.org/dri-devel/20241224-drm-bridge-hdmi-connector-v10-0-dc89577cd438@linaro.org/
[1] https://lore.kernel.org/linux-amlogic/CAFBinCDdiJ3UNVUcShjq=7U2=oUwT3ciYdKSuZ5TdcrikxFBpg@mail.gmail.com/
[2] https://lore.kernel.org/linux-amlogic/1ja5c4b4rt.fsf@starbuckisacylon.baylibre.com/
[3] https://lore.kernel.org/linux-sound/20250106141316.375984-1-martin.blumenstingl@googlemail.com/
Martin Blumenstingl (2):
ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally
ASoC: dapm: add support for preparing streams
include/sound/soc-dai.h | 3 +++
sound/soc/soc-dai.c | 27 +++++++++++++++++++--------
sound/soc/soc-dapm.c | 12 ++++++++++++
3 files changed, 34 insertions(+), 8 deletions(-)
--
2.47.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [RFC v2 1/2] ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally
2025-01-10 21:07 [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links Martin Blumenstingl
@ 2025-01-10 21:07 ` Martin Blumenstingl
2025-01-13 14:13 ` Charles Keepax
2025-01-10 21:07 ` [RFC v2 2/2] ASoC: dapm: add support for preparing streams Martin Blumenstingl
2025-01-13 14:53 ` [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links Jerome Brunet
2 siblings, 1 reply; 6+ messages in thread
From: Martin Blumenstingl @ 2025-01-10 21:07 UTC (permalink / raw)
To: linux-sound, linux-amlogic
Cc: s.nawrocki, lgirdwood, broonie, linux-kernel, jbrunet,
Martin Blumenstingl
Add a new snd_soc_dai_prepare() which can be used (in an upcoming patch)
by soc-dapm.c. Use this new function internally in
snd_soc_pcm_dai_prepare() to avoid duplicating code.
Suggested-by: Jerome Brunet <jbrunet@baylibre.com>
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
Changes since v1:
- none
include/sound/soc-dai.h | 3 +++
sound/soc/soc-dai.c | 27 +++++++++++++++++++--------
2 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
index aab57c19f62b..a11501752637 100644
--- a/include/sound/soc-dai.h
+++ b/include/sound/soc-dai.h
@@ -193,6 +193,9 @@ int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai,
int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate);
+int snd_soc_dai_prepare(struct snd_soc_dai *dai,
+ struct snd_pcm_substream *substream);
+
/* Digital Audio Interface mute */
int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute,
int direction);
diff --git a/sound/soc/soc-dai.c b/sound/soc/soc-dai.c
index 34ba1a93a4c9..ca0308f6d41c 100644
--- a/sound/soc/soc-dai.c
+++ b/sound/soc/soc-dai.c
@@ -360,6 +360,22 @@ int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate)
}
EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate);
+int snd_soc_dai_prepare(struct snd_soc_dai *dai,
+ struct snd_pcm_substream *substream)
+{
+ int ret = 0;
+
+ if (!snd_soc_dai_stream_valid(dai, substream->stream))
+ return 0;
+
+ if (dai->driver->ops &&
+ dai->driver->ops->prepare)
+ ret = dai->driver->ops->prepare(substream, dai);
+
+ return soc_dai_ret(dai, ret);
+}
+EXPORT_SYMBOL_GPL(snd_soc_dai_prepare);
+
/**
* snd_soc_dai_digital_mute - configure DAI system or master clock.
* @dai: DAI
@@ -577,14 +593,9 @@ int snd_soc_pcm_dai_prepare(struct snd_pcm_substream *substream)
int i, ret;
for_each_rtd_dais(rtd, i, dai) {
- if (!snd_soc_dai_stream_valid(dai, substream->stream))
- continue;
- if (dai->driver->ops &&
- dai->driver->ops->prepare) {
- ret = dai->driver->ops->prepare(substream, dai);
- if (ret < 0)
- return soc_dai_ret(dai, ret);
- }
+ ret = snd_soc_dai_prepare(dai, substream);
+ if (ret < 0)
+ return ret;
}
return 0;
--
2.47.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [RFC v2 2/2] ASoC: dapm: add support for preparing streams
2025-01-10 21:07 [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links Martin Blumenstingl
2025-01-10 21:07 ` [RFC v2 1/2] ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally Martin Blumenstingl
@ 2025-01-10 21:07 ` Martin Blumenstingl
2025-01-13 14:14 ` Charles Keepax
2025-01-13 14:53 ` [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links Jerome Brunet
2 siblings, 1 reply; 6+ messages in thread
From: Martin Blumenstingl @ 2025-01-10 21:07 UTC (permalink / raw)
To: linux-sound, linux-amlogic
Cc: s.nawrocki, lgirdwood, broonie, linux-kernel, jbrunet,
Martin Blumenstingl
Codec driver can implement .hw_params and/or .prepare from struct
snd_soc_dai_ops. For codec-to-codec links only the former (.hw_params)
callback has been called.
On platforms like Amlogic Meson8/8b/8m2 the SoC's sound card
(sound/soc/meson/gx-card.c) uses a codec-to-codec link for the HDMI
codec output because further digital routing is required after the
backend. The new DRM HDMI (audio) codec framework (which internally
uses sound/soc/codecs/hdmi-codec.c) relies on the .prepare callback
of the hdmi-codec to be called. Implement calls to
snd_soc_dai_prepare() so the .prepare callback is called. In this
case the mandatory part is the call to prepare the sink (which is
the hdmi-codec on those platforms). Also call snd_soc_dai_prepare()
for the source to stay consistent with the rest of the code (even
though it's not strictly necessary to make the DRM HDMI codec
framework work on Amlogic Meson8/8b/8m2).
For platforms or sound cards without a codec-to-codec link with
additional parameters (which applies to most hardware) this changes
nothing as the .prepare callback is already called via
snd_pcm_do_prepare() (as well as dpcm_fe_dai_prepare() and
dpcm_be_dai_prepare()) on those.
Suggested-by: Jerome Brunet <jbrunet@baylibre.com>
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
Changes since v1:
- also call snd_soc_dai_prepare() as suggested by Jerome/Mark for the
source to keep things symmetrical (this is not strictly necessary
for the Amlogic Meson SoC as it doesn't implement the .prepare
callback in the platform drivers - but having it symmetrical means
less confusion for future platform maintainers)
sound/soc/soc-dapm.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 99521c784a9b..ebb181aac7b7 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -4013,6 +4013,18 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
break;
case SND_SOC_DAPM_POST_PMU:
+ snd_soc_dapm_widget_for_each_source_path(w, path) {
+ source = path->source->priv;
+
+ snd_soc_dai_prepare(source, substream);
+ }
+
+ snd_soc_dapm_widget_for_each_sink_path(w, path) {
+ sink = path->sink->priv;
+
+ snd_soc_dai_prepare(sink, substream);
+ }
+
snd_soc_dapm_widget_for_each_sink_path(w, path) {
sink = path->sink->priv;
--
2.47.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [RFC v2 1/2] ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally
2025-01-10 21:07 ` [RFC v2 1/2] ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally Martin Blumenstingl
@ 2025-01-13 14:13 ` Charles Keepax
0 siblings, 0 replies; 6+ messages in thread
From: Charles Keepax @ 2025-01-13 14:13 UTC (permalink / raw)
To: Martin Blumenstingl
Cc: linux-sound, linux-amlogic, s.nawrocki, lgirdwood, broonie,
linux-kernel, jbrunet
On Fri, Jan 10, 2025 at 10:07:29PM +0100, Martin Blumenstingl wrote:
> Add a new snd_soc_dai_prepare() which can be used (in an upcoming patch)
> by soc-dapm.c. Use this new function internally in
> snd_soc_pcm_dai_prepare() to avoid duplicating code.
>
> Suggested-by: Jerome Brunet <jbrunet@baylibre.com>
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
> ---
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Thanks,
Charles
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC v2 2/2] ASoC: dapm: add support for preparing streams
2025-01-10 21:07 ` [RFC v2 2/2] ASoC: dapm: add support for preparing streams Martin Blumenstingl
@ 2025-01-13 14:14 ` Charles Keepax
0 siblings, 0 replies; 6+ messages in thread
From: Charles Keepax @ 2025-01-13 14:14 UTC (permalink / raw)
To: Martin Blumenstingl
Cc: linux-sound, linux-amlogic, s.nawrocki, lgirdwood, broonie,
linux-kernel, jbrunet
On Fri, Jan 10, 2025 at 10:07:30PM +0100, Martin Blumenstingl wrote:
> Codec driver can implement .hw_params and/or .prepare from struct
> snd_soc_dai_ops. For codec-to-codec links only the former (.hw_params)
> callback has been called.
>
> On platforms like Amlogic Meson8/8b/8m2 the SoC's sound card
> (sound/soc/meson/gx-card.c) uses a codec-to-codec link for the HDMI
> codec output because further digital routing is required after the
> backend. The new DRM HDMI (audio) codec framework (which internally
> uses sound/soc/codecs/hdmi-codec.c) relies on the .prepare callback
> of the hdmi-codec to be called. Implement calls to
> snd_soc_dai_prepare() so the .prepare callback is called. In this
> case the mandatory part is the call to prepare the sink (which is
> the hdmi-codec on those platforms). Also call snd_soc_dai_prepare()
> for the source to stay consistent with the rest of the code (even
> though it's not strictly necessary to make the DRM HDMI codec
> framework work on Amlogic Meson8/8b/8m2).
>
> For platforms or sound cards without a codec-to-codec link with
> additional parameters (which applies to most hardware) this changes
> nothing as the .prepare callback is already called via
> snd_pcm_do_prepare() (as well as dpcm_fe_dai_prepare() and
> dpcm_be_dai_prepare()) on those.
>
> Suggested-by: Jerome Brunet <jbrunet@baylibre.com>
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
> ---
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Thanks,
Charles
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links
2025-01-10 21:07 [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links Martin Blumenstingl
2025-01-10 21:07 ` [RFC v2 1/2] ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally Martin Blumenstingl
2025-01-10 21:07 ` [RFC v2 2/2] ASoC: dapm: add support for preparing streams Martin Blumenstingl
@ 2025-01-13 14:53 ` Jerome Brunet
2 siblings, 0 replies; 6+ messages in thread
From: Jerome Brunet @ 2025-01-13 14:53 UTC (permalink / raw)
To: Martin Blumenstingl
Cc: linux-sound, linux-amlogic, s.nawrocki, lgirdwood, broonie,
linux-kernel
On Fri 10 Jan 2025 at 22:07, Martin Blumenstingl <martin.blumenstingl@googlemail.com> wrote:
> Hello,
>
> the DRM subsystem has recently gained a HDMI audio codec framework [0].
> This is already queued for Linux 6.14.
>
> I want to implement a HDMI controller driver for the Amlogic
> Meson8/8b/8m2 SoCs using the DRM HDMI audio codec framework. Internally
> the DRM HDMI audio codec framework relies on hdmi-codec's .prepare
> callback to be called. This unfortunately is not happening on Amlogic
> Meson8/8b/8m2 platforms [1].
>
> Jerome suggested that this may be because of the codec-to-codec link on
> our Amlogic AIU audio driver [2]. He encouraged me to send this series
> to allow hdmi-codec's .prepare() callback to be called - even on
> platforms that connect it via a codec-to-codec link.
>
> The reason why this series is marked as RFC is that I'm not familiar
> with the ASoC subsystem and lot of the functionality and terminology
> is new to me.
>
> Also I Cc'ed Sylwester Nawrocki (Samsung maintainer) as codec-to-codec
> links seem to be most heavily used on Samsung and Amlogic platforms.
>
> Changes since v1 at [3]:
> - updated patch #2 to also prepare the source side of the link for
> consistency reasons (as suggested by Jerome and Mark)
>
>
> [0] https://lore.kernel.org/dri-devel/20241224-drm-bridge-hdmi-connector-v10-0-dc89577cd438@linaro.org/
> [1] https://lore.kernel.org/linux-amlogic/CAFBinCDdiJ3UNVUcShjq=7U2=oUwT3ciYdKSuZ5TdcrikxFBpg@mail.gmail.com/
> [2] https://lore.kernel.org/linux-amlogic/1ja5c4b4rt.fsf@starbuckisacylon.baylibre.com/
> [3] https://lore.kernel.org/linux-sound/20250106141316.375984-1-martin.blumenstingl@googlemail.com/
>
>
> Martin Blumenstingl (2):
> ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally
> ASoC: dapm: add support for preparing streams
Reviewed-by: Jerome Brunet <jbrunet@baylibre.com>
Not sure the RFC tag was necessary, this could go in as it is I suppose.
Thanks Martin !
>
> include/sound/soc-dai.h | 3 +++
> sound/soc/soc-dai.c | 27 +++++++++++++++++++--------
> sound/soc/soc-dapm.c | 12 ++++++++++++
> 3 files changed, 34 insertions(+), 8 deletions(-)
--
Jerome
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-01-13 14:53 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-10 21:07 [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links Martin Blumenstingl
2025-01-10 21:07 ` [RFC v2 1/2] ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally Martin Blumenstingl
2025-01-13 14:13 ` Charles Keepax
2025-01-10 21:07 ` [RFC v2 2/2] ASoC: dapm: add support for preparing streams Martin Blumenstingl
2025-01-13 14:14 ` Charles Keepax
2025-01-13 14:53 ` [RFC v2 0/2] ASoC: prepare streams on codec-to-codec links Jerome Brunet
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox