[PATCH] ASoC: meson: aiu-encoder-i2s: fix bit clock polarity
Jerome Brunet
jbrunet at baylibre.com
Tue Oct 7 02:09:57 PDT 2025
On Tue 07 Oct 2025 at 00:12, Valerio Setti via B4 Relay <devnull+vsetti.baylibre.com at kernel.org> wrote:
> From: Valerio Setti <vsetti at baylibre.com>
>
> 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 at baylibre.com>
Reviewed-by: Jerome Brunet <jbrunet at baylibre.com>
Tested on the libretech cc s905x (GXL)
Tested-by: Jerome Brunet <jbrunet at baylibre.com>
> ---
> sound/soc/meson/aiu-encoder-i2s.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/sound/soc/meson/aiu-encoder-i2s.c b/sound/soc/meson/aiu-encoder-i2s.c
> index a0dd914c8ed13616fbcbc0828e36418cfd255391..3b4061508c18047fe8d6f3f98061720f8ce238f2 100644
> --- a/sound/soc/meson/aiu-encoder-i2s.c
> +++ b/sound/soc/meson/aiu-encoder-i2s.c
> @@ -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,
> };
> -
>
> ---
> base-commit: 8f5ae30d69d7543eee0d70083daf4de8fe15d585
> change-id: 20251006-fix-i2s-polarity-d744338fa223
>
> Best regards,
--
Jerome
More information about the linux-amlogic
mailing list