corrected bitmask in BCLKDIV setting (wm8940_set_dai_clkdiv) and bias_level in wm8940 register function.
best regards, Grzegorz Daniluk
---- diff -urN a/sound/soc/codecs/wm8940.c b/sound/soc/codecs/wm8940.c --- a/sound/soc/codecs/wm8940.c 2010-04-16 11:10:10.000000000 +0000 +++ b/sound/soc/codecs/wm8940.c 2010-09-29 14:12:17.263497290 +0000 @@ -514,7 +514,7 @@
if ((Ndiv < 6) || (Ndiv > 12)) printk(KERN_WARNING - "WM8940 N value %d outwith recommended range!d\n", + "WM8940 N value %d outwith recommended range!\n", Ndiv);
pll_div.n = Ndiv; @@ -604,7 +604,7 @@
switch (div_id) { case WM8940_BCLKDIV: - reg = snd_soc_read(codec, WM8940_CLOCK) & 0xFFEF3; + reg = snd_soc_read(codec, WM8940_CLOCK) & 0xFFE3; ret = snd_soc_write(codec, WM8940_CLOCK, reg | (div << 2)); break; case WM8940_MCLKDIV: @@ -800,9 +800,10 @@
wm8940_dai.dev = codec->dev;
- wm8940_set_bias_level(codec, SND_SOC_BIAS_STANDBY); + wm8940_set_bias_level(codec, SND_SOC_BIAS_PREPARE);
- ret = snd_soc_write(codec, WM8940_POWER1, 0x180); + reg = snd_soc_read(codec, WM8940_POWER1); + ret = snd_soc_write(codec, WM8940_POWER1, reg | 0x180); if (ret < 0) return ret;