mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-01-06 09:11:38 +01:00
63 lines
1.6 KiB
Bash
63 lines
1.6 KiB
Bash
#!/bin/sh
|
|
|
|
# script is buggy; until patched just do exit 0
|
|
#exit 0
|
|
|
|
# add zeros to device or bus
|
|
add_zeros () {
|
|
case "$(echo $1 | wc -L)" in
|
|
1) echo "00$1" ;;
|
|
2) echo "0$1" ;;
|
|
*) echo "$1"
|
|
esac
|
|
exit 0
|
|
}
|
|
|
|
|
|
# bus and device dirs in /sys
|
|
USB_PATH=$(echo $MDEV | sed -e 's/usbdev\([0-9]\).[0-9]/usb\1/')
|
|
USB_PATH=$(find /sys/devices -type d -name "$USB_PATH")
|
|
USB_DEV_DIR=$(echo $MDEV | sed -e 's/usbdev\([0-9]\).\([0-9]\)/\1-\2/')
|
|
|
|
# dir names in /dev
|
|
BUS=$(add_zeros $(echo $MDEV | sed -e 's/^usbdev\([0-9]\).[0-9]/\1/'))
|
|
USB_DEV=$(add_zeros $(echo $MDEV | sed -e 's/^usbdev[0-9].\([0-9]\)/\1/'))
|
|
|
|
|
|
# try to load the proper driver for usb devices
|
|
case "$ACTION" in
|
|
add|"")
|
|
# load usb bus driver
|
|
for i in $USB_PATH/*/modalias ; do
|
|
modprobe `cat $i` 2>/dev/null
|
|
done
|
|
# load usb device driver if existent
|
|
if [ -d $USB_PATH/$USB_DEV_DIR ]; then
|
|
for i in $USB_PATH/$USB_DEV_DIR/*/modalias ; do
|
|
modprobe `cat $i` 2>/dev/null
|
|
done
|
|
fi
|
|
# move usb device file
|
|
mkdir -p bus/usb/$BUS
|
|
mv $MDEV bus/usb/$BUS/$USB_DEV
|
|
;;
|
|
remove)
|
|
# unload device driver, if device dir is existent
|
|
if [ -d $USB_PATH/$USB_DEV_DIR ]; then
|
|
for i in $USB_PATH/$USB_DEV_DIR/*/modalias ; do
|
|
modprobe -r `cat $i` 2>/dev/null
|
|
done
|
|
fi
|
|
# unload usb bus driver. Does this make sense?
|
|
# what happens, if two usb devices are plugged in
|
|
# and one is removed?
|
|
for i in $USB_PATH/*/modalias ; do
|
|
modprobe -r `cat $i` 2>/dev/null
|
|
done
|
|
# remove device file and possible empty dirs
|
|
rm -f bus/usb/$BUS/$USB_DEV
|
|
rmdir bus/usb/$BUS/ 2>/dev/null
|
|
rmdir bus/usb/ 2>/dev/null
|
|
rmdir bus/ 2>/dev/null
|
|
esac
|