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