[alsa-devel] [PATCH] ASoC: wm8962: No need to call wm8962_configure_bclk() multiple times
From: Fabio Estevam fabio.estevam@freescale.com
Currently after playing any audio file, we get the following error message:
$ aplay clarinet.wav Playing WAVE 'clarinet.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo $ wm8962 0-001a: Unsupported sysclk ratio 544
This error message appears about 5 seconds after the audio playback has finished.
There is no need to re-calculate the bit clock after the playback has finished, so call wm8962_configure_bclk only once inside wm8962_hw_params().
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com --- sound/soc/codecs/wm8962.c | 4 ---- 1 file changed, 4 deletions(-)
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c index 6a5066c..1bf79dc 100644 --- a/sound/soc/codecs/wm8962.c +++ b/sound/soc/codecs/wm8962.c @@ -2497,8 +2497,6 @@ static int wm8962_set_bias_level(struct snd_soc_codec *codec, /* VMID 2*50k */ snd_soc_update_bits(codec, WM8962_PWR_MGMT_1, WM8962_VMID_SEL_MASK, 0x80); - - wm8962_configure_bclk(codec); break;
case SND_SOC_BIAS_STANDBY: @@ -2621,8 +2619,6 @@ static int wm8962_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
wm8962->sysclk_rate = freq;
- wm8962_configure_bclk(codec); - return 0; }
Hi Fabio,
On Fri, Jul 19, 2013 at 02:58:28AM -0300, Fabio Estevam wrote:
wm8962_configure_bclk(codec);
break;
case SND_SOC_BIAS_STANDBY:
@@ -2621,8 +2619,6 @@ static int wm8962_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
wm8962->sysclk_rate = freq;
- wm8962_configure_bclk(codec);
Although I know this modification should be okay on i.MX SabreSD, yet I'm not sure if won't break other usage on other platforms.
And the problem here is because wm8962->bclk and wm8962->lrclk are updated in hw_params() but be remained after playback's done. So there might be a least risky way to fix it just by adding this:
+static int wm8962_hw_free(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct snd_soc_codec *codec = dai->codec; + struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec); + + wm8962->lrclk = 0; + wm8962->bclk = 0; + + return 0; +}
Surely If Mark say okay to Fabio's patch, I'll be totally okay with it too. I just want to this wm8962 driver can work perfectly on all the platforms.
On Fri, Jul 19, 2013 at 02:58:28AM -0300, Fabio Estevam wrote:
From: Fabio Estevam fabio.estevam@freescale.com
Currently after playing any audio file, we get the following error message:
$ aplay clarinet.wav Playing WAVE 'clarinet.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo $ wm8962 0-001a: Unsupported sysclk ratio 544
This error message appears about 5 seconds after the audio playback has finished.
There is no need to re-calculate the bit clock after the playback has finished, so call wm8962_configure_bclk only once inside wm8962_hw_params().
No, you do end up needing to call it in multiple places - there's other configuration going on there that is needed by bypass paths which won't use the audio interface and hence won't call hw_params().
participants (3)
-
Fabio Estevam
-
Mark Brown
-
Nicolin Chen