HDA sound driver mod for thinkpad x60s

Andrea Bittau a.bittau at cs.ucl.ac.uk
Tue Jun 6 19:27:39 UTC 2006


On Tue, Jun 06, 2006 at 01:52:40PM -0500, Eric Anderson wrote:
> I can't seem to play any audio tho..  I realize this isn't an IBM, but 
> was hoping it would work.. :)

What does that mean?  If you:
cat /dev/urandom > /dev/dsp
does it complain?  dmesg?  Also, if you ctrl C, does it stop after a bit, with
no complatins?

Anyway, assuming my code is "good enough" there might be two reasons why it's
not working:

1) I lamely hardcoded the Output device node identifier.
2) I hardcoded the Pin node identifier for the volume control.


To solve #1 try this in my code:
in hdac_attach2() get rid of the if(0) before sorbo_enum().  That is,
sorbo_enum() needs to be called.  Then, in sorbo_print_widget() get rid of the 0
&& in the type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_AUDIO_OUTPUT.  That is,
sorbo_conf_output() needs to be called if the type is audio output.  [I'm not
sure what happens if all output devices are configured though...].  Basically,
this will cause all output devices to accept the music stream.  Try it like
that.

Ideally you want only one output device to be configured, but I guess if you
look at the dmesg output u can figure out which node identifiers are output
devices and try them all, one at a time, until you find the correct one.  You
might notice that in IBM's case it's a 3, so I call sorbo_conf_output(sc, 0, 3);
Actually, you probably wanna get rid of that call too if your output device is
not node id 3.


To solve #2 do this:
Enable sorbo_enum() like above, and then in sorbo_print_widget() get rid of the
if (0) before sorbo_set_amp(sc, codecid, nodeid, 40);.  Basically, this will
cause all nodes to be amplified.  Try it like that.  Once again, ideally you
only want the correct node [TYPE_PIN] to be amplified.


As a final test, you might want to put a printf in sorbo_in_intr() to see if you
are getting any interrupts.


good luck, and remember to sync before kldload =P


More information about the freebsd-mobile mailing list