All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Yoshii <yoshii.takashi@renesas.com>
To: "Ville Syrjälä" <syrjala@sci.fi>,
	linux-fbdev-devel@lists.sourceforge.net
Subject: [PATCH] Add fb_check_var() for fixed mode device.
Date: Fri, 29 Aug 2008 14:15:06 +0900	[thread overview]
Message-ID: <48B785DA.1030408@renesas.com> (raw)
In-Reply-To: <20080828074521.GO16680@sci.fi>

Sounds good.
> 4. Provide a generic check_var() that does some basic sanity checking
> against info->var (eg. check xres, yres and bits_per_pixel).
How about this.
Any comments? Expecially about what to check, what to restore.

Cheers,
/yoshii # Restoring pixclock would be a workaround for Xorg issue :)

drivers/video/fbmem.c:fb_check_var()
 New function for fixed mode device which doesn't provide its own
 check_var function.

Signed-off-by: Takashi YOSHII <yoshii.takashi@renesas.com>

diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index c6b8e92..ff94eaf 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -904,6 +904,56 @@ static int fb_check_caps(struct fb_info *info, struct fb_var_screeninfo *var,
 	return err;
 }
 
+/* Sanity check for drivers which can't change video mode */
+static int
+fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
+{
+	struct fb_var_screeninfo *constant = &info->var;
+        __u32 xoffset = var->xoffset;
+	__u32 yoffset = var->yoffset;
+	__u32 activate = var->activate;
+	__u32 yres = (constant->vmode & FB_VMODE_YWRAP)? 0: var->yres; 
+
+	/* do round _up_ */
+	if (var->xres_virtual < xoffset + var->xres)
+		var->xres_virtual = xoffset + var->xres;
+	if (var->yres_virtual < yoffset + yres)
+		var->yres_virtual = yoffset + yres;
+
+	/* bigger is error, smaller is OK */
+	if( ( var->xres > constant->xres )
+	  ||( var->yres > constant->yres )
+	  ||( var->xres_virtual > constant->xres_virtual )
+	  ||( var->yres_virtual > constant->yres_virtual ))
+		return -EINVAL;
+
+	/* only length are checked for bitfields */
+	if( ( var->bits_per_pixel > constant->bits_per_pixel )
+	  ||( var->red.length > constant->red.length )
+	  ||( var->green.length > constant->green.length )
+	  ||( var->blue.length > constant->blue.length ))
+		return -EINVAL;
+
+	/* boolean parameters can't be rounded, should be equal */
+	if( ( !var->grayscale != !constant->grayscale )
+	  ||( !var->nonstd != !constant->nonstd )
+	  ||( var->vmode != constant->vmode ))
+		return -EINVAL;
+
+	/* pan is acceptable only if we have fb_pan_display) */
+	if ( (var->yoffset || var->xoffset) && !info->fbops->fb_pan_display )
+		return -EINVAL;
+
+	/* copy most */
+	*var = *constant;
+	/* resotore some that are not a part of viede mode */
+	var->xoffset = xoffset;
+	var->yoffset = yoffset;
+	var->activate = activate;
+
+	return 0;
+}
+
 int
 fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
 {
@@ -940,9 +990,11 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
 
 		if (info->fbops->fb_check_var) {
 			ret = info->fbops->fb_check_var(var, info);
-			if (ret)
-				goto done;
-		}
+		} else
+			ret = fb_check_var(var, info);
+
+		if (ret)
+			goto done;
 
 		if ((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) {
 			struct fb_videomode mode;


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/

  parent reply	other threads:[~2008-08-29  5:15 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-27  5:09 [PATCH] Do set var even if no fb_check_var() provided Takashi Yoshii
2008-08-27  7:08 ` Geert Uytterhoeven
2008-08-27 21:49   ` Helge Deller
2008-08-28  6:53     ` Michel Dänzer
2008-08-28 21:43       ` Helge Deller
2008-08-28 22:08         ` Michel Dänzer
2008-08-28 22:16           ` Helge Deller
2008-08-28 22:18             ` Michel Dänzer
2008-08-28 22:23               ` Helge Deller
2008-08-28 22:30                 ` Michel Dänzer
2008-08-28 22:35                   ` Helge Deller
2008-08-28 22:47                     ` Michel Dänzer
2008-08-28  7:45     ` Ville Syrjälä
2008-08-28 21:45       ` Helge Deller
2008-08-29  5:15       ` Takashi Yoshii [this message]
2008-08-29  7:07         ` [PATCH] Add fb_check_var() for fixed mode device Michel Dänzer
2008-08-29  7:48           ` Takashi Yoshii
2008-08-29  7:10         ` Geert Uytterhoeven
2008-09-04  1:56           ` Takashi Yoshii
2008-08-29  8:49         ` Michel Dänzer
2008-08-29 12:16           ` Geert Uytterhoeven
2008-08-29 13:51             ` Michel Dänzer
2008-08-29 14:14               ` Geert Uytterhoeven
2008-08-29 14:23                 ` Michel Dänzer
2008-08-30  8:58                   ` Helge Deller
2008-09-02 19:11                     ` Helge Deller
2008-09-03 10:11                       ` Michel Dänzer
2008-09-03 19:24                         ` Helge Deller
2008-09-04  7:21                       ` Takashi Yoshii
2008-08-29 17:38             ` Ville Syrjälä
2008-08-29  2:06   ` [PATCH] Do set var even if no fb_check_var() provided Takashi Yoshii
2008-08-29  7:03     ` Geert Uytterhoeven
2008-09-04  7:38       ` Takashi Yoshii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48B785DA.1030408@renesas.com \
    --to=yoshii.takashi@renesas.com \
    --cc=linux-fbdev-devel@lists.sourceforge.net \
    --cc=syrjala@sci.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.