|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From a3eabec96b872bbf581c9bfa81ecc9c2819b8de8 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From: David Herrmann <dh.herrmann@gmail.com>
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Date: Sat, 20 Sep 2014 09:48:22 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Subject: [PATCH] terminal: grdev: treat udev-devices without devnum as hotplug
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
If we get udev-device events via sysview, but they lack devnum
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
annotations, we know it cannot be a DRM card. Look through it's parents
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
and treat it as hotplug event in case we find such a card.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
This will treat any new/removed connectors as sub-devices of the real
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
card, instead of as devices on its own.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd-terminal/grdev.c | 20 +++++++++++++-------
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
1 file changed, 13 insertions(+), 7 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/libsystemd-terminal/grdev.c b/src/libsystemd-terminal/grdev.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index 1e02a6799c..bb89ee7170 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/libsystemd-terminal/grdev.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/libsystemd-terminal/grdev.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -1095,7 +1095,7 @@ void grdev_session_add_drm(grdev_session *session, struct udev_device *ud) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
devnum = udev_device_get_devnum(ud);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (devnum == 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- return;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return grdev_session_hotplug_drm(session, ud);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
card = grdev_find_drm_card(session, devnum);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (card)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -1120,7 +1120,7 @@ void grdev_session_remove_drm(grdev_session *session, struct udev_device *ud) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
devnum = udev_device_get_devnum(ud);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (devnum == 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- return;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return grdev_session_hotplug_drm(session, ud);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
card = grdev_find_drm_card(session, devnum);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (!card)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -1130,17 +1130,23 @@ void grdev_session_remove_drm(grdev_session *session, struct udev_device *ud) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
void grdev_session_hotplug_drm(grdev_session *session, struct udev_device *ud) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- grdev_card *card;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ grdev_card *card = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ struct udev_device *p;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
dev_t devnum;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
assert(session);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
assert(ud);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- devnum = udev_device_get_devnum(ud);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- if (devnum == 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- return;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ for (p = ud; p; p = udev_device_get_parent_with_subsystem_devtype(p, "drm", NULL)) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ devnum = udev_device_get_devnum(ud);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ if (devnum == 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ continue;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ card = grdev_find_drm_card(session, devnum);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ if (card)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ break;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- card = grdev_find_drm_card(session, devnum);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (!card)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|