[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAFBinCDdiJ3UNVUcShjq=7U2=oUwT3ciYdKSuZ5TdcrikxFBpg@mail.gmail.com>
Date: Tue, 31 Dec 2024 19:44:20 +0100
From: Martin Blumenstingl <martin.blumenstingl@...glemail.com>
To: linux-amlogic@...ts.infradead.org, jbrunet@...libre.com
Cc: linux-sound@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org, dmitry.baryshkov@...aro.org
Subject: meson-aiu: HDMI codec .prepare() callback not called
Hi Jerome,
I am still working on a HDMI controller driver for Meson8/8b/8m2.
HDMI output would be incomplete without audio.
There's a great series from Dmitry [0] which simplifies the HDMI
controller driver implementation by moving all the hdmi-codec related
management to a generic framework.
I tried integrating Dmitry's work [0] into my HDMI controller driver.
While testing I found that hdmi-codec's .prepare() callback is not
called at all and asked Dmitry for help [1]. All other callbacks
(.hw_params, .startup, .shutdown, ...) however are called.
On his board (Qualcomm SDM845, sdm845-db845c.dts) hdmi_codec_prepare()
is called by snd_soc_pcm_dai_prepare() (core sound framework, not
platform specific).
However, on my Odroid-C1 this is not happening.
Looking further snd_soc_pcm_dai_prepare() I can see that
for_each_rtd_dais() has three entries:
snd_soc_pcm_dai_prepare(), dai name=I2S Encoder, id=2
snd_soc_pcm_dai_prepare(), dai name=CODEC CTRL HDMI I2S IN, id=0
snd_soc_pcm_dai_prepare(), dai name=I2S FIFO, id=0
What I'm missing here is a dai name "i2s-hifi" (from
sound/soc/codecs/hdmi-codec.c, see hdmi_i2s_dai)
My hdmi_tx node looks like this (abbreviated):
hdmi_tx: hdmi-tx@...00 {
compatible = "amlogic,meson8b-hdmi-tx";
reg = <0x42000 0xc>;
#sound-dai-cells = <1>;
...
};
Then I have a "amlogic,gx-sound-card" instance with the following dai-links:
dai-link-0 {
sound-dai = <&aiu AIU_CPU CPU_I2S_FIFO>;
};
dai-link-1 {
sound-dai = <&aiu AIU_CPU CPU_I2S_ENCODER>;
dai-format = "i2s";
mclk-fs = <256>;
codec-0 {
sound-dai = <&aiu AIU_HDMI CTRL_I2S>;
};
};
dai-link-2 {
sound-dai = <&aiu AIU_HDMI CTRL_OUT>;
codec-0 {
sound-dai = <&hdmi_tx 0>;
};
};
So apart from the additional cell in the sound-dai towards hdmi_tx
(Meson8/8b/8m2's HDMI controller has two inputs: I2C and SPDIF. I2C is
the first one, hence &hdmi_tx 0) this is identical to
arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts.
I have further verified that the gx-card parsing does find the HDMi
controller and links it correctly.
To me it's odd that only the .prepare() callback is not called, all
others (as mentioned above: .hw_params, .startup, ...) are working
fine.
I'm not familiar with the sound stack and I'm hoping that you have
some ideas on how to either debug or fix it.
Thanks in advance and best regards,
Martin
[0] https://lore.kernel.org/dri-devel/20241224-drm-bridge-hdmi-connector-v10-0-dc89577cd438@linaro.org/
[1] https://lore.kernel.org/dri-devel/20241231004311.2574720-1-martin.blumenstingl@googlemail.com/
[2] https://lore.kernel.org/dri-devel/l3u3wtnxyhrwjynevkwfjwarisc4yt4xy2rbzf5kb7k5l5dw3n@lxqtimymyjg6/
View attachment "sound-soc-soc-dai-snd_soc_pcm_dai_prepare-info.diff" of type "text/x-patch" (2349 bytes)
Powered by blists - more mailing lists