aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/pxafb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/pxafb.c')
-rw-r--r--drivers/video/pxafb.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c
index 25bf4b8b6b53..ab816cadb470 100644
--- a/drivers/video/pxafb.c
+++ b/drivers/video/pxafb.c
@@ -306,8 +306,6 @@ static void pxafb_setmode(struct fb_var_screeninfo *var,
306 var->lower_margin = mode->lower_margin; 306 var->lower_margin = mode->lower_margin;
307 var->sync = mode->sync; 307 var->sync = mode->sync;
308 var->grayscale = mode->cmap_greyscale; 308 var->grayscale = mode->cmap_greyscale;
309 var->xres_virtual = var->xres;
310 var->yres_virtual = var->yres;
311} 309}
312 310
313/* 311/*
@@ -345,10 +343,14 @@ static int pxafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
345 return -EINVAL; 343 return -EINVAL;
346 } 344 }
347 345
348 var->xres_virtual = 346 /* we don't support xpan, force xres_virtual to be equal to xres */
349 max(var->xres_virtual, var->xres); 347 var->xres_virtual = var->xres;
350 var->yres_virtual = 348
351 max(var->yres_virtual, var->yres); 349 if (var->accel_flags & FB_ACCELF_TEXT)
350 var->yres_virtual = fbi->fb.fix.smem_len /
351 (var->xres_virtual * var->bits_per_pixel / 8);
352 else
353 var->yres_virtual = max(var->yres_virtual, var->yres);
352 354
353 /* 355 /*
354 * Setup the RGB parameters for this display. 356 * Setup the RGB parameters for this display.
@@ -878,7 +880,7 @@ static int pxafb_activate_var(struct fb_var_screeninfo *var,
878 struct pxafb_info *fbi) 880 struct pxafb_info *fbi)
879{ 881{
880 u_long flags; 882 u_long flags;
881 size_t nbytes; 883 size_t nbytes, offset;
882 884
883#if DEBUG_VAR 885#if DEBUG_VAR
884 if (!(fbi->lccr0 & LCCR0_LCDT)) { 886 if (!(fbi->lccr0 & LCCR0_LCDT)) {
@@ -939,17 +941,18 @@ static int pxafb_activate_var(struct fb_var_screeninfo *var,
939 941
940 fbi->reg_lccr3 |= pxafb_bpp_to_lccr3(var); 942 fbi->reg_lccr3 |= pxafb_bpp_to_lccr3(var);
941 943
942 nbytes = var->yres * fbi->fb.fix.line_length; 944 nbytes = fbi->fb.fix.line_length * var->yres;
945 offset = fbi->fb.fix.line_length * var->yoffset;
943 946
944 if ((fbi->lccr0 & LCCR0_SDS) == LCCR0_Dual) { 947 if ((fbi->lccr0 & LCCR0_SDS) == LCCR0_Dual) {
945 nbytes = nbytes / 2; 948 nbytes = nbytes / 2;
946 setup_frame_dma(fbi, DMA_LOWER, PAL_NONE, nbytes, nbytes); 949 setup_frame_dma(fbi, DMA_LOWER, PAL_NONE, offset + nbytes, nbytes);
947 } 950 }
948 951
949 if ((var->bits_per_pixel >= 16) || (fbi->lccr0 & LCCR0_LCDT)) 952 if ((var->bits_per_pixel >= 16) || (fbi->lccr0 & LCCR0_LCDT))
950 setup_frame_dma(fbi, DMA_BASE, PAL_NONE, 0, nbytes); 953 setup_frame_dma(fbi, DMA_BASE, PAL_NONE, offset, nbytes);
951 else 954 else
952 setup_frame_dma(fbi, DMA_BASE, PAL_BASE, 0, nbytes); 955 setup_frame_dma(fbi, DMA_BASE, PAL_BASE, offset, nbytes);
953 956
954 fbi->reg_lccr4 = lcd_readl(fbi, LCCR4) & ~LCCR4_PAL_FOR_MASK; 957 fbi->reg_lccr4 = lcd_readl(fbi, LCCR4) & ~LCCR4_PAL_FOR_MASK;
955 fbi->reg_lccr4 |= (fbi->lccr4 & LCCR4_PAL_FOR_MASK); 958 fbi->reg_lccr4 |= (fbi->lccr4 & LCCR4_PAL_FOR_MASK);
@@ -1362,7 +1365,7 @@ static struct pxafb_info * __devinit pxafb_init_fbinfo(struct device *dev)
1362 fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; 1365 fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
1363 fbi->fb.fix.type_aux = 0; 1366 fbi->fb.fix.type_aux = 0;
1364 fbi->fb.fix.xpanstep = 0; 1367 fbi->fb.fix.xpanstep = 0;
1365 fbi->fb.fix.ypanstep = 0; 1368 fbi->fb.fix.ypanstep = 1;
1366 fbi->fb.fix.ywrapstep = 0; 1369 fbi->fb.fix.ywrapstep = 0;
1367 fbi->fb.fix.accel = FB_ACCEL_NONE; 1370 fbi->fb.fix.accel = FB_ACCEL_NONE;
1368 1371
@@ -1370,7 +1373,7 @@ static struct pxafb_info * __devinit pxafb_init_fbinfo(struct device *dev)
1370 fbi->fb.var.activate = FB_ACTIVATE_NOW; 1373 fbi->fb.var.activate = FB_ACTIVATE_NOW;
1371 fbi->fb.var.height = -1; 1374 fbi->fb.var.height = -1;
1372 fbi->fb.var.width = -1; 1375 fbi->fb.var.width = -1;
1373 fbi->fb.var.accel_flags = 0; 1376 fbi->fb.var.accel_flags = FB_ACCELF_TEXT;
1374 fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; 1377 fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
1375 1378
1376 fbi->fb.fbops = &pxafb_ops; 1379 fbi->fb.fbops = &pxafb_ops;