51 lines
1.2 KiB
Bash
51 lines
1.2 KiB
Bash
#!/bin/bash
|
|
|
|
vid=04d8
|
|
pid=00dd
|
|
|
|
#check to see if sysfs is mounted
|
|
sysfs_path=`awk '/^sysfs/{ print $2 }' < /proc/mounts`
|
|
curr_path=`pwd`
|
|
|
|
#if variable is empty, we should exit. No SYSFS found
|
|
if [[ -z $sysfs_path ]]; then
|
|
echo "No sysfs in this system! Exiting..."
|
|
exit 1
|
|
fi
|
|
|
|
function load_drivers
|
|
{
|
|
modprobe i2c-dev
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Cannot load the \"i2c-dev\" driver! Exiting..."
|
|
exit 1
|
|
fi
|
|
modprobe i2c-mcp2221
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Cannot load the \"i2c-mcp2221\" driver! Exiting..."
|
|
exit 1
|
|
fi
|
|
echo "I2C related drivers are loaded"
|
|
}
|
|
|
|
usb_device_path=${sysfs_path}/bus/usb/devices
|
|
|
|
cd $usb_device_path
|
|
|
|
for usbdev in *; do
|
|
idvendor=${usb_device_path}/${usbdev}/idVendor
|
|
idproduct=${usb_device_path}/${usbdev}/idProduct
|
|
usb_driver=${usb_device_path}/${usbdev}/${usbdev}:1.2/driver
|
|
if [[ -f $idvendor ]]; then
|
|
dev_vid=`grep -i $vid < $idvendor`
|
|
dev_pid=`grep -i $pid < $idproduct`
|
|
if [[ -n $dev_vid ]] && [[ -n $dev_pid ]]; then
|
|
echo "I found the requested VID/PID: $dev_vid, $dev_pid"
|
|
load_drivers
|
|
echo -n "${usbdev}:1.2" > ${usb_driver}/unbind
|
|
echo -n "${usbdev}:1.2" > ${sysfs_path}/bus/usb/drivers/i2c-mcp2221/bind
|
|
fi
|
|
fi
|
|
done
|
|
|