From 5a41962c792ee521928d3be2e0b985f8e1a42125 Mon Sep 17 00:00:00 2001 From: Andre Barboza Date: Fri, 15 Sep 2017 19:35:51 +0700 Subject: system/displaylink: Added (driver for DisplayLink devices). Signed-off-by: Willy Sudiarto Raharjo --- system/displaylink/99-displaylink.rules | 5 ++ system/displaylink/99displaylink | 17 +++++ system/displaylink/README | 10 +++ system/displaylink/displaylink-sleep.sh | 22 +++++++ system/displaylink/displaylink.SlackBuild | 101 ++++++++++++++++++++++++++++++ system/displaylink/displaylink.info | 10 +++ system/displaylink/doinst.sh | 25 ++++++++ system/displaylink/rc.displaylink | 50 +++++++++++++++ system/displaylink/slack-desc | 19 ++++++ system/displaylink/udev.sh | 78 +++++++++++++++++++++++ 10 files changed, 337 insertions(+) create mode 100644 system/displaylink/99-displaylink.rules create mode 100644 system/displaylink/99displaylink create mode 100644 system/displaylink/README create mode 100644 system/displaylink/displaylink-sleep.sh create mode 100644 system/displaylink/displaylink.SlackBuild create mode 100644 system/displaylink/displaylink.info create mode 100644 system/displaylink/doinst.sh create mode 100644 system/displaylink/rc.displaylink create mode 100644 system/displaylink/slack-desc create mode 100644 system/displaylink/udev.sh diff --git a/system/displaylink/99-displaylink.rules b/system/displaylink/99-displaylink.rules new file mode 100644 index 0000000000..8f4d9b1e2e --- /dev/null +++ b/system/displaylink/99-displaylink.rules @@ -0,0 +1,5 @@ +# Copyright (c) 2016 DisplayLink (UK) Ltd. +# File autogenerated by udev-installer.sh script + +ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="17e9", ATTR{bInterfaceClass}=="ff", ATTR{bInterfaceProtocol}=="03", ENV{ID_DISPLAYLINK_DEVICE}="1", RUN+="@INSTALL_PATH@udev.sh START" +ACTION=="remove", ENV{ID_DISPLAYLINK_DEVICE}=="1", RUN+="@INSTALL_PATH@udev.sh STOP $env{DEVPATH}" diff --git a/system/displaylink/99displaylink b/system/displaylink/99displaylink new file mode 100644 index 0000000000..80f472c2eb --- /dev/null +++ b/system/displaylink/99displaylink @@ -0,0 +1,17 @@ +#!/bin/sh + +. "${PM_FUNCTIONS}" +. .@INSTALL_PATH@displaylink-sleep.sh + +command_exists suspend_dlm || exit $NA +command_exists resume_dlm || exit $NA + +case $1 in + hibernate|suspend) + suspend_dlm + ;; + thaw|resume) + resume_dlm + ;; +esac +exit 0 diff --git a/system/displaylink/README b/system/displaylink/README new file mode 100644 index 0000000000..1611afbfaa --- /dev/null +++ b/system/displaylink/README @@ -0,0 +1,10 @@ +Driver for DisplayLink devices. + +Notes: + - This SlackBuild is a binary repacking. To download this pack you + need to navigate to download URL and accept the license. + Another option is to use the following command line: + + ./displaylink.info + wget -O displaylink-driver-$VERSION.zip \ + --post-data="fileId=993&accept_submit=Accept" $DOWNLOAD diff --git a/system/displaylink/displaylink-sleep.sh b/system/displaylink/displaylink-sleep.sh new file mode 100644 index 0000000000..b41e0dd1b7 --- /dev/null +++ b/system/displaylink/displaylink-sleep.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Copyright (c) 2015 - 2016 DisplayLink (UK) Ltd. + +suspend_dlm() +{ + #flush any bytes in pipe + while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done; + + #suspend DisplayLinkManager + echo "S" > /tmp/PmMessagesPort_in + + if [ -f /tmp/PmMessagesPort_out ]; then + #wait until suspend of DisplayLinkManager finish + read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out + fi +} + +resume_dlm() +{ + #resume DisplayLinkManager + echo "R" > /tmp/PmMessagesPort_in +} diff --git a/system/displaylink/displaylink.SlackBuild b/system/displaylink/displaylink.SlackBuild new file mode 100644 index 0000000000..4fa8c90f7f --- /dev/null +++ b/system/displaylink/displaylink.SlackBuild @@ -0,0 +1,101 @@ +#!/bin/sh + +# Slackware build script for DisplayLink Driver + +# Copyright 2017 Andre Barboza, Belo Horizonte - Brazil +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PRGNAM=displaylink +VERSION=${VERSION:-1.3.54} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +PACK_DISTRO=ubuntu-1604 +if [ "$ARCH" = "x86_64" ]; then + PACK_ARCH="x64" + LIBDIRSUFFIX="64" +else + PACK_ARCH="x86" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +unzip $CWD/$PRGNAM-driver-$VERSION.zip -d $PRGNAM-$VERSION +cd $PRGNAM-$VERSION + +chmod +x displaylink-driver-$VERSION.run +./displaylink-driver-$VERSION.run --target . --noexec + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +install -d -m755 $PKG/usr/lib$LIBDIRSUFFIX/displaylink +install -D -m755 $PACK_ARCH-$PACK_DISTRO/DisplayLinkManager \ + $PKG/usr/lib$LIBDIRSUFFIX/displaylink/DisplayLinkManager +install -D -m644 *.spkg \ + $PKG/usr/lib$LIBDIRSUFFIX/displaylink/ +cat $CWD/udev.sh | sed "s|@INSTALL_PATH@|/usr/lib$LIBDIRSUFFIX/displaylink/|" > $PKG/usr/lib$LIBDIRSUFFIX/displaylink/udev.sh +chmod 755 $PKG/usr/lib$LIBDIRSUFFIX/displaylink/udev.sh +install -D -m644 $CWD/displaylink-sleep.sh $PKG/usr/lib$LIBDIRSUFFIX/displaylink/displaylink-sleep.sh + +mkdir -p $PKG/var/{log,run}/displaylink + +mkdir -p $PKG/etc/udev/rules.d +cat $CWD/99-displaylink.rules | sed "s|@INSTALL_PATH@|/usr/lib$LIBDIRSUFFIX/displaylink/|" > $PKG/etc/udev/rules.d/99-displaylink.rules + +mkdir -p $PKG/etc/rc.d/ +cat $CWD/rc.displaylink | sed "s|@INSTALL_PATH@|/usr/lib$LIBDIRSUFFIX/displaylink/|" > $PKG/etc/rc.d/rc.displaylink.new + +mkdir -p $PKG/etc/pm/sleep.d/ +cat $CWD/99displaylink | sed "s|@INSTALL_PATH@|/usr/lib$LIBDIRSUFFIX/displaylink/|" > $PKG/etc/pm/sleep.d/99displaylink +chmod 755 $PKG/etc/pm/sleep.d/99displaylink + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/system/displaylink/displaylink.info b/system/displaylink/displaylink.info new file mode 100644 index 0000000000..112cccf69b --- /dev/null +++ b/system/displaylink/displaylink.info @@ -0,0 +1,10 @@ +PRGNAM="displaylink" +VERSION="1.3.54" +HOMEPAGE="http://www.displaylink.com/downloads/ubuntu.php" +DOWNLOAD="http://www.displaylink.com/downloads/file?id=993" +MD5SUM="ece7c98b5e90991838c4aeeb708eb8db" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="evdi" +MAINTAINER="Andre Barboza" +EMAIL="bmg.andre@gmail.com" diff --git a/system/displaylink/doinst.sh b/system/displaylink/doinst.sh new file mode 100644 index 0000000000..3d95d6b956 --- /dev/null +++ b/system/displaylink/doinst.sh @@ -0,0 +1,25 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +preserve_perms etc/rc.d/rc.displaylink.new diff --git a/system/displaylink/rc.displaylink b/system/displaylink/rc.displaylink new file mode 100644 index 0000000000..8fd7d9cd47 --- /dev/null +++ b/system/displaylink/rc.displaylink @@ -0,0 +1,50 @@ +#!/bin/sh +# Start/stop DisplayLink + +PIDFILE=/var/run/displaylink/displaylink.pid +DAEMON=@INSTALL_PATH@DisplayLinkManager + +displaylink_start() { + modprobe evdi + $DAEMON & + PID=$(echo $!) + if [ ! -z $PID ] + then + echo $PID > $PIDFILE + fi + exit $? +} + +displaylink_stop() { + if [ -f $PIDFILE ] + then + kill -HUP $(cat $PIDFILE) + rm -f $PIDFILE + fi + exit $? +} + +displaylink_restart() { + displaylink_start + sleep 1 + displaylink_stop +} + +print_usage() { + echo "usage $0 start|stop|restart" +} + +case "$1" in + 'start') + displaylink_start + ;; + 'stop') + displaylink_stop + ;; + 'restart') + displaylink_restart + ;; + *) + print_usage + ;; +esac diff --git a/system/displaylink/slack-desc b/system/displaylink/slack-desc new file mode 100644 index 0000000000..db202a51fd --- /dev/null +++ b/system/displaylink/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +displaylink: displaylink (driver for DisplayLink devices) +displaylink: +displaylink: Driver for DisplayLink devices +displaylink: +displaylink: +displaylink: +displaylink: +displaylink: +displaylink: +displaylink: +displaylink: diff --git a/system/displaylink/udev.sh b/system/displaylink/udev.sh new file mode 100644 index 0000000000..521b7ef2ef --- /dev/null +++ b/system/displaylink/udev.sh @@ -0,0 +1,78 @@ +#!/bin/sh +# Copyright (c) 2016 DisplayLink (UK) Ltd. +# File autogenerated by udev-installer.sh script + +get_evdi_dev_count() +{ + if [ "$(ls -l /sys/devices/platform/* | grep evdi | wc -l)" = "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() +{ + sh /etc/rc.d/rc.displaylink start & +} + +stop_service() +{ + sh /etc/rc.d/rc.displaylink stop & +} + + +main $1 $2 -- cgit v1.2.3