gjdwebserver-overlay/app-mobilephone/pinephone-meta/files/pinephone-suspend-hook.sh

60 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# PinePhone suspend / wakeup modem
# /usr/lib/systemd/system-sleep/pinephone-modem-suspend.sh
# DTR is:
# - PL6/GPIO358 on BH (1.1)
# - PB2/GPIO34 on CE (1.2)
# AP_READY is:
# - PL2/GPIO354 on BH (1.1)
# - PH7/GPIO231 on CE (1.2)
LOGFILE=/var/log/pp-suspend.log
if grep -q 1.1 /proc/device-tree/model
then
DTR=358
AP_READY=354
else
DTR=34
AP_READY=231
fi
if [ ! -f ${LOGFILE} ]; then
touch ${LOGFILE}
fi
prepare_suspend() {
# Enable URC caching
echo -ne 'AT+QCFG="urc/cache",1\r' > /dev/ttyS2
# Put modem in power saving mode
# Note: GPIO231 is WAKEUP_IN on BH and AP_READY on CE
# - BH: WAKEUP_IN must be high to enable power saving mode
# - CE: AP_READY (active low) must be high to indicate host sleep
# In both cases DTR (GPIO358) must be high to enable power saving mode
NOW=`date`
echo "$NOW Entering suspend" >> ${LOGFILE}
echo 1 > /sys/class/gpio/gpio${AP_READY}/value
echo 1 > /sys/class/gpio/gpio${DTR}/value
echo -ne 'AT+QSCLK=1\r' > /dev/ttyS2
}
resume_all() {
# Wake up modem
echo -ne 'AT+QSCLK=0\r' > /dev/ttyS2
echo 0 > /sys/class/gpio/gpio${AP_READY}/value
echo 0 > /sys/class/gpio/gpio${DTR}/value
NOW=`date`
echo "$NOW Exiting suspend" >> ${LOGFILE}
# Disable URC caching
echo -ne 'AT+QCFG="urc/cache",0\r' > /dev/ttyS2
}
case $1 in
pre) prepare_suspend ;;
post) resume_all ;;
esac