RFC: massive snd_hda driver update to better conform UAA specification

Alexander Leidinger Alexander at Leidinger.net
Wed Aug 13 13:00:35 UTC 2008

Quoting "Alexander Motin" <mav at FreeBSD.org> (from Wed, 13 Aug 2008  
01:26:10 +0300):

> Hi.
> I have made major snd_hda driver rewrite. I will be grateful for  
> reviews and any positive or negative feedbacks.

Have you already asked Ariff for a review? I've CCed him...

> Here is my patches: http://people.freebsd.org/~mav/
> For 8-CURRENT use:
> http://people.freebsd.org/~mav/hda.20080812.patch

I can not do a technical about this stuff, but I noticed that you use  
comments to disable code. Please use "#if 0" instead of comments to  
disable code.

I don't cut the rest of the mail in case Ariff hasn't seen it yet.


> For 7-STABLE try (I have no place to test it, but it builds):
> http://people.freebsd.org/~mav/hda.7.20080812.patch
> The main point of this change was to make driver conforming  
> Universal Audio Architecture (UAA) specification. UAA gives ability  
> to avoid most of device-dependent quirks (I have removed most of)  
> and make driver more friendly to a new hardware, more friendly to  
> average user by using information written by system integrators and  
> much more configurable for experienced users. UAA allows driver to  
> get all configuration information directly from HDA codec and  
> configure system audio devices according to it. Same time new driver  
> allows easily override default configuration using device.hints  
> mechanism.
> Second point of this change was to make driver multichannel. Now  
> driver supports multiple HDA codecs per controller, multiple  
> function groups per codec, multiple PCM devices per audio function  
> group and multiple channels per PCM device (last will be useful if  
> FreeBSD OSS sometimes will have multichannel support).
> To demonstrate features I can show some operation examples from my  
> notebook. This is Acer TM6292 with very simple simple Realtek ALC268  
> HDA codec.
> 1. Previous driver gave me:
>  - stereo playback (pcm0) via built in speakers and headphones  
> without jack sensing;
>  - recording device (pcm0) from external mic. Built in mic, CD and  
> line in was dead.
> 2. New driver by default without any quirks gives me:
>  - stereo playback (pcm0) via built in speakers and headphones with  
> jack sensing;
>  - recording device (pcm0) for built in mic (it does working!), line  
> in and mic in;
>  - recording device (pcm1) for CD. CD does not working for some  
> unknown reason, I think it may be just not implemented in hardware.
> 3. By adding to the loader.conf string
> hint.hdac.0.cad0.nid20.config="seq=1"
> it will be possible (when OSS will have multichannel support) to get  
> quadro playback via built in speakers and HP out connector. cad0  
> here means codec with ID 0. nid20 means pin with ID 20 - HP out,  
> seq=1 changes pin sequence inside association from 15 to 1  
> effectively disabling redirection making HP out independent.
> 4. By adding
> hint.hdac.0.cad0.nid20.config="seq=1"
> hint.hdac.0.cad0.nid21.config="as=3 seq=1"
> it is possible to get two independent playback devices. One (pcm0)  
> for HP connector and second (pcm1) for built in speakers. Record  
> will stay as before. Here as=3 changes built in speakers pin  
> association number from 1 to 3 separating it completely from HP  
> output.
> 5. By adding
> hint.hdac.0.cad0.nid26.config="as=1 seq=0 device=0"  
> hint.hdac.0.cad0.nid20.config="as=1 seq=15"  
> hint.hdac.0.cad0.nid21.config="as=3" it is possible to get two  
> independent playback devices. First (pcm0) for playback via line in  
> and HP out connectors with jack sensing in HP connector and line in  
> connector auto mute. And second (pcm1) for playback via built in  
> speakers. In this codec line in connector is reversible. String  
> device=0 changes it's description from Line in to Line out forcing  
> actual direction change.
> Driver allows to build many others usage scenarios. The main  
> limitation factor is codec functionality. Presented ALC268 is very  
> simple and restricted one. But I have also successfully tested it on  
> more powerful AD1988 and there range of possible scenarios is wider  
> while even default configuration covers all present codec  
> functionality.
> More information about UAA you can find at:
> http://www.microsoft.com/whdc/device/audio/default.mspx
> If you will have any questions/problems boot your system with  
> verbose logging. Driver prints a lot of usable information there. If  
> you will send me problem reports add please attach that verbose boot  
> output and `cat /dev/sndstat` output to your message.
> Thanks.
> -- 
> Alexander Motin
> _______________________________________________
> freebsd-multimedia at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-multimedia
> To unsubscribe, send any mail to "freebsd-multimedia-unsubscribe at freebsd.org"

An Englishman never enjoys himself, except for a noble purpose.
		-- A. P. Herbert

http://www.Leidinger.net    Alexander @ Leidinger.net: PGP ID = B0063FE7
http://www.FreeBSD.org       netchild @ FreeBSD.org  : PGP ID = 72077137

More information about the freebsd-multimedia mailing list