From 888bfb09da4367a2eebe41a1a086a802449d2af6 Mon Sep 17 00:00:00 2001 From: Pier Luigi Fiorini Date: Sun, 27 Jan 2013 09:53:32 +0100 Subject: Find primary GPU only Some systems may have multiple DRM devices attached to a single seat and we are not guaranteed to pick up the primary GPU. With this flag we can control how DRM devices are detected and consider only the primary GPU. This is very useful for the kms plugin or QtCompositors running on kms in order to use the right DRM device. Change-Id: I8b91e78f148b25aaa4e40724e39e0ed0918ca100 Reviewed-by: Andy Nichols --- src/platformsupport/devicediscovery/qdevicediscovery_p.h | 3 ++- .../devicediscovery/qdevicediscovery_udev.cpp | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/platformsupport') diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_p.h b/src/platformsupport/devicediscovery/qdevicediscovery_p.h index c78c57b86f..d9bd9a78e4 100644 --- a/src/platformsupport/devicediscovery/qdevicediscovery_p.h +++ b/src/platformsupport/devicediscovery/qdevicediscovery_p.h @@ -72,7 +72,8 @@ public: Device_Touchscreen = 0x04, Device_Keyboard = 0x08, Device_DRM = 0x10, - Device_Tablet = 0x20, + Device_DRM_PrimaryGPU = 0x20, + Device_Tablet = 0x40, Device_InputMask = Device_Mouse | Device_Touchpad | Device_Touchscreen | Device_Keyboard | Device_Tablet, Device_VideoMask = Device_DRM }; diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp b/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp index 9e0ce47e18..ac902b4140 100644 --- a/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp +++ b/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp @@ -149,8 +149,16 @@ QStringList QDeviceDiscovery::scanConnectedDevices() QString candidate = QString::fromUtf8(udev_device_get_devnode(udevice)); if ((m_types & Device_InputMask) && candidate.startsWith(QLatin1String(QT_EVDEV_DEVICE))) devices << candidate; - if ((m_types & Device_VideoMask) && candidate.startsWith(QLatin1String(QT_DRM_DEVICE))) - devices << candidate; + if ((m_types & Device_VideoMask) && candidate.startsWith(QLatin1String(QT_DRM_DEVICE))) { + if (m_types & Device_DRM_PrimaryGPU) { + udev_device *pci = udev_device_get_parent_with_subsystem_devtype(udevice, "pci", 0); + if (pci) { + if (qstrcmp(udev_device_get_sysattr_value(pci, "boot_vga"), "1") == 0) + devices << candidate; + } + } else + devices << candidate; + } udev_device_unref(udevice); } -- cgit v1.2.3