Re: [PATCH] Add fb_check_var() for fixed mode device.
From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2008-08-29 07:11:02
On Fri, 29 Aug 2008, Takashi Yoshii wrote:
quoted hunk ↗ jump to hunk
Sounds good.quoted
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 <redacted>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;
Why this part? var->[xy]res{,_virtual} will be overwritten by the
correct values later anyway.
+ /* pan is acceptable only if we have fb_pan_display) */ + if ( (var->yoffset || var->xoffset) && !info->fbops->fb_pan_display ) + return -EINVAL;
You should validate var->[xy]offset against constant->[xy]res_virtual
and info->fix.[xy]{pan,wrap}step.
+ /* copy most */ + *var = *constant; + /* resotore some that are not a part of viede mode */
^^^^^^^^ restore
+ var->xoffset = xoffset; + var->yoffset = yoffset; + var->activate = activate; + + return 0; +}
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
-------------------------------------------------------------------------
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=/