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 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel