aboutsummaryrefslogtreecommitdiff
path: root/backend/drm
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-01-07 00:28:21 +0100
committeremersion <contact@emersion.fr>2018-01-07 00:28:21 +0100
commit53ba9b4eec4345cb5ba6640e8677f3b2477d2693 (patch)
tree3446e7438b2284e8c60da987a35d49546c7795db /backend/drm
parent8ebd7d4dbebc89aedf5e08d30ebcb5326b92f80b (diff)
Fix output enable in DRM backend
Diffstat (limited to 'backend/drm')
-rw-r--r--backend/drm/atomic.c14
-rw-r--r--backend/drm/drm.c5
-rw-r--r--backend/drm/legacy.c5
3 files changed, 18 insertions, 6 deletions
diff --git a/backend/drm/atomic.c b/backend/drm/atomic.c
index e7374a00..8d98bac2 100644
--- a/backend/drm/atomic.c
+++ b/backend/drm/atomic.c
@@ -123,14 +123,22 @@ static bool atomic_crtc_pageflip(struct wlr_drm_backend *drm,
mode);
}
-static void atomic_conn_enable(struct wlr_drm_backend *drm,
+static bool atomic_conn_enable(struct wlr_drm_backend *drm,
struct wlr_drm_connector *conn, bool enable) {
struct wlr_drm_crtc *crtc = conn->crtc;
- struct atomic atom;
+ struct atomic atom;
atomic_begin(crtc, &atom);
atomic_add(&atom, crtc->id, crtc->props.active, enable);
- atomic_end(drm->fd, &atom);
+ if (enable) {
+ atomic_add(&atom, conn->id, conn->props.crtc_id, crtc->id);
+ atomic_add(&atom, crtc->id, crtc->props.mode_id, crtc->mode_id);
+ } else {
+ atomic_add(&atom, conn->id, conn->props.crtc_id, 0);
+ atomic_add(&atom, crtc->id, crtc->props.mode_id, 0);
+ }
+ return atomic_commit(drm->fd, &atom, conn, DRM_MODE_ATOMIC_ALLOW_MODESET,
+ true);
}
bool legacy_crtc_set_cursor(struct wlr_drm_backend *drm,
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 32b2f88c..0d32605a 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -252,7 +252,10 @@ static void wlr_drm_connector_enable(struct wlr_output *output, bool enable) {
}
struct wlr_drm_backend *drm = (struct wlr_drm_backend *)output->backend;
- drm->iface->conn_enable(drm, conn, enable);
+ bool ok = drm->iface->conn_enable(drm, conn, enable);
+ if (!ok) {
+ return;
+ }
if (enable) {
wlr_drm_connector_start_renderer(conn);
diff --git a/backend/drm/legacy.c b/backend/drm/legacy.c
index d75eb2cb..61140cec 100644
--- a/backend/drm/legacy.c
+++ b/backend/drm/legacy.c
@@ -25,10 +25,11 @@ static bool legacy_crtc_pageflip(struct wlr_drm_backend *drm,
return true;
}
-static void legacy_conn_enable(struct wlr_drm_backend *drm,
+static bool legacy_conn_enable(struct wlr_drm_backend *drm,
struct wlr_drm_connector *conn, bool enable) {
- drmModeConnectorSetProperty(drm->fd, conn->id, conn->props.dpms,
+ int ret = drmModeConnectorSetProperty(drm->fd, conn->id, conn->props.dpms,
enable ? DRM_MODE_DPMS_ON : DRM_MODE_DPMS_OFF);
+ return ret >= 0;
}
bool legacy_crtc_set_cursor(struct wlr_drm_backend *drm,