diff options
| author | Robert Günzler <r@gnzler.io> | 2022-11-18 17:53:33 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2022-11-18 18:38:21 +0100 |
| commit | 251a730a0766851306bcff98560ef23568401822 (patch) | |
| tree | 4f4e8406ee29fdf5057ec2c0af3321ee53542a6d | |
| parent | 273f57260449a8247eb1e7ca640dba6af8a90ad2 (diff) | |
add bin/usbreset
| -rwxr-xr-x | bin/usbreset | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/bin/usbreset b/bin/usbreset new file mode 100755 index 0000000..093a502 --- /dev/null +++ b/bin/usbreset @@ -0,0 +1,35 @@ +#!/bin/sh + +set -e +[ -n "$DEBUG" ] && set -x + +# check requirements +for tool in awk fd; do + if ! command -v "$tool" >/dev/null; then + printf "%s: %s not installed but required\n" "$(basename "$0")" "$tool" >&2 + exit 1 + fi +done + +if [ "$1" = "-h" ]; then + printf "usage: %s DEV_NODE\n\n" "$0" + exit 2 +fi + +dev_node=$1 +dev_node=$(basename "${dev_node}") + +serial=$(fd "${dev_node}" /sys/devices | + awk 'BEGIN{RS="/"} /usb/{print}' | + xargs -I{} cat /sys/bus/usb/devices/{}/serial) +[ -z "${serial}" ] && exit 1 + +bus=$(fd "${serial}" /sys/bus/pci/drivers/) +[ -z "${bus}" ] && exit 1 + +driver=$(dirname "${bus}") +[ -z "${driver}" ] && exit 1 + +printf "%s" "${serial}" | doas tee "${driver}/unbind" >/dev/null +sleep 2 +printf "%s" "${serial}" | doas tee "${driver}/bind" >/dev/null |