diff options
Diffstat (limited to 'recipes-bsp/multitech/mts-io/mts-io')
-rwxr-xr-x | recipes-bsp/multitech/mts-io/mts-io | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/recipes-bsp/multitech/mts-io/mts-io b/recipes-bsp/multitech/mts-io/mts-io new file mode 100755 index 0000000..d33e5f4 --- /dev/null +++ b/recipes-bsp/multitech/mts-io/mts-io @@ -0,0 +1,115 @@ +#!/bin/bash + +. /etc/default/mts-io + +sysdir=/sys/devices/platform/mts-io + +i2c=/sys/bus/i2c/devices/ + +SYSFS="/usr/sbin/mts-io-sysfs" + +setwificap() { + WIFICAP=0 + if [[ -f ${sysdir}/capability/wifi ]] && (($(cat ${sysdir}/capability/wifi) == 1)) ; then + WIFICAP=1 + fi +} + +lora_init() { + # reset lora chip + mts-io-sysfs store lora/reset 1 + mts-io-sysfs store lora/reset 0 + usleep 100000 + mts-io-sysfs store lora/reset 1 +} + +eth_init() { + # reset eth phy + mts-io-sysfs store eth-reset 1 + mts-io-sysfs store eth-reset 0 + usleep 100000 + mts-io-sysfs store eth-reset 1 +} + +# Normal state when powered up +wifi_init1() { + (($WIFICAP)) || return 0 + # reset wlan + mts-io-sysfs store wlan-rst 0 + # disable wlan + mts-io-sysfs store wlan-en 0 +} + +wifi_init2() { + (($WIFICAP)) || return 0 + mts-io-sysfs store wlan-en 1 + usleep 30000 # 30mS according to WILC1000 spec. + mts-io-sysfs store wlan-rst 1 +} + +GNSS_RESET=${sysdir}/gnss-reset +gnss_init() { + set -x + ((GPSGNSSRESET)) || return 0 + USLPTIME=60000 + if [[ -f $GNSS_RESET ]] ; then + echo 0 >$GNSS_RESET + usleep $USLPTIME + echo 1 >$GNSS_RESET + fi +} + + +cell_init() { + # remove /dev/modem_at[0,1] symlinks + rm -f /dev/modem_at[0,1] + + if [ -w /sys/devices/platform/mts-io/radio-power ] ; then + # power down the cellular chip gracefully + mts-io-sysfs store radio-power 0 + # power up the cellular chip + mts-io-sysfs store radio-power 1 + fi +} + +start_lora_led_updater() { + lora-led-updater & +} + +case $1 in + start) + # SPI driver for LoRa + modprobe spidev + # Point the firmware API at our i2c EEPROMs + echo -n ${i2c} > /sys/module/firmware_class/parameters/path + echo "Loading mts-io module" + modprobe -r atmel_mci + # Point the firmware API at our i2c EEPROMs + echo -n ${i2c} > /sys/module/firmware_class/parameters/path + modprobe mts_io + setwificap + wifi_init1 + lora_init + eth_init + cell_init & + start_lora_led_updater + wifi_init2 + gnss_init + modprobe atmel_mci + (($WIFICAP)) && modprobe wilc1000 + (($WIFICAP)) && modprobe wilc1000-sdio + ;; + + stop) + echo "Unloading mts-io module" + wifi_init1 # Power down wifi + modprobe -r wilc1000 >/dev/null 2>&1 + modprobe -r wilc1000-sdio >/dev/null 2>&1 + modprobe -r mts_io >/dev/null 2>&1 + ;; + + *) + echo "Usage: $0 {start|stop}" + exit 2 + ;; +esac |