diff --git a/src/plugins/platforms/drm/drm_object.cpp b/src/plugins/platforms/drm/drm_object.cpp index 675c9f04f0..4c02d1cf60 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()) { + if (property && !property->isImmutable() && property->isAtomic()) { ret &= atomicAddProperty(req, property); } } @@ -108,6 +108,7 @@ 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 d02048a2f5..1ba5cf09e2 100644 --- a/src/plugins/platforms/drm/drm_object.h +++ b/src/plugins/platforms/drm/drm_object.h @@ -135,16 +135,12 @@ protected: const QByteArray &name() const { return m_propName; } - /** - * while this is usually automatically set, some properties - * (like DPMS) are not meant to be used in AMS - */ - void setImmutable() { - m_immutable = true; - } bool isImmutable() const { return m_immutable; } + bool isAtomic() const { + return m_atomic; + } drmModePropertyBlobRes *blob() const { return m_blob.data(); } @@ -157,6 +153,7 @@ protected: QVector m_enumMap; QVector m_enumNames; bool m_immutable = false; + bool m_atomic; DrmScopedPointer m_blob; }; diff --git a/src/plugins/platforms/drm/drm_object_connector.cpp b/src/plugins/platforms/drm/drm_object_connector.cpp index 3dbf63f6db..47a10a0685 100644 --- a/src/plugins/platforms/drm/drm_object_connector.cpp +++ b/src/plugins/platforms/drm/drm_object_connector.cpp @@ -42,14 +42,6 @@ bool DrmConnector::init() return false; } - if (auto dpmsProp = m_props[static_cast(PropertyIndex::Dpms)]) { - // the dpms property makes atomic commits fail - // for legacy it will be explicitly set - dpmsProp->setImmutable(); - } 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);