113 lines
3.2 KiB
Plaintext
113 lines
3.2 KiB
Plaintext
|
|
#!/bin/sh
|
||
|
|
|
||
|
|
# disable processing of 90chvt and 99video.
|
||
|
|
# s2ram and s2disk handle all this stuff internally.
|
||
|
|
uswsusp_hooks()
|
||
|
|
{
|
||
|
|
disablehook 99video "disabled by uswsusp"
|
||
|
|
}
|
||
|
|
|
||
|
|
# Since we disabled 99video, we need to take responsibility for proper
|
||
|
|
# quirk handling. s2ram handles all common video quirks internally,
|
||
|
|
# so all we have to do is translate the HAL standard options to s2ram options.
|
||
|
|
uswsusp_get_quirks()
|
||
|
|
{
|
||
|
|
OPTS=""
|
||
|
|
ACPI_SLEEP=0
|
||
|
|
for opt in $PM_CMDLINE; do
|
||
|
|
case "${opt##--quirk-}" in # just quirks, please
|
||
|
|
dpms-on) ;; # no-op
|
||
|
|
dpms-suspend) ;; # no-op
|
||
|
|
radeon-off) OPTS="$OPTS --radeontool" ;;
|
||
|
|
reset-brightness) ;; # no-op
|
||
|
|
s3-bios) ACPI_SLEEP=$(($ACPI_SLEEP + 1)) ;;
|
||
|
|
s3-mode) ACPI_SLEEP=$(($ACPI_SLEEP + 2)) ;;
|
||
|
|
vbe-post) OPTS="$OPTS --vbe_post" ;;
|
||
|
|
vbemode-restore) OPTS="$OPTS --vbe_mode" ;;
|
||
|
|
vbestate-restore) OPTS="$OPTS --vbe_save" ;;
|
||
|
|
vga-mode-3) ;; # no-op
|
||
|
|
save-pci) OPTS="$OPTS --pci_save" ;;
|
||
|
|
none) QUIRK_NONE="true" ;;
|
||
|
|
*) continue ;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
[ $ACPI_SLEEP -ne 0 ] && OPTS="$OPTS --acpi_sleep $ACPI_SLEEP"
|
||
|
|
# if we were told to ignore quirks, do so.
|
||
|
|
# This is arguably not the best way to do things, but...
|
||
|
|
[ "$QUIRK_NONE" = "true" ] && OPTS=""
|
||
|
|
}
|
||
|
|
|
||
|
|
# Since we disabled 99video, we also need to handle displaying
|
||
|
|
# help info for the quirks we handle.
|
||
|
|
uswsusp_help()
|
||
|
|
{
|
||
|
|
echo # first echo makes it look nicer.
|
||
|
|
echo "s2ram video quirk handler options:"
|
||
|
|
echo
|
||
|
|
echo " --quirk-radeon-off"
|
||
|
|
echo " --quirk-s3-bios"
|
||
|
|
echo " --quirk-s3-mode"
|
||
|
|
echo " --quirk-vbe-post"
|
||
|
|
echo " --quirk-vbemode-restore"
|
||
|
|
echo " --quirk-vbestate-restore"
|
||
|
|
echo " --quirk-save-pci"
|
||
|
|
echo " --quirk-none"
|
||
|
|
}
|
||
|
|
|
||
|
|
# This idiom is used for all sleep methods. Only declare the actual
|
||
|
|
# do_ method if:
|
||
|
|
# 1: some other sleep module has not already done so, and
|
||
|
|
# 2: this sleep method can actually work on this system.
|
||
|
|
#
|
||
|
|
# For suspend, if SUSPEND_MODULE is set then something else has already
|
||
|
|
# implemented do_suspend. We could just check to see of do_suspend was
|
||
|
|
# already declared using command_exists, but using a dedicated environment
|
||
|
|
# variable makes it easier to debug when we have to know what sleep module
|
||
|
|
# ended up claiming ownership of a given sleep method.
|
||
|
|
if [ -z "$SUSPEND_MODULE" ] && command_exists s2ram && \
|
||
|
|
( grep -q mem /sys/power/state || \
|
||
|
|
( [ -c /dev/pmu ] && check_suspend_pmu; ); ); then
|
||
|
|
SUSPEND_MODULE="uswsusp"
|
||
|
|
do_suspend()
|
||
|
|
{
|
||
|
|
uswsusp_get_quirks
|
||
|
|
s2ram --force $OPTS
|
||
|
|
}
|
||
|
|
if [ "$METHOD" = "suspend" ]; then
|
||
|
|
add_before_hooks uswsusp_hooks
|
||
|
|
add_module_help uswsusp_help
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -z "$HIBERNATE_MODULE" ] && \
|
||
|
|
[ -f /sys/power/disk ] && \
|
||
|
|
grep -q disk /sys/power/state && \
|
||
|
|
[ -c /dev/snapshot ] &&
|
||
|
|
command_exists s2disk; then
|
||
|
|
HIBERNATE_MODULE="uswsusp"
|
||
|
|
do_hibernate()
|
||
|
|
{
|
||
|
|
if [ -n "$HIBERNATE_MODE" ]; then
|
||
|
|
s2disk -P "shutdown method=$HIBERNATE_MODE"
|
||
|
|
else
|
||
|
|
s2disk
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -z "$SUSPEND_HYBRID_MODULE" ] &&
|
||
|
|
grep -q mem /sys/power/state && \
|
||
|
|
command_exists s2both && \
|
||
|
|
check_hibernate; then
|
||
|
|
SUSPEND_HYBRID_MODULE="uswsusp"
|
||
|
|
do_suspend_hybrid()
|
||
|
|
{
|
||
|
|
uswsusp_get_quirks
|
||
|
|
s2both --force $OPTS
|
||
|
|
}
|
||
|
|
if [ "$METHOD" = "suspend_hybrid" ]; then
|
||
|
|
add_before_hooks uswsusp_hooks
|
||
|
|
add_module_help uswsusp_help
|
||
|
|
fi
|
||
|
|
fi
|