]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ASoC: meson: aiu-encoder-i2s: fix bit clock polarity
authorValerio Setti <vsetti@baylibre.com>
Mon, 6 Oct 2025 22:12:19 +0000 (00:12 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:39 +0000 (15:37 -0500)
[ Upstream commit 4c4ed5e073a923fb3323022e1131cb51ad8df7a0 ]

According to I2S specs audio data is sampled on the rising edge of the
clock and it can change on the falling one. When operating in normal mode
this SoC behaves the opposite so a clock polarity inversion is required
in this case.

This was tested on an OdroidC2 (Amlogic S905 SoC) board.

Signed-off-by: Valerio Setti <vsetti@baylibre.com>
Reviewed-by: Jerome Brunet <jbrunet@baylibre.com>
Tested-by: Jerome Brunet <jbrunet@baylibre.com>
Link: https://patch.msgid.link/20251007-fix-i2s-polarity-v1-1-86704d9cda10@baylibre.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/meson/aiu-encoder-i2s.c

index a0dd914c8ed13616fbcbc0828e36418cfd255391..3b4061508c18047fe8d6f3f98061720f8ce238f2 100644 (file)
@@ -236,8 +236,12 @@ static int aiu_encoder_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
            inv == SND_SOC_DAIFMT_IB_IF)
                val |= AIU_CLK_CTRL_LRCLK_INVERT;
 
-       if (inv == SND_SOC_DAIFMT_IB_NF ||
-           inv == SND_SOC_DAIFMT_IB_IF)
+       /*
+        * The SoC changes data on the rising edge of the bitclock
+        * so an inversion of the bitclock is required in normal mode
+        */
+       if (inv == SND_SOC_DAIFMT_NB_NF ||
+           inv == SND_SOC_DAIFMT_NB_IF)
                val |= AIU_CLK_CTRL_AOCLK_INVERT;
 
        /* Signal skew */
@@ -328,4 +332,3 @@ const struct snd_soc_dai_ops aiu_encoder_i2s_dai_ops = {
        .startup        = aiu_encoder_i2s_startup,
        .shutdown       = aiu_encoder_i2s_shutdown,
 };
-