HDA sound driver mod for thinkpad x60s
Eric Anderson
anderson at centtech.com
Tue Jun 6 19:41:33 UTC 2006
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.
------------------------------------------------------------------------
More information about the freebsd-mobile
mailing list