You should probably start here :
http://www.alsa-project.org/main/index.php/Help_To_Debug
Your problem is likely to be a bug in the "patch" code for the driver. (As in "patch panel" not "software patch".)
The process of working out what the problem is is influenced heavily by your sound hardware.
For similar problems with my Intel HDA setup, I found the HDA Analyzer utility to be helpful - this lets you manipulate card parameters manually. And also this codec graphing tool, which helps to visualize how the patch layout of the card should work.
Alas, advice for other sound hardware is outside my experience.
At a minimum level you will be able to feed back information to the ALSA team for future kernel versions. I was able to patch the kernel to fix my problem (my C is terrible, but the code concerned is quite simple), and get a fix into the main kernel with assistance from the team on the Ubuntu kernel IRC channel, but I appreciate this is probably not a standard user response to the problem :-)