commit:     1580ad0ebf1b27055e699305e206b9f679c1b082
Author:     Manuel Rüger <mrueg <AT> gentoo <DOT> org>
AuthorDate: Mon Sep 26 21:51:42 2016 +0000
Commit:     Manuel Rüger <mrueg <AT> gentoo <DOT> org>
CommitDate: Mon Sep 26 21:51:42 2016 +0000
URL:        https://gitweb.gentoo.org/dev/mrueg.git/commit/?id=1580ad0e

x11-drivers/displaylink-driver: Initial version, based on hossie-overlay

Package-Manager: portage-2.3.1

 x11-drivers/displaylink-driver/Manifest            |  1 +
 .../displaylink-driver-1.2.58.ebuild               | 75 +++++++++++++++++++++
 .../displaylink-driver/files/99-displaylink.rules  |  6 ++
 .../displaylink-driver/files/displaylink.initd     | 19 ++++++
 x11-drivers/displaylink-driver/files/dlm.service   | 14 ++++
 .../displaylink-driver/files/pm-displaylink        | 37 +++++++++++
 .../files/pm-systemd-displaylink                   | 31 +++++++++
 x11-drivers/displaylink-driver/files/udev.sh       | 76 ++++++++++++++++++++++
 x11-drivers/displaylink-driver/metadata.xml        |  8 +++
 9 files changed, 267 insertions(+)

diff --git a/x11-drivers/displaylink-driver/Manifest 
b/x11-drivers/displaylink-driver/Manifest
new file mode 100644
index 0000000..a5c9848
--- /dev/null
+++ b/x11-drivers/displaylink-driver/Manifest
@@ -0,0 +1 @@
+DIST displaylink-driver-1.2.58.zip 12757717 SHA256 
992aa3cf4bbd02ae370227cf18ee79d127a61ecfe452c76d84128502d91dc4ca SHA512 
bcf90bedf424d5889917d34bf542882a231a4fa166415c9289e7e5051acebcc6e3bebee4a7372b512ff494dc0a52cf34cada827b94ecbbfa80d25f88c4cbf4e3
 WHIRLPOOL 
6ab7414cb11e046f16cae4cb0628c750ab1adb55d6fce9f62dade1afeb5cf89851bd2809d7372820b5c2e4bbfcab9888b0490fda086ee502408ec92fbde17abd

diff --git a/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild 
b/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild
new file mode 100644
index 0000000..4a19cd7
--- /dev/null
+++ b/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild
@@ -0,0 +1,75 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit eutils systemd udev
+
+DESCRIPTION="DisplayLink USB Graphics Software"
+HOMEPAGE="http://www.displaylink.com/downloads/ubuntu";
+SRC_URI="http://www.displaylink.com/downloads/file?id=701 -> ${P}.zip"
+
+LICENSE="DisplayLink"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="systemd"
+
+QA_PREBUILT="/opt/displaylink/DisplayLinkManager"
+
+DEPEND="app-admin/chrpath"
+RDEPEND="=x11-drivers/evdi-1.2*
+       virtual/libusb:1
+       || ( x11-drivers/xf86-video-modesetting >=x11-base/xorg-server-1.17.0 )
+       !systemd? ( sys-power/pm-utils )"
+
+src_unpack() {
+       default
+       ./"${PN}"-"${PV}".run --nox11 --noexec --target "${P}" || die
+}
+
+src_install() {
+       local DLM
+       case "${ARCH}" in
+               amd64)  DLM="${S}/x64-ubuntu-1604/DisplayLinkManager" ;;
+               x86)    DLM="${S}/x86-ubuntu-1604/DisplayLinkManager" ;;
+       esac
+
+       dodir /opt/displaylink
+       dodir /var/log/displaylink
+
+       exeinto /opt/displaylink
+       chrpath -d "${DLM}" || die
+       doexe "${DLM}"
+
+       insinto /opt/displaylink
+       doins *.spkg
+
+       udev_dorules "${FILESDIR}/99-displaylink.rules"
+
+       systemd_dounit "${FILESDIR}/dlm.service"
+       newinitd "${FILESDIR}/displaylink.initd" dlm
+
+       insinto /opt/displaylink
+       insopts -m0755
+       doins "${FILESDIR}/udev.sh"
+       if use systemd; then
+               newins "${FILESDIR}/pm-systemd-displaylink" suspend.sh
+               dosym /opt/displaylink/suspend.sh 
/lib/systemd/system-sleep/displaylink.sh
+       else
+               newins "${FILESDIR}/pm-displaylink" suspend.sh
+               dosym /opt/displaylink/suspend.sh /etc/pm/sleep.d/displaylink.sh
+       fi
+}
+
+pkg_postinst() {
+       einfo "The DisplayLinkManager Init is now called dlm"
+       einfo "and is triggered by udev"
+       einfo ""
+       einfo "You should be able to use xrandr as follows:"
+       einfo "xrandr --setprovideroutputsource 1 0"
+       einfo "Repeat for more screens, like:"
+       einfo "xrandr --setprovideroutputsource 2 0"
+       einfo "Then, you can use xrandr or GUI tools like arandr to configure 
the screens, e.g."
+       einfo "xrandr --output DVI-1-0 --auto"
+}

diff --git a/x11-drivers/displaylink-driver/files/99-displaylink.rules 
b/x11-drivers/displaylink-driver/files/99-displaylink.rules
new file mode 100644
index 0000000..473640f
--- /dev/null
+++ b/x11-drivers/displaylink-driver/files/99-displaylink.rules
@@ -0,0 +1,6 @@
+# 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+="/opt/displaylink/udev.sh START"
+ACTION=="remove", ENV{ID_DISPLAYLINK_DEVICE}=="1", 
RUN+="/opt/displaylink/udev.sh STOP $env{DEVPATH}"
+ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", 
ATTR{bNumInterfaces}=="*5", GROUP="plugdev", MODE="0660"

diff --git a/x11-drivers/displaylink-driver/files/displaylink.initd 
b/x11-drivers/displaylink-driver/files/displaylink.initd
new file mode 100644
index 0000000..4a368e7
--- /dev/null
+++ b/x11-drivers/displaylink-driver/files/displaylink.initd
@@ -0,0 +1,19 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+depend() {
+       after xdm
+}
+
+start() {
+       modprobe -q evdi
+       start-stop-daemon --start --background --chdir /opt/displaylink 
--make-pidfile --pidfile /run/displaylink.pid --exec 
/opt/displaylink/DisplayLinkManager
+       eend $?
+}
+
+stop() {
+       start-stop-daemon --stop --pidfile /run/displaylink.pid
+       eend $?
+}

diff --git a/x11-drivers/displaylink-driver/files/dlm.service 
b/x11-drivers/displaylink-driver/files/dlm.service
new file mode 100644
index 0000000..54e6ead
--- /dev/null
+++ b/x11-drivers/displaylink-driver/files/dlm.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=DisplayLink Manager Service
+After=display-manager.service
[email protected]
+
+[Service]
+ExecStartPre=/sbin/modprobe evdi
+ExecStart=/usr/lib/displaylink/DisplayLinkManager
+Restart=always
+WorkingDirectory=/opt/displaylink
+RestartSec=5
+
+[Install]
+WantedBy=graphical.target

diff --git a/x11-drivers/displaylink-driver/files/pm-displaylink 
b/x11-drivers/displaylink-driver/files/pm-displaylink
new file mode 100644
index 0000000..a31bfc0
--- /dev/null
+++ b/x11-drivers/displaylink-driver/files/pm-displaylink
@@ -0,0 +1,37 @@
+#!/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
+}
+
+case "$1" in
+  thaw)
+    resume_dlm
+    ;;
+  hibernate)
+    suspend_dlm
+    ;;
+  suspend)
+    suspend_dlm
+    ;;
+  resume)
+    resume_dlm
+    ;;
+esac

diff --git a/x11-drivers/displaylink-driver/files/pm-systemd-displaylink 
b/x11-drivers/displaylink-driver/files/pm-systemd-displaylink
new file mode 100644
index 0000000..4705b7f
--- /dev/null
+++ b/x11-drivers/displaylink-driver/files/pm-systemd-displaylink
@@ -0,0 +1,31 @@
+#!/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
+}
+
+case "$1/$2" in
+  pre/*)
+    suspend_dlm
+    ;;
+  post/*)
+    resume_dlm
+    ;;
+esac

diff --git a/x11-drivers/displaylink-driver/files/udev.sh 
b/x11-drivers/displaylink-driver/files/udev.sh
new file mode 100644
index 0000000..60e5623
--- /dev/null
+++ b/x11-drivers/displaylink-driver/files/udev.sh
@@ -0,0 +1,76 @@
+#!/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()
+{
+  service dlm start
+}
+
+stop_service()
+{
+  service dlm stop
+}
+main $1 $2

diff --git a/x11-drivers/displaylink-driver/metadata.xml 
b/x11-drivers/displaylink-driver/metadata.xml
new file mode 100644
index 0000000..97df2a0
--- /dev/null
+++ b/x11-drivers/displaylink-driver/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="person">
+               <email>[email protected]</email>
+               <name>Manuel Rüger</name>
+       </maintainer>
+</pkgmetadata>

Reply via email to