Re: HDA sound driver mod for thinkpad x60s

Eric Anderson <[email protected]>
Newsgroups gmane.os.freebsd.devel.mobile
Message-ID <[email protected]>
Andrea Bittau wrote:
> 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?

No, the cat command doesn't complain, and the ctrl-c stops after a 
little bit, no errors.

Some more information about my system can be found here:
http://www.googlebit.com/freebsd/200606061340/

Although earlier when playing around and trying kldunload the module, I 
saw this rather hilarious message:

Jun  6 13:53:15 neutrino kernel: pcm0: unregister: mixer busy
Jun  6 13:53:15 neutrino kernel: Fucked up register 16

P.S. - you can probably safely remove the calc.core file from the 
archive (along with a few other extra items). :)


> 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


Thanks!  I'll play with those suggestions and let you know what I find out.

Eric



-- 
------------------------------------------------------------------------
Eric Anderson        Sr. Systems Administrator        Centaur Technology
Anything that works is better than anything that doesn't.
------------------------------------------------------------------------
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.