All of lore.kernel.org
 help / color / mirror / Atom feed
* Question about WM8904 regcache
@ 2013-07-12  7:00 Bo Shen
  2013-07-12  8:42 ` Mark Brown
  0 siblings, 1 reply; 4+ messages in thread
From: Bo Shen @ 2013-07-12  7:00 UTC (permalink / raw)
  To: Mark Brown; +Cc: alsa-devel

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.
---8>---
#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
---<8---

   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.
---8>---
@@ -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);
                 break;
---<8---

   However, If I comment the regcache_cache_only(wm8904->regmap, true) 
as following, then it play OK.
---8>---
@@ -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);
---<8---

   So, any clue for this issue?

   Thanks.

Best Regards,
Bo Shen

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Question about WM8904 regcache
  2013-07-12  7:00 Question about WM8904 regcache Bo Shen
@ 2013-07-12  8:42 ` Mark Brown
  2013-07-12 10:03   ` Bo Shen
  0 siblings, 1 reply; 4+ messages in thread
From: Mark Brown @ 2013-07-12  8:42 UTC (permalink / raw)
  To: Bo Shen; +Cc: alsa-devel


[-- Attachment #1.1: Type: text/plain, Size: 1498 bytes --]

On Fri, Jul 12, 2013 at 03:00:26PM +0800, Bo Shen wrote:

>   I try to add the following two line in wm8904_set_bias_level into
> "case SND_SOC_BIAS_ON", it doesn't work.
> ---8>---
> @@ -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);
>                 break;
> ---<8---

That's far too late to be doing that, the device is already supposed to
be powered and running - you can see the device is doing this already in
the transition from _OFF to _STANDBY which is where it should happen.

>   However, If I comment the regcache_cache_only(wm8904->regmap,
> true) as following, then it play OK.
> ---8>---
> @@ -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);
> ---<8---

>   So, any clue for this issue?

The device is supposed to be idle_bias_off so sitting in _BIAS_OFF when
not in use, this should mean a transition to _STANDBY as part of the
power up sequence which should reenable interaction with the device.
Check to see why that is not happening - _OFF should be the default bias
level as well.

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Question about WM8904 regcache
  2013-07-12  8:42 ` Mark Brown
@ 2013-07-12 10:03   ` Bo Shen
  2013-07-12 11:32     ` Mark Brown
  0 siblings, 1 reply; 4+ messages in thread
From: Bo Shen @ 2013-07-12 10:03 UTC (permalink / raw)
  To: Mark Brown; +Cc: alsa-devel

Hi Mark,

On 07/12/2013 04:42 PM, Mark Brown wrote:
> On Fri, Jul 12, 2013 at 03:00:26PM +0800, Bo Shen wrote:
>
>>    I try to add the following two line in wm8904_set_bias_level into
>> "case SND_SOC_BIAS_ON", it doesn't work.
>> ---8>---
>> @@ -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);
>>                  break;
>> ---<8---
>
> That's far too late to be doing that, the device is already supposed to
> be powered and running - you can see the device is doing this already in
> the transition from _OFF to _STANDBY which is where it should happen.
>
>>    However, If I comment the regcache_cache_only(wm8904->regmap,
>> true) as following, then it play OK.
>> ---8>---
>> @@ -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);
>> ---<8---
>
>>    So, any clue for this issue?
>
> The device is supposed to be idle_bias_off so sitting in _BIAS_OFF when
> not in use, this should mean a transition to _STANDBY as part of the
> power up sequence which should reenable interaction with the device.
> Check to see why that is not happening - _OFF should be the default bias
> level as well.
>

Do you mean the system boot up the device should be in _BIAS_OFF state?

I add debug info to set_bias_level function, and don't see this is 
called when system boot up. When I run aplay command, it call from 
_STANDBY to _ON, not _OFF, after show the error message, it call from 
_PREPARE to _OFF.

---8>---
# aplay 44.1k_16bit_stereo.wav
Playing WAVE '44.1k_16bit_stereo.wav' : Signed 16 bit Little Endian, 
Rate 44100 Hz, Stereo
 >>>>>> leve is: 1
 >>>>>> leve is: 2
 >>>>>> leve is: 3
aplay: pcm_write:1737: write error: Input/output error
# >>>>>> leve is: 2
 >>>>>> leve is: 1
 >>>>>> leve is: 0
---<8---

Best Regards,
Bo Shen

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Question about WM8904 regcache
  2013-07-12 10:03   ` Bo Shen
@ 2013-07-12 11:32     ` Mark Brown
  0 siblings, 0 replies; 4+ messages in thread
From: Mark Brown @ 2013-07-12 11:32 UTC (permalink / raw)
  To: Bo Shen; +Cc: alsa-devel


[-- Attachment #1.1: Type: text/plain, Size: 685 bytes --]

On Fri, Jul 12, 2013 at 06:03:16PM +0800, Bo Shen wrote:

> Do you mean the system boot up the device should be in _BIAS_OFF state?

Yes.

> I add debug info to set_bias_level function, and don't see this is
> called when system boot up. When I run aplay command, it call from
> _STANDBY to _ON, not _OFF, after show the error message, it call
> from _PREPARE to _OFF.

It's not called on boot, it's just the default state - the probe()
function is intended to leave things in _OFF.  What you describe sounds
like it's sitting in _STANDBY, you need to debug why this is happening.
I can't see anything in current code - snd_soc_register_codec() sets the
bias level to _OFF by default.

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-07-12 11:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-12  7:00 Question about WM8904 regcache Bo Shen
2013-07-12  8:42 ` Mark Brown
2013-07-12 10:03   ` Bo Shen
2013-07-12 11:32     ` Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.