LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH v5 0/2] fbcon: user-defined cursor blink interval
@ 2015-01-30  8:40 Scot Doyle
  2015-01-30  8:43 ` [PATCH v5 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
  2015-01-30  8:44 ` [PATCH v5 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
  0 siblings, 2 replies; 7+ messages in thread
From: Scot Doyle @ 2015-01-30  8:40 UTC (permalink / raw)
  To: Tomi Valkeinen, Jean-Christophe Plagniol-Villard
  Cc: Geert Uytterhoeven, Richard Weinberger, linux-fbdev, linux-kernel

Since users prefer different fbcon cursor blink intervals, allow the
interval to be set via sysfs. The current interval of 200 milliseconds
is retained as the default. Tested with intelfb.

v2:  Use kstrtos16() instead of kstrtoul() and min_t() as suggested by
     Geert Uytterhoeven
v3:  Add error messages as suggested by Tomi Valkeinen
v4:  Add rationale into the patches as suggested by Richard Weinberger
v5:  Return error codes instead of logging error messages (my mistake)

Scot Doyle (2):
  fbcon: store cursor blink interval in fbcon_ops
  fbcon: expose cursor blink interval via sysfs

 drivers/video/console/fbcon.c | 71 +++++++++++++++++++++++++++++++++++++++++--
 drivers/video/console/fbcon.h |  1 +
 2 files changed, 70 insertions(+), 2 deletions(-)

-- 
2.1.4


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

* [PATCH v5 1/2] fbcon: store cursor blink interval in fbcon_ops
  2015-01-30  8:40 [PATCH v5 0/2] fbcon: user-defined cursor blink interval Scot Doyle
@ 2015-01-30  8:43 ` Scot Doyle
  2015-01-30  8:44 ` [PATCH v5 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
  1 sibling, 0 replies; 7+ messages in thread
From: Scot Doyle @ 2015-01-30  8:43 UTC (permalink / raw)
  To: Tomi Valkeinen, Jean-Christophe Plagniol-Villard
  Cc: Geert Uytterhoeven, Richard Weinberger, linux-fbdev, linux-kernel

fbcon toggles cursor display state every 200 milliseconds when blinking.
Since users prefer different toggle intervals, prepare to expose the
interval via sysfs by moving it to fbdev_ops and setting the default
to 200 milliseconds.

Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
---
 drivers/video/console/fbcon.c | 5 +++--
 drivers/video/console/fbcon.h | 1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index ea43724..7a2030b 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -405,7 +405,7 @@ static void cursor_timer_handler(unsigned long dev_addr)
 	struct fbcon_ops *ops = info->fbcon_par;
 
 	queue_work(system_power_efficient_wq, &info->queue);
-	mod_timer(&ops->cursor_timer, jiffies + HZ/5);
+	mod_timer(&ops->cursor_timer, jiffies + ops->blink_jiffies);
 }
 
 static void fbcon_add_cursor_timer(struct fb_info *info)
@@ -420,7 +420,7 @@ static void fbcon_add_cursor_timer(struct fb_info *info)
 
 		init_timer(&ops->cursor_timer);
 		ops->cursor_timer.function = cursor_timer_handler;
-		ops->cursor_timer.expires = jiffies + HZ / 5;
+		ops->cursor_timer.expires = jiffies + ops->blink_jiffies;
 		ops->cursor_timer.data = (unsigned long ) info;
 		add_timer(&ops->cursor_timer);
 		ops->flags |= FBCON_FLAGS_CURSOR_TIMER;
@@ -959,6 +959,7 @@ static const char *fbcon_startup(void)
 	ops->currcon = -1;
 	ops->graphics = 1;
 	ops->cur_rotate = -1;
+	ops->blink_jiffies = msecs_to_jiffies(200);
 	info->fbcon_par = ops;
 	p->con_rotate = initial_rotation;
 	set_blitting_type(vc, info);
diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h
index 6bd2e0c..642c4e7 100644
--- a/drivers/video/console/fbcon.h
+++ b/drivers/video/console/fbcon.h
@@ -70,6 +70,7 @@ struct fbcon_ops {
 	struct fb_cursor cursor_state;
 	struct display *p;
         int    currcon;	                /* Current VC. */
+	int    blink_jiffies;
 	int    cursor_flash;
 	int    cursor_reset;
 	int    blank_state;
-- 
2.1.4


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

* [PATCH v5 2/2] fbcon: expose cursor blink interval via sysfs
  2015-01-30  8:40 [PATCH v5 0/2] fbcon: user-defined cursor blink interval Scot Doyle
  2015-01-30  8:43 ` [PATCH v5 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
@ 2015-01-30  8:44 ` Scot Doyle
  2015-01-30  9:35   ` [PATCH v6 0/2] fbcon: user-defined cursor blink interval Scot Doyle
  1 sibling, 1 reply; 7+ messages in thread
From: Scot Doyle @ 2015-01-30  8:44 UTC (permalink / raw)
  To: Tomi Valkeinen, Jean-Christophe Plagniol-Villard
  Cc: Geert Uytterhoeven, Richard Weinberger, linux-fbdev, linux-kernel

fbcon toggles cursor display state every 200 milliseconds when blinking.
Since users prefer different toggle intervals, expose the interval via
/sys/class/graphics/fbcon/cursor_blink_ms so that it may be customized.

Values written to the interface set the approximate time interval in
milliseconds between cursor toggles, from 1 to 32767. Since the interval
is stored internally as a number of jiffies, the millisecond value read
from the interface may not exactly match the entered value.

An outstanding blink timer is reset after a new value is entered.

If the cursor blink is disabled, either via the 'cursor_blink' boolean
setting or some other mechanism, the 'cursor_blink_ms' setting may still
be modified. The new value will be used if the blink is reactivated.

Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
---
 drivers/video/console/fbcon.c | 66 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 7a2030b..f026f65 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -3495,11 +3495,77 @@ err:
 	return count;
 }
 
+static ssize_t show_cursor_blink_ms(struct device *device,
+				    struct device_attribute *attr, char *buf)
+{
+	struct fbcon_ops *ops;
+	int idx, ms = -1;
+
+	if (fbcon_has_exited)
+		return -ENODEV;
+
+	console_lock();
+	idx = con2fb_map[fg_console];
+
+	if (idx != -1 && registered_fb[idx] != NULL) {
+		ops = ((struct fb_info *)registered_fb[idx])->fbcon_par;
+		if (ops != NULL)
+			ms = jiffies_to_msecs(ops->blink_jiffies);
+	}
+
+	console_unlock();
+	return ms < 0 ? -ENODEV : scnprintf(buf, PAGE_SIZE, "%d\n", ms);
+}
+
+static ssize_t store_cursor_blink_ms(struct device *device,
+				     struct device_attribute *attr,
+				     const char *buf, size_t count)
+{
+	struct fb_info *info;
+	struct fbcon_ops *ops;
+	int idx;
+	short ms;
+	int r = -ENODEV;
+
+	if (fbcon_has_exited)
+		return r;
+
+	console_lock();
+	idx = con2fb_map[fg_console];
+
+	if (idx == -1 || registered_fb[idx] == NULL)
+		goto err;
+
+	info = registered_fb[idx];
+	ops = info->fbcon_par;
+
+	if (ops == NULL)
+		goto err;
+
+	if (!kstrtos16(buf, 0, &ms) && ms > 0) {
+		//ops->blink_jiffies = max_t(int, msecs_to_jiffies(ms), 1);
+		ops->blink_jiffies = msecs_to_jiffies(ms);
+		if (info->queue.func == fb_flashcursor &&
+		    ops->flags & FBCON_FLAGS_CURSOR_TIMER) {
+			fbcon_del_cursor_timer(info);
+			fbcon_add_cursor_timer(info);
+		}
+		r = count;
+	} else
+		r = -EINVAL;
+
+err:
+	console_unlock();
+	return r;
+}
+
 static struct device_attribute device_attrs[] = {
 	__ATTR(rotate, S_IRUGO|S_IWUSR, show_rotate, store_rotate),
 	__ATTR(rotate_all, S_IWUSR, NULL, store_rotate_all),
 	__ATTR(cursor_blink, S_IRUGO|S_IWUSR, show_cursor_blink,
 	       store_cursor_blink),
+	__ATTR(cursor_blink_ms, S_IRUGO|S_IWUSR, show_cursor_blink_ms,
+	       store_cursor_blink_ms),
 };
 
 static int fbcon_init_device(void)
-- 
2.1.4


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

* [PATCH v6 0/2] fbcon: user-defined cursor blink interval
  2015-01-30  8:44 ` [PATCH v5 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
@ 2015-01-30  9:35   ` Scot Doyle
  2015-01-30  9:37     ` [PATCH v6 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
  2015-01-30  9:40     ` [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
  0 siblings, 2 replies; 7+ messages in thread
From: Scot Doyle @ 2015-01-30  9:35 UTC (permalink / raw)
  To: Tomi Valkeinen, Jean-Christophe Plagniol-Villard
  Cc: Geert Uytterhoeven, Richard Weinberger, linux-fbdev, linux-kernel

Since users prefer different fbcon cursor blink intervals, allow the
interval to be set via sysfs. The current interval of 200 milliseconds
is retained as the default. Tested with intelfb.

v2:  Use kstrtos16() instead of kstrtoul() and min_t() as suggested by
     Geert Uytterhoeven
v3:  Add error messages as suggested by Tomi Valkeinen
v4:  Add rationale into the patches as suggested by Richard Weinberger
v5:  Return error codes instead of logging error messages (my mistake)
v6:  Uncomment the correct line (my mistake again!)

Scot Doyle (2):
  fbcon: store cursor blink interval in fbcon_ops
  fbcon: expose cursor blink interval via sysfs

 drivers/video/console/fbcon.c | 70 +++++++++++++++++++++++++++++++++++++++++--
 drivers/video/console/fbcon.h |  1 +
 2 files changed, 69 insertions(+), 2 deletions(-)

-- 
2.1.4


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

* [PATCH v6 1/2] fbcon: store cursor blink interval in fbcon_ops
  2015-01-30  9:35   ` [PATCH v6 0/2] fbcon: user-defined cursor blink interval Scot Doyle
@ 2015-01-30  9:37     ` Scot Doyle
  2015-01-30  9:40     ` [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
  1 sibling, 0 replies; 7+ messages in thread
From: Scot Doyle @ 2015-01-30  9:37 UTC (permalink / raw)
  To: Tomi Valkeinen, Jean-Christophe Plagniol-Villard
  Cc: Geert Uytterhoeven, Richard Weinberger, linux-fbdev, linux-kernel

fbcon toggles cursor display state every 200 milliseconds when blinking.
Since users prefer different toggle intervals, prepare to expose the
interval via sysfs by moving it to fbdev_ops and setting the default
to 200 milliseconds.

Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
---
 drivers/video/console/fbcon.c | 5 +++--
 drivers/video/console/fbcon.h | 1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index ea43724..7a2030b 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -405,7 +405,7 @@ static void cursor_timer_handler(unsigned long dev_addr)
 	struct fbcon_ops *ops = info->fbcon_par;
 
 	queue_work(system_power_efficient_wq, &info->queue);
-	mod_timer(&ops->cursor_timer, jiffies + HZ/5);
+	mod_timer(&ops->cursor_timer, jiffies + ops->blink_jiffies);
 }
 
 static void fbcon_add_cursor_timer(struct fb_info *info)
@@ -420,7 +420,7 @@ static void fbcon_add_cursor_timer(struct fb_info *info)
 
 		init_timer(&ops->cursor_timer);
 		ops->cursor_timer.function = cursor_timer_handler;
-		ops->cursor_timer.expires = jiffies + HZ / 5;
+		ops->cursor_timer.expires = jiffies + ops->blink_jiffies;
 		ops->cursor_timer.data = (unsigned long ) info;
 		add_timer(&ops->cursor_timer);
 		ops->flags |= FBCON_FLAGS_CURSOR_TIMER;
@@ -959,6 +959,7 @@ static const char *fbcon_startup(void)
 	ops->currcon = -1;
 	ops->graphics = 1;
 	ops->cur_rotate = -1;
+	ops->blink_jiffies = msecs_to_jiffies(200);
 	info->fbcon_par = ops;
 	p->con_rotate = initial_rotation;
 	set_blitting_type(vc, info);
diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h
index 6bd2e0c..642c4e7 100644
--- a/drivers/video/console/fbcon.h
+++ b/drivers/video/console/fbcon.h
@@ -70,6 +70,7 @@ struct fbcon_ops {
 	struct fb_cursor cursor_state;
 	struct display *p;
         int    currcon;	                /* Current VC. */
+	int    blink_jiffies;
 	int    cursor_flash;
 	int    cursor_reset;
 	int    blank_state;
-- 
2.1.4


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

* [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs
  2015-01-30  9:35   ` [PATCH v6 0/2] fbcon: user-defined cursor blink interval Scot Doyle
  2015-01-30  9:37     ` [PATCH v6 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
@ 2015-01-30  9:40     ` Scot Doyle
  2015-02-20 12:04       ` Tomi Valkeinen
  1 sibling, 1 reply; 7+ messages in thread
From: Scot Doyle @ 2015-01-30  9:40 UTC (permalink / raw)
  To: Tomi Valkeinen, Jean-Christophe Plagniol-Villard
  Cc: Geert Uytterhoeven, Richard Weinberger, linux-fbdev, linux-kernel

fbcon toggles cursor display state every 200 milliseconds when blinking.
Since users prefer different toggle intervals, expose the interval via
/sys/class/graphics/fbcon/cursor_blink_ms so that it may be customized.

Values written to the interface set the approximate time interval in
milliseconds between cursor toggles, from 1 to 32767. Since the interval
is stored internally as a number of jiffies, the millisecond value read
from the interface may not exactly match the entered value.

An outstanding blink timer is reset after a new value is entered.

If the cursor blink is disabled, either via the 'cursor_blink' boolean
setting or some other mechanism, the 'cursor_blink_ms' setting may still
be modified. The new value will be used if the blink is reactivated.

Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
---
 drivers/video/console/fbcon.c | 65 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 7a2030b..7baa333 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -3495,11 +3495,76 @@ err:
 	return count;
 }
 
+static ssize_t show_cursor_blink_ms(struct device *device,
+				    struct device_attribute *attr, char *buf)
+{
+	struct fbcon_ops *ops;
+	int idx, ms = -1;
+
+	if (fbcon_has_exited)
+		return -ENODEV;
+
+	console_lock();
+	idx = con2fb_map[fg_console];
+
+	if (idx != -1 && registered_fb[idx] != NULL) {
+		ops = ((struct fb_info *)registered_fb[idx])->fbcon_par;
+		if (ops != NULL)
+			ms = jiffies_to_msecs(ops->blink_jiffies);
+	}
+
+	console_unlock();
+	return ms < 0 ? -ENODEV : scnprintf(buf, PAGE_SIZE, "%d\n", ms);
+}
+
+static ssize_t store_cursor_blink_ms(struct device *device,
+				     struct device_attribute *attr,
+				     const char *buf, size_t count)
+{
+	struct fb_info *info;
+	struct fbcon_ops *ops;
+	int idx;
+	short ms;
+	int r = -ENODEV;
+
+	if (fbcon_has_exited)
+		return r;
+
+	console_lock();
+	idx = con2fb_map[fg_console];
+
+	if (idx == -1 || registered_fb[idx] == NULL)
+		goto err;
+
+	info = registered_fb[idx];
+	ops = info->fbcon_par;
+
+	if (ops == NULL)
+		goto err;
+
+	if (!kstrtos16(buf, 0, &ms) && ms > 0) {
+		ops->blink_jiffies = max_t(int, msecs_to_jiffies(ms), 1);
+		if (info->queue.func == fb_flashcursor &&
+		    ops->flags & FBCON_FLAGS_CURSOR_TIMER) {
+			fbcon_del_cursor_timer(info);
+			fbcon_add_cursor_timer(info);
+		}
+		r = count;
+	} else
+		r = -EINVAL;
+
+err:
+	console_unlock();
+	return r;
+}
+
 static struct device_attribute device_attrs[] = {
 	__ATTR(rotate, S_IRUGO|S_IWUSR, show_rotate, store_rotate),
 	__ATTR(rotate_all, S_IWUSR, NULL, store_rotate_all),
 	__ATTR(cursor_blink, S_IRUGO|S_IWUSR, show_cursor_blink,
 	       store_cursor_blink),
+	__ATTR(cursor_blink_ms, S_IRUGO|S_IWUSR, show_cursor_blink_ms,
+	       store_cursor_blink_ms),
 };
 
 static int fbcon_init_device(void)
-- 
2.1.4


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

* Re: [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs
  2015-01-30  9:40     ` [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
@ 2015-02-20 12:04       ` Tomi Valkeinen
  0 siblings, 0 replies; 7+ messages in thread
From: Tomi Valkeinen @ 2015-02-20 12:04 UTC (permalink / raw)
  To: Scot Doyle, Jean-Christophe Plagniol-Villard
  Cc: Geert Uytterhoeven, Richard Weinberger, linux-fbdev, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1844 bytes --]

On 30/01/15 11:40, Scot Doyle wrote:
> fbcon toggles cursor display state every 200 milliseconds when blinking.
> Since users prefer different toggle intervals, expose the interval via
> /sys/class/graphics/fbcon/cursor_blink_ms so that it may be customized.
> 
> Values written to the interface set the approximate time interval in
> milliseconds between cursor toggles, from 1 to 32767. Since the interval
> is stored internally as a number of jiffies, the millisecond value read
> from the interface may not exactly match the entered value.
> 
> An outstanding blink timer is reset after a new value is entered.
> 
> If the cursor blink is disabled, either via the 'cursor_blink' boolean
> setting or some other mechanism, the 'cursor_blink_ms' setting may still
> be modified. The new value will be used if the blink is reactivated.
> 
> Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
> ---
>  drivers/video/console/fbcon.c | 65 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 65 insertions(+)
> 
> diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
> index 7a2030b..7baa333 100644
> --- a/drivers/video/console/fbcon.c
> +++ b/drivers/video/console/fbcon.c
> @@ -3495,11 +3495,76 @@ err:
>  	return count;
>  }
>  
> +static ssize_t show_cursor_blink_ms(struct device *device,
> +				    struct device_attribute *attr, char *buf)
> +{
> +	struct fbcon_ops *ops;
> +	int idx, ms = -1;
> +
> +	if (fbcon_has_exited)
> +		return -ENODEV;
> +
> +	console_lock();
> +	idx = con2fb_map[fg_console];
> +
> +	if (idx != -1 && registered_fb[idx] != NULL) {
> +		ops = ((struct fb_info *)registered_fb[idx])->fbcon_par;

I don't think the above typecast is needed. I can remove the typecast
when applying to my tree.

So queuing for 3.21. Thanks!

 Tomi



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

end of thread, other threads:[~2015-02-20 12:05 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-30  8:40 [PATCH v5 0/2] fbcon: user-defined cursor blink interval Scot Doyle
2015-01-30  8:43 ` [PATCH v5 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
2015-01-30  8:44 ` [PATCH v5 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
2015-01-30  9:35   ` [PATCH v6 0/2] fbcon: user-defined cursor blink interval Scot Doyle
2015-01-30  9:37     ` [PATCH v6 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
2015-01-30  9:40     ` [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
2015-02-20 12:04       ` Tomi Valkeinen

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).