#
# By Chih-Wei Huang <cwhuang@linux.org.tw>
#
# License: GNU Public License
# We explicitely grant the right to use the scripts
# with Android-x86 project.
#

# An auto detect function provided by kinneko
auto_detect()
{
	tmp=/tmp/dev2mod
	echo 'dev2mod() { while read dev; do case $dev in' > $tmp
	sort -r /lib/modules/`uname -r`/modules.alias | \
		sed -n 's/[()]/*/g; s/^alias  *\([^ ]*\)  *\(.*\)/\1)busybox modprobe \2;;/p' >> $tmp
	echo 'esac; done; }' >> $tmp
	for f in $(grep -Eh "drm_kms|sound.core|hyperv" /lib/modules/`uname -r`/modules.dep | cut -d. -f1); do
		sed -i "/$(basename $f | sed 's/-/_/g')/d" $tmp
	done
	source $tmp
	cat /sys/bus/*/devices/*/uevent | grep MODALIAS | sed 's/^MODALIAS=//' | awk '!seen[$0]++' | dev2mod
	cat /sys/devices/virtual/wmi/*/modalias | dev2mod
}

# Based on Alpine Linux's hwdrivers.initd
auto_detect_alpine()
{
	tmp=/tmp/dev2mod
	echo 'dev2mod() { while read dev; do case $dev in' > $tmp
	sort -r /lib/modules/`uname -r`/modules.alias | \
		sed -n 's/[()]/*/g; s/^alias  *\([^ ]*\)  *\(.*\)/\1)busybox modprobe -b \2;;/p' >> $tmp
	echo 'esac; done; }' >> $tmp
	for f in $(grep -Eh "drm_kms|sound.core|hyperv" /lib/modules/`uname -r`/modules.dep | cut -d. -f1); do
		sed -i "/$(basename $f | sed 's/-/_/g')/d" $tmp
	done
	source $tmp
	find /sys -name modalias -type f -print0 2> /dev/null | xargs -0 sort -u | dev2mod
	# we run it twice so we detect all devices
	find /sys -name modalias -type f -print0 2> /dev/null | xargs -0 sort -u | dev2mod

	# check if framebuffer drivers got pulled in
	#if [ -e /dev/fb0 ] && ! [ -e /sys/module/fbcon ]; then
	#	modprobe -b -q fbcon
	#fi
}

load_modules()
{
	case "$AUTO_LOAD" in
		alpine)
			auto_detect_alpine
		;;
		old)
			auto_detect
		;;
	esac

	# 3G modules
	for m in $EXTMOD; do
		busybox modprobe $m
	done
}
