blob: 3cd5ce28be99cc32c7e0ad07f7e576213e991052 [file] [log] [blame]
#!/bin/sh
set -e
usage="Usage: $0 [<delay seconds> [(0|90|128|270)]]\n"
err_msgs=
command -v chvt >/dev/null || err_msgs="${err_msgs}"'Need `chvt`\n'
command -v openvt >/dev/null || err_msgs="${err_msgs}"'Need `openvt`\n'
command -v fgconsole >/dev/null || err_msgs="${err_msgs}"'Need `fgconsole`\n'
[ -n "$err_msgs" ] && err_msgs="${err_msgs}"'e.g. install the `kbd` package\n'
[ -x build/gfx_test ] || \
err_msgs="${err_msgs}"'Please run from *libgfxinit* source dir and build `gfx_test` first.\n'
[ "$#" -gt 2 ] && err_msgs="${err_msgs}${usage}"
if [ -n "$err_msgs" ]; then
printf "$err_msgs"
exit 1
fi
if [ "$#" -lt 1 ]; then
# default duration of 5s
set 5
fi
reload_i915=0
prepare_vt() {
# switch VT, we might be in X
orig_vt=`fgconsole`
openvt -s -- true
# poll until the VT switch is done
while [ `fgconsole` -eq $orig_vt ]; do :; done
# take i915 out of charge
for vtcon in /sys/devices/virtual/vtconsole/vtcon*; do
if grep -q frame\ buffer $vtcon/name >/dev/null 2>&1; then
echo 0 >$vtcon/bind
break
fi
done
# try unloading it
if modprobe -r i915 >/dev/null 2>&1; then
reload_i915=1
fi
}
restore_vt() {
# reload i915
if [ $reload_i915 -eq 1 ]; then
modprobe i915 modeset=1
else
# put i915 back in charge
for vtcon in /sys/devices/virtual/vtconsole/vtcon*; do
if grep -q dummy $vtcon/name >/dev/null 2>&1; then
echo 0 >$vtcon/bind
break
fi
done
fi
# return to original VT
chvt $orig_vt
}
prepare_vt
build/gfx_test "$@" || true
restore_vt