diff options
author | David Herrmann <dh.herrmann@googlemail.com> | 2013-01-24 10:24:18 +0100 |
---|---|---|
committer | David Herrmann <dh.herrmann@googlemail.com> | 2013-01-24 10:24:18 +0100 |
commit | d72e44e9a1c8448ba8233391331b48ad0421f541 (patch) | |
tree | 920017ee825ad236738cc271068fc1f4d2fe36c8 | |
parent | 26ce0994e3e14f5338f8fd8aec629bf000db039b (diff) |
uterm: fbdev: fix wakeing up displays
The dfb->disp pointer is not used so the current fbdev backend doesn't
wake up displays on video-wakeup. Fix this by traversing the new display
list (even though we currently have only one display at most).
Also remove th dfb->disp pointer as it is unused now.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
-rw-r--r-- | src/uterm_fbdev_internal.h | 1 | ||||
-rw-r--r-- | src/uterm_fbdev_video.c | 30 |
2 files changed, 23 insertions, 8 deletions
diff --git a/src/uterm_fbdev_internal.h b/src/uterm_fbdev_internal.h index 722d1f5..f89a199 100644 --- a/src/uterm_fbdev_internal.h +++ b/src/uterm_fbdev_internal.h @@ -71,7 +71,6 @@ struct fbdev_display { struct fbdev_video { char *node; bool pending_intro; - struct uterm_display *disp; }; int uterm_fbdev_display_blit(struct uterm_display *disp, diff --git a/src/uterm_fbdev_video.c b/src/uterm_fbdev_video.c index 2ca53fd..7ee96ab 100644 --- a/src/uterm_fbdev_video.c +++ b/src/uterm_fbdev_video.c @@ -601,22 +601,38 @@ static void video_destroy(struct uterm_video *video) static void video_sleep(struct uterm_video *video) { - struct fbdev_video *vfb = video->data; + struct uterm_display *iter; + struct shl_dlist *i; + + shl_dlist_for_each(i, &video->displays) { + iter = shl_dlist_entry(i, struct uterm_display, list); - if (vfb->disp && display_is_online(vfb->disp)) - display_deactivate_force(vfb->disp, true); + if (!display_is_online(iter)) + continue; + + display_deactivate_force(iter, true); + } } static int video_wake_up(struct uterm_video *video) { - struct fbdev_video *vfb = video->data; + struct uterm_display *iter; + struct shl_dlist *i; int ret; - if (vfb->disp && display_is_online(vfb->disp)) { - video->flags |= VIDEO_AWAKE; - ret = display_activate_force(vfb->disp, NULL, true); + video->flags |= VIDEO_AWAKE; + shl_dlist_for_each(i, &video->displays) { + iter = shl_dlist_entry(i, struct uterm_display, list); + + if (!display_is_online(iter)) + continue; + + ret = display_activate_force(iter, NULL, true); if (ret) return ret; + + if (iter->dpms != UTERM_DPMS_UNKNOWN) + display_set_dpms(iter, iter->dpms); } return 0; |