[alsa-devel] Power management state flow in ALSA

Nobin Mathew nobin.mathew at gmail.com
Wed Jun 6 10:07:00 CEST 2007


Liam,

In soc_resume()
 we should do this
          snd_power_change_state(codec->card, SNDRV_CTL_POWER_D0);
instead of
        snd_power_change_state(codec->card, SNDRV_CTL_POWER_D3hot);

Because snd_pcm_resume in pcm_native.c expects the card to be in
SNDRV_CTL_POWER_D0 state. Other ioctl will wait forever.

static int snd_pcm_resume(struct snd_pcm_substream *substream)
{
	struct snd_card *card = substream->pcm->card;
	int res;

	snd_power_lock(card);
	if ((res = snd_power_wait(card, SNDRV_CTL_POWER_D0)) >= 0)
		res = snd_pcm_action_lock_irq(&snd_pcm_action_resume, substream, 0);
	snd_power_unlock(card);
	return res;
}


One more thing why we are using
	snd_power_change_state(codec->card, SNDRV_CTL_POWER_D3cold);
every other driver is doing
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);

SNDRV_CTL_POWER_D3cold is true for deep sleep where power to the
controller is switched off .

In sleep, only clock to the controller is switched off.

Nobin Mathew









On 6/4/07, Nobin Mathew <nobin.mathew at gmail.com> wrote:
> Liam
>
> I will get back, i need to set up the board
>
> On 6/1/07, Liam Girdwood <lg at opensource.wolfsonmicro.com> wrote:
> > Nobin,
> >
> > Can you try the following patch :-
> >
> > http://opensource.wolfsonmicro.com/cgi-bin/gitweb/gitweb.cgi?p=linux-2.6-asoc;a=commit;h=6c868238a5e083dca4d74439a7fd467b5c7726b0
> >
> > This will notify pcm's of their suspend state.
> >
> > Liam
> >
> > On Wed, 2007-05-30 at 12:58 +0200, Takashi Iwai wrote:
> > > At Wed, 30 May 2007 16:06:54 +0530,
> > > Nobin Mathew wrote:
> > > >
> > > > I am writing an ASoC driver, where i can place these calls
> > > >
> > > > snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
> > > > snd_pcm_suspend_all(chip->pcm[i]);
> > > >
> > > > and snd_power_change_state(card, SNDRV_CTL_POWER_D0);
> > > >
> > > >
> > > > In soc-core.c ?
> > >
> > > I suppose so.
> > > In soc_suspend() and soc_resume(), you can get the card instance from
> > > codec->card, at least.
> > >
> > > But currently SoC doesn't keep the PCM instances, so it cannot be
> > > implemented as it is...  Liam, any plan or known issue regarding this?
> > >
> > >
> > > Takashi
> >
> >
>


More information about the Alsa-devel mailing list