HARDWARE TV-Out with 3DFX Voodoo3 3000 (AGP, Kernel 2.4 Only)

From Gentoo Linux Wiki

Jump to: navigation, search
This article is part of the Hardware series.
Laptops TV Tuner Cards Wireless Servers Storage Other Hardware Motherboards Related


Please format this article according to the guidelines and Wikification suggestions, then remove this notice {{Wikify}} from the article




[edit] Introduction

First of all, I have to disappoint you: this won't work with Kernel-2.6 (yet)!

My configuration:

  • kernel-2.4.26-gentoo-r2
  • i2c-2.8.4
  • lm-sensors-2.8.6
  • gcc-3.3.3-r6
  • glibc-2.3.3.20040420

[edit] Let's Get Started

First, you need to remove all i2c support from your kernel:

cd /usr/src/linux
make menuconfig

Go to: Character devices/I2C support/ Disable everything! Then delete the i2c modules:

rm -fr /lib/modules/`uname -r`/kernel/drivers/i2c/*

Also unmerge all versions of i2c and lm-sensors:

emerge -C i2c lm-sensors

Then go to the correct directories in the portage and install the newest versions. It is very import to do it this way, just emerging i2c and lm-sensors will not install the newest versions though ebuilds for newer versions do exist: I don't know why!

First, emerge i2c:

cd /usr/portage/sys-apps/i2c
emerge i2c-2.8.4.ebuild

Then do:

modules-update

Then emerge lm-sensors:

cd /usr/portage/sys-apps/lm-sensors
emerge lm-sensors-2.8.6.ebuild

Then:

modules-update

Ok, it should have installed with no problems. Now go to the "Monitor" Section in your /etc/X11/XF86Config and add these Modelines:

ModeLine "640x480PAL"   29.50       640  675  678  944  480  530  535  625
ModeLine "800x600PAL"   36.00       800  818  820  960  600  653  655  750

then search for the "Display" Subsection, and add:

Modes       "800x600PAL"

Save the file as /etc/X11/XF86Config.TV

Now create a file you use to start your TV-Out:

File: /bin/startv
 #!/bin/bash
 # -Craig-'s TV enable script for Voodoo3 3000 AGP
 # 04-06-25
 
 removemods()
 {
 rmmod i2c-voodoo3 >/dev/null 2>/dev/null
 rmmod bt869 >/dev/null 2>/dev/null
 rmmod i2c-algo-biths >/dev/null 2>/dev/null
 rmmod i2c-algo-bit >/dev/null 2>/dev/null
 rmmod i2c-proc >/dev/null 2>/dev/null
 rmmod i2c-dev >/dev/null 2>/dev/null
 rmmod i2c-core >/dev/null 2>/dev/null
 }
 
 removemods
 
 if [ ! -e /lib/modules/`uname -r`/kernel/drivers/i2c ]
 then
 echo "[ ] /lib/modules/`uname -r`/kernel/drivers/i2c does not exist."
 exit -1
 else
 echo "[*] using /lib/modules/`uname -r`/kernel/drivers/i2c"
 fi
 
 cd /lib/modules/`uname -r`/kernel/drivers/i2c
 
 echo "    loading modules:"
 for i in i2c-core.o i2c-dev.o i2c-proc.o i2c-algo-bit.o i2c-algo-biths.o
 do
 if [ ! -e $i ]
 then
  echo "    $i missing."
  removemods
  exit -1
 else
  echo -n "    $i found, loading..."
 
  if insmod $i
  then
   echo ok
  else
   echo failed
   exit -2
  fi
 
 fi
 done
 
 if [ ! -e ./chips/bt869.o ]
 then
 echo "[ ] /lib/modules/`uname -r`/kernel/drivers/i2c/chips/bt869.o missing."
 removemods
 exit -1
 else
 echo -n "[*] bt869.o found, loading..."
 cd chips
 if insmod bt869.o
 then
  echo ok
 else
  echo failed
  removemods
  exit -2
 fi
 fi
 
 if [ ! -e ../busses/i2c-voodoo3.o ]
 then
 echo "[ ] /lib/modules/`uname -r`/kernel/drivers/i2c/busses/i2c-voodoo3.o missing."
 removemods
 exit -1
 else
 echo -n "[*] i2c-voodoo3.o found, loading..."
 cd ../busses
 
 if insmod i2c-voodoo3.o
 then
  echo ok
 else
  echo failed
  removemods
  exit -1
 fi
 
 fi
 
 echo -n "    using proc interface..."
 
 if [ -e /proc/sys/dev/sensors/bt869-i2c-0-44/ntsc ] && [ -e /proc/sys/dev/sensors/bt869-i2c-0-44/res ]
 then
 echo 0 > /proc/sys/dev/sensors/bt869-i2c-0-44/ntsc
 echo "800 600" > /proc/sys/dev/sensors/bt869-i2c-0-44/res
 echo ok
 else
 echo "failed: /proc/sys/dev/sensors/bt869-i2c-0-44 does not exist."
 removemods
 exit -1
 fi

 # X starten:
 cp /etc/X11/XF86Config /etc/X11/XF86Config.backup
 cp /etc/X11/XF86Config.TV /etc/X11/XF86Config
 
 echo
 echo "    ::: starting X server :::"
 
 startx
 cp -f /etc/X11/XF86Config.backup /etc/X11/XF86Config
 
 echo
 removemods

You can save the script as /bin/startv, then you just have to enter startx for normal work oder startv if you want to watch a film on TV. The scripts is quick'n'dirty, I know...I am working on it and will add more error checking in the future!

EDIT: Error checking added to the script! The output of the script looks like:

Code: startv output
 [*] using /lib/modules/2.4.26-gentoo-r2/kernel/drivers/i2c
    loading modules:
    i2c-core.o found, loading...ok
    i2c-dev.o found, loading...ok
    i2c-proc.o found, loading...ok
    i2c-algo-bit.o found, loading...ok
    i2c-algo-biths.o found, loading...ok
 [*] bt869.o found, loading...ok
 [*] i2c-voodoo3.o found, loading...ok
    using proc interface...ok
 
    ::: starting X server :::
 
 This is a pre-release version of XFree86, and is not supported in any
 way.  Bugs may be reported to XFree86@XFree86.Org and patches submitted
 to fixes@XFree86.Org.  Before reporting bugs in pre-release versions,
 please check the latest version in the XFree86 CVS repository
 (http://www.XFree86.Org/cvs).
 
 XFree86 Version 4.3.0.1
 Release Date: 15 August 2003
 X Protocol Version 11, Revision 0, Release 6.6
 Build Operating System: Linux 2.4.26-gentoo-r2 i686 [ELF]
 Build Date: 22 June 2004
        Before reporting problems, check http://www.XFree86.Org/
        to make sure that you have the latest version.
 Module Loader present
 Markers: (--) probed, (**) from config file, (==) default setting,
         (++) from command line, (!!) notice, (II) informational,
         (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
 (==) Log file: "/var/log/XFree86.0.log", Time: Fri Jun 25 14:09:35 2004
 (==) Using config file: "/etc/X11/XF86Config"
 Using vt 7
 BScreen::BScreen: managing screen 0 using visual 0x23, depth 24

[edit] Finding the /sys entry

This is taken from http://www.realh.co.uk/linux_tv_howto/ar01s07.html (works on both 2.4 and 2.6 kernels)

if `uname -r | grep -q 2.6` ; then
    DEVDIR=/sys/devices/
else
    DEVDIR=/proc/sys/dev/sensors/
fi
DEVDIR="$(dirname $(find $DEVDIR -name svideo))"
echo 800 600 > $DEVDIR/res
echo 24 > $DEVDIR/depth
echo 1 > $DEVDIR/svideo
Personal tools