Re: [PATCH] ASoC: wm8960: Fix clock configuration on slave mode

From: Charles Keepax
Date: Tue Sep 07 2021 - 06:34:38 EST


On Tue, Sep 07, 2021 at 05:11:09PM +0800, Shengjiu Wang wrote:
> There is a noise issue for 8kHz sample rate on slave mode.
> Compared with master mode, the difference is the DACDIV
> setting, after correcting the DACDIV, the noise is gone.
>
> There is no noise issue for 48kHz sample rate, because
> the default value of DACDIV is correct for 48kHz.
>
> So wm8960_configure_clocking() should be functional for
> ADC and DAC function even if it is slave mode.
>
> In order to be compatible for old use case, just add
> condition for checking that sysclk is zero with
> slave mode.
>
> Fixes: 0e50b51aa22f ("ASoC: wm8960: Let wm8960 driver configure its bit clock and frame clock")
> Signed-off-by: Shengjiu Wang <shengjiu.wang@xxxxxxx>
> ---
> sound/soc/codecs/wm8960.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
> index 9e621a254392..9c6af76a60fd 100644
> --- a/sound/soc/codecs/wm8960.c
> +++ b/sound/soc/codecs/wm8960.c
> @@ -742,7 +742,7 @@ static int wm8960_configure_clocking(struct snd_soc_component *component)
> int i, j, k;
> int ret;
>
> - if (!(iface1 & (1<<6))) {
> + if (!(iface1 & (1 << 6)) && !wm8960->sysclk) {
> dev_dbg(component->dev,
> "Codec is slave mode, no need to configure clock\n");

Looking through the datasheet it just looks like this if
statement has always been non-sense, it looks pretty clear the
clocking should still be configured in slave mode (apart from
BCLKDIV which is presumably ignored in slave mode).

I would be slightly inclined to suggest it would be better
to just fixup any systems not setting sysclk for slave mode,
but I am assuming you are talking primarily about out of tree
systems. So I think we need to at least update the message here
as well, it should probably change to a warning and state that
the we are proceeding with no clock configuration, rather than
erroneously saying it doesn't need one.

Thanks,
Charles