terminal: grdev: treat udev-devices without devnum as hotplug
If we get udev-device events via sysview, but they lack devnum annotations, we know it cannot be a DRM card. Look through it's parents and treat it as hotplug event in case we find such a card. This will treat any new/removed connectors as sub-devices of the real card, instead of as devices on its own.
This commit is contained in:
parent
46c9a12780
commit
a3eabec96b
|
@ -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,17 +1130,23 @@ 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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue