#!/bin/bash # Note that none of the INIT stuff below works in the current open-embedded. ### BEGIN INIT INFO # Provides: rs9116 # Required-Start: mts-io # Default-Start: S # Default-Stop: 0 6 # X-Start-Before: networking # Short-Description: load the rs9116 drivers # Description: rs9116 drivers are used to provide access to Bluetooth # and WiFi. ### END INIT INFO CONFIG=${CONFIG:-/etc/default/rs9113} MTS_IODIR=/sys/devices/platform/mts-io RS9116_RESET=${MTS_IODIR}/wifi-bt-reset [ -f $CONFIG ] || exit 1 . $CONFIG pid=$$ LOG_ERR=3 LOG_INFO=6 name=rs91x format="%s[%d] %12.2fs: %s" function has_reset { for i in {1..10} ; do if [[ -f $RS9116_RESET ]] ; then if [[ -f $RS9116_RESET ]] ; then return 0 fi return 1 fi usleep $SLEEPTIME done return 1 } function syslog { pr=$1 shift [[ $(cat /proc/uptime) =~ ([^[:space:]]+) ]] s=$(printf "${format}" $name $pid ${BASH_REMATCH[1]} "$@") echo "<${pr}>${s}" >/dev/kmsg } function logpipe { OIFS="${IFS}" IFS=$'\n' while read ln ; do syslog $1 $ln done IFS="${OIFS}" } function rs9116_reset { for i in {1..10} ; do if [[ -f $RS9116_RESET ]] ; then break fi usleep 10000 done # Reset the RS9116 chip is ready, and # wait for it to settle. if [[ -f $RS9116_RESET ]] ; then echo 0 >$RS9116_RESET usleep $SLEEPTIME echo 1 >$RS9116_RESET else # No WiFi BT, but return 0 for development return 0 fi } case "$1" in start) if ((RS9113_LOAD == 0)) ; then # We don't want the driver loaded. exit 0 fi rs9116_reset syslog $LOG_INFO "Loading rs91x modules with COEX=$COEX_MODE and Country=$COUNTRY_CODE" /usr/sbin/rs9113_load_modules.sh $CONFIG RETVAL=$? if [ $RETVAL -eq 0 ] ; then echo "OK" else echo "FAIL" fi ;; stop) syslog $LOG_INFO "Unloading rs91x modules" /usr/sbin/rs9113_remove_modules.sh RETVAL=$? if [ $RETVAL -eq 0 ] ; then echo "OK" else echo "FAIL" fi ;; restart) $0 stop sleep 1 $0 start ;; status) for dir in /sys/class/net/rpine[0-9]* ; do if [[ -d ${dir} ]] ; then echo Driver is loaded exit 0 fi done echo Driver is not loaded exit 3 ;; reset) rs9116_reset ;; *) echo "Usage: $0 {start|stop|status|restart|reset}" exit 2 ;; esac exit 0