RFC: massive snd_hda driver update to better conform UAA

Alexander Motin mav at FreeBSD.org
Wed Aug 13 14:17:01 UTC 2008

Andriy Gapon wrote:
> I've tried a slightly tweaked version of your releng_7 patch on 6.3.
> It seems that with your patch recording stopped working for me, but
> everything else is OK.
>>From (non-verbose) dmesg:
> hdac0: <NVidia MCP51 High Definition Audio Controller> mem
> 0xfe024000-0xfe027fff irq 22 at device 16.1 on pci0
> hdac0: <HDA Driver Revision: 20080812_0000>
> hdac0: <HDA Codec #0: Analog Devices AD1986A>
> hdac0: hdac_widget_connection_parse: nid=18 WARNING: zero cnid entnum=4
> j=2 index=0 entries=8 found=2 res=0x21002211
> hdac0: hdac_audio_as_parse: Pin 28 has wrong direction for association
> 1! Disabling association.
> hdac0: hdac_audio_as_parse: Pin 29 has wrong direction for association
> 1! Disabling association.

Thats probably why you have lost your recording. Some pins in 
association described as input, while another as output. In such case 
new driver just disables complete association.

> pcm0: <HDA codec Analog Devices AD1986A PCM #0> on hdac0
> pcm1: <HDA codec Analog Devices AD1986A PCM #1> on hdac0
> I can see that current (non-patched) code has the following quirks for
> the above two pins with my codec and my subvendor (ASUS M2NPV-MX
> motherboard):
> } else if (id == HDA_CODEC_AD1986A &&
> 	    (sc->pci_subvendor == ASUS_M2NPVMX_SUBVENDOR ||
> 	    sc->pci_subvendor == ASUS_A8NVMCSM_SUBVENDOR)) {
> 		switch (nid) {
> 		case 28:	/* LINE */
> 			break;
> 		case 29:	/* MIC */
> 			break;
> 		default:
> 			break;
> 		}
> 	}

In new driver I have left this quirks and probably it is the reason. 
Probably your BIOS defines that pins as output same as some other ones. 
So probably we should or remove this quirks to get several more outputs 
or add some more pins here to get some inputs.

Send me verbose dmesg output. It is easy to debug and fix such problems now.

> BTW, I am also curios about two pcm devices that I got now. Which is
> what? How can I use them? (Sorry if I missed this info in your original
> message).

Most of HDA codecs have several DACs/ADCs (I have seen from 2/2 to 6/3). 
In many cases their usage can be configured in different ways depending 
on parameters configured by BIOS and specified manually with device 
hints. What for they are used in your case you an find from digging 
verbose boot logging. For example you can setup your xmms to play via 
speakers, while skype will use external in mic and headphones. Or you 
can configure multichannel audio.

Alexander Motin

More information about the freebsd-multimedia mailing list