Comment 13 for bug 100114

Revision history for this message
wvengen (wvengen) wrote :

Wow, you've replied quite a lot already, here the answers to questions you posed.

posbuf was reported in azx_pcm_pointer(), just after the line
  pos = le32_to_cpu(*azx_dev->posbuf);
( http://lxr.linux.no/source/sound/pci/hda/hda_intel.c#L1215 )
I had another printk at read_lpib, but that one wasn't triggered at all. One of the higher functions does some alignment (snd_pcm_update_hw_ptr_pos() iirc), but that has resulted in no change in all my observations.
You can also see a printk in pcm_lib.c, that's at the end of snd_pcm_update_hw_ptr_pos() just before return.

I think azx_dev is an internal structure used to access the different streams. Hardware equivalent is accessible by memory mapped registers (ICH6 paragraph 18.2), beginning at address 80h and 20h bytes long. The macros azx_sd_* are used to access them. You probabely already found this out.

For posbuf values, please see attachment. Before suspend, one can see the values increasing. Output is usually the same (although I have seen a difference sometime I don't understand). After suspend, values are generally different for different suspend/resumes, but equal within one play. There is a point however when the value changes.