#!/bin/ash
#set -x

# $1: GPIO Port number
# $2: Pin number within the port
get_gpio_pin() {
	pin=$( expr $1 \* 16 + $2 )
	pin_value=`/usr/local/bin/gpiotool --get-data $pin | grep -c "Pin is High"`
	echo $pin_value
}

get_partner_type() {
	prt_type0=`get_gpio_pin 3 7`
	prt_type1=`get_gpio_pin 3 8`
	prt_type2=`get_gpio_pin 3 9`
	prt_type3=`get_gpio_pin 0 6`

	case `cat /var/run/platform` in
		Carnegie)
			case "$prt_type2$prt_type1$prt_type0" in
				000)
					partner="error"
					;;	
				001)
					partner="Controller"
					;;	
				010)
					partner="IOXM"
					;;	
				111)
					partner="empty"
					;;	
				*)
					partner="unknown"
					;;
			esac
		;;

		Absolut)
			case "$prt_type3$prt_type2$prt_type1$prt_type0" in
				0000)
					partner="error"
					;;	
				0001)
					partner="Controller"
					;;	
				0010)
					partner="IOXM"
					;;	
				0100)
					partner="MFG_IOXM"
					;;	
				1111)
					partner="empty"
					;;	
				*)
					partner="unknown"
					;;
			esac
		;;
		*)
		;;
	esac

	echo $partner > /var/run/partner
}

get_board_revision () {
	revid_0=`get_gpio_pin 3 12`
	revid_1=`get_gpio_pin 3 13`
	revid_2=`get_gpio_pin 3 14`

	case `cat /var/run/platform` in
		Carnegie|Vespa|Helix|Zuma)
			rev=$( expr $revid_2 \* 4 + $revid_1 \* 2 + $revid_0)
			;;
		Absolut)
			rev=$( expr $revid_0 \* 4 + $revid_1 \* 2 + $revid_2)
			;;
		*)
			rev="unknown"
			;;
	esac
	echo $rev > /var/run/boardrev
}

get_slot_position () {

	slot=$(/usr/local/bin/gpiotool 0 10 --get-data | grep -c High)
	# 0: Slot A
	# 1: Slot B
	echo $slot > /var/run/slot
}

apply_board_specific () {
	case `cat /var/run/platform` in
		Carnegie)
			# Delay lower slot SP startup time by 3 seconds - see burt447575
			if /usr/local/bin/gpiotool 0 10 --get-data | grep -q High
			then
				sleep 3
			fi
			;;
		Vespa)
			# Seal the battery. battery library has a dependency on PDK (for psGood)
			ln -sf /usr/local/lib/Vespa-libPAR.so.1.0  /usr/local/lib/libPAR.so.1.0
			/usr/local/bin/batTool seal
			;;
		Helix)
			# Seal the battery. battery library has a dependency on PDK (for psGood)
			ln -sf /usr/local/lib/Helix-libPAR.so.1.0  /usr/local/lib/libPAR.so.1.0
			/usr/local/bin/batTool seal
			;;
		Zuma)
			# Seal the battery. battery library has a dependency on PDK (for psGood)
			ln -sf /usr/local/lib/Zuma-libPAR.so.1.0  /usr/local/lib/libPAR.so.1.0
			/usr/local/bin/batTool seal
			;;
		*)
			;;
	esac
}

case "$1" in

	start|"")

		# Deterime platform type
		platform=`cat /proc/cmdline | sed -e 's/.*platformid=//g'`;
		touch /var/run/$platform
		echo $platform > /var/run/platform	

		# Determine partner type 
		get_partner_type;
		
		# Determine board revision 
		get_board_revision; 
	
		# Determine slot position
		get_slot_position; 
		
		# Do platform specific things
		apply_board_specific;
		;;

	stop)
		;;

	*)

		echo "Usage: local {start|stop}" >&2
		exit 1
		;;

esac
exit 0
