#!/system/bin/sh

# PowerVR SGX DDK for Embedded Linux - installation script
#
# Copyright	2004-2006 by Imagination Technologies Limited.
#				All rights reserved.  No part of this software, either
#				material or conceptual may be copied or distributed,
#				transmitted, transcribed, stored in a retrieval system
#				or translated into any human or computer language in any
#				form by any means, electronic, mechanical, manual or
#				other-wise, or disclosed to third parties without the
#				express written permission of Imagination Technologies
#				Limited, Unit 8, HomePark Industrial Estate,
#				King's Langley, Hertfordshire, WD4 8LZ, U.K.

# Auto-generated for omap4430_android from embedded.pj 1.6.16.4061
#

load_pvr()
{
	
	insmod /pvrsrvkm.ko
	insmod /omaplfb.ko
	insmod /bc_example.ko
	sleep 1
	chmod 0666 /dev/pvrsrvkm
	chmod 0666 /dev/bc_example
	pvrsrvinit
	echo "Loaded PowerVR consumer services."
	return 0;
}

unload_pvr()
{
if rmmod omaplfb; then :; else return 1; fi
if rmmod pvrsrvkm; then :; else return 1; fi
	echo "Unloaded PowerVR consumer services."
	return 0;
}

# Deal with the type of invocation we get.
#
case "$1" in
"start")
	load_pvr
	;;
stop)
	if ! unload_pvr; then
		echo "Couldn't unload modules" >&2;
	fi
	;;
reload|restart)
	if unload_pvr; then
		load_pvr
	else
		echo "Couldn't unload modules" >&2;
	fi
	;;
*)
	echo "$0: unknown argument $1." >&2;
	;;
esac

