From 1267bd82a47af685b9586eaf691a6d09a327bd05 Mon Sep 17 00:00:00 2001 From: Hannu Lyytinen Date: Thu, 19 Apr 2012 00:28:15 +0300 Subject: Extend QUDeviceHelper to detect DRM graphics devices. KMS QPA plugin duplicates udev code needlessly; merging the functionality here. Change-Id: I69be8549f1feee298fe28215d491c8ce5de96b18 Reviewed-by: Laszlo Agocs --- src/platformsupport/udev/qudevicehelper.cpp | 19 +++++++++++++++---- src/platformsupport/udev/qudevicehelper_p.h | 5 ++++- 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'src/platformsupport') diff --git a/src/platformsupport/udev/qudevicehelper.cpp b/src/platformsupport/udev/qudevicehelper.cpp index bf3ce67b43..688cedd304 100644 --- a/src/platformsupport/udev/qudevicehelper.cpp +++ b/src/platformsupport/udev/qudevicehelper.cpp @@ -96,6 +96,7 @@ QUDeviceHelper::QUDeviceHelper(QUDeviceTypes types, struct udev *udev, QObject * } udev_monitor_filter_add_match_subsystem_devtype(m_udevMonitor, "input", 0); + udev_monitor_filter_add_match_subsystem_devtype(m_udevMonitor, "drm", 0); udev_monitor_enable_receiving(m_udevMonitor); m_udevMonitorFileDescriptor = udev_monitor_get_fd(m_udevMonitor); @@ -121,6 +122,7 @@ QStringList QUDeviceHelper::scanConnectedDevices() udev_enumerate *ue = udev_enumerate_new(m_udev); udev_enumerate_add_match_subsystem(ue, "input"); + udev_enumerate_add_match_subsystem(ue, "drm"); if (m_types & UDev_Mouse) udev_enumerate_add_match_property(ue, "ID_INPUT_MOUSE", "1"); @@ -143,7 +145,9 @@ QStringList QUDeviceHelper::scanConnectedDevices() const char *syspath = udev_list_entry_get_name(entry); udev_device *udevice = udev_device_new_from_syspath(m_udev, syspath); QString candidate = QString::fromUtf8(udev_device_get_devnode(udevice)); - if (candidate.startsWith(QLatin1String("/dev/input/event"))) + if ((m_types & UDev_InputMask) && candidate.startsWith(QLatin1String("/dev/input/event"))) + devices << candidate; + if ((m_types & UDev_VideoMask) && candidate.startsWith(QLatin1String("/dev/dri/card"))) devices << candidate; udev_device_unref(udevice); @@ -180,12 +184,16 @@ void QUDeviceHelper::handleUDevNotification() if (!str) goto cleanup; + const char *subsystem; devNode = QString::fromUtf8(str); - if (!devNode.startsWith(QLatin1String("/dev/input/event"))) - goto cleanup; + if (devNode.startsWith(QLatin1String("/dev/input/event"))) + subsystem = "input"; + else if (devNode.startsWith(QLatin1String("/dev/dri/card"))) + subsystem = "drm"; + else goto cleanup; // does not increase the refcount - dev = udev_device_get_parent_with_subsystem_devtype(dev, "input", 0); + dev = udev_device_get_parent_with_subsystem_devtype(dev, subsystem, 0); if (!dev) goto cleanup; @@ -229,6 +237,9 @@ QUDeviceHelper::QUDeviceTypes QUDeviceHelper::checkDeviceType(udev_device *dev) if ((m_types & UDev_Touchscreen) && (qstrcmp(udev_device_get_property_value(dev, "ID_INPUT_TOUCHSCREEN"), "1") == 0)) types |= UDev_Touchscreen; + if ((m_types & UDev_DRM) && (qstrcmp(udev_device_get_subsystem(dev), "drm") == 0)) + types |= UDev_DRM; + return types; } diff --git a/src/platformsupport/udev/qudevicehelper_p.h b/src/platformsupport/udev/qudevicehelper_p.h index b7544fa6c2..15dbe2926c 100644 --- a/src/platformsupport/udev/qudevicehelper_p.h +++ b/src/platformsupport/udev/qudevicehelper_p.h @@ -60,7 +60,10 @@ public: UDev_Mouse = 0x01, UDev_Touchpad = 0x02, UDev_Touchscreen = 0x04, - UDev_Keyboard = 0x08 + UDev_Keyboard = 0x08, + UDev_DRM = 0x10, + UDev_InputMask = UDev_Mouse | UDev_Touchpad | UDev_Touchscreen | UDev_Keyboard, + UDev_VideoMask = UDev_DRM }; Q_DECLARE_FLAGS(QUDeviceTypes, QUDeviceType) -- cgit v1.2.3