74 lines
1.5 KiB
Bash
74 lines
1.5 KiB
Bash
|
#!/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
|