summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/udev
diff options
context:
space:
mode:
authorHannu Lyytinen <hannu.lyytinen@nomovok.com>2012-04-19 00:28:15 +0300
committerQt by Nokia <qt-info@nokia.com>2012-04-19 08:48:18 +0200
commit1267bd82a47af685b9586eaf691a6d09a327bd05 (patch)
tree5961480e82607cdd2cdcbbb76a7ae8e0e2ee12f7 /src/platformsupport/udev
parent02242a8b0129a2c109038d8752e5010104e78f95 (diff)
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 <laszlo.p.agocs@nokia.com>
Diffstat (limited to 'src/platformsupport/udev')
-rw-r--r--src/platformsupport/udev/qudevicehelper.cpp19
-rw-r--r--src/platformsupport/udev/qudevicehelper_p.h5
2 files changed, 19 insertions, 5 deletions
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)