diff options
Diffstat (limited to 'x11-drivers/displaylink-driver/files/udev.sh')
-rw-r--r-- | x11-drivers/displaylink-driver/files/udev.sh | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/x11-drivers/displaylink-driver/files/udev.sh b/x11-drivers/displaylink-driver/files/udev.sh new file mode 100644 index 0000000..8570bd1 --- /dev/null +++ b/x11-drivers/displaylink-driver/files/udev.sh @@ -0,0 +1,77 @@ +#!/bin/sh +# Copyright (c) 2016 DisplayLink (UK) Ltd. +# File autogenerated by udev-installer.sh script +# modified by dakkar + +get_evdi_dev_count() +{ + if [ "$(ls -ld /sys/devices/platform/* | grep -c evdi)" = "0" ]; then + echo "0" + return + fi + + cat /sys/devices/platform/evdi.*/drm/card*/card*/status | grep "^connected$" | wc -l +} + +get_displaylink_dev_count() +{ + cat /sys/bus/usb/devices/*/idVendor | grep 17e9 | wc -l +} + +start_displaylink() +{ + if [ "$(get_displaylink_dev_count)" != "0" ]; then + start_service + fi +} + +try_stop_displaylink() +{ + if [ "$(get_evdi_dev_count)" = "0" ]; then + parent_dev_path="$1" + if [ -d "$parent_dev_path" ]; then + echo "1" + return + fi + + if [ "$(get_displaylink_dev_count)" = "0" ]; then + stop_service + echo "0" + return + fi + fi + echo "1" +} + +stop_displaylink() +{ + parent_devpath="$(dirname "/sys$1")" + retry_num="50" # 5s + while [ "$(try_stop_displaylink "$parent_devpath")" != "0" ] && [ "$retry_num" != "0" ]; + do + sleep 0.1 + retry_num=$((retry_num-1)) + done +} + +main() +{ + op=$1 + devpath=$2 + if [ "$op" = "START" ]; then + start_displaylink + elif [ "$op" = "STOP" ]; then + stop_displaylink "$devpath" + fi +} + +start_service() +{ + rc-service dlm start +} + +stop_service() +{ + rc-service dlm stop +} +main "$1" "$2" |