• Home
  • Raw
  • Download

Lines Matching +full:sync +full:- +full:on +full:- +full:green

7  * based on 2.4 driver:
8 * Copyright (c) 1998-2000 Ilario Nardinocchi (nardinoc@CS.UniBO.IT)
14 * I have a Creative Graphics Blaster Exxtreme card - pm2fb on x86. I
16 * hopefully other big-endian) devices now work, thanks to a lot of
20 * Multiple boards support has been on the TODO list for ages.
70 * support on TVP4010 and similar where there is no RAMDAC - see
71 * comment in set_video) always request +ve sync regardless of what
73 * fixed-frequency monitor which absolutely has to have -ve sync. So
74 * these flags allow the user to specify that requests for +ve sync
75 * should be silently turned in -ve sync.
125 .green = {0, 8, 0},
127 .height = -1,
128 .width = -1,
146 return fb_readl(p->v_regs + off); in pm2_RD()
151 fb_writel(v, p->v_regs + off); in pm2_WR()
266 curr = (clk > f) ? clk - f : f - clk; in pm2_mnp()
293 if (clk > f - delta && clk < f + delta) { in pm2v_mnp()
294 delta = (clk > f) ? clk - f : f - clk; in pm2v_mnp()
311 while (i--) { in clear_palette()
321 if (p->type == PM2_TYPE_PERMEDIA2V) in reset_card()
336 pm2_WR(p, PM2R_MEM_CONTROL, p->mem_control); in reset_card()
337 pm2_WR(p, PM2R_BOOT_ADDRESS, p->boot_address); in reset_card()
339 pm2_WR(p, PM2R_MEM_CONFIG, p->mem_config); in reset_card()
382 switch (p->type) { in reset_config()
402 * The hardware is little-endian. When used in big-endian in set_aperture()
403 * hosts, the on-chip aperture settings are used where in set_aperture()
411 case 24: /* RGB->BGR */ in set_aperture()
417 case 8: /* B->B */ in set_aperture()
420 case 16: /* HL->LH */ in set_aperture()
423 case 32: /* RGBA->ABGR */ in set_aperture()
451 switch (par->type) { in set_memclock()
462 for (i = 256; i; i--) in set_memclock()
476 for (i = 256; i; i--) in set_memclock()
488 switch (par->type) { in set_pixclock()
498 for (i = 256; i; i--) in set_pixclock()
525 * the RAMDAC to invert the sync if necessary. in set_video()
533 switch (p->type) { in set_video()
554 * pm2fb_check_var - Optional function. Validates a var passed in.
561 * Returns negative errno on error, or zero on success.
567 if (var->bits_per_pixel != 8 && var->bits_per_pixel != 16 && in pm2fb_check_var()
568 var->bits_per_pixel != 24 && var->bits_per_pixel != 32) { in pm2fb_check_var()
569 DPRINTK("depth not supported: %u\n", var->bits_per_pixel); in pm2fb_check_var()
570 return -EINVAL; in pm2fb_check_var()
573 if (var->xres != var->xres_virtual) { in pm2fb_check_var()
576 return -EINVAL; in pm2fb_check_var()
579 if (var->yres > var->yres_virtual) { in pm2fb_check_var()
582 return -EINVAL; in pm2fb_check_var()
586 if (var->yres_virtual > 2047) { in pm2fb_check_var()
587 var->yres_virtual = 2047; in pm2fb_check_var()
590 if (var->xoffset) { in pm2fb_check_var()
592 return -EINVAL; in pm2fb_check_var()
595 if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) { in pm2fb_check_var()
597 return -EINVAL; in pm2fb_check_var()
600 var->xres = (var->xres + 15) & ~15; /* could sometimes be 8 */ in pm2fb_check_var()
601 lpitch = var->xres * ((var->bits_per_pixel + 7) >> 3); in pm2fb_check_var()
603 if (var->xres < 320 || var->xres > 1600) { in pm2fb_check_var()
604 DPRINTK("width not supported: %u\n", var->xres); in pm2fb_check_var()
605 return -EINVAL; in pm2fb_check_var()
608 if (var->yres < 200 || var->yres > 1200) { in pm2fb_check_var()
609 DPRINTK("height not supported: %u\n", var->yres); in pm2fb_check_var()
610 return -EINVAL; in pm2fb_check_var()
613 if (lpitch * var->yres_virtual > info->fix.smem_len) { in pm2fb_check_var()
615 var->xres, var->yres_virtual, var->bits_per_pixel); in pm2fb_check_var()
616 return -EINVAL; in pm2fb_check_var()
619 if (!var->pixclock) { in pm2fb_check_var()
621 return -EINVAL; in pm2fb_check_var()
624 if (PICOS2KHZ(var->pixclock) > PM2_MAX_PIXCLOCK) { in pm2fb_check_var()
626 PICOS2KHZ(var->pixclock)); in pm2fb_check_var()
627 return -EINVAL; in pm2fb_check_var()
630 var->transp.offset = 0; in pm2fb_check_var()
631 var->transp.length = 0; in pm2fb_check_var()
632 switch (var->bits_per_pixel) { in pm2fb_check_var()
634 var->red.length = 8; in pm2fb_check_var()
635 var->green.length = 8; in pm2fb_check_var()
636 var->blue.length = 8; in pm2fb_check_var()
639 var->red.offset = 11; in pm2fb_check_var()
640 var->red.length = 5; in pm2fb_check_var()
641 var->green.offset = 5; in pm2fb_check_var()
642 var->green.length = 6; in pm2fb_check_var()
643 var->blue.offset = 0; in pm2fb_check_var()
644 var->blue.length = 5; in pm2fb_check_var()
647 var->transp.offset = 24; in pm2fb_check_var()
648 var->transp.length = 8; in pm2fb_check_var()
649 var->red.offset = 16; in pm2fb_check_var()
650 var->green.offset = 8; in pm2fb_check_var()
651 var->blue.offset = 0; in pm2fb_check_var()
652 var->red.length = 8; in pm2fb_check_var()
653 var->green.length = 8; in pm2fb_check_var()
654 var->blue.length = 8; in pm2fb_check_var()
658 var->red.offset = 0; in pm2fb_check_var()
659 var->blue.offset = 16; in pm2fb_check_var()
661 var->red.offset = 16; in pm2fb_check_var()
662 var->blue.offset = 0; in pm2fb_check_var()
664 var->green.offset = 8; in pm2fb_check_var()
665 var->red.length = 8; in pm2fb_check_var()
666 var->green.length = 8; in pm2fb_check_var()
667 var->blue.length = 8; in pm2fb_check_var()
670 var->height = -1; in pm2fb_check_var()
671 var->width = -1; in pm2fb_check_var()
673 var->accel_flags = 0; /* Can't mmap if this is on */ in pm2fb_check_var()
676 var->xres, var->yres, var->bits_per_pixel); in pm2fb_check_var()
681 * pm2fb_set_par - Alters the hardware state.
689 struct pm2fb_par *par = info->par; in pm2fb_set_par()
691 u32 width = (info->var.xres_virtual + 7) & ~7; in pm2fb_set_par()
692 u32 height = info->var.yres_virtual; in pm2fb_set_par()
693 u32 depth = (info->var.bits_per_pixel + 7) & ~7; in pm2fb_set_par()
703 u32 misc = 1; /* 8-bit DAC */ in pm2fb_set_par()
704 u32 xres = (info->var.xres + 31) & ~31; in pm2fb_set_par()
710 if (par->memclock) in pm2fb_set_par()
711 set_memclock(par, par->memclock); in pm2fb_set_par()
714 data64 = depth > 8 || par->type == PM2_TYPE_PERMEDIA2V; in pm2fb_set_par()
716 pixclock = PICOS2KHZ(info->var.pixclock); in pm2fb_set_par()
719 return -EINVAL; in pm2fb_set_par()
722 hsstart = to3264(info->var.right_margin, depth, data64); in pm2fb_set_par()
723 hsend = hsstart + to3264(info->var.hsync_len, depth, data64); in pm2fb_set_par()
724 hbend = hsend + to3264(info->var.left_margin, depth, data64); in pm2fb_set_par()
725 htotal = to3264(xres, depth, data64) + hbend - 1; in pm2fb_set_par()
726 vsstart = (info->var.lower_margin) in pm2fb_set_par()
727 ? info->var.lower_margin - 1 in pm2fb_set_par()
729 vsend = info->var.lower_margin + info->var.vsync_len - 1; in pm2fb_set_par()
730 vbend = info->var.lower_margin + info->var.vsync_len + in pm2fb_set_par()
731 info->var.upper_margin; in pm2fb_set_par()
732 vtotal = info->var.yres + vbend - 1; in pm2fb_set_par()
734 base = to3264(info->var.yoffset * xres + info->var.xoffset, depth, 1); in pm2fb_set_par()
738 if (info->var.sync & FB_SYNC_HOR_HIGH_ACT) { in pm2fb_set_par()
740 DPRINTK("ignoring +hsync, using -hsync.\n"); in pm2fb_set_par()
747 if (info->var.sync & FB_SYNC_VERT_HIGH_ACT) { in pm2fb_set_par()
749 DPRINTK("ignoring +vsync, using -vsync.\n"); in pm2fb_set_par()
756 if ((info->var.vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) { in pm2fb_set_par()
758 return -EINVAL; in pm2fb_set_par()
760 if ((info->var.vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) in pm2fb_set_par()
762 if ((info->var.activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) in pm2fb_set_par()
764 par->video = video; in pm2fb_set_par()
766 info->fix.visual = in pm2fb_set_par()
768 info->fix.line_length = info->var.xres * depth / 8; in pm2fb_set_par()
769 info->cmap.len = 256; in pm2fb_set_par()
774 if (par->type == PM2_TYPE_PERMEDIA2V) { in pm2fb_set_par()
836 switch (par->type) { in pm2fb_set_par()
852 info->var.xres, info->var.yres, info->var.bits_per_pixel); in pm2fb_set_par()
857 * pm2fb_setcolreg - Sets a color register.
860 * @green: The green value which can be up to 16 bits wide
869 * Returns negative errno on error, or zero on success.
871 static int pm2fb_setcolreg(unsigned regno, unsigned red, unsigned green, in pm2fb_setcolreg() argument
875 struct pm2fb_par *par = info->par; in pm2fb_setcolreg()
877 if (regno >= info->cmap.len) /* no. of hw registers */ in pm2fb_setcolreg()
878 return -EINVAL; in pm2fb_setcolreg()
885 if (info->var.grayscale) in pm2fb_setcolreg()
886 red = green = blue = (red * 77 + green * 151 + blue * 28) >> 8; in pm2fb_setcolreg()
889 * var->{color}.offset contains start of bitfield in pm2fb_setcolreg()
890 * var->{color}.length contains length of bitfield in pm2fb_setcolreg()
893 * (X << red.offset) | (X << green.offset) | (X << blue.offset) in pm2fb_setcolreg()
894 * RAMDAC[X] is programmed to (red, green, blue) in pm2fb_setcolreg()
898 * var->{color}.offset is 0 in pm2fb_setcolreg()
899 * var->{color}.length contains width of DAC in pm2fb_setcolreg()
901 * DAC[X] is programmed to (red, green, blue) in pm2fb_setcolreg()
904 * var->{color}.offset contains start of bitfield in pm2fb_setcolreg()
905 * var->{color}.length contains length of bitfield in pm2fb_setcolreg()
907 * (red << red.offset) | (green << green.offset) | in pm2fb_setcolreg()
911 #define CNVT_TOHW(val, width) ((((val) << (width)) + 0x7FFF -(val)) >> 16) in pm2fb_setcolreg()
912 switch (info->fix.visual) { in pm2fb_setcolreg()
915 red = CNVT_TOHW(red, info->var.red.length); in pm2fb_setcolreg()
916 green = CNVT_TOHW(green, info->var.green.length); in pm2fb_setcolreg()
917 blue = CNVT_TOHW(blue, info->var.blue.length); in pm2fb_setcolreg()
918 transp = CNVT_TOHW(transp, info->var.transp.length); in pm2fb_setcolreg()
924 green = CNVT_TOHW(green, 8); in pm2fb_setcolreg()
932 if (info->fix.visual == FB_VISUAL_TRUECOLOR) { in pm2fb_setcolreg()
936 return -EINVAL; in pm2fb_setcolreg()
938 v = (red << info->var.red.offset) | in pm2fb_setcolreg()
939 (green << info->var.green.offset) | in pm2fb_setcolreg()
940 (blue << info->var.blue.offset) | in pm2fb_setcolreg()
941 (transp << info->var.transp.offset); in pm2fb_setcolreg()
943 switch (info->var.bits_per_pixel) { in pm2fb_setcolreg()
949 par->palette[regno] = v; in pm2fb_setcolreg()
953 } else if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR) in pm2fb_setcolreg()
954 set_color(par, regno, red, green, blue); in pm2fb_setcolreg()
960 * pm2fb_pan_display - Pans the display.
964 * Pan (or wrap, depending on the `vmode' field) the display using the
966 * If the values don't fit, return -EINVAL.
968 * Returns negative errno on error, or zero on success.
974 struct pm2fb_par *p = info->par; in pm2fb_pan_display()
976 u32 depth = (info->var.bits_per_pixel + 7) & ~7; in pm2fb_pan_display()
977 u32 xres = (info->var.xres + 31) & ~31; in pm2fb_pan_display()
980 base = to3264(var->yoffset * xres + var->xoffset, depth, 1); in pm2fb_pan_display()
987 * pm2fb_blank - Blanks the display.
992 * blanking succeeded, != 0 if un-/blanking failed due to e.g. a
994 * and powerdown modes on hardware that supports disabling hsync/vsync:
999 * Returns negative errno on error, or zero on success.
1004 struct pm2fb_par *par = info->par; in pm2fb_blank()
1005 u32 video = par->video; in pm2fb_blank()
1011 /* Screen: On */ in pm2fb_blank()
1037 struct pm2fb_par *par = info->par; in pm2fb_sync()
1053 struct pm2fb_par *par = info->par; in pm2fb_fillrect()
1056 u32 color = (info->fix.visual == FB_VISUAL_TRUECOLOR) ? in pm2fb_fillrect()
1057 ((u32 *)info->pseudo_palette)[region->color] : region->color; in pm2fb_fillrect()
1059 if (info->state != FBINFO_STATE_RUNNING) in pm2fb_fillrect()
1061 if ((info->flags & FBINFO_HWACCEL_DISABLED) || in pm2fb_fillrect()
1062 region->rop != ROP_COPY ) { in pm2fb_fillrect()
1067 vxres = info->var.xres_virtual; in pm2fb_fillrect()
1068 vyres = info->var.yres_virtual; in pm2fb_fillrect()
1077 modded.width = vxres - modded.dx; in pm2fb_fillrect()
1079 modded.height = vyres - modded.dy; in pm2fb_fillrect()
1081 if (info->var.bits_per_pixel == 8) in pm2fb_fillrect()
1083 if (info->var.bits_per_pixel <= 16) in pm2fb_fillrect()
1090 if (info->var.bits_per_pixel != 24) { in pm2fb_fillrect()
1111 struct pm2fb_par *par = info->par; in pm2fb_copyarea()
1115 if (info->state != FBINFO_STATE_RUNNING) in pm2fb_copyarea()
1117 if (info->flags & FBINFO_HWACCEL_DISABLED) { in pm2fb_copyarea()
1124 vxres = info->var.xres_virtual; in pm2fb_copyarea()
1125 vyres = info->var.yres_virtual; in pm2fb_copyarea()
1133 modded.width = vxres - modded.sx; in pm2fb_copyarea()
1135 modded.width = vxres - modded.dx; in pm2fb_copyarea()
1137 modded.height = vyres - modded.sy; in pm2fb_copyarea()
1139 modded.height = vyres - modded.dy; in pm2fb_copyarea()
1145 ((modded.sy - modded.dy) & 0xfff) << 16 | in pm2fb_copyarea()
1146 ((modded.sx - modded.dx) & 0xfff)); in pm2fb_copyarea()
1157 struct pm2fb_par *par = info->par; in pm2fb_imageblit()
1158 u32 height = image->height; in pm2fb_imageblit()
1160 const u32 *src = (const u32 *)image->data; in pm2fb_imageblit()
1161 u32 xres = (info->var.xres + 31) & ~31; in pm2fb_imageblit()
1168 if (info->state != FBINFO_STATE_RUNNING) in pm2fb_imageblit()
1170 if (info->flags & FBINFO_HWACCEL_DISABLED || image->depth != 1) { in pm2fb_imageblit()
1174 switch (info->fix.visual) { in pm2fb_imageblit()
1176 fgx = image->fg_color; in pm2fb_imageblit()
1177 bgx = image->bg_color; in pm2fb_imageblit()
1181 fgx = par->palette[image->fg_color]; in pm2fb_imageblit()
1182 bgx = par->palette[image->bg_color]; in pm2fb_imageblit()
1185 if (info->var.bits_per_pixel == 8) { in pm2fb_imageblit()
1189 if (info->var.bits_per_pixel <= 16) { in pm2fb_imageblit()
1197 ((image->dy & 0xfff) << 16) | (image->dx & 0x0fff)); in pm2fb_imageblit()
1199 (((image->dy + image->height) & 0x0fff) << 16) | in pm2fb_imageblit()
1200 ((image->dx + image->width) & 0x0fff)); in pm2fb_imageblit()
1205 ((image->dy & 0xfff) << 16) | (image->dx & 0x0fff)); in pm2fb_imageblit()
1207 ((image->height & 0x0fff) << 16) | in pm2fb_imageblit()
1208 ((image->width) & 0x0fff)); in pm2fb_imageblit()
1209 if (info->var.bits_per_pixel == 24) { in pm2fb_imageblit()
1240 while (height--) { in pm2fb_imageblit()
1241 int width = ((image->width + 7) >> 3) in pm2fb_imageblit()
1242 + info->pixmap.scan_align - 1; in pm2fb_imageblit()
1245 while (width--) { in pm2fb_imageblit()
1266 struct pm2fb_par *par = info->par; in pm2vfb_cursor()
1268 int x = cursor->image.dx - info->var.xoffset; in pm2vfb_cursor()
1269 int y = cursor->image.dy - info->var.yoffset; in pm2vfb_cursor()
1271 if (cursor->enable) in pm2vfb_cursor()
1276 if (!cursor->enable) in pm2vfb_cursor()
1288 if (!cursor->set) in pm2vfb_cursor()
1291 if (cursor->set & FB_CUR_SETHOT) { in pm2vfb_cursor()
1293 cursor->hot.x & 0x3f); in pm2vfb_cursor()
1295 cursor->hot.y & 0x3f); in pm2vfb_cursor()
1298 if (cursor->set & FB_CUR_SETCMAP) { in pm2vfb_cursor()
1299 u32 fg_idx = cursor->image.fg_color; in pm2vfb_cursor()
1300 u32 bg_idx = cursor->image.bg_color; in pm2vfb_cursor()
1301 struct fb_cmap cmap = info->cmap; in pm2vfb_cursor()
1308 cmap.green[bg_idx] >> 8 ); in pm2vfb_cursor()
1315 cmap.green[fg_idx] >> 8 ); in pm2vfb_cursor()
1321 if (cursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETIMAGE)) { in pm2vfb_cursor()
1322 u8 *bitmap = (u8 *)cursor->image.data; in pm2vfb_cursor()
1323 u8 *mask = (u8 *)cursor->mask; in pm2vfb_cursor()
1327 for (i = 0; i < cursor->image.height; i++) { in pm2vfb_cursor()
1328 int j = (cursor->image.width + 7) >> 3; in pm2vfb_cursor()
1329 int k = 8 - j; in pm2vfb_cursor()
1333 for (; j > 0; j--) { in pm2vfb_cursor()
1336 if (cursor->rop == ROP_COPY) in pm2vfb_cursor()
1349 for (; k > 0; k--) { in pm2vfb_cursor()
1367 struct pm2fb_par *par = info->par; in pm2fb_cursor()
1371 return -EINVAL; /* just to force soft_cursor() call */ in pm2fb_cursor()
1373 /* Too large of a cursor or wrong bpp :-( */ in pm2fb_cursor()
1374 if (cursor->image.width > 64 || in pm2fb_cursor()
1375 cursor->image.height > 64 || in pm2fb_cursor()
1376 cursor->image.depth > 1) in pm2fb_cursor()
1377 return -EINVAL; in pm2fb_cursor()
1379 if (par->type == PM2_TYPE_PERMEDIA2V) in pm2fb_cursor()
1383 if (cursor->enable) in pm2fb_cursor()
1393 if (!cursor->set) in pm2fb_cursor()
1396 if (cursor->set & FB_CUR_SETPOS) { in pm2fb_cursor()
1397 int x = cursor->image.dx - info->var.xoffset + 63; in pm2fb_cursor()
1398 int y = cursor->image.dy - info->var.yoffset + 63; in pm2fb_cursor()
1407 if (cursor->set & FB_CUR_SETCMAP) { in pm2fb_cursor()
1408 u32 fg_idx = cursor->image.fg_color; in pm2fb_cursor()
1409 u32 bg_idx = cursor->image.bg_color; in pm2fb_cursor()
1414 info->cmap.red[bg_idx] >> 8); in pm2fb_cursor()
1416 info->cmap.green[bg_idx] >> 8); in pm2fb_cursor()
1418 info->cmap.blue[bg_idx] >> 8); in pm2fb_cursor()
1421 info->cmap.red[fg_idx] >> 8); in pm2fb_cursor()
1423 info->cmap.green[fg_idx] >> 8); in pm2fb_cursor()
1425 info->cmap.blue[fg_idx] >> 8); in pm2fb_cursor()
1428 if (cursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETIMAGE)) { in pm2fb_cursor()
1429 u8 *bitmap = (u8 *)cursor->image.data; in pm2fb_cursor()
1430 u8 *mask = (u8 *)cursor->mask; in pm2fb_cursor()
1436 for (i = 0; i < cursor->image.height; i++) { in pm2fb_cursor()
1437 int j = (cursor->image.width + 7) >> 3; in pm2fb_cursor()
1438 int k = 8 - j; in pm2fb_cursor()
1441 for (; j > 0; j--) { in pm2fb_cursor()
1444 if (cursor->rop == ROP_COPY) in pm2fb_cursor()
1451 for (; k > 0; k--) in pm2fb_cursor()
1457 while (j-- > 0) in pm2fb_cursor()
1461 mask = (u8 *)cursor->mask; in pm2fb_cursor()
1462 for (i = 0; i < cursor->image.height; i++) { in pm2fb_cursor()
1463 int j = (cursor->image.width + 7) >> 3; in pm2fb_cursor()
1464 int k = 8 - j; in pm2fb_cursor()
1467 for (; j > 0; j--) { in pm2fb_cursor()
1472 for (; k > 0; k--) in pm2fb_cursor()
1478 while (j-- > 0) in pm2fb_cursor()
1485 /* ------------ Hardware Independent Functions ------------ */
1523 int retval = -ENXIO; in pm2fb_probe()
1531 info = framebuffer_alloc(sizeof(struct pm2fb_par), &pdev->dev); in pm2fb_probe()
1533 err = -ENOMEM; in pm2fb_probe()
1536 default_par = info->par; in pm2fb_probe()
1538 switch (pdev->device) { in pm2fb_probe()
1541 default_par->type = PM2_TYPE_PERMEDIA2; in pm2fb_probe()
1545 default_par->type = PM2_TYPE_PERMEDIA2; in pm2fb_probe()
1549 default_par->type = PM2_TYPE_PERMEDIA2V; in pm2fb_probe()
1559 * map is little-endian, upper map is big-endian. in pm2fb_probe()
1562 DPRINTK("Adjusting register base for big-endian.\n"); in pm2fb_probe()
1566 /* Registers - request region and map it. */ in pm2fb_probe()
1572 default_par->v_regs = in pm2fb_probe()
1574 if (!default_par->v_regs) { in pm2fb_probe()
1582 default_par->mem_control = pm2_RD(default_par, PM2R_MEM_CONTROL); in pm2fb_probe()
1583 default_par->boot_address = pm2_RD(default_par, PM2R_BOOT_ADDRESS); in pm2fb_probe()
1584 default_par->mem_config = pm2_RD(default_par, PM2R_MEM_CONFIG); in pm2fb_probe()
1586 default_par->mem_control, default_par->boot_address, in pm2fb_probe()
1587 default_par->mem_config); in pm2fb_probe()
1589 if (default_par->mem_control == 0 && in pm2fb_probe()
1590 default_par->boot_address == 0x31 && in pm2fb_probe()
1591 default_par->mem_config == 0x259fffff) { in pm2fb_probe()
1592 default_par->memclock = CVPPC_MEMCLOCK; in pm2fb_probe()
1593 default_par->mem_control = 0; in pm2fb_probe()
1594 default_par->boot_address = 0x20; in pm2fb_probe()
1595 default_par->mem_config = 0xe6002021; in pm2fb_probe()
1596 if (pdev->subsystem_vendor == 0x1048 && in pm2fb_probe()
1597 pdev->subsystem_device == 0x0a31) { in pm2fb_probe()
1600 pdev->subsystem_vendor, pdev->subsystem_device); in pm2fb_probe()
1602 "are running on an Elsa Winner 2000 Office\n"); in pm2fb_probe()
1604 default_par->memclock = 100000; in pm2fb_probe()
1606 if (pdev->subsystem_vendor == 0x3d3d && in pm2fb_probe()
1607 pdev->subsystem_device == 0x0100) { in pm2fb_probe()
1610 pdev->subsystem_vendor, pdev->subsystem_device); in pm2fb_probe()
1612 "are running on an 3dlabs reference board\n"); in pm2fb_probe()
1614 default_par->memclock = 74894; in pm2fb_probe()
1619 switch (default_par->mem_config & PM2F_MEM_CONFIG_RAM_MASK) { in pm2fb_probe()
1635 /* Linear frame buffer - request region and map it. */ in pm2fb_probe()
1641 info->screen_base = in pm2fb_probe()
1643 if (!info->screen_base) { in pm2fb_probe()
1650 default_par->wc_cookie = arch_phys_wc_add(pm2fb_fix.smem_start, in pm2fb_probe()
1653 info->fbops = &pm2fb_ops; in pm2fb_probe()
1654 info->fix = pm2fb_fix; in pm2fb_probe()
1655 info->pseudo_palette = default_par->palette; in pm2fb_probe()
1656 info->flags = FBINFO_DEFAULT | in pm2fb_probe()
1662 info->pixmap.addr = kmalloc(PM2_PIXMAP_SIZE, GFP_KERNEL); in pm2fb_probe()
1663 if (!info->pixmap.addr) { in pm2fb_probe()
1664 retval = -ENOMEM; in pm2fb_probe()
1667 info->pixmap.size = PM2_PIXMAP_SIZE; in pm2fb_probe()
1668 info->pixmap.buf_align = 4; in pm2fb_probe()
1669 info->pixmap.scan_align = 4; in pm2fb_probe()
1670 info->pixmap.access_align = 32; in pm2fb_probe()
1671 info->pixmap.flags = FB_PIXMAP_SYSTEM; in pm2fb_probe()
1675 info->flags |= FBINFO_HWACCEL_DISABLED; in pm2fb_probe()
1676 info->pixmap.scan_align = 1; in pm2fb_probe()
1682 err = fb_find_mode(&info->var, info, mode_option, NULL, 0, NULL, 8); in pm2fb_probe()
1684 info->var = pm2fb_var; in pm2fb_probe()
1686 retval = fb_alloc_cmap(&info->cmap, 256, 0); in pm2fb_probe()
1695 info->fix.id, pm2fb_fix.smem_len / 1024); in pm2fb_probe()
1705 fb_dealloc_cmap(&info->cmap); in pm2fb_probe()
1707 kfree(info->pixmap.addr); in pm2fb_probe()
1709 iounmap(info->screen_base); in pm2fb_probe()
1712 iounmap(default_par->v_regs); in pm2fb_probe()
1731 struct fb_fix_screeninfo *fix = &info->fix; in pm2fb_remove()
1732 struct pm2fb_par *par = info->par; in pm2fb_remove()
1735 arch_phys_wc_del(par->wc_cookie); in pm2fb_remove()
1736 iounmap(info->screen_base); in pm2fb_remove()
1737 release_mem_region(fix->smem_start, fix->smem_len); in pm2fb_remove()
1738 iounmap(par->v_regs); in pm2fb_remove()
1739 release_mem_region(fix->mmio_start, fix->mmio_len); in pm2fb_remove()
1741 fb_dealloc_cmap(&info->cmap); in pm2fb_remove()
1742 kfree(info->pixmap.addr); in pm2fb_remove()
1771 * This is, comma-separated options following `video=pm2fb:'.
1807 return -ENODEV; in pm2fb_init()
1831 MODULE_PARM_DESC(mode_option, "Initial video mode e.g. '648x480-8@60'");
1833 MODULE_PARM_DESC(mode, "Initial video mode e.g. '648x480-8@60' (deprecated)");
1835 MODULE_PARM_DESC(lowhsync, "Force horizontal sync low regardless of mode");
1837 MODULE_PARM_DESC(lowvsync, "Force vertical sync low regardless of mode");