Making a Voodoo 3 TV-Out work with RedHat 8.0 The Voodoo 3 card uses the "Brooktree BT869 Video Modulator chips" or BT869 for short. It's relatively easy to make work in linux with a modern distribution. Most of my experiece was borrowed/stolen from this document. I'm just updating it for a modern distribution. http://www2.lm-sensors.nu/~lm78/cvs/browse.cgi/lm_sensors2/doc/chips/bt869 First verify that the card is being detected correctly by the motherboard [root@localhost root]# lspci | grep VGA 01:00.0 VGA compatible controller: 3Dfx Interactive, Inc. Voodoo 3 (rev 01) RedHat should display via a monitor with the V3 just fine, to get X to output via the S-Video connector requires a little bit of tweaking. The kernel that comes with RedHat 8.0 supports everything we need to get the V3 up and running so no kernel recompile is necessary. We will need to make sure that the lm_sensors package is installed (it is by default). [root@localhost root]# rpm -qa | grep lm_sensors lm_sensors-2.6.3-2 First and foremost I need to warn you AGAINST trying to configure your box to do TV while hooked up a computer monitor and not a TV. It WILL damage your monitor as your monitor isn't designed to handle the refresh rates of a TV. Take it from me, I damaged and old monitor I had. Instead I recommend that you leave the box hooked up via S-Video (or composite if you have an adapter) to the TV and SSH in to do that administration. Step 1) Modify your X configuration. Edit /etc/X11/XF86Config and add some lines. In your XF86Config file, you should have these entries for NTSC output: ModeLine "640x480NTSC" 28.195793 640 656 658 784 480 520 525 600 ModeLine "720x480NTSC" 27.5 720 744 800 872 480 483 485 525 ModeLine "800x600NTSC" 38.769241 800 812 814 880 600 646 649 735 or for PAL ModeLine "640x480PAL" 29.50 640 675 678 944 480 530 535 625 ModeLine "720x576PAL" 27.50 720 744 800 880 576 581 583 625 ModeLine "800x600PAL" 36.00 800 818 820 960 600 653 655 750 Place those in the "monitor" section of the config and then find the "Screen" section and place the following command in the Subsection display part Modes "640x480NTSC" Remember to comment out the previous mode lines. You may want to add the other resolutions, or pick another resolution. I recommend just using one because switch resolutions is complicated with TV-Out. Also you'll want to make sure the default depth and regular depth are set to 16. I don't think the TV out will do anything higher YMMV. Now that X is configured we'll need to tell the kernel to "turn on" the S-Video port. Step 2) Run /usr/sbin/sensors-detect, it will walk you through some hardware detection for your system. You're pretty safe to say yes to any of the scans it asks to perform. In the end it will output some configuration you'll want to add to your setup. Put the modprobe commands in /etc/rc.local and modify the /etc/modules.conf as it tells you. This will load any necessary support drivers you may have and setup i2c which you'll need later. Step 3) Run lsmod to see if the proper stuff is loaded now [root@localhost root]# lsmod | grep i2c i2c-dev 5668 0 i2c-proc 9168 0 [bt869 via686a eeprom] i2c-isa 1896 0 (unused) i2c-voodoo3 3660 0 i2c-algo-bit 8840 2 [i2c-voodoo3] i2c-viapro 4944 0 i2c-core 19236 0 [i2c-dev bt869 via686a eeprom i2c-proc i2c-isa i2c-algo-bit i2c-viapro] Specifically look for the voodoo3, proc, and core. If you have those you're good to go. Step 4) Install the Bt869 module using insmod bt869. At this point you should see some noise on your television. This is a good sign. Now we'll need to send some parameters to the kernel to give it some direction as to what to do with this new TV-Out device. If you look in /proc/sys/dev/sensors/bt869*/ you should see some options. The last part of the directory could change on each system so I left it out. colorbars: Output colorbars instead of display data. Default `0'. depth: Display depth. Seems to be `16' on my system. half: No idea. Default `0'. ntsc: 1: use NTSC, 0: use PAL. Default: `1'. res: Screen resolution to use. Defaut: `640 480'. status: Outputs some status info I do not know what that is. svideo: Output svideo signal or composite signal. Default '0' We'll want to set each of these just to be safe. A simple echo works just fine. echo 1 > /proc/sys/dev/sensors/bt869*/colorbars echo 16 > /proc/sys/dev/sensors/bt869*/depth echo 0 > /proc/sys/dev/sensors/bt869*/half echo 1 > /proc/sys/dev/sensors/bt869*/ntsc echo "640 480" > /proc/sys/dev/sensors/bt869*/res echo 1 > /proc/sys/dev/sensors/bt869*/svideo At this point you should see standard colorbars on your screen. This is just a test pattern to make sure things are working. Assuming you see this all you should have to do is turn it off with: echo 0 > /proc/sys/dev/sensors/bt869*/colorbars And you should see whatever X is displaying. If you're using a composite cable instead of the svideo just echo 0 into S-Video. Otherwise you'll get a black and white picture. Likewise if you're using an S-Video cable make sure you echo 1 into svideo otherwise the pixels will look bigger. Bugs? Two things that I notice... On my TV there is a black border around the entire picture (The picture doesn't fill the entire screen) and I don't know how to change this. Also it seems the contrast is fairly high. Watching certain movies shows some artifacting on the dark areas. Neither are terrible, I still consider the card very functional. That's it. If you have any questions email me. ----------------- Scott@Perturb.org Last Update: 11:46 PM 12/13/2002