From b93e7a6eeb3b9db0a211bcc8eaf406063040c069 Mon Sep 17 00:00:00 2001 From: John Klug Date: Tue, 20 Sep 2016 18:08:47 -0500 Subject: Bring mts-io.init up to speed and fix radio reset --- recipes-bsp/multitech/mts-io/mts-io.init | 135 ++++++++++++++++++++++++++++--- 1 file changed, 122 insertions(+), 13 deletions(-) diff --git a/recipes-bsp/multitech/mts-io/mts-io.init b/recipes-bsp/multitech/mts-io/mts-io.init index f27415c..03bb5b0 100644 --- a/recipes-bsp/multitech/mts-io/mts-io.init +++ b/recipes-bsp/multitech/mts-io/mts-io.init @@ -1,15 +1,88 @@ #!/bin/bash +### BEGIN INIT INFO +# Provides: mts-io +# Default-Start: S +# Default-Stop: +# Short-Description: load the mts-io driver +# Description: mts-io driver initializes the Conduit hardware and +# provides user mode access through the driver to the +# Conduit features. +### END INIT INFO + +((fail=0)) sysdir=/sys/devices/platform/mts-io +gpiodir=/sys/class/gpio + +USBRST=${sysdir}/usbhub-reset + +RST[0]="${sysdir}/mtq-reset" +RST[1]="${sysdir}/ap1-reset" +RST[2]="${sysdir}/ap2-reset" +RST[3]="${sysdir}/gnss-reset" +RST[4]="${sysdir}/secure-reset" +RST[5]="${sysdir}/eth-reset" +RS9113RST="${sysdir}/wifi-bt-reset" + +USLPTIME=30000 # 30 milliseconds from Redpine Signals Reset Spec +WAIT="/bin/busybox usleep ${USLPTIME}" +reset_path() { + pin=$1 + /usr/bin/logger -t "mts-io" -p info Reset $pin + + if [[ -f ${pin} ]] ; then + if ! ( (echo 1 >${pin}) && (echo 0 >${pin}) && ${WAIT} && (echo 1 >${pin}) ) ; then + /usr/bin/logger -t "mts-io" -p error -s "Failed write to ${pin}" + fi + else + /usr/bin/logger -t "mts-io" -p error -s "${pin} does not exist" + return 1 + fi + return 0 +} +reset_array() { + ((i=${#RST[@]}-1)) + while ((i>=0)) ; do + if [[ -f ${RST[$i]} ]] ; then + if ! ( (echo 1 >${RST[i]}) ) ; then + /usr/bin/logger -t "mts-io" -p error -s "Failed write to ${RST[$i]}" + fi + else + /usr/bin/logger -t "mts-io" -p info -s "${RST[$i]} does not exist" + RST[$i]="" + fi + ((i--)) + done + while ((i>0)) ; do + if ((${#RST[$i] > 0)) && [[ -f ${RST[$i]} ]] ; then + if ! ( (echo 0 >${RST[i]}) ) ; then + /usr/bin/logger -t "mts-io" -p error -s "Failed write to ${RST[$i]}" + fi + else + /usr/bin/logger -t "mts-io" -p info -s "${RST[$i]} does not exist" + fi + done + ${WAIT} + while ((i>0)) ; do + if ((${#RST[$i] > 0)) && [[ -f ${RST[$i]} ]] ; then + if ! ( (echo 1 >${RST[i]}) ) ; then + /usr/bin/logger -t "mts-io" -p error -s "Failed write to ${RST[$i]}" + fi + else + /usr/bin/logger -t "mts-io" -p info -s "${RST[$i]} does not exist" + fi + done +} read_card_info() { ap1_product_id="" ap2_product_id="" + mts_hw_version="" - if [ -d $sysdir/ap1 ]; then + if [[ -d $sysdir/ap1 ]]; then ap1_product_id=$(cat $sysdir/ap1/product-id) fi - if [ -d $sysdir/ap2 ]; then + if [[ -d $sysdir/ap2 ]]; then ap2_product_id=$(cat $sysdir/ap2/product-id) fi } @@ -17,18 +90,18 @@ read_card_info() { mfser_init() { found_ap1=0 - if [[ "$ap1_product_id" =~ ^MTAC-MFSER- ]]; then - echo "mts-io: Linking /dev/mfser to /dev/ttyAP1" + if [[ $ap1_product_id =~ ^MTAC-MFSER- ]]; then + /usr/bin/logger -t "mts-io" -p info -s "Linking /dev/mfser to /dev/ttyAP1" ln -sf /dev/ttyAP1 /dev/mfser found_ap1=1 fi - if [[ "$ap2_product_id" =~ ^MTAC-MFSER- ]]; then + if [[ $ap2_product_id =~ ^MTAC-MFSER- ]]; then if [[ $found_ap1 = 1 ]]; then - echo "mts-io: Linking /dev/mfser-2 to /dev/ttyAP2" + /usr/bin/logger -t "mts-io" -p info -s "Linking /dev/mfser-2 to /dev/ttyAP2" ln -sf /dev/ttyAP2 /dev/mfser-2 else - echo "mts-io: Linking /dev/mfser to /dev/ttyAP2" + /usr/bin/logger -t "mts-io" -p info -s "Linking /dev/mfser to /dev/ttyAP2" ln -sf /dev/ttyAP2 /dev/mfser fi fi @@ -37,21 +110,57 @@ mfser_init() { case $1 in start) - echo "Loading mts-io module" - modprobe mts_io + /usr/bin/logger -t "mts-io" -p info -s "Loading mts-io module" + if ! modprobe mts_io ; then + ((fail++)) + fi read_card_info + if ! reset_path $USBRST ; then + ((fail++)) + fi + /bin/busybox usleep 100000 + reset_array + mts-io-sysfs store radio-reset 0 mfser_init + if ! reset_path $RS9113RST ; then + ((fail++)) + fi + + if ((fail == 0)) ; then + echo "OK" + else + echo "FAIL" + fi + exit $fail ;; stop) - echo "Unloading mts-io module" + /usr/bin/logger -t "mts-io" -p info -s "Unloading mts-io module" modprobe -r mts_io + RETVAL=$? + if ((RETVAL == 0)) ; then + echo "OK" + else + echo "FAIL" + fi ;; - + restart) + $0 stop + sleep 1 + $0 start + ;; + status) + if [[ -d ${sysdir} ]] ; then + echo Driver is loaded + exit 0 + else + echo Driver is not loaded + exit 3 + fi + ;; *) - echo "Usage: $0 {start|stop}" + echo "Usage: $0 {start|stop|status|restart}" exit 2 ;; esac - -- cgit v1.2.3