blob: 9bf2198ab365f80f6e863b65e3a07bf52de0c8d6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#!/bin/bash
SCRIPTNAME="$0"
VERBOSE=
MODE=
REGISTER=0x03
DEPS="ectool grep awk"
set -e
die() {
>&2 echo "$@"
exit 1
}
usage() {
local exitcode="$1"
[ -z "$exitcode" ] && exitcode=0
echo "Usage: $SCRIPTNAME [-v] on|off|status"
exit $exitcode
}
verbose() {
if [ -n "$VERBOSE" ]; then
>&2 echo "$@"
fi
}
installed() {
command -v "$1" >/dev/null
}
read_reg() {
echo "0x$(ectool -d | grep '^00:' | awk '{ print $5 }')"
}
write_reg() {
local val="$1"
# convert decimal to hex
val="0x$(printf "%x" "$val")"
verbose "new reg value: $val"
ectool -w $REGISTER -z $val >/dev/null || die "Error: failed to write to the EC"
verbose "new value $val has been written to register $REGISTER";
}
[[ $EUID == 0 ]] || die "This tool must be run as root."
[[ $# < 1 ]] && usage
for prog in $DEPS; do
if ! installed $prog; then
die "Error: $prog not found"
fi
done
while [[ $# > 0 ]]; do
case $1 in
-v)
VERBOSE=1
;;
on | off | status)
MODE=$1
;;
*)
die "Error: $1: unrecognized argument"
;;
esac
shift
done
[ -z "$MODE" ] && usage 1
# read the register
reg=$(read_reg)
verbose "current reg value: $reg"
case $MODE in
status)
if (( reg & 0x40 )); then
echo "Enabled"
else
echo "Disabled"
fi
;;
on)
# set bit 6
reg=$(( reg | 0x40 ))
write_reg "$reg"
;;
off)
# clear bit 6
reg=$(( reg & 0xbf ))
write_reg "$reg"
;;
esac
|