linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/2] backlight: update bl status and some bd properties when necessary
@ 2014-01-24  6:04 Liu Ying
  2014-01-24  6:04 ` [PATCH v4 1/2] backlight: update bd state & fb_blank " Liu Ying
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Liu Ying @ 2014-01-24  6:04 UTC (permalink / raw)
  To: jg1.han; +Cc: linux-fbdev, linux-kernel, tomi.valkeinen, dri-devel, plagnioj

We don't have to turn backlight on/off 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 set adds
some logics to record each framebuffer's backlight usage to
determine the backlight device use count and whether the
backlight status should be updated or not.

Liu Ying (2):
  backlight: update bd state & fb_blank properties when necessary
  backlight: update backlight status when necessary

v3->v4:
* Split v3 into 2 patches to separate the change for updating the
  backlight device properties and backlight status, according to
  the comments from Jani Nikula and Jingoo Han.

v2->v3:
* Set fb_blank(*(int *)evdata->data) to bd->props.fb_blank
  when we turn off a blacklight.
* Correct some trivial typos in the commit message.

v1->v2:
* Make the commit message be more specific about the condition
  in which backlight device use count can be increased/decreased.
* Correct the setting for bd->props.fb_blank.

 drivers/video/backlight/backlight.c |   28 +++++++++++++++++++++-------
 include/linux/backlight.h           |    6 ++++++
 2 files changed, 27 insertions(+), 7 deletions(-)

-- 
1.7.9.5



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v4 1/2] backlight: update bd state & fb_blank properties when necessary
  2014-01-24  6:04 [PATCH v4 0/2] backlight: update bl status and some bd properties when necessary Liu Ying
@ 2014-01-24  6:04 ` Liu Ying
  2014-01-24  6:04 ` [PATCH v4 2/2] backlight: update backlight status " Liu Ying
  2014-01-24  8:20 ` [PATCH v4 0/2] backlight: update bl status and some bd properties " Jingoo Han
  2 siblings, 0 replies; 4+ messages in thread
From: Liu Ying @ 2014-01-24  6:04 UTC (permalink / raw)
  To: jg1.han; +Cc: linux-fbdev, linux-kernel, tomi.valkeinen, dri-devel, plagnioj

We don't have to update the state and fb_blank properties of
a backlight device every time a blanking or unblanking event
comes because they may have already been what we want. Another
thought is that one backlight device may be shared by multiple
framebuffers. The backlight driver should take the backlight
device as a resource shared by all the associated framebuffers.
This patch adds some logics to record each framebuffer's backlight
usage to determine the backlight device use count and whether
the two properties should be updated or not. To be more specific,
only one unblank operation on a certain blanked framebuffer may
increase the backlight device's use count by one, while one blank
operation on a certain unblanked framebuffer may decrease the use
count by one, because the userspace is likely to unblank an
unblanked framebuffer or blank a blanked framebuffer.

Signed-off-by: Liu Ying <Ying.Liu@freescale.com>
---
 drivers/video/backlight/backlight.c |   23 ++++++++++++++++++-----
 include/linux/backlight.h           |    6 ++++++
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
index 5d05555..efc9a2d 100644
--- a/drivers/video/backlight/backlight.c
+++ b/drivers/video/backlight/backlight.c
@@ -41,6 +41,8 @@ static int fb_notifier_callback(struct notifier_block *self,
 {
 	struct backlight_device *bd;
 	struct fb_event *evdata = data;
+	int node = evdata->info->node;
+	int fb_blank = 0;
 
 	/* If we aren't interested in this event, skip it immediately ... */
 	if (event != FB_EVENT_BLANK && event != FB_EVENT_CONBLANK)
@@ -51,11 +53,22 @@ static int fb_notifier_callback(struct notifier_block *self,
 	if (bd->ops)
 		if (!bd->ops->check_fb ||
 		    bd->ops->check_fb(bd, evdata->info)) {
-			bd->props.fb_blank = *(int *)evdata->data;
-			if (bd->props.fb_blank = FB_BLANK_UNBLANK)
-				bd->props.state &= ~BL_CORE_FBBLANK;
-			else
-				bd->props.state |= BL_CORE_FBBLANK;
+			fb_blank = *(int *)evdata->data;
+			if (fb_blank = FB_BLANK_UNBLANK &&
+			    !bd->fb_bl_on[node]) {
+				bd->fb_bl_on[node] = true;
+				if (!bd->use_count++) {
+					bd->props.state &= ~BL_CORE_FBBLANK;
+					bd->props.fb_blank = FB_BLANK_UNBLANK;
+				}
+			} else if (fb_blank != FB_BLANK_UNBLANK &&
+				   bd->fb_bl_on[node]) {
+				bd->fb_bl_on[node] = false;
+				if (!(--bd->use_count)) {
+					bd->props.state |= BL_CORE_FBBLANK;
+					bd->props.fb_blank = fb_blank;
+				}
+			}
 			backlight_update_status(bd);
 		}
 	mutex_unlock(&bd->ops_lock);
diff --git a/include/linux/backlight.h b/include/linux/backlight.h
index 5f9cd96..7264742 100644
--- a/include/linux/backlight.h
+++ b/include/linux/backlight.h
@@ -9,6 +9,7 @@
 #define _LINUX_BACKLIGHT_H
 
 #include <linux/device.h>
+#include <linux/fb.h>
 #include <linux/mutex.h>
 #include <linux/notifier.h>
 
@@ -104,6 +105,11 @@ struct backlight_device {
 	struct list_head entry;
 
 	struct device dev;
+
+	/* Multiple framebuffers may share one backlight device */
+	bool fb_bl_on[FB_MAX];
+
+	int use_count;
 };
 
 static inline void backlight_update_status(struct backlight_device *bd)
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v4 2/2] backlight: update backlight status when necessary
  2014-01-24  6:04 [PATCH v4 0/2] backlight: update bl status and some bd properties when necessary Liu Ying
  2014-01-24  6:04 ` [PATCH v4 1/2] backlight: update bd state & fb_blank " Liu Ying
@ 2014-01-24  6:04 ` Liu Ying
  2014-01-24  8:20 ` [PATCH v4 0/2] backlight: update bl status and some bd properties " Jingoo Han
  2 siblings, 0 replies; 4+ messages in thread
From: Liu Ying @ 2014-01-24  6:04 UTC (permalink / raw)
  To: jg1.han; +Cc: linux-fbdev, linux-kernel, tomi.valkeinen, dri-devel, plagnioj

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: Liu Ying <Ying.Liu@freescale.com>
---
 drivers/video/backlight/backlight.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
index efc9a2d..27d3cf2 100644
--- a/drivers/video/backlight/backlight.c
+++ b/drivers/video/backlight/backlight.c
@@ -34,7 +34,7 @@ static const char *const backlight_types[] = {
 			   defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE))
 /* This callback gets called when something important happens inside a
  * 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,
 				unsigned long event, void *data)
@@ -60,6 +60,7 @@ static int fb_notifier_callback(struct notifier_block *self,
 				if (!bd->use_count++) {
 					bd->props.state &= ~BL_CORE_FBBLANK;
 					bd->props.fb_blank = FB_BLANK_UNBLANK;
+					backlight_update_status(bd);
 				}
 			} else if (fb_blank != FB_BLANK_UNBLANK &&
 				   bd->fb_bl_on[node]) {
@@ -67,9 +68,9 @@ static int fb_notifier_callback(struct notifier_block *self,
 				if (!(--bd->use_count)) {
 					bd->props.state |= BL_CORE_FBBLANK;
 					bd->props.fb_blank = fb_blank;
+					backlight_update_status(bd);
 				}
 			}
-			backlight_update_status(bd);
 		}
 	mutex_unlock(&bd->ops_lock);
 	return 0;
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v4 0/2] backlight: update bl status and some bd properties when necessary
  2014-01-24  6:04 [PATCH v4 0/2] backlight: update bl status and some bd properties when necessary Liu Ying
  2014-01-24  6:04 ` [PATCH v4 1/2] backlight: update bd state & fb_blank " Liu Ying
  2014-01-24  6:04 ` [PATCH v4 2/2] backlight: update backlight status " Liu Ying
@ 2014-01-24  8:20 ` Jingoo Han
  2 siblings, 0 replies; 4+ messages in thread
From: Jingoo Han @ 2014-01-24  8:20 UTC (permalink / raw)
  To: 'Liu Ying'
  Cc: 'Jean-Christophe PLAGNIOL-VILLARD',
	'Tomi Valkeinen', linux-fbdev, linux-kernel, dri-devel,
	'Jani Nikula', 'Jingoo Han'

On Friday, January 24, 2014 3:05 PM, Liu Ying wrote:
> 
> We don't have to turn backlight on/off 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 set adds
> some logics to record each framebuffer's backlight usage to
> determine the backlight device use count and whether the
> backlight status should be updated or not.
> 
> Liu Ying (2):
>   backlight: update bd state & fb_blank properties when necessary
>   backlight: update backlight status when necessary

Thank you for sending the v4 patch.
I have no objection against this patch. However, I will wait
for other people's opinions. Then, if there is no objection,
I will ask Andrew Morton to merge this patch into mm-tree.
Thanks.

Best regards,
Jingoo Han

> 
> v3->v4:
> * Split v3 into 2 patches to separate the change for updating the
>   backlight device properties and backlight status, according to
>   the comments from Jani Nikula and Jingoo Han.
> 
> v2->v3:
> * Set fb_blank(*(int *)evdata->data) to bd->props.fb_blank
>   when we turn off a blacklight.
> * Correct some trivial typos in the commit message.
> 
> v1->v2:
> * Make the commit message be more specific about the condition
>   in which backlight device use count can be increased/decreased.
> * Correct the setting for bd->props.fb_blank.
> 
>  drivers/video/backlight/backlight.c |   28 +++++++++++++++++++++-------
>  include/linux/backlight.h           |    6 ++++++
>  2 files changed, 27 insertions(+), 7 deletions(-)
> 
> --
> 1.7.9.5



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-01-24  8:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-24  6:04 [PATCH v4 0/2] backlight: update bl status and some bd properties when necessary Liu Ying
2014-01-24  6:04 ` [PATCH v4 1/2] backlight: update bd state & fb_blank " Liu Ying
2014-01-24  6:04 ` [PATCH v4 2/2] backlight: update backlight status " Liu Ying
2014-01-24  8:20 ` [PATCH v4 0/2] backlight: update bl status and some bd properties " Jingoo Han

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).