LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH v4 0/2] fbcon: user-defined cursor blink interval
@ 2015-01-26 23:09 Scot Doyle
  2015-01-26 23:11 ` [PATCH v4 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Scot Doyle @ 2015-01-26 23:09 UTC (permalink / raw)
  To: Jean-Christophe Plagniol-Villard, Tomi Valkeinen
  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 patch descriptions as suggested by
     Richard Weinberger

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

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

-- 
2.1.4


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

* [PATCH v4 1/2] fbcon: store cursor blink interval in fbcon_ops
  2015-01-26 23:09 [PATCH v4 0/2] fbcon: user-defined cursor blink interval Scot Doyle
@ 2015-01-26 23:11 ` Scot Doyle
  2015-01-26 23:14 ` [PATCH v4 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Scot Doyle @ 2015-01-26 23:11 UTC (permalink / raw)
  To: Jean-Christophe Plagniol-Villard, Tomi Valkeinen
  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] 6+ messages in thread

* [PATCH v4 2/2] fbcon: expose cursor blink interval via sysfs
  2015-01-26 23:09 [PATCH v4 0/2] fbcon: user-defined cursor blink interval Scot Doyle
  2015-01-26 23:11 ` [PATCH v4 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
@ 2015-01-26 23:14 ` Scot Doyle
  2015-01-26 23:29 ` [PATCH v4 0/2] fbcon: user-defined cursor blink interval Richard Weinberger
  2015-01-30  8:02 ` Tomi Valkeinen
  3 siblings, 0 replies; 6+ messages in thread
From: Scot Doyle @ 2015-01-26 23:14 UTC (permalink / raw)
  To: Jean-Christophe Plagniol-Villard, Tomi Valkeinen
  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 | 79 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 7a2030b..19620d2 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -3495,11 +3495,90 @@ err:
 	return count;
 }
 
+static ssize_t show_cursor_blink_ms(struct device *device,
+				    struct device_attribute *attr, char *buf)
+{
+	struct fb_info *info;
+	struct fbcon_ops *ops;
+	int idx, ms = -1;
+
+	if (fbcon_has_exited) {
+		pr_err("%s: framebuffer console exited", __func__);
+		return 0;
+	}
+
+	console_lock();
+	idx = con2fb_map[fg_console];
+
+	if (idx == -1 || registered_fb[idx] == NULL) {
+		pr_err("%s: no console to framebuffer mapping", __func__);
+		goto err;
+	}
+
+	info = registered_fb[idx];
+
+	if ((ops = info->fbcon_par) == NULL) {
+		pr_err("%s: framebuffer has no device info", __func__);
+		goto err;
+	}
+
+	ms = jiffies_to_msecs(ops->blink_jiffies);
+
+err:
+	console_unlock();
+	return snprintf(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;
+
+	if (fbcon_has_exited) {
+		pr_err("%s: framebuffer console exited", __func__);
+		return count;
+	}
+
+	console_lock();
+	idx = con2fb_map[fg_console];
+
+	if (idx == -1 || registered_fb[idx] == NULL) {
+		pr_err("%s: no console to framebuffer mapping", __func__);
+		goto err;
+	}
+
+	info = registered_fb[idx];
+
+	if ((ops = info->fbcon_par) == NULL) {
+		pr_err("%s: framebuffer has no device info", __func__);
+		goto err;
+	}
+
+	if (!kstrtos16(buf, 0, &ms)) {
+		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);
+		}
+	}
+
+err:
+	console_unlock();
+	return count;
+}
+
 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] 6+ messages in thread

* Re: [PATCH v4 0/2] fbcon: user-defined cursor blink interval
  2015-01-26 23:09 [PATCH v4 0/2] fbcon: user-defined cursor blink interval Scot Doyle
  2015-01-26 23:11 ` [PATCH v4 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
  2015-01-26 23:14 ` [PATCH v4 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
@ 2015-01-26 23:29 ` Richard Weinberger
  2015-01-27  1:06   ` Scot Doyle
  2015-01-30  8:02 ` Tomi Valkeinen
  3 siblings, 1 reply; 6+ messages in thread
From: Richard Weinberger @ 2015-01-26 23:29 UTC (permalink / raw)
  To: Scot Doyle, Jean-Christophe Plagniol-Villard, Tomi Valkeinen
  Cc: Geert Uytterhoeven, Richard Weinberger, linux-fbdev, linux-kernel

Am 27.01.2015 um 00:09 schrieb Scot Doyle:
> 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 patch descriptions as suggested by
>      Richard Weinberger

Hehe, no need to resend immediately a v4, I'm just curios about the use case. :)
Why do users want a different blink interval? What is the use case?
And what are these users? Most people use a fbcon only for a few moments
to fix/restart X11.

Thanks,
//richard

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

* Re: [PATCH v4 0/2] fbcon: user-defined cursor blink interval
  2015-01-26 23:29 ` [PATCH v4 0/2] fbcon: user-defined cursor blink interval Richard Weinberger
@ 2015-01-27  1:06   ` Scot Doyle
  0 siblings, 0 replies; 6+ messages in thread
From: Scot Doyle @ 2015-01-27  1:06 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: Jean-Christophe Plagniol-Villard, Tomi Valkeinen,
	Geert Uytterhoeven, Richard Weinberger, linux-fbdev,
	linux-kernel

On Tue, 27 Jan 2015, Richard Weinberger wrote:

> Am 27.01.2015 um 00:09 schrieb Scot Doyle:
> > 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 patch descriptions as suggested by
> >      Richard Weinberger
> 
> Hehe, no need to resend immediately a v4, I'm just curios about the use case. :)
> Why do users want a different blink interval? What is the use case?
> And what are these users? Most people use a fbcon only for a few moments
> to fix/restart X11.
> 
> Thanks,
> //richard

Ah, I see! With multiple ncurses windows, some of which contain reversed 
characters, a blinking underscore is helpful for locating the cursor.
But, the 200 millisecond interval can be distracting. Another example is 
http://unix.stackexchange.com/questions/55423/how-to-change-cursor-shape-color-and-blinkrate-of-linux-console

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

* Re: [PATCH v4 0/2] fbcon: user-defined cursor blink interval
  2015-01-26 23:09 [PATCH v4 0/2] fbcon: user-defined cursor blink interval Scot Doyle
                   ` (2 preceding siblings ...)
  2015-01-26 23:29 ` [PATCH v4 0/2] fbcon: user-defined cursor blink interval Richard Weinberger
@ 2015-01-30  8:02 ` Tomi Valkeinen
  3 siblings, 0 replies; 6+ messages in thread
From: Tomi Valkeinen @ 2015-01-30  8:02 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: 583 bytes --]

On 27/01/15 01:09, Scot Doyle wrote:
> 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

When I said "return an error" I did not mean "print an error message".
You should return an error code from the show and store functions when
something went wrong.

 Tomi




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

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

end of thread, other threads:[~2015-01-30  8:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-26 23:09 [PATCH v4 0/2] fbcon: user-defined cursor blink interval Scot Doyle
2015-01-26 23:11 ` [PATCH v4 1/2] fbcon: store cursor blink interval in fbcon_ops Scot Doyle
2015-01-26 23:14 ` [PATCH v4 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle
2015-01-26 23:29 ` [PATCH v4 0/2] fbcon: user-defined cursor blink interval Richard Weinberger
2015-01-27  1:06   ` Scot Doyle
2015-01-30  8:02 ` 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).