#!/bin/sh
#

XSERVER=Xfbdev
BINDIR=/usr/bin

if [ -f $BINDIR/Xepson ]; then
  XSERVER=Xepson
fi
if [ -f $BINDIR/Xorg ]; then
  XSERVER=Xorg
fi
if [ -f $BINDIR/Xomap ]; then
  XSERVER=Xomap
fi
if [ -f $BINDIR/Xw100 ]; then
  XSERVER=Xw100
fi
if [ -f $BINDIR/Xvesa ]; then
  XSERVER=Xvesa
fi
if [ -f $BINDIR/Ximageon ]; then
  XSERVER=Ximageon
fi
if [ -f $BINDIR/Xglamo ]; then
  XSERVER=Xglamo
fi

if [ -f /etc/profile ]; then
  . /etc/profile
fi

. /etc/X11/functions

fallback_screen_arg() {
    geom=`fbset | grep geometry`
    w=`echo $geom | awk '{ print $2 }'`
    h=`echo $geom | awk '{ print $3 }'`
    b=`echo $geom | awk '{ print $6 }'`
    echo -n "${w}x${h}x${b}"
}

SCREEN_SIZE=`fallback_screen_arg`
export USER=root
export XSERVER_DEFAULT_ORIENTATION=normal

INPUT_EXTRA_ARGS="+iglx"
ARGS="-br -pn -nolisten tcp $INPUT_EXTRA_ARGS"
DPI="100"
MOUSE=""
KDRIVEARGS=""

# use ucb 1x00 touchscreen if present
if [ -z "$TSLIB_TSDEVICE" ] && [ -e /dev/touchscreen/ucb1x00 ]; then
  MOUSE="-mouse /dev/touchscreen/ucb1x00"
fi

# kdrive 1.4 onwards needs -mouse args
# Xorg doesn't support "-mouse" option, and uses /dev/input/mice automatically
if [ -e "$TSLIB_TSDEVICE" ] ; then
  MOUSE="-mouse tslib"
else
  if  [ -e /dev/input/mice ] && [ "$XSERVER" != "Xorg" ] ; then
    MOUSE="-mouse mouse"
  fi
fi

if [ -e /etc/default/xserver ] ; then
    . /etc/default/xserver
else
    # start off server in conventional location.
    case `machine_id` in
        "aml_m8050")
            ARGS="$ARGS  -screen 320x240@270"
            DPI="100" ;;
        "hp_ipaq_h3100" | "hp_ipaq_h3800")
            KDRIVEARGS="-rgba vrgb" 
            ARGS="$ARGS -screen 320x240@90"
            DPI="100" ;;
        "hp_ipaq_h3600" | "hp_ipaq_h3700" | "hp_ipaq_h3900")
            KDRIVEARGS="-rgba vrgb"
            ARGS="$ARGS -screen 320x240@270"
            DPI="100" ;;
        "hp_ipaq_h5400" | "hp_ipaq_h2200")
            KDRIVEARGS="-rgba rgb"
            DPI="100" ;;
        "hp_ipaq_hx4700")
            DPI="200" ;;
        "ramses")
            # What is this "vt2" in aid of?
            KDRIVEARGS="-rgba vrgb"
            ARGS="$ARGS -screen 320x240@90 vt2"
            DPI="100" ;;
        *poodle)
            KDRIVEARGS="-rgba vrgb"
            ARGS="$ARGS -screen 320x240@270"
            DPI="100" ;;
        # both 'Sharp-Collie' and just 'Collie' have been reported
        *collie)
            KDRIVEARGS="-rgba vrgb"
            ARGS="$ARGS -screen 320x240@270"
            DPI="100" ;;
        "sharp_shepherd" | "sharp_husky" | "sharp_corgi")
            KDRIVEARGS="-rgba rgb"
            DPI="200" ;;
        "sharp_spitz" | "sharp_akita" | "sharp_borzoi")
            export XSERVER_DEFAULT_ORIENTATION="normal"
            KDRIVEARGS="-rgba vrgb"
            ARGS="$ARGS -screen 480x640"
            DPI="200" ;;
        "simpad")
            KDRIVEARGS="-rgba rgb"
            DPI="100" ;;
        "generic_omap1510/1610/1710")
            MOUSE="-mouse /dev/input/event0"
            DPI="220" ;;
        "ti-osk")
            DPI="100" ;;
        "cellon_c8000_board")
            ARGS="$ARGS -screen ${SCREEN_SIZE},10,1"
            DPI="100" ;;
        "htc_magician")
            DPI="142" ;;
        "htc_universal")
            ARGS="$ARGS -screen 480x640@270"
            DPI="100" ;;
        "htc_tornado")
            ARGS="$ARGS -hide-cursor"
            DPI="100" ;;
        "herring")
            DPI="235"
            ARGS="$ARGS -dpi ${DPI} -nocursor";;
        "mahimahi")
            DPI="254"
            ARGS="$ARGS -dpi ${DPI}";;
        "generic_omap1510/1610/1710")
            ARGS="$ARGS -screen ${SCREEN_SIZE}"
            DPI="225" ;;
        "nokia_n800" | "nokia_rx-44" | "nokia_n770")
            ARGS="$ARGS -screen ${SCREEN_SIZE}"
            DPI="225" ;;
        "nokia_rx-51_board" )                                     
            DPI="267"                                    
            if [ "$XSERVER" != "Xorg" ] ; then                    
                ARGS="$ARGS -screen ${SCREEN_SIZE}"               
            else                                                  
                ARGS="$ARGS -dpi ${DPI} -nocursor"       
            fi ;;                                                    
        "gta01" )
            DPI="280"
            if [ "$XSERVER" != "Xorg" ] ; then
                ARGS="$ARGS -screen 480x640"
            else
                ARGS="$ARGS -dpi ${DPI} -nocursor"
            fi
            ;;
        "gta02")
            DPI="280"
            if [ "$XSERVER" != "Xorg" ] ; then
                ARGS="$ARGS -screen ${SCREEN_SIZE}"
            else
                ARGS="$ARGS -dpi ${DPI} -nocursor"
            fi
            ;;
        "gta04")
            DPI="280"
            if [ "$XSERVER" != "Xorg" ] ; then
                ARGS="$ARGS -screen ${SCREEN_SIZE}"
            else
                ARGS="$ARGS -dpi ${DPI} -nocursor"
            fi
            ;;
        "tuna")
            DPI="316"
            if [ "$XSERVER" != "Xorg" ] ; then
                ARGS="$ARGS -screen ${SCREEN_SIZE}"
            else
                ARGS="$ARGS -dpi ${DPI} -nocursor"
            fi
            ;;
        "motorola_ezx_platform")
            ARGS="$ARGS -screen 240x320"
            DPI="170" ;;
        "arm-integratorcp" | "arm-versatile_pb")
            KDRIVEARGS="-rgba vrgb" ;;
        "compulab_cm-x270")
            modprobe mbxfb
            ARGS="$ARGS -fb /dev/fb1" ;;
        "boundary_devices_neon_board")
            ARGS="$ARGS -screen ${SCREEN_SIZE}"
            DPI="100" ;;
        "hoeft&wessel_hw90350")
            ARGS="$ARGS -screen ${SCREEN_SIZE}"
            DPI="100" ;;
        "hoeft&wessel_hw90250")
            ARGS="$ARGS -screen 240x320@90"
            DPI="100" ;;
        "hoeft&wessel_skeye.pad_pos_aka_almex_mobile")
            DPI="100"
            ARGS="$ARGS -screen 640x480@180 -hide-cursor" ;;
        "mini2440")
            ARGS="$ARGS -screen ${SCREEN_SIZE}"
            DPI="100" ;;
        "palm_treo_650")
            DPI="181"
            ARGS="$ARGS -screen 320x320 -hide-cursor" ;;
        "glofiish_m800")
            DPI="285"
            ARGS="$ARGS -screen ${SCREEN_SIZE} -hide-cursor vt1" ;;
        "freescale_mx21ads")
        # That's what /proc/cpuinfo shows as hardware on the chumby
            DPI="121"
            ARGS="$ARGS -screen 320x240 -hide-cursor" ;;
        "telechips_tcc8900_demo_board")
        # This is what we get on a SmartQV7
            DPI="121"
            KDRIVEARGS=" -fb /dev/fb2 -hide-cursor "
            ARGS="$ARGS -screen ${SCREEN_SIZE} " ;;

            # this is to rotate X display properly, tested with display TX09D71VM1CCA
            ronetix*pm9261*  | ronetix*pm9263*)
                 ARGS="$ARGS -screen 240/54x320/81@90x16" ;;
        # This is a fallback for PCs
        "")
            if [ -f $BINDIR/Xvesa ]; then
                ARGS="$ARGS -mode 0x0114"
            else
            # It is a device we do not know about, in which case we force
            # kdrive to use the current framebuffer geometry -- otherwise
            # it will default to trying to achieve 1024x768
            if [ "$XSERVER" != "Xorg" ] ; then
                ARGS="$ARGS -screen ${SCREEN_SIZE}"
            fi
            fi
    esac
fi

if [ "$XSERVER" != "Xorg" ] ; then
    ARGS="$ARGS $MOUSE $KDRIVEARGS"
fi

# let a local script modify the variables                    
if [ -e /etc/X11/xserver-system ] ; then                    
       . /etc/X11/xserver-system                    
fi                    
