| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | set -e |
| 4 | |
| Nico Huber | 88f3c98 | 2017-08-28 13:31:38 +0200 | [diff] [blame^] | 5 | usage="Usage: $0 [<delay seconds> [(0|90|128|270)]]\n" |
| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 6 | |
| 7 | err_msgs= |
| 8 | command -v chvt >/dev/null || err_msgs="${err_msgs}"'Need `chvt`\n' |
| 9 | command -v openvt >/dev/null || err_msgs="${err_msgs}"'Need `openvt`\n' |
| 10 | command -v fgconsole >/dev/null || err_msgs="${err_msgs}"'Need `fgconsole`\n' |
| 11 | [ -n "$err_msgs" ] && err_msgs="${err_msgs}"'e.g. install the `kbd` package\n' |
| 12 | |
| 13 | [ -x build/gfx_test ] || \ |
| 14 | err_msgs="${err_msgs}"'Please run from *libgfxinit* source dir and build `gfx_test` first.\n' |
| 15 | |
| Nico Huber | 88f3c98 | 2017-08-28 13:31:38 +0200 | [diff] [blame^] | 16 | [ "$#" -gt 2 ] && err_msgs="${err_msgs}${usage}" |
| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 17 | |
| 18 | if [ -n "$err_msgs" ]; then |
| 19 | printf "$err_msgs" |
| 20 | exit 1 |
| 21 | fi |
| 22 | |
| 23 | if [ "$#" -lt 1 ]; then |
| 24 | # default duration of 5s |
| 25 | set 5 |
| 26 | fi |
| 27 | |
| 28 | reload_i915=0 |
| 29 | prepare_vt() { |
| 30 | # switch VT, we might be in X |
| 31 | orig_vt=`fgconsole` |
| 32 | openvt -s -- true |
| 33 | |
| 34 | # poll until the VT switch is done |
| 35 | while [ `fgconsole` -eq $orig_vt ]; do :; done |
| 36 | |
| 37 | # take i915 out of charge |
| 38 | echo 0 >/sys/devices/virtual/vtconsole/vtcon1/bind |
| 39 | |
| 40 | # try unloading it |
| 41 | if lsmod | grep -q i915 && modprobe -r i915 >/dev/null 2>&1; then |
| 42 | reload_i915=1 |
| 43 | fi |
| 44 | } |
| 45 | |
| 46 | restore_vt() { |
| 47 | # reload i915 |
| 48 | if [ $reload_i915 -eq 1 ]; then |
| 49 | modprobe i915 |
| 50 | fi |
| 51 | |
| 52 | # put i915 back in charge |
| 53 | echo 1 >/sys/devices/virtual/vtconsole/vtcon1/bind |
| 54 | |
| 55 | # return to original VT |
| 56 | chvt $orig_vt |
| 57 | } |
| 58 | |
| 59 | prepare_vt |
| 60 | |
| 61 | build/gfx_test "$@" || true |
| 62 | |
| 63 | restore_vt |