From: Krzysztof H. <krz...@po...> - 2009-07-09 18:09:21
|
On Thu, 09 Jul 2009 17:09:00 +0200 Pawel Osciak <p.o...@sa...> wrote: > Added support for panning the display in all directions. > > > Reviewed-by: Marek Szyprowski <m.s...@sa...> > Reviewed-by: Kyungmin Park <kyu...@sa...> > Signed-off-by: Pawel Osciak <p.o...@sa...> > > > > diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c > index ff0b1a3..77b77a2 100644 > --- a/drivers/video/s3c-fb.c > +++ b/drivers/video/s3c-fb.c > @@ -294,6 +294,8 @@ static int s3c_fb_set_par(struct fb_info *info) > } > > info->fix.line_length = (var->xres_virtual * var->bits_per_pixel) / 8; > + info->fix.xpanstep = info->var.xres_virtual > info->var.xres ? 1 : 0; > + info->fix.ypanstep = info->var.yres_virtual > info->var.yres ? 1 : 0; > These two lines are not need. If the xres_virtual > xres there is no panning possible (the same is true for yres and yres_virtual). > /* disable the window whilst we update it */ > writel(0, regs + WINCON(win_no)); > @@ -640,6 +642,38 @@ static int s3c_fb_blank(int blank_mode, struct fb_info *info) > return 0; > } > > +/** > + * s3c_fb_pan_display() - Pan the display. > + * > + * Note, that the offsets can be written to the device at any time, as their > + * values are latched at each vsync automatically. This also means that only > + * the last call to this function will have any effect on next vsync, but > + * there is no need to sleep waiting for it to prevent tearing. > + * > + * @var: The screen information to verify. > + * @info: The framebuffer device. > + */ > +static int s3c_fb_pan_display(struct fb_var_screeninfo *var, > + struct fb_info *info) > +{ > + struct s3c_fb_win *win = info->par; > + struct s3c_fb *sfb = win->parent; > + unsigned int start_byte_offset, end_byte_offset; > + > + /* Offset in bytes to the start of the displayed area */ > + start_byte_offset = var->yoffset * info->fix.line_length > + + var->xoffset * (info->var.bits_per_pixel) / 8; > + writel(info->fix.smem_start + start_byte_offset, > + sfb->regs + VIDW_BUF_START(win->index)); > + Check out carefully what units are used for VIDW_BUF_START (pixels, bytes, words, dwords). This x panning may not work on all depths supported by the driver (18-bit, 19-bit, 1-bit, etc). Do you really want panning in the x direction? Please test it in all depths. Regards, Krzysztof ---------------------------------------------------------------------- Rowerem do pracy? Czemu nie! Kliknij >>> http://link.interia.pl/f2256 |