Also look at [http://ftp.kernel.org/pub/linux/kernel/people/tiwai/docs/HD-Audio.html Documentation/sound/alsa/HD-Audio.txt] in the kernel tree. This contains some detailed information for development/debugging HD-audio driver. The on-line documents are found in the link section below.

Also look at [http://ftp.kernel.org/pub/linux/kernel/people/tiwai/docs/HD-Audio.html Documentation/sound/alsa/HD-Audio.txt] in the kernel tree. This contains some detailed information for development/debugging HD-audio driver. The on-line documents are found in the link section below.

Sometimes the support for your system (or a similar one) is available on the driver, but the right system model wasn't detected by the driver. You can try different values for the model parameter for the snd-hda-intel module (see HD-Audio-Models.txt) and see if some of them fix your problem.

Also look at Documentation/sound/alsa/HD-Audio.txt in the kernel tree. This contains some detailed information for development/debugging HD-audio driver. The on-line documents are found in the link section below.

The snd-hda-intel driver speak to codecs through the the Intel HDA bus. Each codec has many widgets inside it, and the driver can send messages (called verbs) to them to change their settings. Each widget may collect audio input from other widgets, and may their output may be sent to other widgets. The driver may probe the codec and know exactly how the widgets are wired inside the codec. The /proc/asound/card*/codec#* file contains this information.

Commonly found types of widgets:

Pin Complexes are input and/or output interfaces to the outside world. They normally correspond to real audio jacks, speakers or microphones on the machine

Audio Input/Output, ADC, or DAC are the interface between the codec and the HDA bus. This is where ALSA sends/consumes the audio streams to/from

Each widget may contain amplifiers on its inputs or outputs. The amplifiers may be controlled by the driver to change audio volume and unmute/mute audio input or output. The mixer controls seen on alsamixer normally correspond to an specific amplifier on an specific widget inside the codec.

The driver needs to register audio streams with alsa, that will be used for recording and playback. Most of this task is done by the hda-intel core code, but the codec-specific driver needs to tell hda-intel what are the NIDs of the ADC and DAC widgets for each audio stream.

The driver normally register mixer controls with alsa. Normally this task is done by the hda-intel core code, but the codec-specific code needs to tell hda-intel which amplifiers inside the code chip will be controled by the mixer controls.