blob: 01154430a03798ec6bfb33610b75ced3a7b94715 [file] [log] [blame]
Nico Huber3b654a02017-07-15 22:27:14 +02001#!/bin/sh
2
3set -e
4
Nico Huber88f3c982017-08-28 13:31:38 +02005usage="Usage: $0 [<delay seconds> [(0|90|128|270)]]\n"
Nico Huber3b654a02017-07-15 22:27:14 +02006
7err_msgs=
8command -v chvt >/dev/null || err_msgs="${err_msgs}"'Need `chvt`\n'
9command -v openvt >/dev/null || err_msgs="${err_msgs}"'Need `openvt`\n'
10command -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 Huber88f3c982017-08-28 13:31:38 +020016[ "$#" -gt 2 ] && err_msgs="${err_msgs}${usage}"
Nico Huber3b654a02017-07-15 22:27:14 +020017
18if [ -n "$err_msgs" ]; then
19 printf "$err_msgs"
20 exit 1
21fi
22
23if [ "$#" -lt 1 ]; then
24 # default duration of 5s
25 set 5
26fi
27
28reload_i915=0
29prepare_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
46restore_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
59prepare_vt
60
61build/gfx_test "$@" || true
62
63restore_vt