[alsa-devel] [PATCH] hda_codec: restore control element values during resume

Takashi Iwai tiwai at suse.de
Thu May 3 12:38:04 CEST 2007


At Wed, 02 May 2007 11:57:00 -0400,
Daniel Drake wrote:
> 
> Takashi Iwai wrote:
> > The controls should have been restored by snd_hda_resume_ctls() call
> > in stac92xx_resume(), so basically your patch must be suprefluous.
> > Could you check whether this gets called?
> 
> I did see the snd_hda_resume_ctls() code but noted it was resuming from 
> snd_kcontrol_new structures rather than snd_kcontrol instances. I'm 
> still not sure what the difference is here, are they supposed to 
> 'mirror' each other?

Not really.  The snd_kcontrol_new struct is basically a template for
creating a control element.  The codec code uses this array to get the
control elements.

Tracking all kctls from the card instance is not suitable in this case
because it contains really _all_ control elements.  hda-intel driver
may have multiple codecs, so you cannot check whether the element is
what your codec created or not.

Another way would be to keep a list of created kctls, but I chose a
simpler way to use kcontrol_new because they are already there.

> Anyway, it turns out that snd_hda_resume_ctls() doesn't get executed.
> 
> stac92xx_resume() has this code:
> 
> 	for (i = 0; i < spec->num_mixers; i++)
> 		snd_hda_resume_ctls(codec, spec->mixers[i]);
> 
> On my system, spec->num_mixers is 0.

OK, it's a simple error.  The resume callback should call
snd_hda_resume_ctls() with spec->mixer argument.  The other codec
codes store this also onto spec->mixers[] array, so I overlooked.

Now fixed on HG tree.


thanks,

Takashi


More information about the Alsa-devel mailing list