From 7a9676dc0af3d2988aa429bb5f218f387abddb85 Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Tue, 20 Apr 2021 00:42:37 +0200 Subject: [PATCH] Introduce the legacy flag for drm properties There are properties like for example rotation that don't have the atomic flag, yet work and are needed in atomic mode setting. --- src/plugins/platforms/drm/drm_object.cpp | 3 +-- src/plugins/platforms/drm/drm_object.h | 14 ++++++++++---- src/plugins/platforms/drm/drm_object_connector.cpp | 6 ++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/drm/drm_object.cpp b/src/plugins/platforms/drm/drm_object.cpp index 4c02d1cf60..56eb5ee883 100644 --- a/src/plugins/platforms/drm/drm_object.cpp +++ b/src/plugins/platforms/drm/drm_object.cpp @@ -77,7 +77,7 @@ bool DrmObject::atomicPopulate(drmModeAtomicReq *req) const bool ret = true; for (const auto &property : qAsConst(m_props)) { - if (property && !property->isImmutable() && property->isAtomic()) { + if (property && !property->isImmutable() && !property->isLegacy()) { ret &= atomicAddProperty(req, property); } } @@ -108,7 +108,6 @@ DrmObject::Property::Property(drmModePropertyRes *prop, uint64_t val, const QVec , m_propName(prop->name) , m_value(val) , m_immutable(prop->flags & DRM_MODE_PROP_IMMUTABLE) - , m_atomic(prop->flags & DRM_MODE_PROP_ATOMIC) , m_blob(blob) { if (!enumNames.isEmpty()) { diff --git a/src/plugins/platforms/drm/drm_object.h b/src/plugins/platforms/drm/drm_object.h index 6c826f4636..59221ef9bd 100644 --- a/src/plugins/platforms/drm/drm_object.h +++ b/src/plugins/platforms/drm/drm_object.h @@ -138,12 +138,18 @@ protected: bool isImmutable() const { return m_immutable; } - bool isAtomic() const { - return m_atomic; - } drmModePropertyBlobRes *blob() const { return m_blob.data(); } + bool isLegacy() const { + return m_legacy; + } + /** + * Makes this property be ignored by DrmObject::atomicPopulate + */ + void setLegacy() { + m_legacy = true; + } private: uint32_t m_propId = 0; @@ -153,7 +159,7 @@ protected: QVector m_enumMap; QVector m_enumNames; const bool m_immutable; - const bool m_atomic; + bool m_legacy = false; DrmScopedPointer m_blob; }; diff --git a/src/plugins/platforms/drm/drm_object_connector.cpp b/src/plugins/platforms/drm/drm_object_connector.cpp index 30062f3d97..300e68bc2a 100644 --- a/src/plugins/platforms/drm/drm_object_connector.cpp +++ b/src/plugins/platforms/drm/drm_object_connector.cpp @@ -67,6 +67,12 @@ bool DrmConnector::init() return false; } + if (auto dpmsProp = m_props[static_cast(PropertyIndex::Dpms)]) { + dpmsProp->setLegacy(); + } else { + qCDebug(KWIN_DRM) << "Could not find DPMS property!"; + } + // parse edid if (auto edidProp = m_props[static_cast(PropertyIndex::Edid)]) { m_edid = Edid(edidProp->blob()->data, edidProp->blob()->length);