[PATCH 1/2] fbdev: Add fbset -a support

DORMANTno replies

From: "Antonino A. Daplas" <adaplas@gmail.com>
Date: 2005-07-27 00:38:30

   Add capability to fbdev to listen to the FB_ACTIVATE_ALL flag.
   If set, it notifies fbcon that all consoles must be set to
   the current var.

   From: Antonino Daplas [off-list ref]
   Signed-off-by: Antonino Daplas [off-list ref]
---
drivers/video/console/fbcon.c |   48 ++++++++++++++++++++++++++++++++++++++++++
drivers/video/fbmem.c         |    6 +++--
include/linux/fb.h            |    3 ++
3 files changed, 55 insertions(+), 2 deletions(-)


Index: drivers/video/console/fbcon.c
===================================================================
--- 5ab26ac17f9da3181ac77da24d40bf1c3447cf6a/drivers/video/console/fbcon.c  (mode:100644)
+++ b6ae21b3932b059ce4bf95d0254f9a90650b49f9/drivers/video/console/fbcon.c  (mode:100644)
@@ -2592,6 +2592,51 @@
	}
}

+static void fbcon_set_all_vcs(struct fb_info *info)
+{
+	struct fbcon_ops *ops = info->fbcon_par;
+	struct vc_data *vc;
+	struct display *p;
+	int i, rows, cols;
+
+	if (!ops || ops->currcon < 0)
+		return;
+
+	for (i = 0; i < MAX_NR_CONSOLES; i++) {
+		vc = vc_cons[i].d;
+		if (!vc || vc->vc_mode != KD_TEXT ||
+		    registered_fb[con2fb_map[i]] != info)
+			continue;
+
+		p = &fb_display[vc->vc_num];
+
+		info->var.xoffset = info->var.yoffset = p->yscroll = 0;
+		var_to_display(p, &info->var, info);
+		cols = info->var.xres / vc->vc_font.width;
+		rows = info->var.yres / vc->vc_font.height;
+		vc_resize(vc, cols, rows);
+
+		if (CON_IS_VISIBLE(vc)) {
+			updatescrollmode(p, info, vc);
+			scrollback_max = 0;
+			scrollback_current = 0;
+			update_var(vc->vc_num, info);
+			fbcon_set_palette(vc, color_table);
+			update_screen(vc);
+			if (softback_buf) {
+				int l = fbcon_softback_size / vc->vc_size_row;
+				if (l > 5)
+					softback_end = softback_buf + l * vc->vc_size_row;
+				else {
+					/* Smaller scrollback makes no sense, and 0
+					   would screw the operation totally */
+					softback_top = 0;
+				}
+			}
+		}
+	}
+}
+
static int fbcon_mode_deleted(struct fb_info *info,
			      struct fb_videomode *mode)
{
@@ -2707,6 +2752,9 @@
	case FB_EVENT_MODE_CHANGE:
		fbcon_modechanged(info);
		break;
+	case FB_EVENT_MODE_CHANGE_ALL:
+		fbcon_set_all_vcs(info);
+		break;
	case FB_EVENT_MODE_DELETE:
		mode = event->data;
		ret = fbcon_mode_deleted(info, mode);
Index: drivers/video/fbmem.c
===================================================================
--- 5ab26ac17f9da3181ac77da24d40bf1c3447cf6a/drivers/video/fbmem.c  (mode:100644)
+++ b6ae21b3932b059ce4bf95d0254f9a90650b49f9/drivers/video/fbmem.c  (mode:100644)
@@ -682,11 +682,13 @@
			if (!err && info->flags & FBINFO_MISC_USEREVENT) {
				struct fb_event event;
+				int evnt = (var->activate & FB_ACTIVATE_ALL) ?
+					FB_EVENT_MODE_CHANGE_ALL :
+					FB_EVENT_MODE_CHANGE;

				info->flags &= ~FBINFO_MISC_USEREVENT;
				event.info = info;
-				notifier_call_chain(&fb_notifier_list,
-						    FB_EVENT_MODE_CHANGE,
+				notifier_call_chain(&fb_notifier_list, evnt,
						    &event);
			}
		}
Index: include/linux/fb.h
===================================================================
--- 5ab26ac17f9da3181ac77da24d40bf1c3447cf6a/include/linux/fb.h  (mode:100644)
+++ b6ae21b3932b059ce4bf95d0254f9a90650b49f9/include/linux/fb.h  (mode:100644)
@@ -495,6 +495,9 @@
#define FB_EVENT_BLANK                  0x08
/*      Private modelist is to be replaced */
#define FB_EVENT_NEW_MODELIST           0x09
+/*	The resolution of the passed in fb_info about to change and
+        all vc's should be changed         */
+#define FB_EVENT_MODE_CHANGE_ALL	0x0A

struct fb_event {
	struct fb_info *info;



-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help