#!/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/init.d/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

ARGS="-br -pn $INPUT_EXTRA_ARGS"
DPI="100"
MOUSE=""

# 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")
		    ARGS="$ARGS -rgba vrgb -screen 320x240@90"
		    DPI="100" ;;
	    "hp_ipaq_h3600" | "hp_ipaq_h3700" | "hp_ipaq_h3900")
		    ARGS="$ARGS -rgba vbgr -screen 320x240@270"
		    DPI="100" ;;
	    "hp_ipaq_h5400" | "hp_ipaq_h2200")
		    ARGS="$ARGS -rgba rgb"
		    DPI="100" ;;
	    "hp_ipaq_hx4700")
		    DPI="200" ;;
	    "ramses")
		    # What is this "vt2" in aid of?
		    ARGS="$ARGS -rgba vrgb -screen 320x240@90 vt2"
		    DPI="100" ;;
	    *poodle)
		    ARGS="$ARGS -rgba vrgb -screen 320x240@270"
		    DPI="100" ;;
	    # both 'Sharp-Collie' and just 'Collie' have been reported
	    *collie)
		    ARGS="$ARGS -rgba vrgb -screen 320x240@270"
		    DPI="100" ;;
	    "sharp_shepherd" | "sharp_husky" | "sharp_corgi")
		    ARGS="$ARGS -rgba rgb"
		    DPI="200" ;;
	    "sharp_spitz" | "sharp_akita" | "sharp_borzoi")
		    export XSERVER_DEFAULT_ORIENTATION="normal"
		    ARGS="$ARGS -rgba rgb -screen 480x640"
		    DPI="200" ;;
	    "simpad")
		    ARGS="$ARGS -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" ;;
	    "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" ;;
	    "gta01" )
		    DPI="285"
		    if [ "$XSERVER" != "Xorg" ] ; then
			    ARGS="$ARGS -screen 480x640"
		    fi
		    ;;
	    "gta02")
		    DPI="285"
		    if [ "$XSERVER" != "Xorg" ] ; then
			    ARGS="$ARGS -screen ${SCREEN_SIZE}"
		    fi
		    ;;
	    "motorola_ezx_platform")
		    ARGS="$ARGS -screen 240x320"
		    DPI="170" ;;
	    "arm-integratorcp" | "arm-versatile_pb")
		    ARGS="$ARGS -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" ;;

            # 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"
fi
