diff options
Diffstat (limited to 'src/platformsupport/kmsconvenience/qkmsdevice.cpp')
-rw-r--r-- | src/platformsupport/kmsconvenience/qkmsdevice.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/platformsupport/kmsconvenience/qkmsdevice.cpp b/src/platformsupport/kmsconvenience/qkmsdevice.cpp index a8eefe65ed..a25a1e582f 100644 --- a/src/platformsupport/kmsconvenience/qkmsdevice.cpp +++ b/src/platformsupport/kmsconvenience/qkmsdevice.cpp @@ -330,11 +330,13 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources, crtc_id, physSize, selected_mode, + selected_mode, false, drmModeGetCrtc(m_dri_fd, crtc_id), modes, connector->subpixel, connectorProperty(connector, QByteArrayLiteral("DPMS")), + connectorPropertyBlob(connector, QByteArrayLiteral("EDID")), false, 0, false @@ -382,6 +384,23 @@ drmModePropertyPtr QKmsDevice::connectorProperty(drmModeConnectorPtr connector, return Q_NULLPTR; } +drmModePropertyBlobPtr QKmsDevice::connectorPropertyBlob(drmModeConnectorPtr connector, const QByteArray &name) +{ + drmModePropertyPtr prop; + drmModePropertyBlobPtr blob = nullptr; + + for (int i = 0; i < connector->count_props && !blob; i++) { + prop = drmModeGetProperty(m_dri_fd, connector->props[i]); + if (!prop) + continue; + if ((prop->flags & DRM_MODE_PROP_BLOB) && (strcmp(prop->name, name.constData()) == 0)) + blob = drmModeGetPropertyBlob(m_dri_fd, connector->prop_values[i]); + drmModeFreeProperty(prop); + } + + return blob; +} + QKmsDevice::QKmsDevice(QKmsScreenConfig *screenConfig, const QString &path) : m_screenConfig(screenConfig) , m_path(path) @@ -626,6 +645,11 @@ void QKmsOutput::cleanup(QKmsDevice *device) dpms_prop = nullptr; } + if (edid_blob) { + drmModeFreePropertyBlob(edid_blob); + edid_blob = nullptr; + } + restoreMode(device); if (saved_crtc) { |