[alsa-devel] Question about WM8904 regcache

Bo Shen voice.shen at atmel.com
Fri Jul 12 09:00:26 CEST 2013

Hi Mark,
   I am sorry to disturb you. On our EK board, it use wm8904 codec. When 
I enable the audio, and use alsa utils aplay to test, I meet the 
following issue.
   The audio can not playback, it show the following error.
#aplay 44.1k_16bit_stereo.wav
Playing WAVE '44.1k_16bit_stereo.wav' : Signed 16 bit Little Endian, 
Rate 44100 Hz, Stereo
aplay: pcm_write:1737: write error: Input/output error

   After check the register, they are not be configured correctly. When 
read from debug file system, found the cache_dirty always Y before 
playback and also failed playback.
   I try to add the following two line in wm8904_set_bias_level into 
"case SND_SOC_BIAS_ON", it doesn't work.
@@ -1832,9 +1834,12 @@ static int wm8904_set_bias_level(struct 
snd_soc_codec *codec,

         switch (level) {
         case SND_SOC_BIAS_ON:
+               regcache_cache_only(wm8904->regmap, false);
+               regcache_sync(wm8904->regmap);

   However, If I comment the regcache_cache_only(wm8904->regmap, true) 
as following, then it play OK.
@@ -2232,7 +2239,7 @@ static int wm8904_i2c_probe(struct i2c_client *i2c,
                             WM8904_POBCTRL, 0);

         /* Can leave the device powered off until we need it */
-       regcache_cache_only(wm8904->regmap, true);
+       // regcache_cache_only(wm8904->regmap, true);

   So, any clue for this issue?


Best Regards,
Bo Shen

More information about the Alsa-devel mailing list