struct backlight_device *bd;
        struct fb_event *evdata = data;
        struct fb_info *info = evdata->info;
+       const int *fb_blank = evdata->data;
        struct backlight_device *fb_bd = fb_bl_device(info);
-       int node = info->node;
-       int fb_blank = 0;
+       bool fb_on, prev_fb_on;
 
        /* If we aren't interested in this event, skip it immediately ... */
        if (event != FB_EVENT_BLANK)
        if (fb_bd && fb_bd != bd)
                goto out;
 
-       fb_blank = *(int *)evdata->data;
-       if (fb_blank == FB_BLANK_UNBLANK && !bd->fb_bl_on[node]) {
-               bd->fb_bl_on[node] = true;
+       fb_on = fb_blank[0] == FB_BLANK_UNBLANK;
+       prev_fb_on = fb_blank[1] == FB_BLANK_UNBLANK;
+
+       if (fb_on && (!prev_fb_on || !bd->use_count)) {
                if (!bd->use_count++) {
                        bd->props.state &= ~BL_CORE_FBBLANK;
                        backlight_update_status(bd);
                }
-       } else if (fb_blank != FB_BLANK_UNBLANK && bd->fb_bl_on[node]) {
-               bd->fb_bl_on[node] = false;
+       } else if (!fb_on && prev_fb_on && bd->use_count) {
                if (!(--bd->use_count)) {
                        bd->props.state |= BL_CORE_FBBLANK;
                        backlight_update_status(bd);
 
        struct device dev;
 
        /**
-        * @fb_bl_on: The state of individual fbdev's.
-        *
-        * Multiple fbdev's may share one backlight device. The fb_bl_on
-        * records the state of the individual fbdev.
-        */
-       bool fb_bl_on[FB_MAX];
-
-       /**
-        * @use_count: The number of uses of fb_bl_on.
+        * @use_count: The number of unblanked displays.
         */
        int use_count;
 };