aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Miller <davem@davemloft.net>2011-01-11 18:51:26 -0500
committerPaul Mundt <lethal@linux-sh.org>2011-03-22 02:47:07 -0400
commitea770789dce2d27afab39c3891a475624acbd82f (patch)
tree352ed0f19b74bff7dc6b80f7e05e7bf35b1f5d3f
parentd907ec04cc498e11e039e0fff8eb58cf01e885da (diff)
svga: Make svga_wcrt_mask() take an iomem regbase pointer.
Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r--drivers/video/arkfb.c40
-rw-r--r--drivers/video/s3fb.c98
-rw-r--r--drivers/video/svgalib.c8
-rw-r--r--drivers/video/vt8623fb.c36
-rw-r--r--include/linux/svga.h4
5 files changed, 93 insertions, 93 deletions
diff --git a/drivers/video/arkfb.c b/drivers/video/arkfb.c
index c351b184b1bd..f24151e01da3 100644
--- a/drivers/video/arkfb.c
+++ b/drivers/video/arkfb.c
@@ -646,11 +646,11 @@ static int arkfb_set_par(struct fb_info *info)
646 info->var.activate = FB_ACTIVATE_NOW; 646 info->var.activate = FB_ACTIVATE_NOW;
647 647
648 /* Unlock registers */ 648 /* Unlock registers */
649 svga_wcrt_mask(0x11, 0x00, 0x80); 649 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x80);
650 650
651 /* Blank screen and turn off sync */ 651 /* Blank screen and turn off sync */
652 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 652 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
653 svga_wcrt_mask(0x17, 0x00, 0x80); 653 svga_wcrt_mask(par->state.vgabase, 0x17, 0x00, 0x80);
654 654
655 /* Set default values */ 655 /* Set default values */
656 svga_set_default_gfx_regs(par->state.vgabase); 656 svga_set_default_gfx_regs(par->state.vgabase);
@@ -679,17 +679,17 @@ static int arkfb_set_par(struct fb_info *info)
679 svga_wcrt_multi(par->state.vgabase, ark_offset_regs, offset_value); 679 svga_wcrt_multi(par->state.vgabase, ark_offset_regs, offset_value);
680 680
681 /* fix for hi-res textmode */ 681 /* fix for hi-res textmode */
682 svga_wcrt_mask(0x40, 0x08, 0x08); 682 svga_wcrt_mask(par->state.vgabase, 0x40, 0x08, 0x08);
683 683
684 if (info->var.vmode & FB_VMODE_DOUBLE) 684 if (info->var.vmode & FB_VMODE_DOUBLE)
685 svga_wcrt_mask(0x09, 0x80, 0x80); 685 svga_wcrt_mask(par->state.vgabase, 0x09, 0x80, 0x80);
686 else 686 else
687 svga_wcrt_mask(0x09, 0x00, 0x80); 687 svga_wcrt_mask(par->state.vgabase, 0x09, 0x00, 0x80);
688 688
689 if (info->var.vmode & FB_VMODE_INTERLACED) 689 if (info->var.vmode & FB_VMODE_INTERLACED)
690 svga_wcrt_mask(0x44, 0x04, 0x04); 690 svga_wcrt_mask(par->state.vgabase, 0x44, 0x04, 0x04);
691 else 691 else
692 svga_wcrt_mask(0x44, 0x00, 0x04); 692 svga_wcrt_mask(par->state.vgabase, 0x44, 0x00, 0x04);
693 693
694 hmul = 1; 694 hmul = 1;
695 hdiv = 1; 695 hdiv = 1;
@@ -702,7 +702,7 @@ static int arkfb_set_par(struct fb_info *info)
702 svga_set_textmode_vga_regs(); 702 svga_set_textmode_vga_regs();
703 703
704 vga_wseq(NULL, 0x11, 0x10); /* basic VGA mode */ 704 vga_wseq(NULL, 0x11, 0x10); /* basic VGA mode */
705 svga_wcrt_mask(0x46, 0x00, 0x04); /* 8bit pixel path */ 705 svga_wcrt_mask(par->state.vgabase, 0x46, 0x00, 0x04); /* 8bit pixel path */
706 dac_set_mode(par->dac, DAC_PSEUDO8_8); 706 dac_set_mode(par->dac, DAC_PSEUDO8_8);
707 707
708 break; 708 break;
@@ -711,14 +711,14 @@ static int arkfb_set_par(struct fb_info *info)
711 vga_wgfx(NULL, VGA_GFX_MODE, 0x40); 711 vga_wgfx(NULL, VGA_GFX_MODE, 0x40);
712 712
713 vga_wseq(NULL, 0x11, 0x10); /* basic VGA mode */ 713 vga_wseq(NULL, 0x11, 0x10); /* basic VGA mode */
714 svga_wcrt_mask(0x46, 0x00, 0x04); /* 8bit pixel path */ 714 svga_wcrt_mask(par->state.vgabase, 0x46, 0x00, 0x04); /* 8bit pixel path */
715 dac_set_mode(par->dac, DAC_PSEUDO8_8); 715 dac_set_mode(par->dac, DAC_PSEUDO8_8);
716 break; 716 break;
717 case 2: 717 case 2:
718 pr_debug("fb%d: 4 bit pseudocolor, planar\n", info->node); 718 pr_debug("fb%d: 4 bit pseudocolor, planar\n", info->node);
719 719
720 vga_wseq(NULL, 0x11, 0x10); /* basic VGA mode */ 720 vga_wseq(NULL, 0x11, 0x10); /* basic VGA mode */
721 svga_wcrt_mask(0x46, 0x00, 0x04); /* 8bit pixel path */ 721 svga_wcrt_mask(par->state.vgabase, 0x46, 0x00, 0x04); /* 8bit pixel path */
722 dac_set_mode(par->dac, DAC_PSEUDO8_8); 722 dac_set_mode(par->dac, DAC_PSEUDO8_8);
723 break; 723 break;
724 case 3: 724 case 3:
@@ -728,11 +728,11 @@ static int arkfb_set_par(struct fb_info *info)
728 728
729 if (info->var.pixclock > 20000) { 729 if (info->var.pixclock > 20000) {
730 pr_debug("fb%d: not using multiplex\n", info->node); 730 pr_debug("fb%d: not using multiplex\n", info->node);
731 svga_wcrt_mask(0x46, 0x00, 0x04); /* 8bit pixel path */ 731 svga_wcrt_mask(par->state.vgabase, 0x46, 0x00, 0x04); /* 8bit pixel path */
732 dac_set_mode(par->dac, DAC_PSEUDO8_8); 732 dac_set_mode(par->dac, DAC_PSEUDO8_8);
733 } else { 733 } else {
734 pr_debug("fb%d: using multiplex\n", info->node); 734 pr_debug("fb%d: using multiplex\n", info->node);
735 svga_wcrt_mask(0x46, 0x04, 0x04); /* 16bit pixel path */ 735 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */
736 dac_set_mode(par->dac, DAC_PSEUDO8_16); 736 dac_set_mode(par->dac, DAC_PSEUDO8_16);
737 hdiv = 2; 737 hdiv = 2;
738 } 738 }
@@ -741,21 +741,21 @@ static int arkfb_set_par(struct fb_info *info)
741 pr_debug("fb%d: 5/5/5 truecolor\n", info->node); 741 pr_debug("fb%d: 5/5/5 truecolor\n", info->node);
742 742
743 vga_wseq(NULL, 0x11, 0x1A); /* 16bpp accel mode */ 743 vga_wseq(NULL, 0x11, 0x1A); /* 16bpp accel mode */
744 svga_wcrt_mask(0x46, 0x04, 0x04); /* 16bit pixel path */ 744 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */
745 dac_set_mode(par->dac, DAC_RGB1555_16); 745 dac_set_mode(par->dac, DAC_RGB1555_16);
746 break; 746 break;
747 case 5: 747 case 5:
748 pr_debug("fb%d: 5/6/5 truecolor\n", info->node); 748 pr_debug("fb%d: 5/6/5 truecolor\n", info->node);
749 749
750 vga_wseq(NULL, 0x11, 0x1A); /* 16bpp accel mode */ 750 vga_wseq(NULL, 0x11, 0x1A); /* 16bpp accel mode */
751 svga_wcrt_mask(0x46, 0x04, 0x04); /* 16bit pixel path */ 751 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */
752 dac_set_mode(par->dac, DAC_RGB0565_16); 752 dac_set_mode(par->dac, DAC_RGB0565_16);
753 break; 753 break;
754 case 6: 754 case 6:
755 pr_debug("fb%d: 8/8/8 truecolor\n", info->node); 755 pr_debug("fb%d: 8/8/8 truecolor\n", info->node);
756 756
757 vga_wseq(NULL, 0x11, 0x16); /* 8bpp accel mode ??? */ 757 vga_wseq(NULL, 0x11, 0x16); /* 8bpp accel mode ??? */
758 svga_wcrt_mask(0x46, 0x04, 0x04); /* 16bit pixel path */ 758 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */
759 dac_set_mode(par->dac, DAC_RGB0888_16); 759 dac_set_mode(par->dac, DAC_RGB0888_16);
760 hmul = 3; 760 hmul = 3;
761 hdiv = 2; 761 hdiv = 2;
@@ -764,7 +764,7 @@ static int arkfb_set_par(struct fb_info *info)
764 pr_debug("fb%d: 8/8/8/8 truecolor\n", info->node); 764 pr_debug("fb%d: 8/8/8/8 truecolor\n", info->node);
765 765
766 vga_wseq(NULL, 0x11, 0x1E); /* 32bpp accel mode */ 766 vga_wseq(NULL, 0x11, 0x1E); /* 32bpp accel mode */
767 svga_wcrt_mask(0x46, 0x04, 0x04); /* 16bit pixel path */ 767 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */
768 dac_set_mode(par->dac, DAC_RGB8888_16); 768 dac_set_mode(par->dac, DAC_RGB8888_16);
769 hmul = 2; 769 hmul = 2;
770 break; 770 break;
@@ -786,7 +786,7 @@ static int arkfb_set_par(struct fb_info *info)
786 786
787 memset_io(info->screen_base, 0x00, screen_size); 787 memset_io(info->screen_base, 0x00, screen_size);
788 /* Device and screen back on */ 788 /* Device and screen back on */
789 svga_wcrt_mask(0x17, 0x80, 0x80); 789 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80);
790 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); 790 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20);
791 791
792 return 0; 792 return 0;
@@ -863,19 +863,19 @@ static int arkfb_blank(int blank_mode, struct fb_info *info)
863 case FB_BLANK_UNBLANK: 863 case FB_BLANK_UNBLANK:
864 pr_debug("fb%d: unblank\n", info->node); 864 pr_debug("fb%d: unblank\n", info->node);
865 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); 865 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20);
866 svga_wcrt_mask(0x17, 0x80, 0x80); 866 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80);
867 break; 867 break;
868 case FB_BLANK_NORMAL: 868 case FB_BLANK_NORMAL:
869 pr_debug("fb%d: blank\n", info->node); 869 pr_debug("fb%d: blank\n", info->node);
870 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 870 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
871 svga_wcrt_mask(0x17, 0x80, 0x80); 871 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80);
872 break; 872 break;
873 case FB_BLANK_POWERDOWN: 873 case FB_BLANK_POWERDOWN:
874 case FB_BLANK_HSYNC_SUSPEND: 874 case FB_BLANK_HSYNC_SUSPEND:
875 case FB_BLANK_VSYNC_SUSPEND: 875 case FB_BLANK_VSYNC_SUSPEND:
876 pr_debug("fb%d: sync down\n", info->node); 876 pr_debug("fb%d: sync down\n", info->node);
877 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 877 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
878 svga_wcrt_mask(0x17, 0x00, 0x80); 878 svga_wcrt_mask(par->state.vgabase, 0x17, 0x00, 0x80);
879 break; 879 break;
880 } 880 }
881 return 0; 881 return 0;
diff --git a/drivers/video/s3fb.c b/drivers/video/s3fb.c
index efe77b683bfa..ece99f2044f4 100644
--- a/drivers/video/s3fb.c
+++ b/drivers/video/s3fb.c
@@ -507,11 +507,11 @@ static int s3fb_set_par(struct fb_info *info)
507 vga_wcrt(NULL, 0x38, 0x48); 507 vga_wcrt(NULL, 0x38, 0x48);
508 vga_wcrt(NULL, 0x39, 0xA5); 508 vga_wcrt(NULL, 0x39, 0xA5);
509 vga_wseq(NULL, 0x08, 0x06); 509 vga_wseq(NULL, 0x08, 0x06);
510 svga_wcrt_mask(0x11, 0x00, 0x80); 510 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x80);
511 511
512 /* Blank screen and turn off sync */ 512 /* Blank screen and turn off sync */
513 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 513 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
514 svga_wcrt_mask(0x17, 0x00, 0x80); 514 svga_wcrt_mask(par->state.vgabase, 0x17, 0x00, 0x80);
515 515
516 /* Set default values */ 516 /* Set default values */
517 svga_set_default_gfx_regs(par->state.vgabase); 517 svga_set_default_gfx_regs(par->state.vgabase);
@@ -522,20 +522,20 @@ static int s3fb_set_par(struct fb_info *info)
522 svga_wcrt_multi(par->state.vgabase, s3_start_address_regs, 0); 522 svga_wcrt_multi(par->state.vgabase, s3_start_address_regs, 0);
523 523
524 /* S3 specific initialization */ 524 /* S3 specific initialization */
525 svga_wcrt_mask(0x58, 0x10, 0x10); /* enable linear framebuffer */ 525 svga_wcrt_mask(par->state.vgabase, 0x58, 0x10, 0x10); /* enable linear framebuffer */
526 svga_wcrt_mask(0x31, 0x08, 0x08); /* enable sequencer access to framebuffer above 256 kB */ 526 svga_wcrt_mask(par->state.vgabase, 0x31, 0x08, 0x08); /* enable sequencer access to framebuffer above 256 kB */
527 527
528/* svga_wcrt_mask(0x33, 0x08, 0x08); */ /* DDR ? */ 528/* svga_wcrt_mask(par->state.vgabase, 0x33, 0x08, 0x08); */ /* DDR ? */
529/* svga_wcrt_mask(0x43, 0x01, 0x01); */ /* DDR ? */ 529/* svga_wcrt_mask(par->state.vgabase, 0x43, 0x01, 0x01); */ /* DDR ? */
530 svga_wcrt_mask(0x33, 0x00, 0x08); /* no DDR ? */ 530 svga_wcrt_mask(par->state.vgabase, 0x33, 0x00, 0x08); /* no DDR ? */
531 svga_wcrt_mask(0x43, 0x00, 0x01); /* no DDR ? */ 531 svga_wcrt_mask(par->state.vgabase, 0x43, 0x00, 0x01); /* no DDR ? */
532 532
533 svga_wcrt_mask(0x5D, 0x00, 0x28); /* Clear strange HSlen bits */ 533 svga_wcrt_mask(par->state.vgabase, 0x5D, 0x00, 0x28); /* Clear strange HSlen bits */
534 534
535/* svga_wcrt_mask(0x58, 0x03, 0x03); */ 535/* svga_wcrt_mask(par->state.vgabase, 0x58, 0x03, 0x03); */
536 536
537/* svga_wcrt_mask(0x53, 0x12, 0x13); */ /* enable MMIO */ 537/* svga_wcrt_mask(par->state.vgabase, 0x53, 0x12, 0x13); */ /* enable MMIO */
538/* svga_wcrt_mask(0x40, 0x08, 0x08); */ /* enable write buffer */ 538/* svga_wcrt_mask(par->state.vgabase, 0x40, 0x08, 0x08); */ /* enable write buffer */
539 539
540 540
541 /* Set the offset register */ 541 /* Set the offset register */
@@ -555,19 +555,19 @@ static int s3fb_set_par(struct fb_info *info)
555 svga_wattr(par->state.vgabase, 0x33, 0x00); 555 svga_wattr(par->state.vgabase, 0x33, 0x00);
556 556
557 if (info->var.vmode & FB_VMODE_DOUBLE) 557 if (info->var.vmode & FB_VMODE_DOUBLE)
558 svga_wcrt_mask(0x09, 0x80, 0x80); 558 svga_wcrt_mask(par->state.vgabase, 0x09, 0x80, 0x80);
559 else 559 else
560 svga_wcrt_mask(0x09, 0x00, 0x80); 560 svga_wcrt_mask(par->state.vgabase, 0x09, 0x00, 0x80);
561 561
562 if (info->var.vmode & FB_VMODE_INTERLACED) 562 if (info->var.vmode & FB_VMODE_INTERLACED)
563 svga_wcrt_mask(0x42, 0x20, 0x20); 563 svga_wcrt_mask(par->state.vgabase, 0x42, 0x20, 0x20);
564 else 564 else
565 svga_wcrt_mask(0x42, 0x00, 0x20); 565 svga_wcrt_mask(par->state.vgabase, 0x42, 0x00, 0x20);
566 566
567 /* Disable hardware graphics cursor */ 567 /* Disable hardware graphics cursor */
568 svga_wcrt_mask(0x45, 0x00, 0x01); 568 svga_wcrt_mask(par->state.vgabase, 0x45, 0x00, 0x01);
569 /* Disable Streams engine */ 569 /* Disable Streams engine */
570 svga_wcrt_mask(0x67, 0x00, 0x0C); 570 svga_wcrt_mask(par->state.vgabase, 0x67, 0x00, 0x0C);
571 571
572 mode = svga_match_format(s3fb_formats, &(info->var), &(info->fix)); 572 mode = svga_match_format(s3fb_formats, &(info->var), &(info->fix));
573 573
@@ -596,7 +596,7 @@ static int s3fb_set_par(struct fb_info *info)
596 vga_wcrt(NULL, 0x66, 0x81); 596 vga_wcrt(NULL, 0x66, 0x81);
597 } 597 }
598 598
599 svga_wcrt_mask(0x31, 0x00, 0x40); 599 svga_wcrt_mask(par->state.vgabase, 0x31, 0x00, 0x40);
600 multiplex = 0; 600 multiplex = 0;
601 hmul = 1; 601 hmul = 1;
602 602
@@ -607,15 +607,15 @@ static int s3fb_set_par(struct fb_info *info)
607 svga_set_textmode_vga_regs(); 607 svga_set_textmode_vga_regs();
608 608
609 /* Set additional registers like in 8-bit mode */ 609 /* Set additional registers like in 8-bit mode */
610 svga_wcrt_mask(0x50, 0x00, 0x30); 610 svga_wcrt_mask(par->state.vgabase, 0x50, 0x00, 0x30);
611 svga_wcrt_mask(0x67, 0x00, 0xF0); 611 svga_wcrt_mask(par->state.vgabase, 0x67, 0x00, 0xF0);
612 612
613 /* Disable enhanced mode */ 613 /* Disable enhanced mode */
614 svga_wcrt_mask(0x3A, 0x00, 0x30); 614 svga_wcrt_mask(par->state.vgabase, 0x3A, 0x00, 0x30);
615 615
616 if (fasttext) { 616 if (fasttext) {
617 pr_debug("fb%d: high speed text mode set\n", info->node); 617 pr_debug("fb%d: high speed text mode set\n", info->node);
618 svga_wcrt_mask(0x31, 0x40, 0x40); 618 svga_wcrt_mask(par->state.vgabase, 0x31, 0x40, 0x40);
619 } 619 }
620 break; 620 break;
621 case 1: 621 case 1:
@@ -623,32 +623,32 @@ static int s3fb_set_par(struct fb_info *info)
623 vga_wgfx(NULL, VGA_GFX_MODE, 0x40); 623 vga_wgfx(NULL, VGA_GFX_MODE, 0x40);
624 624
625 /* Set additional registers like in 8-bit mode */ 625 /* Set additional registers like in 8-bit mode */
626 svga_wcrt_mask(0x50, 0x00, 0x30); 626 svga_wcrt_mask(par->state.vgabase, 0x50, 0x00, 0x30);
627 svga_wcrt_mask(0x67, 0x00, 0xF0); 627 svga_wcrt_mask(par->state.vgabase, 0x67, 0x00, 0xF0);
628 628
629 /* disable enhanced mode */ 629 /* disable enhanced mode */
630 svga_wcrt_mask(0x3A, 0x00, 0x30); 630 svga_wcrt_mask(par->state.vgabase, 0x3A, 0x00, 0x30);
631 break; 631 break;
632 case 2: 632 case 2:
633 pr_debug("fb%d: 4 bit pseudocolor, planar\n", info->node); 633 pr_debug("fb%d: 4 bit pseudocolor, planar\n", info->node);
634 634
635 /* Set additional registers like in 8-bit mode */ 635 /* Set additional registers like in 8-bit mode */
636 svga_wcrt_mask(0x50, 0x00, 0x30); 636 svga_wcrt_mask(par->state.vgabase, 0x50, 0x00, 0x30);
637 svga_wcrt_mask(0x67, 0x00, 0xF0); 637 svga_wcrt_mask(par->state.vgabase, 0x67, 0x00, 0xF0);
638 638
639 /* disable enhanced mode */ 639 /* disable enhanced mode */
640 svga_wcrt_mask(0x3A, 0x00, 0x30); 640 svga_wcrt_mask(par->state.vgabase, 0x3A, 0x00, 0x30);
641 break; 641 break;
642 case 3: 642 case 3:
643 pr_debug("fb%d: 8 bit pseudocolor\n", info->node); 643 pr_debug("fb%d: 8 bit pseudocolor\n", info->node);
644 svga_wcrt_mask(0x50, 0x00, 0x30); 644 svga_wcrt_mask(par->state.vgabase, 0x50, 0x00, 0x30);
645 if (info->var.pixclock > 20000 || 645 if (info->var.pixclock > 20000 ||
646 par->chip == CHIP_360_TRIO3D_1X || 646 par->chip == CHIP_360_TRIO3D_1X ||
647 par->chip == CHIP_362_TRIO3D_2X || 647 par->chip == CHIP_362_TRIO3D_2X ||
648 par->chip == CHIP_368_TRIO3D_2X) 648 par->chip == CHIP_368_TRIO3D_2X)
649 svga_wcrt_mask(0x67, 0x00, 0xF0); 649 svga_wcrt_mask(par->state.vgabase, 0x67, 0x00, 0xF0);
650 else { 650 else {
651 svga_wcrt_mask(0x67, 0x10, 0xF0); 651 svga_wcrt_mask(par->state.vgabase, 0x67, 0x10, 0xF0);
652 multiplex = 1; 652 multiplex = 1;
653 } 653 }
654 break; 654 break;
@@ -656,12 +656,12 @@ static int s3fb_set_par(struct fb_info *info)
656 pr_debug("fb%d: 5/5/5 truecolor\n", info->node); 656 pr_debug("fb%d: 5/5/5 truecolor\n", info->node);
657 if (par->chip == CHIP_988_VIRGE_VX) { 657 if (par->chip == CHIP_988_VIRGE_VX) {
658 if (info->var.pixclock > 20000) 658 if (info->var.pixclock > 20000)
659 svga_wcrt_mask(0x67, 0x20, 0xF0); 659 svga_wcrt_mask(par->state.vgabase, 0x67, 0x20, 0xF0);
660 else 660 else
661 svga_wcrt_mask(0x67, 0x30, 0xF0); 661 svga_wcrt_mask(par->state.vgabase, 0x67, 0x30, 0xF0);
662 } else { 662 } else {
663 svga_wcrt_mask(0x50, 0x10, 0x30); 663 svga_wcrt_mask(par->state.vgabase, 0x50, 0x10, 0x30);
664 svga_wcrt_mask(0x67, 0x30, 0xF0); 664 svga_wcrt_mask(par->state.vgabase, 0x67, 0x30, 0xF0);
665 if (par->chip != CHIP_360_TRIO3D_1X && 665 if (par->chip != CHIP_360_TRIO3D_1X &&
666 par->chip != CHIP_362_TRIO3D_2X && 666 par->chip != CHIP_362_TRIO3D_2X &&
667 par->chip != CHIP_368_TRIO3D_2X) 667 par->chip != CHIP_368_TRIO3D_2X)
@@ -672,12 +672,12 @@ static int s3fb_set_par(struct fb_info *info)
672 pr_debug("fb%d: 5/6/5 truecolor\n", info->node); 672 pr_debug("fb%d: 5/6/5 truecolor\n", info->node);
673 if (par->chip == CHIP_988_VIRGE_VX) { 673 if (par->chip == CHIP_988_VIRGE_VX) {
674 if (info->var.pixclock > 20000) 674 if (info->var.pixclock > 20000)
675 svga_wcrt_mask(0x67, 0x40, 0xF0); 675 svga_wcrt_mask(par->state.vgabase, 0x67, 0x40, 0xF0);
676 else 676 else
677 svga_wcrt_mask(0x67, 0x50, 0xF0); 677 svga_wcrt_mask(par->state.vgabase, 0x67, 0x50, 0xF0);
678 } else { 678 } else {
679 svga_wcrt_mask(0x50, 0x10, 0x30); 679 svga_wcrt_mask(par->state.vgabase, 0x50, 0x10, 0x30);
680 svga_wcrt_mask(0x67, 0x50, 0xF0); 680 svga_wcrt_mask(par->state.vgabase, 0x67, 0x50, 0xF0);
681 if (par->chip != CHIP_360_TRIO3D_1X && 681 if (par->chip != CHIP_360_TRIO3D_1X &&
682 par->chip != CHIP_362_TRIO3D_2X && 682 par->chip != CHIP_362_TRIO3D_2X &&
683 par->chip != CHIP_368_TRIO3D_2X) 683 par->chip != CHIP_368_TRIO3D_2X)
@@ -687,12 +687,12 @@ static int s3fb_set_par(struct fb_info *info)
687 case 6: 687 case 6:
688 /* VIRGE VX case */ 688 /* VIRGE VX case */
689 pr_debug("fb%d: 8/8/8 truecolor\n", info->node); 689 pr_debug("fb%d: 8/8/8 truecolor\n", info->node);
690 svga_wcrt_mask(0x67, 0xD0, 0xF0); 690 svga_wcrt_mask(par->state.vgabase, 0x67, 0xD0, 0xF0);
691 break; 691 break;
692 case 7: 692 case 7:
693 pr_debug("fb%d: 8/8/8/8 truecolor\n", info->node); 693 pr_debug("fb%d: 8/8/8/8 truecolor\n", info->node);
694 svga_wcrt_mask(0x50, 0x30, 0x30); 694 svga_wcrt_mask(par->state.vgabase, 0x50, 0x30, 0x30);
695 svga_wcrt_mask(0x67, 0xD0, 0xF0); 695 svga_wcrt_mask(par->state.vgabase, 0x67, 0xD0, 0xF0);
696 break; 696 break;
697 default: 697 default:
698 printk(KERN_ERR "fb%d: unsupported mode - bug\n", info->node); 698 printk(KERN_ERR "fb%d: unsupported mode - bug\n", info->node);
@@ -717,7 +717,7 @@ static int s3fb_set_par(struct fb_info *info)
717 717
718 memset_io(info->screen_base, 0x00, screen_size); 718 memset_io(info->screen_base, 0x00, screen_size);
719 /* Device and screen back on */ 719 /* Device and screen back on */
720 svga_wcrt_mask(0x17, 0x80, 0x80); 720 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80);
721 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); 721 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20);
722 722
723 return 0; 723 return 0;
@@ -793,27 +793,27 @@ static int s3fb_blank(int blank_mode, struct fb_info *info)
793 switch (blank_mode) { 793 switch (blank_mode) {
794 case FB_BLANK_UNBLANK: 794 case FB_BLANK_UNBLANK:
795 pr_debug("fb%d: unblank\n", info->node); 795 pr_debug("fb%d: unblank\n", info->node);
796 svga_wcrt_mask(0x56, 0x00, 0x06); 796 svga_wcrt_mask(par->state.vgabase, 0x56, 0x00, 0x06);
797 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); 797 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20);
798 break; 798 break;
799 case FB_BLANK_NORMAL: 799 case FB_BLANK_NORMAL:
800 pr_debug("fb%d: blank\n", info->node); 800 pr_debug("fb%d: blank\n", info->node);
801 svga_wcrt_mask(0x56, 0x00, 0x06); 801 svga_wcrt_mask(par->state.vgabase, 0x56, 0x00, 0x06);
802 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 802 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
803 break; 803 break;
804 case FB_BLANK_HSYNC_SUSPEND: 804 case FB_BLANK_HSYNC_SUSPEND:
805 pr_debug("fb%d: hsync\n", info->node); 805 pr_debug("fb%d: hsync\n", info->node);
806 svga_wcrt_mask(0x56, 0x02, 0x06); 806 svga_wcrt_mask(par->state.vgabase, 0x56, 0x02, 0x06);
807 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 807 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
808 break; 808 break;
809 case FB_BLANK_VSYNC_SUSPEND: 809 case FB_BLANK_VSYNC_SUSPEND:
810 pr_debug("fb%d: vsync\n", info->node); 810 pr_debug("fb%d: vsync\n", info->node);
811 svga_wcrt_mask(0x56, 0x04, 0x06); 811 svga_wcrt_mask(par->state.vgabase, 0x56, 0x04, 0x06);
812 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 812 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
813 break; 813 break;
814 case FB_BLANK_POWERDOWN: 814 case FB_BLANK_POWERDOWN:
815 pr_debug("fb%d: sync down\n", info->node); 815 pr_debug("fb%d: sync down\n", info->node);
816 svga_wcrt_mask(0x56, 0x06, 0x06); 816 svga_wcrt_mask(par->state.vgabase, 0x56, 0x06, 0x06);
817 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 817 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
818 break; 818 break;
819 } 819 }
diff --git a/drivers/video/svgalib.c b/drivers/video/svgalib.c
index ea7490490de6..3d07287e9322 100644
--- a/drivers/video/svgalib.c
+++ b/drivers/video/svgalib.c
@@ -130,9 +130,9 @@ void svga_set_default_seq_regs(void __iomem *regbase)
130void svga_set_default_crt_regs(void) 130void svga_set_default_crt_regs(void)
131{ 131{
132 /* Standard CRT registers CR03 CR08 CR09 CR14 CR17 */ 132 /* Standard CRT registers CR03 CR08 CR09 CR14 CR17 */
133 svga_wcrt_mask(0x03, 0x80, 0x80); /* Enable vertical retrace EVRA */ 133 svga_wcrt_mask(NULL, 0x03, 0x80, 0x80); /* Enable vertical retrace EVRA */
134 vga_wcrt(NULL, VGA_CRTC_PRESET_ROW, 0); 134 vga_wcrt(NULL, VGA_CRTC_PRESET_ROW, 0);
135 svga_wcrt_mask(VGA_CRTC_MAX_SCAN, 0, 0x1F); 135 svga_wcrt_mask(NULL, VGA_CRTC_MAX_SCAN, 0, 0x1F);
136 vga_wcrt(NULL, VGA_CRTC_UNDERLINE, 0); 136 vga_wcrt(NULL, VGA_CRTC_UNDERLINE, 0);
137 vga_wcrt(NULL, VGA_CRTC_MODE, 0xE3); 137 vga_wcrt(NULL, VGA_CRTC_MODE, 0xE3);
138} 138}
@@ -145,7 +145,7 @@ void svga_set_textmode_vga_regs(void)
145 145
146 vga_wcrt(NULL, VGA_CRTC_MAX_SCAN, 0x0f); /* 0x4f */ 146 vga_wcrt(NULL, VGA_CRTC_MAX_SCAN, 0x0f); /* 0x4f */
147 vga_wcrt(NULL, VGA_CRTC_UNDERLINE, 0x1f); 147 vga_wcrt(NULL, VGA_CRTC_UNDERLINE, 0x1f);
148 svga_wcrt_mask(VGA_CRTC_MODE, 0x23, 0x7f); 148 svga_wcrt_mask(NULL, VGA_CRTC_MODE, 0x23, 0x7f);
149 149
150 vga_wcrt(NULL, VGA_CRTC_CURSOR_START, 0x0d); 150 vga_wcrt(NULL, VGA_CRTC_CURSOR_START, 0x0d);
151 vga_wcrt(NULL, VGA_CRTC_CURSOR_END, 0x0e); 151 vga_wcrt(NULL, VGA_CRTC_CURSOR_END, 0x0e);
@@ -310,7 +310,7 @@ void svga_tilecursor(struct fb_info *info, struct fb_tilecursor *cursor)
310 if (! cursor -> mode) 310 if (! cursor -> mode)
311 return; 311 return;
312 312
313 svga_wcrt_mask(0x0A, 0x20, 0x20); /* disable cursor */ 313 svga_wcrt_mask(NULL, 0x0A, 0x20, 0x20); /* disable cursor */
314 314
315 if (cursor -> shape == FB_TILE_CURSOR_NONE) 315 if (cursor -> shape == FB_TILE_CURSOR_NONE)
316 return; 316 return;
diff --git a/drivers/video/vt8623fb.c b/drivers/video/vt8623fb.c
index edcfee8bc90b..bc54b57db985 100644
--- a/drivers/video/vt8623fb.c
+++ b/drivers/video/vt8623fb.c
@@ -417,13 +417,13 @@ static int vt8623fb_set_par(struct fb_info *info)
417 417
418 /* Unlock registers */ 418 /* Unlock registers */
419 svga_wseq_mask(par->state.vgabase, 0x10, 0x01, 0x01); 419 svga_wseq_mask(par->state.vgabase, 0x10, 0x01, 0x01);
420 svga_wcrt_mask(0x11, 0x00, 0x80); 420 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x80);
421 svga_wcrt_mask(0x47, 0x00, 0x01); 421 svga_wcrt_mask(par->state.vgabase, 0x47, 0x00, 0x01);
422 422
423 /* Device, screen and sync off */ 423 /* Device, screen and sync off */
424 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 424 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
425 svga_wcrt_mask(0x36, 0x30, 0x30); 425 svga_wcrt_mask(par->state.vgabase, 0x36, 0x30, 0x30);
426 svga_wcrt_mask(0x17, 0x00, 0x80); 426 svga_wcrt_mask(par->state.vgabase, 0x17, 0x00, 0x80);
427 427
428 /* Set default values */ 428 /* Set default values */
429 svga_set_default_gfx_regs(par->state.vgabase); 429 svga_set_default_gfx_regs(par->state.vgabase);
@@ -437,13 +437,13 @@ static int vt8623fb_set_par(struct fb_info *info)
437 svga_wseq_multi(par->state.vgabase, vt8623_fetch_count_regs, fetch_value); 437 svga_wseq_multi(par->state.vgabase, vt8623_fetch_count_regs, fetch_value);
438 438
439 /* Clear H/V Skew */ 439 /* Clear H/V Skew */
440 svga_wcrt_mask(0x03, 0x00, 0x60); 440 svga_wcrt_mask(par->state.vgabase, 0x03, 0x00, 0x60);
441 svga_wcrt_mask(0x05, 0x00, 0x60); 441 svga_wcrt_mask(par->state.vgabase, 0x05, 0x00, 0x60);
442 442
443 if (info->var.vmode & FB_VMODE_DOUBLE) 443 if (info->var.vmode & FB_VMODE_DOUBLE)
444 svga_wcrt_mask(0x09, 0x80, 0x80); 444 svga_wcrt_mask(par->state.vgabase, 0x09, 0x80, 0x80);
445 else 445 else
446 svga_wcrt_mask(0x09, 0x00, 0x80); 446 svga_wcrt_mask(par->state.vgabase, 0x09, 0x00, 0x80);
447 447
448 svga_wseq_mask(par->state.vgabase, 0x1E, 0xF0, 0xF0); // DI/DVP bus 448 svga_wseq_mask(par->state.vgabase, 0x1E, 0xF0, 0xF0); // DI/DVP bus
449 svga_wseq_mask(par->state.vgabase, 0x2A, 0x0F, 0x0F); // DI/DVP bus 449 svga_wseq_mask(par->state.vgabase, 0x2A, 0x0F, 0x0F); // DI/DVP bus
@@ -468,18 +468,18 @@ static int vt8623fb_set_par(struct fb_info *info)
468 pr_debug("fb%d: text mode\n", info->node); 468 pr_debug("fb%d: text mode\n", info->node);
469 svga_set_textmode_vga_regs(); 469 svga_set_textmode_vga_regs();
470 svga_wseq_mask(par->state.vgabase, 0x15, 0x00, 0xFE); 470 svga_wseq_mask(par->state.vgabase, 0x15, 0x00, 0xFE);
471 svga_wcrt_mask(0x11, 0x60, 0x70); 471 svga_wcrt_mask(par->state.vgabase, 0x11, 0x60, 0x70);
472 break; 472 break;
473 case 1: 473 case 1:
474 pr_debug("fb%d: 4 bit pseudocolor\n", info->node); 474 pr_debug("fb%d: 4 bit pseudocolor\n", info->node);
475 vga_wgfx(NULL, VGA_GFX_MODE, 0x40); 475 vga_wgfx(NULL, VGA_GFX_MODE, 0x40);
476 svga_wseq_mask(par->state.vgabase, 0x15, 0x20, 0xFE); 476 svga_wseq_mask(par->state.vgabase, 0x15, 0x20, 0xFE);
477 svga_wcrt_mask(0x11, 0x00, 0x70); 477 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x70);
478 break; 478 break;
479 case 2: 479 case 2:
480 pr_debug("fb%d: 4 bit pseudocolor, planar\n", info->node); 480 pr_debug("fb%d: 4 bit pseudocolor, planar\n", info->node);
481 svga_wseq_mask(par->state.vgabase, 0x15, 0x00, 0xFE); 481 svga_wseq_mask(par->state.vgabase, 0x15, 0x00, 0xFE);
482 svga_wcrt_mask(0x11, 0x00, 0x70); 482 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x70);
483 break; 483 break;
484 case 3: 484 case 3:
485 pr_debug("fb%d: 8 bit pseudocolor\n", info->node); 485 pr_debug("fb%d: 8 bit pseudocolor\n", info->node);
@@ -506,8 +506,8 @@ static int vt8623fb_set_par(struct fb_info *info)
506 memset_io(info->screen_base, 0x00, screen_size); 506 memset_io(info->screen_base, 0x00, screen_size);
507 507
508 /* Device and screen back on */ 508 /* Device and screen back on */
509 svga_wcrt_mask(0x17, 0x80, 0x80); 509 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80);
510 svga_wcrt_mask(0x36, 0x00, 0x30); 510 svga_wcrt_mask(par->state.vgabase, 0x36, 0x00, 0x30);
511 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); 511 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20);
512 512
513 return 0; 513 return 0;
@@ -576,27 +576,27 @@ static int vt8623fb_blank(int blank_mode, struct fb_info *info)
576 switch (blank_mode) { 576 switch (blank_mode) {
577 case FB_BLANK_UNBLANK: 577 case FB_BLANK_UNBLANK:
578 pr_debug("fb%d: unblank\n", info->node); 578 pr_debug("fb%d: unblank\n", info->node);
579 svga_wcrt_mask(0x36, 0x00, 0x30); 579 svga_wcrt_mask(par->state.vgabase, 0x36, 0x00, 0x30);
580 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); 580 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20);
581 break; 581 break;
582 case FB_BLANK_NORMAL: 582 case FB_BLANK_NORMAL:
583 pr_debug("fb%d: blank\n", info->node); 583 pr_debug("fb%d: blank\n", info->node);
584 svga_wcrt_mask(0x36, 0x00, 0x30); 584 svga_wcrt_mask(par->state.vgabase, 0x36, 0x00, 0x30);
585 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 585 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
586 break; 586 break;
587 case FB_BLANK_HSYNC_SUSPEND: 587 case FB_BLANK_HSYNC_SUSPEND:
588 pr_debug("fb%d: DPMS standby (hsync off)\n", info->node); 588 pr_debug("fb%d: DPMS standby (hsync off)\n", info->node);
589 svga_wcrt_mask(0x36, 0x10, 0x30); 589 svga_wcrt_mask(par->state.vgabase, 0x36, 0x10, 0x30);
590 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 590 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
591 break; 591 break;
592 case FB_BLANK_VSYNC_SUSPEND: 592 case FB_BLANK_VSYNC_SUSPEND:
593 pr_debug("fb%d: DPMS suspend (vsync off)\n", info->node); 593 pr_debug("fb%d: DPMS suspend (vsync off)\n", info->node);
594 svga_wcrt_mask(0x36, 0x20, 0x30); 594 svga_wcrt_mask(par->state.vgabase, 0x36, 0x20, 0x30);
595 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 595 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
596 break; 596 break;
597 case FB_BLANK_POWERDOWN: 597 case FB_BLANK_POWERDOWN:
598 pr_debug("fb%d: DPMS off (no sync)\n", info->node); 598 pr_debug("fb%d: DPMS off (no sync)\n", info->node);
599 svga_wcrt_mask(0x36, 0x30, 0x30); 599 svga_wcrt_mask(par->state.vgabase, 0x36, 0x30, 0x30);
600 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); 600 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20);
601 break; 601 break;
602 } 602 }
diff --git a/include/linux/svga.h b/include/linux/svga.h
index 93f7777b268a..5c5b41bddee4 100644
--- a/include/linux/svga.h
+++ b/include/linux/svga.h
@@ -83,9 +83,9 @@ static inline void svga_wseq_mask(void __iomem *regbase, u8 index, u8 data, u8 m
83 83
84/* Write a value to a CRT register with a mask */ 84/* Write a value to a CRT register with a mask */
85 85
86static inline void svga_wcrt_mask(u8 index, u8 data, u8 mask) 86static inline void svga_wcrt_mask(void __iomem *regbase, u8 index, u8 data, u8 mask)
87{ 87{
88 vga_wcrt(NULL, index, (data & mask) | (vga_rcrt(NULL, index) & ~mask)); 88 vga_wcrt(regbase, index, (data & mask) | (vga_rcrt(regbase, index) & ~mask));
89} 89}
90 90
91static inline int svga_primary_device(struct pci_dev *dev) 91static inline int svga_primary_device(struct pci_dev *dev)