summaryrefslogtreecommitdiff
path: root/x11-drivers/displaylink-driver/files/udev.sh
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2019-07-05 12:17:54 +0100
committerdakkar <dakkar@thenautilus.net>2019-07-05 12:17:54 +0100
commitab53910278f76fd9e3e3127708360a42c59fc512 (patch)
tree32c92d4cf9e5a9a87c02b33804ee6c7a7fafd203 /x11-drivers/displaylink-driver/files/udev.sh
parentlitehtml is not ready in released versions (diff)
downloadgentoo-overlay-ab53910278f76fd9e3e3127708360a42c59fc512.tar.gz
gentoo-overlay-ab53910278f76fd9e3e3127708360a42c59fc512.tar.bz2
gentoo-overlay-ab53910278f76fd9e3e3127708360a42c59fc512.zip
probably-working displaylink driver
upgraded from https://git.hossie.de/projects/GEN/repos/gentoo-overlay/browse/x11-drivers/ which was inspired by https://aur.archlinux.org/cgit/aur.git/tree/?h=displaylink
Diffstat (limited to 'x11-drivers/displaylink-driver/files/udev.sh')
-rw-r--r--x11-drivers/displaylink-driver/files/udev.sh77
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"