#!/bin/sh #=============================================================================== # # standby-actions # # Copyright (C) 2019 by Digi International Inc. # All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 as published by # the Free Software Foundation. # # # !Description: manage interfaces before suspending and after resuming from # suspend # #=============================================================================== if [ "${1}" == "pre" ]; then # Stop NetworkManager before suspend systemctl stop NetworkManager # Suspend wireless interfaces if [ -d "/proc/device-tree/wireless" ]; then for i in $(sed -ne 's,^\(wlan[0-9]\)=.*,\1,g;T;p' /var/run/ifstate | sort -r); do ifdown "${i}" && RESUME_IFACES="${RESUME_IFACES:+${RESUME_IFACES} }${i}" done echo ${RESUME_IFACES} > /tmp/suspend_wlan_ifaces [ -e /sys/module/ath6kl_sdio ] && rmmod ath6kl_sdio ath6kl_core && echo "301" > /tmp/suspend_wlan_device_id [ -e /sys/module/wlan ] && rmmod wlan && echo "50A" > /tmp/suspend_wlan_device_id fi # Suspend bluetooth interface if [ -d "/proc/device-tree/bluetooth" ]; then hciconfig hci0 2>&1 | grep -qs UP && touch /tmp/up_bt_on_resume systemctl stop bluetooth systemctl stop bluetooth-init fi # Configure Power LED for blinking in standby if [ -d "/sys/class/leds/power:green" ]; then # Configure LED for blinking echo timer > /sys/class/leds/power\:green/trigger # Turn LED on at max brightness echo 19 > /sys/class/leds/power\:green/brightness # Configure blinking timings echo 100 > /sys/class/leds/power\:green/delay_on echo 1000 > /sys/class/leds/power\:green/delay_off fi elif [ "${1}" == "post" ]; then # Resume wireless interfaces if [ -d "/proc/device-tree/wireless" ]; then # Trigger wireless module loading event, and wait until the interface exists udevadm trigger --action=add --attr-match="modalias=pci:v0000168Cd0000003Esv*sd*bc*sc*i*" udevadm trigger --action=add --attr-match="modalias=sdio:c00v0271d0$(cat /tmp/suspend_wlan_device_id)" rm -rf /tmp/suspend_wlan_driver timeout 5 sh -c "while [ ! -d /sys/class/net/wlan0 ]; do sleep .2; done" 2>/dev/null # Bring up the interfaces that were brought down on suspend for i in $(cat /tmp/suspend_wlan_ifaces | tr ' ' '\n' | sort); do grep -qs "^${i}" /var/run/ifstate || ifup "${i}" done rm -f /tmp/suspend_wlan_ifaces fi # Resume NetworkManager after suspend systemctl start NetworkManager # Resume bluetooth interface if [ -d "/proc/device-tree/bluetooth" ]; then if [ -e "/tmp/up_bt_on_resume" ]; then systemctl start bluetooth-init systemctl start bluetooth rm -f /tmp/up_bt_on_resume fi fi # Configure Power LED solid on after resume if [ -d "/sys/class/leds/power:green" ]; then # Reset LED settings by writing 0 to brigtness descriptor echo 0 > /sys/class/leds/power\:green/brightness # Turn LED on at max brightness echo 19 > /sys/class/leds/power\:green/brightness fi fi