summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@googlemail.com>2013-01-24 10:24:18 +0100
committerDavid Herrmann <dh.herrmann@googlemail.com>2013-01-24 10:24:18 +0100
commitd72e44e9a1c8448ba8233391331b48ad0421f541 (patch)
tree920017ee825ad236738cc271068fc1f4d2fe36c8
parent26ce0994e3e14f5338f8fd8aec629bf000db039b (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.h1
-rw-r--r--src/uterm_fbdev_video.c30
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;