x200-ec-mute/x200-ec-mute.sh
Evgeny Zinoviev 5318b75fbf initial
2022-07-12 03:57:14 +03:00

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