X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-terminal%2Fgrdev.c;h=3e3833fc95caa9170ba1e805bf7da969b4efbc4d;hb=6221d249d1f03d235a23a284c597c86676b32d2f;hp=1e02a6799c56f60567b891396b0d41bb011eb8ec;hpb=f22e0bce3732c1fd005b7a886042394e036bc1b3;p=elogind.git diff --git a/src/libsystemd-terminal/grdev.c b/src/libsystemd-terminal/grdev.c index 1e02a6799..3e3833fc9 100644 --- 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) - return; + return grdev_session_hotplug_drm(session, ud); 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) - return; + return grdev_session_hotplug_drm(session, ud); 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) { - grdev_card *card; + grdev_card *card = NULL; + struct udev_device *p; 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; - /* TODO: hotplug card */ + grdev_drm_card_hotplug(card, ud); } static void session_configure(grdev_session *session) {