Commit 8c16f330 authored by Liu Ying's avatar Liu Ying Committed by Linus Torvalds

backlight: update backlight status when necessary

We don't have to update a backlight status every time a blanking or
unblanking event comes because the backlight status may have already
been what we want.  Another thought is that one backlight device may be
shared by multiple framebuffers.  We don't hope blanking one of the
framebuffers may turn the backlight off for all the other framebuffers,
since they are likely being active to display something.

This patch makes the backlight status be updated only when the relevant
backlight device's use count changes from zero to one or from one to
zero.
Signed-off-by: default avatarLiu Ying <Ying.Liu@freescale.com>
Cc: Jingoo Han <jg1.han@samsung.com>
Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent a55944ca
...@@ -34,7 +34,7 @@ static const char *const backlight_types[] = { ...@@ -34,7 +34,7 @@ static const char *const backlight_types[] = {
defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)) defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE))
/* This callback gets called when something important happens inside a /* This callback gets called when something important happens inside a
* framebuffer driver. We're looking if that important event is blanking, * framebuffer driver. We're looking if that important event is blanking,
* and if it is, we're switching backlight power as well ... * and if it is and necessary, we're switching backlight power as well ...
*/ */
static int fb_notifier_callback(struct notifier_block *self, static int fb_notifier_callback(struct notifier_block *self,
unsigned long event, void *data) unsigned long event, void *data)
...@@ -60,6 +60,7 @@ static int fb_notifier_callback(struct notifier_block *self, ...@@ -60,6 +60,7 @@ static int fb_notifier_callback(struct notifier_block *self,
if (!bd->use_count++) { if (!bd->use_count++) {
bd->props.state &= ~BL_CORE_FBBLANK; bd->props.state &= ~BL_CORE_FBBLANK;
bd->props.fb_blank = FB_BLANK_UNBLANK; bd->props.fb_blank = FB_BLANK_UNBLANK;
backlight_update_status(bd);
} }
} else if (fb_blank != FB_BLANK_UNBLANK && } else if (fb_blank != FB_BLANK_UNBLANK &&
bd->fb_bl_on[node]) { bd->fb_bl_on[node]) {
...@@ -67,9 +68,9 @@ static int fb_notifier_callback(struct notifier_block *self, ...@@ -67,9 +68,9 @@ static int fb_notifier_callback(struct notifier_block *self,
if (!(--bd->use_count)) { if (!(--bd->use_count)) {
bd->props.state |= BL_CORE_FBBLANK; bd->props.state |= BL_CORE_FBBLANK;
bd->props.fb_blank = fb_blank; bd->props.fb_blank = fb_blank;
backlight_update_status(bd);
} }
} }
backlight_update_status(bd);
} }
mutex_unlock(&bd->ops_lock); mutex_unlock(&bd->ops_lock);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment