At Fri, 16 Sep 2011 10:16:11 +0800, Raymond Yau wrote:
2011/9/12 Takashi Iwai tiwai@suse.de:
At Mon, 12 Sep 2011 09:53:28 +0200, Takashi Iwai wrote:
At Sun, 04 Sep 2011 22:32:44 +0200, Clemens Ladisch wrote:
Raymond Yau wrote:
The possible way is to save the contents of 128K memory mapped I/O ports before suspend to non-volatile memory and restore them after resume
Is there any way for alsa driver to allocate non-volatile memory ?
'Normal' memory is saved over suspend. Just use {k|v}malloc.
If it's a 128kB bulk memory, vmalloc() is a more sensible choice.
BTW, in many cases, you don't have to save/restore the whole mmio region. Instead, stop the stream, save / restore some important registers and do the similar procedure for the normal prepare callback in the resume, and restart the stream again.
Takashi
The current au8830 alsa driver seem use less than 192Kbytes out of 256Kbytes mmio
http://thread.gmane.org/gmane.linux.kernel/564963/focus=47907
your patch seem initialse the request queue in figure 16 of pat 6167465
and the driver need to restore mixer and equalizer mmio for au8830 in figure 13
Yeah, that's what I mentioned in the thread.
Basically you'll need to restore the values assigned in hw_params() for PCM.
The mixer is ac97, so it's restored by ac97_codec.c. The rest are the equalizer and a3d values to be restored separately.
Takashi