Gentoo Archives: gentoo-commits

From: "Manuel Rüger" <mrueg@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] dev/mrueg:master commit in: x11-drivers/displaylink-driver/, x11-drivers/displaylink-driver/files/
Date: Mon, 26 Sep 2016 21:52:00
Message-Id: 1474926702.1580ad0ebf1b27055e699305e206b9f679c1b082.mrueg@gentoo
1 commit: 1580ad0ebf1b27055e699305e206b9f679c1b082
2 Author: Manuel Rüger <mrueg <AT> gentoo <DOT> org>
3 AuthorDate: Mon Sep 26 21:51:42 2016 +0000
4 Commit: Manuel Rüger <mrueg <AT> gentoo <DOT> org>
5 CommitDate: Mon Sep 26 21:51:42 2016 +0000
6 URL: https://gitweb.gentoo.org/dev/mrueg.git/commit/?id=1580ad0e
7
8 x11-drivers/displaylink-driver: Initial version, based on hossie-overlay
9
10 Package-Manager: portage-2.3.1
11
12 x11-drivers/displaylink-driver/Manifest | 1 +
13 .../displaylink-driver-1.2.58.ebuild | 75 +++++++++++++++++++++
14 .../displaylink-driver/files/99-displaylink.rules | 6 ++
15 .../displaylink-driver/files/displaylink.initd | 19 ++++++
16 x11-drivers/displaylink-driver/files/dlm.service | 14 ++++
17 .../displaylink-driver/files/pm-displaylink | 37 +++++++++++
18 .../files/pm-systemd-displaylink | 31 +++++++++
19 x11-drivers/displaylink-driver/files/udev.sh | 76 ++++++++++++++++++++++
20 x11-drivers/displaylink-driver/metadata.xml | 8 +++
21 9 files changed, 267 insertions(+)
22
23 diff --git a/x11-drivers/displaylink-driver/Manifest b/x11-drivers/displaylink-driver/Manifest
24 new file mode 100644
25 index 0000000..a5c9848
26 --- /dev/null
27 +++ b/x11-drivers/displaylink-driver/Manifest
28 @@ -0,0 +1 @@
29 +DIST displaylink-driver-1.2.58.zip 12757717 SHA256 992aa3cf4bbd02ae370227cf18ee79d127a61ecfe452c76d84128502d91dc4ca SHA512 bcf90bedf424d5889917d34bf542882a231a4fa166415c9289e7e5051acebcc6e3bebee4a7372b512ff494dc0a52cf34cada827b94ecbbfa80d25f88c4cbf4e3 WHIRLPOOL 6ab7414cb11e046f16cae4cb0628c750ab1adb55d6fce9f62dade1afeb5cf89851bd2809d7372820b5c2e4bbfcab9888b0490fda086ee502408ec92fbde17abd
30
31 diff --git a/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild b/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild
32 new file mode 100644
33 index 0000000..4a19cd7
34 --- /dev/null
35 +++ b/x11-drivers/displaylink-driver/displaylink-driver-1.2.58.ebuild
36 @@ -0,0 +1,75 @@
37 +# Copyright 1999-2016 Gentoo Foundation
38 +# Distributed under the terms of the GNU General Public License v2
39 +# $Id$
40 +
41 +EAPI=5
42 +
43 +inherit eutils systemd udev
44 +
45 +DESCRIPTION="DisplayLink USB Graphics Software"
46 +HOMEPAGE="http://www.displaylink.com/downloads/ubuntu"
47 +SRC_URI="http://www.displaylink.com/downloads/file?id=701 -> ${P}.zip"
48 +
49 +LICENSE="DisplayLink"
50 +SLOT="0"
51 +KEYWORDS="~amd64 ~x86"
52 +IUSE="systemd"
53 +
54 +QA_PREBUILT="/opt/displaylink/DisplayLinkManager"
55 +
56 +DEPEND="app-admin/chrpath"
57 +RDEPEND="=x11-drivers/evdi-1.2*
58 + virtual/libusb:1
59 + || ( x11-drivers/xf86-video-modesetting >=x11-base/xorg-server-1.17.0 )
60 + !systemd? ( sys-power/pm-utils )"
61 +
62 +src_unpack() {
63 + default
64 + ./"${PN}"-"${PV}".run --nox11 --noexec --target "${P}" || die
65 +}
66 +
67 +src_install() {
68 + local DLM
69 + case "${ARCH}" in
70 + amd64) DLM="${S}/x64-ubuntu-1604/DisplayLinkManager" ;;
71 + x86) DLM="${S}/x86-ubuntu-1604/DisplayLinkManager" ;;
72 + esac
73 +
74 + dodir /opt/displaylink
75 + dodir /var/log/displaylink
76 +
77 + exeinto /opt/displaylink
78 + chrpath -d "${DLM}" || die
79 + doexe "${DLM}"
80 +
81 + insinto /opt/displaylink
82 + doins *.spkg
83 +
84 + udev_dorules "${FILESDIR}/99-displaylink.rules"
85 +
86 + systemd_dounit "${FILESDIR}/dlm.service"
87 + newinitd "${FILESDIR}/displaylink.initd" dlm
88 +
89 + insinto /opt/displaylink
90 + insopts -m0755
91 + doins "${FILESDIR}/udev.sh"
92 + if use systemd; then
93 + newins "${FILESDIR}/pm-systemd-displaylink" suspend.sh
94 + dosym /opt/displaylink/suspend.sh /lib/systemd/system-sleep/displaylink.sh
95 + else
96 + newins "${FILESDIR}/pm-displaylink" suspend.sh
97 + dosym /opt/displaylink/suspend.sh /etc/pm/sleep.d/displaylink.sh
98 + fi
99 +}
100 +
101 +pkg_postinst() {
102 + einfo "The DisplayLinkManager Init is now called dlm"
103 + einfo "and is triggered by udev"
104 + einfo ""
105 + einfo "You should be able to use xrandr as follows:"
106 + einfo "xrandr --setprovideroutputsource 1 0"
107 + einfo "Repeat for more screens, like:"
108 + einfo "xrandr --setprovideroutputsource 2 0"
109 + einfo "Then, you can use xrandr or GUI tools like arandr to configure the screens, e.g."
110 + einfo "xrandr --output DVI-1-0 --auto"
111 +}
112
113 diff --git a/x11-drivers/displaylink-driver/files/99-displaylink.rules b/x11-drivers/displaylink-driver/files/99-displaylink.rules
114 new file mode 100644
115 index 0000000..473640f
116 --- /dev/null
117 +++ b/x11-drivers/displaylink-driver/files/99-displaylink.rules
118 @@ -0,0 +1,6 @@
119 +# Copyright (c) 2016 DisplayLink (UK) Ltd.
120 +# File autogenerated by udev-installer.sh script
121 +
122 +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"
123 +ACTION=="remove", ENV{ID_DISPLAYLINK_DEVICE}=="1", RUN+="/opt/displaylink/udev.sh STOP $env{DEVPATH}"
124 +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{bNumInterfaces}=="*5", GROUP="plugdev", MODE="0660"
125
126 diff --git a/x11-drivers/displaylink-driver/files/displaylink.initd b/x11-drivers/displaylink-driver/files/displaylink.initd
127 new file mode 100644
128 index 0000000..4a368e7
129 --- /dev/null
130 +++ b/x11-drivers/displaylink-driver/files/displaylink.initd
131 @@ -0,0 +1,19 @@
132 +#!/sbin/openrc-run
133 +# Copyright 1999-2016 Gentoo Foundation
134 +# Distributed under the terms of the GNU General Public License v2
135 +# $Id$
136 +
137 +depend() {
138 + after xdm
139 +}
140 +
141 +start() {
142 + modprobe -q evdi
143 + start-stop-daemon --start --background --chdir /opt/displaylink --make-pidfile --pidfile /run/displaylink.pid --exec /opt/displaylink/DisplayLinkManager
144 + eend $?
145 +}
146 +
147 +stop() {
148 + start-stop-daemon --stop --pidfile /run/displaylink.pid
149 + eend $?
150 +}
151
152 diff --git a/x11-drivers/displaylink-driver/files/dlm.service b/x11-drivers/displaylink-driver/files/dlm.service
153 new file mode 100644
154 index 0000000..54e6ead
155 --- /dev/null
156 +++ b/x11-drivers/displaylink-driver/files/dlm.service
157 @@ -0,0 +1,14 @@
158 +[Unit]
159 +Description=DisplayLink Manager Service
160 +After=display-manager.service
161 +Conflicts=getty@××××.service
162 +
163 +[Service]
164 +ExecStartPre=/sbin/modprobe evdi
165 +ExecStart=/usr/lib/displaylink/DisplayLinkManager
166 +Restart=always
167 +WorkingDirectory=/opt/displaylink
168 +RestartSec=5
169 +
170 +[Install]
171 +WantedBy=graphical.target
172
173 diff --git a/x11-drivers/displaylink-driver/files/pm-displaylink b/x11-drivers/displaylink-driver/files/pm-displaylink
174 new file mode 100644
175 index 0000000..a31bfc0
176 --- /dev/null
177 +++ b/x11-drivers/displaylink-driver/files/pm-displaylink
178 @@ -0,0 +1,37 @@
179 +#!/bin/bash
180 +# Copyright (c) 2015 - 2016 DisplayLink (UK) Ltd.
181 +
182 +suspend_dlm()
183 +{
184 + #flush any bytes in pipe
185 + while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done;
186 +
187 + #suspend DisplayLinkManager
188 + echo "S" > /tmp/PmMessagesPort_in
189 +
190 + if [ -f /tmp/PmMessagesPort_out ]; then
191 + #wait until suspend of DisplayLinkManager finish
192 + read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out
193 + fi
194 +}
195 +
196 +resume_dlm()
197 +{
198 + #resume DisplayLinkManager
199 + echo "R" > /tmp/PmMessagesPort_in
200 +}
201 +
202 +case "$1" in
203 + thaw)
204 + resume_dlm
205 + ;;
206 + hibernate)
207 + suspend_dlm
208 + ;;
209 + suspend)
210 + suspend_dlm
211 + ;;
212 + resume)
213 + resume_dlm
214 + ;;
215 +esac
216
217 diff --git a/x11-drivers/displaylink-driver/files/pm-systemd-displaylink b/x11-drivers/displaylink-driver/files/pm-systemd-displaylink
218 new file mode 100644
219 index 0000000..4705b7f
220 --- /dev/null
221 +++ b/x11-drivers/displaylink-driver/files/pm-systemd-displaylink
222 @@ -0,0 +1,31 @@
223 +#!/bin/bash
224 +# Copyright (c) 2015 - 2016 DisplayLink (UK) Ltd.
225 +
226 +suspend_dlm()
227 +{
228 + #flush any bytes in pipe
229 + while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done;
230 +
231 + #suspend DisplayLinkManager
232 + echo "S" > /tmp/PmMessagesPort_in
233 +
234 + if [ -f /tmp/PmMessagesPort_out ]; then
235 + #wait until suspend of DisplayLinkManager finish
236 + read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out
237 + fi
238 +}
239 +
240 +resume_dlm()
241 +{
242 + #resume DisplayLinkManager
243 + echo "R" > /tmp/PmMessagesPort_in
244 +}
245 +
246 +case "$1/$2" in
247 + pre/*)
248 + suspend_dlm
249 + ;;
250 + post/*)
251 + resume_dlm
252 + ;;
253 +esac
254
255 diff --git a/x11-drivers/displaylink-driver/files/udev.sh b/x11-drivers/displaylink-driver/files/udev.sh
256 new file mode 100644
257 index 0000000..60e5623
258 --- /dev/null
259 +++ b/x11-drivers/displaylink-driver/files/udev.sh
260 @@ -0,0 +1,76 @@
261 +#!/bin/sh
262 +# Copyright (c) 2016 DisplayLink (UK) Ltd.
263 +# File autogenerated by udev-installer.sh script
264 +
265 +get_evdi_dev_count()
266 +{
267 + if [ "$(ls -l /sys/devices/platform/* | grep evdi | wc -l)" = "0" ]; then
268 + echo "0"
269 + return
270 + fi
271 +
272 + cat /sys/devices/platform/evdi.*/drm/card*/card*/status | grep "^connected$" | wc -l
273 +}
274 +
275 +get_displaylink_dev_count()
276 +{
277 + cat /sys/bus/usb/devices/*/idVendor | grep 17e9 | wc -l
278 +}
279 +
280 +start_displaylink()
281 +{
282 + if [ "$(get_displaylink_dev_count)" != "0" ]; then
283 + start_service
284 + fi
285 +}
286 +
287 +try_stop_displaylink()
288 +{
289 + if [ "$(get_evdi_dev_count)" = "0" ]; then
290 + parent_dev_path="$1"
291 + if [ -d "$parent_dev_path" ]; then
292 + echo "1"
293 + return
294 + fi
295 +
296 + if [ "$(get_displaylink_dev_count)" = "0" ]; then
297 + stop_service
298 + echo "0"
299 + return
300 + fi
301 + fi
302 + echo "1"
303 +}
304 +
305 +stop_displaylink()
306 +{
307 + parent_devpath=$(dirname /sys$1)
308 + retry_num="50" # 5s
309 + while [ "$(try_stop_displaylink $parent_devpath)" != "0" ] && [ "$retry_num" != "0" ];
310 + do
311 + sleep 0.1
312 + retry_num=$((retry_num-1))
313 + done
314 +}
315 +
316 +main()
317 +{
318 + op=$1
319 + devpath=$2
320 + if [ "$op" = "START" ]; then
321 + start_displaylink
322 + elif [ "$op" = "STOP" ]; then
323 + stop_displaylink $devpath
324 + fi
325 +}
326 +
327 +start_service()
328 +{
329 + service dlm start
330 +}
331 +
332 +stop_service()
333 +{
334 + service dlm stop
335 +}
336 +main $1 $2
337
338 diff --git a/x11-drivers/displaylink-driver/metadata.xml b/x11-drivers/displaylink-driver/metadata.xml
339 new file mode 100644
340 index 0000000..97df2a0
341 --- /dev/null
342 +++ b/x11-drivers/displaylink-driver/metadata.xml
343 @@ -0,0 +1,8 @@
344 +<?xml version="1.0" encoding="UTF-8"?>
345 +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
346 +<pkgmetadata>
347 + <maintainer type="person">
348 + <email>mrueg@g.o</email>
349 + <name>Manuel Rüger</name>
350 + </maintainer>
351 +</pkgmetadata>