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