summaryrefslogtreecommitdiff
path: root/recipes-kernel/rs9113/files/rs9113/rs9113.init
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/rs9113/files/rs9113/rs9113.init')
-rwxr-xr-xrecipes-kernel/rs9113/files/rs9113/rs9113.init96
1 files changed, 64 insertions, 32 deletions
diff --git a/recipes-kernel/rs9113/files/rs9113/rs9113.init b/recipes-kernel/rs9113/files/rs9113/rs9113.init
index 4ef6f4b..6adeb5a 100755
--- a/recipes-kernel/rs9113/files/rs9113/rs9113.init
+++ b/recipes-kernel/rs9113/files/rs9113/rs9113.init
@@ -21,41 +21,70 @@ RS9113_WKUP=${MTS_IODIR}/wifi-bt-lpwkup
. $CONFIG
+pid=$$
+LOG_ERR=3
+LOG_INFO=6
+name=rs9113
+format="%s[%d] %12.2fs: %s"
+
+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 rs9113_reset {
+ for i in {1..5} ; do
+ if [[ -f $RS9113_RESET ]] ; then
+ break
+ fi
+ done
+
+ # Reset the RS9113 chip is ready, and
+ # wait for it to settle.
+ for i in {1..5} ; do
+ if [[ -f $RS9113_RESET ]] ; then
+ echo 0 >$RS9113_RESET
+ usleep $SLEEPTIME
+ echo 1 >$RS9113_RESET
+ else
+ # No WiFi BT, so exit quietly
+ exit 0
+ fi
+ syslog $LOG_INFO "After reset $i complete"
+ for j in {0..250} ; do
+ if /usr/bin/lsusb -d 1618:9113 ; then
+ syslog $LOG_INFO "lsusb found 1618:9113 after reset $i"
+ break 2
+ fi
+ usleep 100000
+ done
+ if ((i > 1)) ; then
+ syslog $LOG_ERR "RS9113 not found after $i resets"
+ /usr/bin/lsusb | logpipe $LOG_ERR
+ fi
+ done
+}
+
case "$1" in
start)
if ((RS9113_LOAD == 0)) ; then
# We don't want the driver loaded.
exit 0
fi
- # Reset the RS9113 chip is ready, and
- # wait for it to settle.
- if [ -f "$RS9113_RESET" ] ; then
- echo 1 >$RS9113_RESET
- usleep $SLEEPTIME
- echo 0 >$RS9113_RESET
- usleep $SLEEPTIME
- echo 1 >$RS9113_RESET
- N=1
- while [ $N -lt 20 ] ; do
- INT=$(cat $RS9113_INT)
- WKUP=$(cat $RS9113_WKUP)
- if [ $INT -ne 1 -o $WKUP -ne 1 ] ; then
- usleep $INTSLEEPTIME
- else
- break
- fi
- done
- if [ $INT -ne 1 ] ; then
- logger -t rs9113 -p error -s "$RS9113_INT is $INT"
- fi
- if [ $WKUP -ne 1 ] ; then
- logger -t rs9113 -p error -s "$RS9113_WKUP is $WKUP"
- fi
- else
- # No WiFi BT, so exit quietly
- exit 0
- fi
- /usr/bin/logger -t "rs9113" -p info -s "Loading rs9113 modules with COEX=$COEX_MODE and Country=$SET_COUNTRY_CODE"
+ rs9113_reset
+ syslog $LOG_INFO "Loading rs9113 modules with COEX=$COEX_MODE and Country=$SET_COUNTRY_CODE"
/usr/sbin/rs9113_load_modules.sh $CONFIG
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
@@ -66,7 +95,7 @@ case "$1" in
;;
stop)
- /usr/bin/logger -t "rs9113" -p info -s "Unloading rs9113 modules"
+ syslog $LOG_INFO "Unloading rs9113 modules"
/usr/sbin/rs9113_remove_modules.sh
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
@@ -79,7 +108,7 @@ case "$1" in
$0 stop
sleep 1
$0 start
- ;;
+ ;;
status)
for dir in /sys/class/net/rpine[0-9]* ; do
if [[ -d ${dir} ]] ; then
@@ -90,8 +119,11 @@ case "$1" in
echo Driver is not loaded
exit 3
;;
+ reset)
+ rs9113_reset
+ ;;
*)
- "Usage: $0 {start|stop|status|restart}"
+ echo "Usage: $0 {start|stop|status|restart|reset}"
exit 2
;;
esac