#!/bin/sh
#
# setup tv cards
#
# runlevels: geexbox, debug, install

echo "### Setting up TV card ###"

if ! grep -q -e '0400: 109e:' \
             -e '0480: 1131:' \
             -e ': 14f1:88' \
             /tmp/pci; then
  # No supported TV card found
  exit 1
fi

. /etc/tvcard
[ -f /etc/radio ] && . /etc/radio

test "$TV_CARD" != "AUTO" && CARD="card=$TV_CARD" || CARD=
test "$TV_TUNER" != "AUTO" && TUNER="tuner=$TV_TUNER" || TUNER=
test "$RADIO" = yes && RADIO_OPT="radio=1" || RADIO_OPT=

if grep -q '0400: 109e:' /tmp/pci; then
  # BT8x8 Card
  modprobe bttv $CARD $TUNER $RADIO_OPT >/dev/null 2>&1

  if test "$TV_CARD" = "AUTO" \
       -a -z "`dmesg | grep 'bttv0: detected'`"; then
    # Not autodetected
    test -z "$TUNER" && TUNER="tuner=3"
    rmmod bttv
    modprobe bttv card=1 $TUNER $RADIO_OPT >/dev/null 2>&1
  fi

  echo "TV_WIDTH=768" > /var/tvcard
  echo "TV_HEIGHT=576" >> /var/tvcard
elif grep -q '0480: 1131:' /tmp/pci; then
  # SAA7134 Card
  modprobe saa7134 $CARD $TUNER >/dev/null 2>&1

  echo -n "" > /var/tvcard
elif grep -q ': 14f1:88' /tmp/pci; then
  # Conexant BT881/CX88 Card
  modprobe tveeprom >/dev/null 2>&1
  modprobe cx88xx $CARD $TUNER >/dev/null 2>&1
  modprobe cx8800 >/dev/null 2>&1

  # cx8800 module tries to autodetect/force tuner model according to eeprom.
  # It fails if eeprom is corrupted so force tuner module loading before cx8800
  if test "$TV_CARD" != "AUTO" \
       -a -n "`dmesg | grep 'tveeprom: Encountered bad packet header'`"; then
    rmmod cx8800 cx88xx tuner
    modprobe cx88xx $CARD $TUNER >/dev/null 2>&1
    modprobe tuner >/dev/null 2>&1
    modprobe cx8800 >/dev/null 2>&1
  fi

  echo "TV_WIDTH=768" > /var/tvcard
  echo "TV_HEIGHT=576" >> /var/tvcard

  # CX88 driver reset color values to 0, so need to be forced.
  echo "TV_BRIGHTNESS=50" >> /var/tvcard
  echo "TV_CONTRAST=50" >> /var/tvcard
  echo "TV_HUE=100" >> /var/tvcard
  echo "TV_SATURATION=75" >> /var/tvcard
fi

TVIN_OPT=
if test -n "$TVIN_STANDARD" -a -n "$TVIN_SUB_STANDARD"; then
  TVIN_OPT="$TVIN_STANDARD=$TVIN_SUB_STANDARD"
fi

modprobe tuner $TVIN_OPT >/dev/null 2>&1
modprobe tvaudio >/dev/null 2>&1
modprobe msp3400 >/dev/null 2>&1
modprobe tda7432 >/dev/null 2>&1
modprobe tda9875 >/dev/null 2>&1
modprobe tda9887 $TVIN_OPT >/dev/null 2>&1
modprobe tlv320aic23b >/dev/null 2>&1

exit 0
