Lines Matching +full:v +full:- +full:blanking

1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (C) 1998-2001 Russell King
14 * - Blanking 8bpp displays with VIDC
26 #include <linux/dma-mapping.h>
32 #include <asm/mach-types.h>
68 }, { /* Hi-res mono */
114 struct fb_var_screeninfo *var = &info->var; in acornfb_set_timing()
122 vidc.h_sync_width = var->hsync_len - 8; in acornfb_set_timing()
123 vidc.h_border_start = vidc.h_sync_width + var->left_margin + 8 - 12; in acornfb_set_timing()
124 vidc.h_display_start = vidc.h_border_start + 12 - 18; in acornfb_set_timing()
125 vidc.h_display_end = vidc.h_display_start + var->xres; in acornfb_set_timing()
126 vidc.h_border_end = vidc.h_display_end + 18 - 12; in acornfb_set_timing()
127 vidc.h_cycle = vidc.h_border_end + var->right_margin + 12 - 8; in acornfb_set_timing()
129 vidc.v_sync_width = var->vsync_len - 1; in acornfb_set_timing()
130 vidc.v_border_start = vidc.v_sync_width + var->upper_margin; in acornfb_set_timing()
132 vidc.v_display_end = vidc.v_display_start + var->yres; in acornfb_set_timing()
136 vcr = var->vsync_len + var->upper_margin + var->yres + in acornfb_set_timing()
137 var->lower_margin; in acornfb_set_timing()
139 if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) { in acornfb_set_timing()
140 vidc.v_cycle = (vcr - 3) / 2; in acornfb_set_timing()
143 vidc.v_cycle = vcr - 2; in acornfb_set_timing()
145 switch (var->bits_per_pixel) { in acornfb_set_timing()
156 fsize = var->vsync_len + var->upper_margin + var->lower_margin - 1; in acornfb_set_timing()
185 if (var->sync & FB_SYNC_COMP_HIGH_ACT) /* should be FB_SYNC_COMP */ in acornfb_set_timing()
188 if (var->sync & FB_SYNC_HOR_HIGH_ACT) in acornfb_set_timing()
193 if (var->sync & FB_SYNC_VERT_HIGH_ACT) in acornfb_set_timing()
201 words_per_line = var->xres * var->bits_per_pixel / 32; in acornfb_set_timing()
203 if (current_par.using_vram && info->fix.smem_len == 2048*1024) in acornfb_set_timing()
223 printk(KERN_DEBUG "VIDC registers for %dx%dx%d:\n", var->xres, in acornfb_set_timing()
224 var->yres, var->bits_per_pixel); in acornfb_set_timing()
225 printk(KERN_DEBUG " H-cycle : %d\n", vidc.h_cycle); in acornfb_set_timing()
226 printk(KERN_DEBUG " H-sync-width : %d\n", vidc.h_sync_width); in acornfb_set_timing()
227 printk(KERN_DEBUG " H-border-start : %d\n", vidc.h_border_start); in acornfb_set_timing()
228 printk(KERN_DEBUG " H-display-start : %d\n", vidc.h_display_start); in acornfb_set_timing()
229 printk(KERN_DEBUG " H-display-end : %d\n", vidc.h_display_end); in acornfb_set_timing()
230 printk(KERN_DEBUG " H-border-end : %d\n", vidc.h_border_end); in acornfb_set_timing()
231 printk(KERN_DEBUG " H-interlace : %d\n", vidc.h_interlace); in acornfb_set_timing()
232 printk(KERN_DEBUG " V-cycle : %d\n", vidc.v_cycle); in acornfb_set_timing()
233 printk(KERN_DEBUG " V-sync-width : %d\n", vidc.v_sync_width); in acornfb_set_timing()
234 printk(KERN_DEBUG " V-border-start : %d\n", vidc.v_border_start); in acornfb_set_timing()
235 printk(KERN_DEBUG " V-display-start : %d\n", vidc.v_display_start); in acornfb_set_timing()
236 printk(KERN_DEBUG " V-display-end : %d\n", vidc.v_display_end); in acornfb_set_timing()
237 printk(KERN_DEBUG " V-border-end : %d\n", vidc.v_border_end); in acornfb_set_timing()
247 * We have to take note of the VIDC20's 16-bit palette here.
273 if (regno < 16 && info->fix.visual == FB_VISUAL_DIRECTCOLOR) { in acornfb_setcolreg()
276 pseudo_val = regno << info->var.red.offset; in acornfb_setcolreg()
277 pseudo_val |= regno << info->var.green.offset; in acornfb_setcolreg()
278 pseudo_val |= regno << info->var.blue.offset; in acornfb_setcolreg()
280 ((u32 *)info->pseudo_palette)[regno] = pseudo_val; in acornfb_setcolreg()
290 if (info->var.bits_per_pixel == 16) { in acornfb_setcolreg()
300 /* Palette register pointer auto-increments */ in acornfb_setcolreg()
321 var->xres = (var->xres + 1) & ~1; in acornfb_adjust_timing()
326 var->xres_virtual = var->xres; in acornfb_adjust_timing()
327 var->xoffset = 0; in acornfb_adjust_timing()
341 font_line_len = var->xres * var->bits_per_pixel * fontht / 8; in acornfb_adjust_timing()
342 min_size = var->xres * var->yres * var->bits_per_pixel / 8; in acornfb_adjust_timing()
348 if (min_size > info->fix.smem_len) in acornfb_adjust_timing()
349 return -EINVAL; in acornfb_adjust_timing()
354 for (size = info->fix.smem_len; in acornfb_adjust_timing()
356 size -= sam_size) { in acornfb_adjust_timing()
362 if (var->accel_flags & FB_ACCELF_TEXT) { in acornfb_adjust_timing()
367 size = info->fix.smem_len; in acornfb_adjust_timing()
368 var->yres_virtual = size / (font_line_len / fontht); in acornfb_adjust_timing()
370 var->yres_virtual = nr_y; in acornfb_adjust_timing()
371 } else if (var->yres_virtual > nr_y) in acornfb_adjust_timing()
372 var->yres_virtual = nr_y; in acornfb_adjust_timing()
374 current_par.screen_end = info->fix.smem_start + size; in acornfb_adjust_timing()
379 if (var->yres > var->yres_virtual) in acornfb_adjust_timing()
380 var->yres = var->yres_virtual; in acornfb_adjust_timing()
382 if (var->vmode & FB_VMODE_YWRAP) { in acornfb_adjust_timing()
383 if (var->yoffset > var->yres_virtual) in acornfb_adjust_timing()
384 var->yoffset = var->yres_virtual; in acornfb_adjust_timing()
386 if (var->yoffset + var->yres > var->yres_virtual) in acornfb_adjust_timing()
387 var->yoffset = var->yres_virtual - var->yres; in acornfb_adjust_timing()
391 var->hsync_len = (var->hsync_len + 1) & ~1; in acornfb_adjust_timing()
395 if (var->left_margin & 1) { in acornfb_adjust_timing()
396 var->left_margin += 1; in acornfb_adjust_timing()
397 var->right_margin -= 1; in acornfb_adjust_timing()
401 if (var->right_margin & 1) in acornfb_adjust_timing()
402 var->right_margin += 1; in acornfb_adjust_timing()
405 if (var->vsync_len < 1) in acornfb_adjust_timing()
406 var->vsync_len = 1; in acornfb_adjust_timing()
424 hs = 1953125000 / var->pixclock; in acornfb_validate_timing()
426 (var->xres + var->left_margin + var->right_margin + var->hsync_len); in acornfb_validate_timing()
428 (var->yres + var->upper_margin + var->lower_margin + var->vsync_len); in acornfb_validate_timing()
430 return (vs >= monspecs->vfmin && vs <= monspecs->vfmax && in acornfb_validate_timing()
431 hs >= monspecs->hfmin && hs <= monspecs->hfmax) ? 0 : -EINVAL; in acornfb_validate_timing()
437 u_int off = var->yoffset * info->fix.line_length; in acornfb_update_dma()
442 iomd_writel(info->fix.smem_start + off, IOMD_VIDINIT); in acornfb_update_dma()
457 var->red.msb_right = 0; in acornfb_check_var()
458 var->green.msb_right = 0; in acornfb_check_var()
459 var->blue.msb_right = 0; in acornfb_check_var()
460 var->transp.msb_right = 0; in acornfb_check_var()
462 switch (var->bits_per_pixel) { in acornfb_check_var()
464 var->red.offset = 0; in acornfb_check_var()
465 var->red.length = var->bits_per_pixel; in acornfb_check_var()
466 var->green = var->red; in acornfb_check_var()
467 var->blue = var->red; in acornfb_check_var()
468 var->transp.offset = 0; in acornfb_check_var()
469 var->transp.length = 0; in acornfb_check_var()
474 var->red.offset = 0; in acornfb_check_var()
475 var->red.length = 5; in acornfb_check_var()
476 var->green.offset = 5; in acornfb_check_var()
477 var->green.length = 5; in acornfb_check_var()
478 var->blue.offset = 10; in acornfb_check_var()
479 var->blue.length = 5; in acornfb_check_var()
480 var->transp.offset = 15; in acornfb_check_var()
481 var->transp.length = 1; in acornfb_check_var()
485 var->red.offset = 0; in acornfb_check_var()
486 var->red.length = 8; in acornfb_check_var()
487 var->green.offset = 8; in acornfb_check_var()
488 var->green.length = 8; in acornfb_check_var()
489 var->blue.offset = 16; in acornfb_check_var()
490 var->blue.length = 8; in acornfb_check_var()
491 var->transp.offset = 24; in acornfb_check_var()
492 var->transp.length = 4; in acornfb_check_var()
496 return -EINVAL; in acornfb_check_var()
503 return -EINVAL; in acornfb_check_var()
517 return acornfb_validate_timing(var, &info->monspecs); in acornfb_check_var()
522 switch (info->var.bits_per_pixel) { in acornfb_set_par()
525 info->fix.visual = FB_VISUAL_MONO10; in acornfb_set_par()
529 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in acornfb_set_par()
533 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in acornfb_set_par()
537 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in acornfb_set_par()
542 info->fix.visual = FB_VISUAL_DIRECTCOLOR; in acornfb_set_par()
546 info->fix.visual = FB_VISUAL_DIRECTCOLOR; in acornfb_set_par()
553 info->fix.line_length = (info->var.xres * info->var.bits_per_pixel) / 8; in acornfb_set_par()
557 unsigned long size = info->fix.smem_len - VDMA_XFERSIZE; in acornfb_set_par()
567 start = info->fix.smem_start; in acornfb_set_par()
571 size -= current_par.vram_half_sam; in acornfb_set_par()
574 size -= 16; in acornfb_set_par()
584 acornfb_update_dma(info, &info->var); in acornfb_set_par()
593 u_int y_bottom = var->yoffset; in acornfb_pan_display()
595 if (!(var->vmode & FB_VMODE_YWRAP)) in acornfb_pan_display()
596 y_bottom += info->var.yres; in acornfb_pan_display()
598 if (y_bottom > info->var.yres_virtual) in acornfb_pan_display()
599 return -EINVAL; in acornfb_pan_display()
720 fb_info.var.height = -1; in acornfb_init_fbinfo()
721 fb_info.var.width = -1; in acornfb_init_fbinfo()
726 current_par.montype = -1; in acornfb_init_fbinfo()
733 * mon:hmin-hmax:vmin-vmax:dpms:width:height
744 * Set RISC-OS style monitor type:
745 * 0 (or tv) - TV frequency
746 * 1 (or multi) - Multi frequency
747 * 2 (or hires) - Hi-res monochrome
748 * 3 (or vga) - VGA
749 * 4 (or svga) - SVGA
751 * - try hardware detect
763 current_par.montype = -2; in acornfb_parse_mon()
766 if (*p == '-') in acornfb_parse_mon()
775 if (*p == '-') in acornfb_parse_mon()
803 current_par.montype = -1; in acornfb_parse_mon()
808 current_par.montype = -2; in acornfb_parse_montype()
827 current_par.montype = -1; in acornfb_parse_montype()
831 if (current_par.montype == -2 || in acornfb_parse_montype()
835 current_par.montype = -1; in acornfb_parse_montype()
894 for (optp = opt_table; optp->name; optp++) { in acornfb_setup()
897 optlen = strlen(optp->name); in acornfb_setup()
899 if (strncmp(opt, optp->name, optlen) == 0 && in acornfb_setup()
901 optp->parse(opt + optlen + 1); in acornfb_setup()
906 if (!optp->name) in acornfb_setup()
930 return -ENODEV; in acornfb_probe()
935 current_par.dev = &dev->dev; in acornfb_probe()
937 if (current_par.montype == -1) in acornfb_probe()
940 if (current_par.montype == -1 || current_par.montype > NR_MONTYPES) in acornfb_probe()
1008 return -ENOMEM; in acornfb_probe()
1057 return -EINVAL; in acornfb_probe()
1068 current_par.using_vram ? 'V' : 'D', in acornfb_probe()
1072 printk(KERN_INFO "Acornfb: Monitor: %d.%03d-%d.%03dkHz, %d-%dHz%s\n", in acornfb_probe()
1082 return -EINVAL; in acornfb_probe()