Date: Tue, 06 Jun 2006 14:41:33 -0500 From: Eric Anderson <anderson@centtech.com> To: Andrea Bittau <a.bittau@cs.ucl.ac.uk> Cc: freebsd-mobile@freebsd.org Subject: Re: HDA sound driver mod for thinkpad x60s Message-ID: <4485DA6D.9020304@centtech.com> In-Reply-To: <20060606192229.GA4465@shorty.sorbonet.org> References: <20060606124030.GA32057@shorty.sorbonet.org> <4485CEF8.10201@centtech.com> <20060606192229.GA4465@shorty.sorbonet.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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. ------------------------------------------------------------------------
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4485DA6D.9020304>