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>bb10
parent
02242a8b01
commit
1267bd82a4
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue