meta-digi/meta-digi-dey/recipes-core/busybox/busybox/ccimx9/standby-actions

91 lines
2.6 KiB
Bash

#!/bin/sh
#===============================================================================
#
# standby-actions
#
# Copyright (C) 2023, 2024 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
#
#===============================================================================
RESUME_FILE="/tmp/resume_actions"
RESUME_ACTIONS=""
wifi_actions_needed() {
[ -d "/proc/device-tree/wireless" ] && [ ! -e "/sys/firmware/devicetree/base/soc@0/bus@42800000/mmc@428b0000/keep-power-in-suspend" ]
}
bt_actions_needed() {
systemctl -q is-active bluetooth-init && [ ! -e "/sys/firmware/devicetree/base/soc@0/bus@42800000/mmc@428b0000/keep-power-in-suspend" ]
}
if [ "${1}" = "pre" ]; then
rm -f "${RESUME_FILE}"
# Stop NetworkManager before suspend
systemctl stop NetworkManager
if bt_actions_needed; then
# bluetooth service relies on bluetooth-init service so
# stop it unconditionally
systemctl stop bluetooth-init
systemctl stop bluetooth
# Program the resume actions to start the services
RESUME_ACTIONS_BT="systemctl start bluetooth-init; systemctl start bluetooth;"
fi
if wifi_actions_needed; then
RESUME_ACTIONS_WIFI=""
for iface in wlan0 uap0 wfd0; do
if grep -qs ${iface} /var/run/ifstate; then
# Bring the interface down
ifdown ${iface}
# Program the resume action to bring it up
# (prepend to use reverse order)
RESUME_ACTIONS_WIFI="ifup ${iface};${RESUME_ACTIONS_WIFI}"
fi
done
# Unload Wi-Fi modules
modprobe -r moal
# Program the resume action to reload the modules
# (prepend to use reverse order)
RESUME_ACTIONS_WIFI="/etc/udev/scripts/load_iw612.sh;${RESUME_ACTIONS_WIFI}"
fi
# Compound resume actions (enable BT first, or else add a sleep, to give
# some time to the system to be ready to load the Wi-Fi)
if [ -n "${RESUME_ACTIONS_BT}" ]; then
RESUME_ACTIONS="${RESUME_ACTIONS_BT}"
fi
if [ -n "${RESUME_ACTIONS_WIFI}" ]; then
if [ -z "${RESUME_ACTIONS_BT}" ]; then
RESUME_ACTIONS="sleep 0.5;"
fi
RESUME_ACTIONS="${RESUME_ACTIONS}${RESUME_ACTIONS_WIFI}"
fi
if [ -n "${RESUME_ACTIONS}" ]; then
# Create temp file with resume actions
echo "${RESUME_ACTIONS}" > "${RESUME_FILE}"
chmod +x "${RESUME_FILE}"
fi
elif [ "${1}" = "post" ]; then
if [ -f "${RESUME_FILE}" ]; then
eval "${RESUME_FILE}"
# Clean-up
rm -f "${RESUME_FILE}"
fi
# Resume NetworkManager after suspend
systemctl start NetworkManager
fi