103 lines
1.4 KiB
Bash
Executable File
103 lines
1.4 KiB
Bash
Executable File
#!/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
|