#!/bin/sh
DESC="WL1251 MAC80211 Wireless LAN driver"
NAME="wl1251"

sysfs_path="/sys/bus/mmc/devices/mmc2:0001/mmc2:0001:1"
ps_rate_threshold=30000
use_fw_ps=Y

if [ -f /etc/pandora/conf/wl1251 ]; then
	. /etc/pandora/conf/wl1251
fi

d_stop() {
	if `grep -q wl1251 /proc/modules` ; then
		ifconfig wlan0 down
		rmmod board_omap3pandora_wifi wl1251_sdio wl1251 2> /dev/null
	fi
}

d_start() {
	wl1251_args=""
	if modinfo wl1251 2> /dev/null | grep -q '\<use_fw_ps\>'; then
		wl1251_args="use_fw_ps=$use_fw_ps"
	fi
	modprobe wl1251 $wl1251_args
	modprobe wl1251_sdio
	# this does not exist on newer kernels
	modprobe board-omap3pandora-wifi 2> /dev/null

	# find our phy index, they change every time driver module is reinserted
	# assume our interface is wlan0
	phy_idx=0
	for a in `seq 20` ; do
		if [ -e /sys/class/net/wlan0 ] ; then
			phy_idx=$(cat /sys/class/net/wlan0/phy80211/index)
			break
		else
			sleep 0.2
		fi
	done

	# restore phy related LED triggers (they come from mac80211.ko)
	if [ -e /sys/class/leds/ ] ; then
		for led in /sys/class/leds/* ; do
			trigger=$(grep "$(basename $led)" /etc/default/leds | grep phy | \
					awk '{print $2}' | sed -e 's/.*phy[0-9]*\(.*\)/\1/')
			if [ "x$trigger" != "x" ] ; then
				echo "phy${phy_idx}$trigger" > "$led/trigger"
			fi
		done
	fi

	# some driver configuration
	if [ -d "$sysfs_path" ]; then
		test -n "$ps_rate_threshold" && echo "$ps_rate_threshold" > $sysfs_path/ps_rate_threshold
		test -n "$long_doze_mode" && echo "$long_doze_mode" > $sysfs_path/long_doze_mode
	fi
}

case "$1" in
  start)
	echo -n "Starting $DESC: $NAME"
	d_start &
	echo "."
	;;
  stop)
	echo -n "Stopping $DESC: $NAME"
	d_stop
	echo "."
	;;
  restart|force-reload)
	echo -n "Restarting $DESC: $NAME"
	d_stop
	sleep 1
	d_start
	echo "."
	;;
  *)
	echo "Usage: $0 {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0
