chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
terminal: grdev: refresh device state on hotplug events
[elogind.git]
/
src
/
libsystemd-terminal
/
grdev.c
diff --git
a/src/libsystemd-terminal/grdev.c
b/src/libsystemd-terminal/grdev.c
index 1e02a6799c56f60567b891396b0d41bb011eb8ec..3e3833fc95caa9170ba1e805bf7da969b4efbc4d 100644
(file)
--- a/
src/libsystemd-terminal/grdev.c
+++ b/
src/libsystemd-terminal/grdev.c
@@
-1095,7
+1095,7
@@
void grdev_session_add_drm(grdev_session *session, struct udev_device *ud) {
devnum = udev_device_get_devnum(ud);
if (devnum == 0)
devnum = udev_device_get_devnum(ud);
if (devnum == 0)
- return;
+ return
grdev_session_hotplug_drm(session, ud)
;
card = grdev_find_drm_card(session, devnum);
if (card)
card = grdev_find_drm_card(session, devnum);
if (card)
@@
-1120,7
+1120,7
@@
void grdev_session_remove_drm(grdev_session *session, struct udev_device *ud) {
devnum = udev_device_get_devnum(ud);
if (devnum == 0)
devnum = udev_device_get_devnum(ud);
if (devnum == 0)
- return;
+ return
grdev_session_hotplug_drm(session, ud)
;
card = grdev_find_drm_card(session, devnum);
if (!card)
card = grdev_find_drm_card(session, devnum);
if (!card)
@@
-1130,21
+1130,27
@@
void grdev_session_remove_drm(grdev_session *session, struct udev_device *ud) {
}
void grdev_session_hotplug_drm(grdev_session *session, struct udev_device *ud) {
}
void grdev_session_hotplug_drm(grdev_session *session, struct udev_device *ud) {
- grdev_card *card;
+ grdev_card *card = NULL;
+ struct udev_device *p;
dev_t devnum;
assert(session);
assert(ud);
dev_t devnum;
assert(session);
assert(ud);
- devnum = udev_device_get_devnum(ud);
- if (devnum == 0)
- return;
+ for (p = ud; p; p = udev_device_get_parent_with_subsystem_devtype(p, "drm", NULL)) {
+ devnum = udev_device_get_devnum(ud);
+ if (devnum == 0)
+ continue;
+
+ card = grdev_find_drm_card(session, devnum);
+ if (card)
+ break;
+ }
- card = grdev_find_drm_card(session, devnum);
if (!card)
return;
if (!card)
return;
- /* TODO: hotplug card */
+ grdev_drm_card_hotplug(card, ud);
}
static void session_configure(grdev_session *session) {
}
static void session_configure(grdev_session *session) {