lkml.org 
[lkml]   [2012]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 08/11] fblog: cache framebuffer BLANK and SUSPEND states
    Date
    We must cache these states so we will never draw to the framebuffer while
    it is suspended or blanked.

    Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
    ---
    drivers/video/console/fblog.c | 41 +++++++++++++++++++++++++++++++++++++++++
    1 file changed, 41 insertions(+)

    diff --git a/drivers/video/console/fblog.c b/drivers/video/console/fblog.c
    index b490dba..fd1f3d6 100644
    --- a/drivers/video/console/fblog.c
    +++ b/drivers/video/console/fblog.c
    @@ -31,6 +31,8 @@
    enum fblog_flags {
    FBLOG_KILLED,
    FBLOG_OPEN,
    + FBLOG_SUSPENDED,
    + FBLOG_BLANKED,
    };

    struct fblog_fb {
    @@ -255,6 +257,7 @@ static int fblog_event(struct notifier_block *self, unsigned long action,
    struct fb_event *event = data;
    struct fb_info *info = event->info;
    struct fblog_fb *fb;
    + int *blank;

    switch(action) {
    case FB_EVENT_FB_REGISTERED:
    @@ -280,6 +283,44 @@ static int fblog_event(struct notifier_block *self, unsigned long action,
    if (fb)
    fblog_close(fb, true, true);
    break;
    + case FB_EVENT_SUSPEND:
    + /* This is called when the low-level display driver suspends the
    + * video system. We should not access the video system while it
    + * is suspended. This is called with the console lock held. */
    + mutex_lock(&fblog_registration_lock);
    + fb = fblog_fbs[info->node];
    + mutex_unlock(&fblog_registration_lock);
    +
    + if (fb)
    + set_bit(FBLOG_SUSPENDED, &fb->flags);
    + break;
    + case FB_EVENT_RESUME:
    + /* This is called when the low-level display driver resumes
    + * operating. It is called with the console lock held. */
    + mutex_lock(&fblog_registration_lock);
    + fb = fblog_fbs[info->node];
    + mutex_unlock(&fblog_registration_lock);
    +
    + if (fb)
    + clear_bit(FBLOG_SUSPENDED, &fb->flags);
    + break;
    + case FB_EVENT_BLANK:
    + /* This gets called _after_ the framebuffer was successfully
    + * blanked. The console-lock is always held while fb_blank is
    + * called and during this callback. */
    + mutex_lock(&fblog_registration_lock);
    + fb = fblog_fbs[info->node];
    + mutex_unlock(&fblog_registration_lock);
    +
    + if (!fb)
    + break;
    +
    + blank = (int*)event->data;
    + if (*blank == FB_BLANK_UNBLANK)
    + clear_bit(FBLOG_BLANKED, &fb->flags);
    + else
    + set_bit(FBLOG_BLANKED, &fb->flags);
    + break;
    }

    return 0;
    --
    1.7.11.1


    \
     
     \ /
      Last update: 2012-07-09 00:21    [W:0.023 / U:0.624 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site