diff options
Diffstat (limited to 'recipes-kernel/rs9113/files/rs9113/rs9113.init')
-rwxr-xr-x | recipes-kernel/rs9113/files/rs9113/rs9113.init | 96 |
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 |