diff options
-rw-r--r-- | drmtools.c | 7 | ||||
-rw-r--r-- | fbi.c | 7 | ||||
-rw-r--r-- | fbtools.c | 3 | ||||
-rw-r--r-- | gfx.h | 2 |
4 files changed, 15 insertions, 4 deletions
@@ -246,12 +246,17 @@ static void drm_suspend_display(void) drm_fd = -1; } -static void drm_resume_display(void) +static int drm_resume_display(void) { drm_fd = device_open(drm_dev); + if (drm_fd < 0) { + fprintf(stderr, "drm: open %s: %s\n", drm_dev, strerror(errno)); + return -1; + } drm_init_fb(&fb1, drm_fmt, false); if (fb2.mem) drm_init_fb(&fb2, drm_fmt, false); + return 0; } static void drm_flush_display(bool second) @@ -38,6 +38,7 @@ #include "filter.h" #include "desktop.h" #include "fbiconfig.h" +#include "logind.h" #include "transupp.h" /* Support routines for jpegtran */ #include "jpegtools.h" @@ -1201,11 +1202,15 @@ static void cleanup_and_exit(int code) static void console_switch_suspend(void) { kbd_suspend(); + gfx->suspend_display(); + logind_release_control(); } static void console_switch_resume(void) { - gfx->resume_display(); + logind_take_control(); + if (gfx->resume_display() < 0) + cleanup_and_exit(1); shadow_render(gfx); kbd_resume(); } @@ -185,10 +185,11 @@ static void fb_suspend_display(void) { } -static void fb_resume_display(void) +static int fb_resume_display(void) { ioctl(fb,FBIOPAN_DISPLAY,&fb_var); fb_set_palette(); + return 0; } static void fb_cleanup_display(void) @@ -44,7 +44,7 @@ struct gfxstate { /* calls */ void (*suspend_display)(void); - void (*resume_display)(void); + int (*resume_display)(void); void (*cleanup_display)(void); void (*flush_display)(bool second); }; |