Otherwise when setting dpms level DPMS_ON, weston_output_schedule_repaint()
will bail out early and never get a chance to wake up the output.

Arguably this could also be done in drm_set_dpms() when setting dpms_off_pending
but I figure it better to do it when deferred.

Signed-off-by: Marius Vlad <marius-cristian.v...@nxp.com>
CC: Daniel Stone <dan...@fooishbar.org>
CC: Pekka Paalanen <ppaala...@gmail.com>
---
 libweston/compositor-drm.c | 6 ++++++
 libweston/compositor.c     | 2 +-
 libweston/compositor.h     | 2 ++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 9594425..a53086e 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -1439,6 +1439,12 @@ drm_output_update_complete(struct drm_output *output, 
uint32_t flags,
        } else if (output->dpms_off_pending) {
                struct drm_pending_state *pending = drm_pending_state_alloc(b);
                output->dpms_off_pending = 0;
+               /* reset repaint status so that weston_output_schedule_repaint()
+                * will start the repaint_loop when DPMS level is ON */
+#ifdef DEBUG
+               weston_log("Reseting repaint status for output %s\n", 
output->base.name);
+#endif
+               weston_output_schedule_repaint_reset(&output->base);
                drm_output_get_disable_state(pending, output);
                drm_pending_state_apply_sync(pending);
                return;
diff --git a/libweston/compositor.c b/libweston/compositor.c
index 274a22d..79c8d21 100644
--- a/libweston/compositor.c
+++ b/libweston/compositor.c
@@ -2360,7 +2360,7 @@ weston_output_repaint(struct weston_output *output, void 
*repaint_data)
        return r;
 }
 
-static void
+WL_EXPORT void
 weston_output_schedule_repaint_reset(struct weston_output *output)
 {
        output->repaint_status = REPAINT_NOT_SCHEDULED;
diff --git a/libweston/compositor.h b/libweston/compositor.h
index 010f1fa..afd49f5 100644
--- a/libweston/compositor.h
+++ b/libweston/compositor.h
@@ -1461,6 +1461,8 @@ weston_output_finish_frame(struct weston_output *output,
 void
 weston_output_schedule_repaint(struct weston_output *output);
 void
+weston_output_schedule_repaint_reset(struct weston_output *output);
+void
 weston_output_damage(struct weston_output *output);
 void
 weston_compositor_schedule_repaint(struct weston_compositor *compositor);
-- 
2.9.3

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to