60 lines
1.4 KiB
Bash
Executable File
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
|