* [PATCH v5 0/2] fbcon: user-defined cursor blink interval @ 2015-01-30 8:40 ` Scot Doyle 0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH v5 0/2] fbcon: user-defined cursor blink interval @ 2015-01-30 8:40 ` Scot Doyle 0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH v5 1/2] fbcon: store cursor blink interval in fbcon_ops 2015-01-30 8:40 ` Scot Doyle @ 2015-01-30 8:43 ` Scot Doyle -1 siblings, 0 replies; 14+ 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 related [flat|nested] 14+ messages in thread
* [PATCH v5 1/2] fbcon: store cursor blink interval in fbcon_ops @ 2015-01-30 8:43 ` Scot Doyle 0 siblings, 0 replies; 14+ 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 related [flat|nested] 14+ messages in thread
* [PATCH v5 2/2] fbcon: expose cursor blink interval via sysfs 2015-01-30 8:40 ` Scot Doyle @ 2015-01-30 8:44 ` Scot Doyle -1 siblings, 0 replies; 14+ 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 related [flat|nested] 14+ messages in thread
* [PATCH v5 2/2] fbcon: expose cursor blink interval via sysfs @ 2015-01-30 8:44 ` Scot Doyle 0 siblings, 0 replies; 14+ 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 related [flat|nested] 14+ messages in thread
* [PATCH v6 0/2] fbcon: user-defined cursor blink interval 2015-01-30 8:44 ` Scot Doyle @ 2015-01-30 9:35 ` Scot Doyle -1 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH v6 0/2] fbcon: user-defined cursor blink interval @ 2015-01-30 9:35 ` Scot Doyle 0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH v6 1/2] fbcon: store cursor blink interval in fbcon_ops 2015-01-30 9:35 ` Scot Doyle @ 2015-01-30 9:37 ` Scot Doyle -1 siblings, 0 replies; 14+ 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 related [flat|nested] 14+ messages in thread
* [PATCH v6 1/2] fbcon: store cursor blink interval in fbcon_ops @ 2015-01-30 9:37 ` Scot Doyle 0 siblings, 0 replies; 14+ 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 related [flat|nested] 14+ messages in thread
* [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs 2015-01-30 9:35 ` Scot Doyle @ 2015-01-30 9:40 ` Scot Doyle -1 siblings, 0 replies; 14+ 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 related [flat|nested] 14+ messages in thread
* [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs @ 2015-01-30 9:40 ` Scot Doyle 0 siblings, 0 replies; 14+ 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 related [flat|nested] 14+ messages in thread
* Re: [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs 2015-01-30 9:40 ` Scot Doyle @ 2015-02-20 12:04 ` Tomi Valkeinen -1 siblings, 0 replies; 14+ 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] 14+ messages in thread
* Re: [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs @ 2015-02-20 12:04 ` Tomi Valkeinen 0 siblings, 0 replies; 14+ 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] 14+ messages in thread
end of thread, other threads:[~2015-02-20 12:05 UTC | newest] Thread overview: 14+ 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: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:43 ` Scot Doyle 2015-01-30 8:44 ` [PATCH v5 2/2] fbcon: expose cursor blink interval via sysfs 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 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:37 ` Scot Doyle 2015-01-30 9:40 ` [PATCH v6 2/2] fbcon: expose cursor blink interval via sysfs Scot Doyle 2015-01-30 9:40 ` Scot Doyle 2015-02-20 12:04 ` Tomi Valkeinen 2015-02-20 12:04 ` Tomi Valkeinen
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.