diff options
-rw-r--r-- | drivers/video/pm2fb.c | 202 |
1 files changed, 101 insertions, 101 deletions
diff --git a/drivers/video/pm2fb.c b/drivers/video/pm2fb.c index 0a04483aa3e0..10c0cc6e93fc 100644 --- a/drivers/video/pm2fb.c +++ b/drivers/video/pm2fb.c | |||
@@ -24,7 +24,7 @@ | |||
24 | * License. See the file COPYING in the main directory of this archive for | 24 | * License. See the file COPYING in the main directory of this archive for |
25 | * more details. | 25 | * more details. |
26 | * | 26 | * |
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <linux/module.h> | 30 | #include <linux/module.h> |
@@ -58,7 +58,7 @@ | |||
58 | #endif | 58 | #endif |
59 | 59 | ||
60 | /* | 60 | /* |
61 | * Driver data | 61 | * Driver data |
62 | */ | 62 | */ |
63 | static char *mode __devinitdata = NULL; | 63 | static char *mode __devinitdata = NULL; |
64 | 64 | ||
@@ -82,12 +82,12 @@ struct pm2fb_par | |||
82 | { | 82 | { |
83 | pm2type_t type; /* Board type */ | 83 | pm2type_t type; /* Board type */ |
84 | unsigned char __iomem *v_regs;/* virtual address of p_regs */ | 84 | unsigned char __iomem *v_regs;/* virtual address of p_regs */ |
85 | u32 memclock; /* memclock */ | 85 | u32 memclock; /* memclock */ |
86 | u32 video; /* video flags before blanking */ | 86 | u32 video; /* video flags before blanking */ |
87 | u32 mem_config; /* MemConfig reg at probe */ | 87 | u32 mem_config; /* MemConfig reg at probe */ |
88 | u32 mem_control; /* MemControl reg at probe */ | 88 | u32 mem_control; /* MemControl reg at probe */ |
89 | u32 boot_address; /* BootAddress reg at probe */ | 89 | u32 boot_address; /* BootAddress reg at probe */ |
90 | u32 palette[16]; | 90 | u32 palette[16]; |
91 | }; | 91 | }; |
92 | 92 | ||
93 | /* | 93 | /* |
@@ -95,12 +95,12 @@ struct pm2fb_par | |||
95 | * if we don't use modedb. | 95 | * if we don't use modedb. |
96 | */ | 96 | */ |
97 | static struct fb_fix_screeninfo pm2fb_fix __devinitdata = { | 97 | static struct fb_fix_screeninfo pm2fb_fix __devinitdata = { |
98 | .id = "", | 98 | .id = "", |
99 | .type = FB_TYPE_PACKED_PIXELS, | 99 | .type = FB_TYPE_PACKED_PIXELS, |
100 | .visual = FB_VISUAL_PSEUDOCOLOR, | 100 | .visual = FB_VISUAL_PSEUDOCOLOR, |
101 | .xpanstep = 1, | 101 | .xpanstep = 1, |
102 | .ypanstep = 1, | 102 | .ypanstep = 1, |
103 | .ywrapstep = 0, | 103 | .ywrapstep = 0, |
104 | .accel = FB_ACCEL_3DLABS_PERMEDIA2, | 104 | .accel = FB_ACCEL_3DLABS_PERMEDIA2, |
105 | }; | 105 | }; |
106 | 106 | ||
@@ -109,26 +109,26 @@ static struct fb_fix_screeninfo pm2fb_fix __devinitdata = { | |||
109 | */ | 109 | */ |
110 | static struct fb_var_screeninfo pm2fb_var __devinitdata = { | 110 | static struct fb_var_screeninfo pm2fb_var __devinitdata = { |
111 | /* "640x480, 8 bpp @ 60 Hz */ | 111 | /* "640x480, 8 bpp @ 60 Hz */ |
112 | .xres = 640, | 112 | .xres = 640, |
113 | .yres = 480, | 113 | .yres = 480, |
114 | .xres_virtual = 640, | 114 | .xres_virtual = 640, |
115 | .yres_virtual = 480, | 115 | .yres_virtual = 480, |
116 | .bits_per_pixel =8, | 116 | .bits_per_pixel = 8, |
117 | .red = {0, 8, 0}, | 117 | .red = {0, 8, 0}, |
118 | .blue = {0, 8, 0}, | 118 | .blue = {0, 8, 0}, |
119 | .green = {0, 8, 0}, | 119 | .green = {0, 8, 0}, |
120 | .activate = FB_ACTIVATE_NOW, | 120 | .activate = FB_ACTIVATE_NOW, |
121 | .height = -1, | 121 | .height = -1, |
122 | .width = -1, | 122 | .width = -1, |
123 | .accel_flags = 0, | 123 | .accel_flags = 0, |
124 | .pixclock = 39721, | 124 | .pixclock = 39721, |
125 | .left_margin = 40, | 125 | .left_margin = 40, |
126 | .right_margin = 24, | 126 | .right_margin = 24, |
127 | .upper_margin = 32, | 127 | .upper_margin = 32, |
128 | .lower_margin = 11, | 128 | .lower_margin = 11, |
129 | .hsync_len = 96, | 129 | .hsync_len = 96, |
130 | .vsync_len = 2, | 130 | .vsync_len = 2, |
131 | .vmode = FB_VMODE_NONINTERLACED | 131 | .vmode = FB_VMODE_NONINTERLACED |
132 | }; | 132 | }; |
133 | 133 | ||
134 | /* | 134 | /* |
@@ -166,7 +166,7 @@ static inline u32 pm2_RDAC_RD(struct pm2fb_par* p, s32 idx) | |||
166 | pm2_WR(p, PM2VR_RD_INDEX_LOW, idx & 0xff); | 166 | pm2_WR(p, PM2VR_RD_INDEX_LOW, idx & 0xff); |
167 | index = PM2VR_RD_INDEXED_DATA; | 167 | index = PM2VR_RD_INDEXED_DATA; |
168 | break; | 168 | break; |
169 | } | 169 | } |
170 | mb(); | 170 | mb(); |
171 | return pm2_RD(p, index); | 171 | return pm2_RD(p, index); |
172 | } | 172 | } |
@@ -182,7 +182,7 @@ static inline void pm2_RDAC_WR(struct pm2fb_par* p, s32 idx, u32 v) | |||
182 | pm2_WR(p, PM2VR_RD_INDEX_LOW, idx & 0xff); | 182 | pm2_WR(p, PM2VR_RD_INDEX_LOW, idx & 0xff); |
183 | index = PM2VR_RD_INDEXED_DATA; | 183 | index = PM2VR_RD_INDEXED_DATA; |
184 | break; | 184 | break; |
185 | } | 185 | } |
186 | wmb(); | 186 | wmb(); |
187 | pm2_WR(p, index, v); | 187 | pm2_WR(p, index, v); |
188 | wmb(); | 188 | wmb(); |
@@ -197,7 +197,7 @@ static inline void pm2v_RDAC_WR(struct pm2fb_par* p, s32 idx, u32 v) | |||
197 | } | 197 | } |
198 | 198 | ||
199 | #ifdef CONFIG_FB_PM2_FIFO_DISCONNECT | 199 | #ifdef CONFIG_FB_PM2_FIFO_DISCONNECT |
200 | #define WAIT_FIFO(p,a) | 200 | #define WAIT_FIFO(p, a) |
201 | #else | 201 | #else |
202 | static inline void WAIT_FIFO(struct pm2fb_par* p, u32 a) | 202 | static inline void WAIT_FIFO(struct pm2fb_par* p, u32 a) |
203 | { | 203 | { |
@@ -209,7 +209,7 @@ static inline void WAIT_FIFO(struct pm2fb_par* p, u32 a) | |||
209 | /* | 209 | /* |
210 | * partial products for the supported horizontal resolutions. | 210 | * partial products for the supported horizontal resolutions. |
211 | */ | 211 | */ |
212 | #define PACKPP(p0,p1,p2) (((p2) << 6) | ((p1) << 3) | (p0)) | 212 | #define PACKPP(p0, p1, p2) (((p2) << 6) | ((p1) << 3) | (p0)) |
213 | static const struct { | 213 | static const struct { |
214 | u16 width; | 214 | u16 width; |
215 | u16 pp; | 215 | u16 pp; |
@@ -357,7 +357,7 @@ static void reset_card(struct pm2fb_par* p) | |||
357 | static void reset_config(struct pm2fb_par* p) | 357 | static void reset_config(struct pm2fb_par* p) |
358 | { | 358 | { |
359 | WAIT_FIFO(p, 52); | 359 | WAIT_FIFO(p, 52); |
360 | pm2_WR(p, PM2R_CHIP_CONFIG, pm2_RD(p, PM2R_CHIP_CONFIG)& | 360 | pm2_WR(p, PM2R_CHIP_CONFIG, pm2_RD(p, PM2R_CHIP_CONFIG) & |
361 | ~(PM2F_VGA_ENABLE|PM2F_VGA_FIXED)); | 361 | ~(PM2F_VGA_ENABLE|PM2F_VGA_FIXED)); |
362 | pm2_WR(p, PM2R_BYPASS_WRITE_MASK, ~(0L)); | 362 | pm2_WR(p, PM2R_BYPASS_WRITE_MASK, ~(0L)); |
363 | pm2_WR(p, PM2R_FRAMEBUFFER_WRITE_MASK, ~(0L)); | 363 | pm2_WR(p, PM2R_FRAMEBUFFER_WRITE_MASK, ~(0L)); |
@@ -367,7 +367,7 @@ static void reset_config(struct pm2fb_par* p) | |||
367 | pm2_WR(p, PM2R_RASTERIZER_MODE, 0); | 367 | pm2_WR(p, PM2R_RASTERIZER_MODE, 0); |
368 | pm2_WR(p, PM2R_DELTA_MODE, PM2F_DELTA_ORDER_RGB); | 368 | pm2_WR(p, PM2R_DELTA_MODE, PM2F_DELTA_ORDER_RGB); |
369 | pm2_WR(p, PM2R_LB_READ_FORMAT, 0); | 369 | pm2_WR(p, PM2R_LB_READ_FORMAT, 0); |
370 | pm2_WR(p, PM2R_LB_WRITE_FORMAT, 0); | 370 | pm2_WR(p, PM2R_LB_WRITE_FORMAT, 0); |
371 | pm2_WR(p, PM2R_LB_READ_MODE, 0); | 371 | pm2_WR(p, PM2R_LB_READ_MODE, 0); |
372 | pm2_WR(p, PM2R_LB_SOURCE_OFFSET, 0); | 372 | pm2_WR(p, PM2R_LB_SOURCE_OFFSET, 0); |
373 | pm2_WR(p, PM2R_FB_SOURCE_OFFSET, 0); | 373 | pm2_WR(p, PM2R_FB_SOURCE_OFFSET, 0); |
@@ -535,7 +535,7 @@ static void set_video(struct pm2fb_par* p, u32 video) { | |||
535 | vsync = video; | 535 | vsync = video; |
536 | 536 | ||
537 | DPRINTK("video = 0x%x\n", video); | 537 | DPRINTK("video = 0x%x\n", video); |
538 | 538 | ||
539 | /* | 539 | /* |
540 | * The hardware cursor needs +vsync to recognise vert retrace. | 540 | * The hardware cursor needs +vsync to recognise vert retrace. |
541 | * We may not be using the hardware cursor, but the X Glint | 541 | * We may not be using the hardware cursor, but the X Glint |
@@ -574,9 +574,9 @@ static void set_video(struct pm2fb_par* p, u32 video) { | |||
574 | */ | 574 | */ |
575 | 575 | ||
576 | /** | 576 | /** |
577 | * pm2fb_check_var - Optional function. Validates a var passed in. | 577 | * pm2fb_check_var - Optional function. Validates a var passed in. |
578 | * @var: frame buffer variable screen structure | 578 | * @var: frame buffer variable screen structure |
579 | * @info: frame buffer structure that represents a single frame buffer | 579 | * @info: frame buffer structure that represents a single frame buffer |
580 | * | 580 | * |
581 | * Checks to see if the hardware supports the state requested by | 581 | * Checks to see if the hardware supports the state requested by |
582 | * var passed in. | 582 | * var passed in. |
@@ -615,23 +615,23 @@ static int pm2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
615 | 615 | ||
616 | var->xres = (var->xres + 15) & ~15; /* could sometimes be 8 */ | 616 | var->xres = (var->xres + 15) & ~15; /* could sometimes be 8 */ |
617 | lpitch = var->xres * ((var->bits_per_pixel + 7)>>3); | 617 | lpitch = var->xres * ((var->bits_per_pixel + 7)>>3); |
618 | 618 | ||
619 | if (var->xres < 320 || var->xres > 1600) { | 619 | if (var->xres < 320 || var->xres > 1600) { |
620 | DPRINTK("width not supported: %u\n", var->xres); | 620 | DPRINTK("width not supported: %u\n", var->xres); |
621 | return -EINVAL; | 621 | return -EINVAL; |
622 | } | 622 | } |
623 | 623 | ||
624 | if (var->yres < 200 || var->yres > 1200) { | 624 | if (var->yres < 200 || var->yres > 1200) { |
625 | DPRINTK("height not supported: %u\n", var->yres); | 625 | DPRINTK("height not supported: %u\n", var->yres); |
626 | return -EINVAL; | 626 | return -EINVAL; |
627 | } | 627 | } |
628 | 628 | ||
629 | if (lpitch * var->yres_virtual > info->fix.smem_len) { | 629 | if (lpitch * var->yres_virtual > info->fix.smem_len) { |
630 | DPRINTK("no memory for screen (%ux%ux%u)\n", | 630 | DPRINTK("no memory for screen (%ux%ux%u)\n", |
631 | var->xres, var->yres_virtual, var->bits_per_pixel); | 631 | var->xres, var->yres_virtual, var->bits_per_pixel); |
632 | return -EINVAL; | 632 | return -EINVAL; |
633 | } | 633 | } |
634 | 634 | ||
635 | if (PICOS2KHZ(var->pixclock) > PM2_MAX_PIXCLOCK) { | 635 | if (PICOS2KHZ(var->pixclock) > PM2_MAX_PIXCLOCK) { |
636 | DPRINTK("pixclock too high (%ldKHz)\n", PICOS2KHZ(var->pixclock)); | 636 | DPRINTK("pixclock too high (%ldKHz)\n", PICOS2KHZ(var->pixclock)); |
637 | return -EINVAL; | 637 | return -EINVAL; |
@@ -672,17 +672,17 @@ static int pm2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
672 | break; | 672 | break; |
673 | } | 673 | } |
674 | var->height = var->width = -1; | 674 | var->height = var->width = -1; |
675 | 675 | ||
676 | var->accel_flags = 0; /* Can't mmap if this is on */ | 676 | var->accel_flags = 0; /* Can't mmap if this is on */ |
677 | 677 | ||
678 | DPRINTK("Checking graphics mode at %dx%d depth %d\n", | 678 | DPRINTK("Checking graphics mode at %dx%d depth %d\n", |
679 | var->xres, var->yres, var->bits_per_pixel); | 679 | var->xres, var->yres, var->bits_per_pixel); |
680 | return 0; | 680 | return 0; |
681 | } | 681 | } |
682 | 682 | ||
683 | /** | 683 | /** |
684 | * pm2fb_set_par - Alters the hardware state. | 684 | * pm2fb_set_par - Alters the hardware state. |
685 | * @info: frame buffer structure that represents a single frame buffer | 685 | * @info: frame buffer structure that represents a single frame buffer |
686 | * | 686 | * |
687 | * Using the fb_var_screeninfo in fb_info we set the resolution of the | 687 | * Using the fb_var_screeninfo in fb_info we set the resolution of the |
688 | * this particular framebuffer. | 688 | * this particular framebuffer. |
@@ -709,7 +709,7 @@ static int pm2fb_set_par(struct fb_info *info) | |||
709 | clear_palette(par); | 709 | clear_palette(par); |
710 | if ( par->memclock ) | 710 | if ( par->memclock ) |
711 | set_memclock(par, par->memclock); | 711 | set_memclock(par, par->memclock); |
712 | 712 | ||
713 | width = (info->var.xres_virtual + 7) & ~7; | 713 | width = (info->var.xres_virtual + 7) & ~7; |
714 | height = info->var.yres_virtual; | 714 | height = info->var.yres_virtual; |
715 | depth = (info->var.bits_per_pixel + 7) & ~7; | 715 | depth = (info->var.bits_per_pixel + 7) & ~7; |
@@ -722,7 +722,7 @@ static int pm2fb_set_par(struct fb_info *info) | |||
722 | DPRINTK("pixclock too high (%uKHz)\n", pixclock); | 722 | DPRINTK("pixclock too high (%uKHz)\n", pixclock); |
723 | return -EINVAL; | 723 | return -EINVAL; |
724 | } | 724 | } |
725 | 725 | ||
726 | hsstart = to3264(info->var.right_margin, depth, data64); | 726 | hsstart = to3264(info->var.right_margin, depth, data64); |
727 | hsend = hsstart + to3264(info->var.hsync_len, depth, data64); | 727 | hsend = hsstart + to3264(info->var.hsync_len, depth, data64); |
728 | hbend = hsend + to3264(info->var.left_margin, depth, data64); | 728 | hbend = hsend + to3264(info->var.left_margin, depth, data64); |
@@ -737,7 +737,7 @@ static int pm2fb_set_par(struct fb_info *info) | |||
737 | base = to3264(info->var.yoffset * xres + info->var.xoffset, depth, 1); | 737 | base = to3264(info->var.yoffset * xres + info->var.xoffset, depth, 1); |
738 | if (data64) | 738 | if (data64) |
739 | video |= PM2F_DATA_64_ENABLE; | 739 | video |= PM2F_DATA_64_ENABLE; |
740 | 740 | ||
741 | if (info->var.sync & FB_SYNC_HOR_HIGH_ACT) { | 741 | if (info->var.sync & FB_SYNC_HOR_HIGH_ACT) { |
742 | if (lowhsync) { | 742 | if (lowhsync) { |
743 | DPRINTK("ignoring +hsync, using -hsync.\n"); | 743 | DPRINTK("ignoring +hsync, using -hsync.\n"); |
@@ -778,9 +778,9 @@ static int pm2fb_set_par(struct fb_info *info) | |||
778 | WAIT_FIFO(par, 1); | 778 | WAIT_FIFO(par, 1); |
779 | pm2_WR(par, PM2VR_RD_INDEX_HIGH, 0); | 779 | pm2_WR(par, PM2VR_RD_INDEX_HIGH, 0); |
780 | } | 780 | } |
781 | 781 | ||
782 | set_aperture(par, depth); | 782 | set_aperture(par, depth); |
783 | 783 | ||
784 | mb(); | 784 | mb(); |
785 | WAIT_FIFO(par, 19); | 785 | WAIT_FIFO(par, 19); |
786 | pm2_RDAC_WR(par, PM2I_RD_COLOR_KEY_CONTROL, | 786 | pm2_RDAC_WR(par, PM2I_RD_COLOR_KEY_CONTROL, |
@@ -847,22 +847,22 @@ static int pm2fb_set_par(struct fb_info *info) | |||
847 | set_pixclock(par, pixclock); | 847 | set_pixclock(par, pixclock); |
848 | DPRINTK("Setting graphics mode at %dx%d depth %d\n", | 848 | DPRINTK("Setting graphics mode at %dx%d depth %d\n", |
849 | info->var.xres, info->var.yres, info->var.bits_per_pixel); | 849 | info->var.xres, info->var.yres, info->var.bits_per_pixel); |
850 | return 0; | 850 | return 0; |
851 | } | 851 | } |
852 | 852 | ||
853 | /** | 853 | /** |
854 | * pm2fb_setcolreg - Sets a color register. | 854 | * pm2fb_setcolreg - Sets a color register. |
855 | * @regno: boolean, 0 copy local, 1 get_user() function | 855 | * @regno: boolean, 0 copy local, 1 get_user() function |
856 | * @red: frame buffer colormap structure | 856 | * @red: frame buffer colormap structure |
857 | * @green: The green value which can be up to 16 bits wide | 857 | * @green: The green value which can be up to 16 bits wide |
858 | * @blue: The blue value which can be up to 16 bits wide. | 858 | * @blue: The blue value which can be up to 16 bits wide. |
859 | * @transp: If supported the alpha value which can be up to 16 bits wide. | 859 | * @transp: If supported the alpha value which can be up to 16 bits wide. |
860 | * @info: frame buffer info structure | 860 | * @info: frame buffer info structure |
861 | * | 861 | * |
862 | * Set a single color register. The values supplied have a 16 bit | 862 | * Set a single color register. The values supplied have a 16 bit |
863 | * magnitude which needs to be scaled in this function for the hardware. | 863 | * magnitude which needs to be scaled in this function for the hardware. |
864 | * Pretty much a direct lift from tdfxfb.c. | 864 | * Pretty much a direct lift from tdfxfb.c. |
865 | * | 865 | * |
866 | * Returns negative errno on error, or zero on success. | 866 | * Returns negative errno on error, or zero on success. |
867 | */ | 867 | */ |
868 | static int pm2fb_setcolreg(unsigned regno, unsigned red, unsigned green, | 868 | static int pm2fb_setcolreg(unsigned regno, unsigned red, unsigned green, |
@@ -906,7 +906,7 @@ static int pm2fb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
906 | * (blue << blue.offset) | (transp << transp.offset) | 906 | * (blue << blue.offset) | (transp << transp.offset) |
907 | * RAMDAC does not exist | 907 | * RAMDAC does not exist |
908 | */ | 908 | */ |
909 | #define CNVT_TOHW(val,width) ((((val)<<(width))+0x7FFF-(val))>>16) | 909 | #define CNVT_TOHW(val, width) ((((val) << (width)) + 0x7FFF -(val)) >> 16) |
910 | switch (info->fix.visual) { | 910 | switch (info->fix.visual) { |
911 | case FB_VISUAL_TRUECOLOR: | 911 | case FB_VISUAL_TRUECOLOR: |
912 | case FB_VISUAL_PSEUDOCOLOR: | 912 | case FB_VISUAL_PSEUDOCOLOR: |
@@ -916,9 +916,9 @@ static int pm2fb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
916 | transp = CNVT_TOHW(transp, info->var.transp.length); | 916 | transp = CNVT_TOHW(transp, info->var.transp.length); |
917 | break; | 917 | break; |
918 | case FB_VISUAL_DIRECTCOLOR: | 918 | case FB_VISUAL_DIRECTCOLOR: |
919 | /* example here assumes 8 bit DAC. Might be different | 919 | /* example here assumes 8 bit DAC. Might be different |
920 | * for your hardware */ | 920 | * for your hardware */ |
921 | red = CNVT_TOHW(red, 8); | 921 | red = CNVT_TOHW(red, 8); |
922 | green = CNVT_TOHW(green, 8); | 922 | green = CNVT_TOHW(green, 8); |
923 | blue = CNVT_TOHW(blue, 8); | 923 | blue = CNVT_TOHW(blue, 8); |
924 | /* hey, there is bug in transp handling... */ | 924 | /* hey, there is bug in transp handling... */ |
@@ -940,11 +940,11 @@ static int pm2fb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
940 | 940 | ||
941 | switch (info->var.bits_per_pixel) { | 941 | switch (info->var.bits_per_pixel) { |
942 | case 8: | 942 | case 8: |
943 | break; | 943 | break; |
944 | case 16: | 944 | case 16: |
945 | case 24: | 945 | case 24: |
946 | case 32: | 946 | case 32: |
947 | par->palette[regno] = v; | 947 | par->palette[regno] = v; |
948 | break; | 948 | break; |
949 | } | 949 | } |
950 | return 0; | 950 | return 0; |
@@ -956,15 +956,15 @@ static int pm2fb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
956 | } | 956 | } |
957 | 957 | ||
958 | /** | 958 | /** |
959 | * pm2fb_pan_display - Pans the display. | 959 | * pm2fb_pan_display - Pans the display. |
960 | * @var: frame buffer variable screen structure | 960 | * @var: frame buffer variable screen structure |
961 | * @info: frame buffer structure that represents a single frame buffer | 961 | * @info: frame buffer structure that represents a single frame buffer |
962 | * | 962 | * |
963 | * Pan (or wrap, depending on the `vmode' field) the display using the | 963 | * Pan (or wrap, depending on the `vmode' field) the display using the |
964 | * `xoffset' and `yoffset' fields of the `var' structure. | 964 | * `xoffset' and `yoffset' fields of the `var' structure. |
965 | * If the values don't fit, return -EINVAL. | 965 | * If the values don't fit, return -EINVAL. |
966 | * | 966 | * |
967 | * Returns negative errno on error, or zero on success. | 967 | * Returns negative errno on error, or zero on success. |
968 | * | 968 | * |
969 | */ | 969 | */ |
970 | static int pm2fb_pan_display(struct fb_var_screeninfo *var, | 970 | static int pm2fb_pan_display(struct fb_var_screeninfo *var, |
@@ -980,24 +980,24 @@ static int pm2fb_pan_display(struct fb_var_screeninfo *var, | |||
980 | depth = (depth > 32) ? 32 : depth; | 980 | depth = (depth > 32) ? 32 : depth; |
981 | base = to3264(var->yoffset * xres + var->xoffset, depth, 1); | 981 | base = to3264(var->yoffset * xres + var->xoffset, depth, 1); |
982 | WAIT_FIFO(p, 1); | 982 | WAIT_FIFO(p, 1); |
983 | pm2_WR(p, PM2R_SCREEN_BASE, base); | 983 | pm2_WR(p, PM2R_SCREEN_BASE, base); |
984 | return 0; | 984 | return 0; |
985 | } | 985 | } |
986 | 986 | ||
987 | /** | 987 | /** |
988 | * pm2fb_blank - Blanks the display. | 988 | * pm2fb_blank - Blanks the display. |
989 | * @blank_mode: the blank mode we want. | 989 | * @blank_mode: the blank mode we want. |
990 | * @info: frame buffer structure that represents a single frame buffer | 990 | * @info: frame buffer structure that represents a single frame buffer |
991 | * | 991 | * |
992 | * Blank the screen if blank_mode != 0, else unblank. Return 0 if | 992 | * Blank the screen if blank_mode != 0, else unblank. Return 0 if |
993 | * blanking succeeded, != 0 if un-/blanking failed due to e.g. a | 993 | * blanking succeeded, != 0 if un-/blanking failed due to e.g. a |
994 | * video mode which doesn't support it. Implements VESA suspend | 994 | * video mode which doesn't support it. Implements VESA suspend |
995 | * and powerdown modes on hardware that supports disabling hsync/vsync: | 995 | * and powerdown modes on hardware that supports disabling hsync/vsync: |
996 | * blank_mode == 2: suspend vsync | 996 | * blank_mode == 2: suspend vsync |
997 | * blank_mode == 3: suspend hsync | 997 | * blank_mode == 3: suspend hsync |
998 | * blank_mode == 4: powerdown | 998 | * blank_mode == 4: powerdown |
999 | * | 999 | * |
1000 | * Returns negative errno on error, or zero on success. | 1000 | * Returns negative errno on error, or zero on success. |
1001 | * | 1001 | * |
1002 | */ | 1002 | */ |
1003 | static int pm2fb_blank(int blank_mode, struct fb_info *info) | 1003 | static int pm2fb_blank(int blank_mode, struct fb_info *info) |
@@ -1071,7 +1071,7 @@ static void pm2fb_block_op(struct fb_info* info, int copy, | |||
1071 | pm2_WR(par, PM2R_RECTANGLE_ORIGIN, (y << 16) | x); | 1071 | pm2_WR(par, PM2R_RECTANGLE_ORIGIN, (y << 16) | x); |
1072 | pm2_WR(par, PM2R_RECTANGLE_SIZE, (h << 16) | w); | 1072 | pm2_WR(par, PM2R_RECTANGLE_SIZE, (h << 16) | w); |
1073 | wmb(); | 1073 | wmb(); |
1074 | pm2_WR(par, PM2R_RENDER,PM2F_RENDER_RECTANGLE | | 1074 | pm2_WR(par, PM2R_RENDER, PM2F_RENDER_RECTANGLE | |
1075 | (x<xsrc ? PM2F_INCREASE_X : 0) | | 1075 | (x<xsrc ? PM2F_INCREASE_X : 0) | |
1076 | (y<ysrc ? PM2F_INCREASE_Y : 0) | | 1076 | (y<ysrc ? PM2F_INCREASE_Y : 0) | |
1077 | (copy ? 0 : PM2F_RENDER_FASTFILL)); | 1077 | (copy ? 0 : PM2F_RENDER_FASTFILL)); |
@@ -1234,7 +1234,7 @@ static int __devinit pm2fb_probe(struct pci_dev *pdev, | |||
1234 | DPRINTK("Adjusting register base for big-endian.\n"); | 1234 | DPRINTK("Adjusting register base for big-endian.\n"); |
1235 | #endif | 1235 | #endif |
1236 | DPRINTK("Register base at 0x%lx\n", pm2fb_fix.mmio_start); | 1236 | DPRINTK("Register base at 0x%lx\n", pm2fb_fix.mmio_start); |
1237 | 1237 | ||
1238 | /* Registers - request region and map it. */ | 1238 | /* Registers - request region and map it. */ |
1239 | if ( !request_mem_region(pm2fb_fix.mmio_start, pm2fb_fix.mmio_len, | 1239 | if ( !request_mem_region(pm2fb_fix.mmio_start, pm2fb_fix.mmio_len, |
1240 | "pm2fb regbase") ) { | 1240 | "pm2fb regbase") ) { |
@@ -1317,17 +1317,17 @@ static int __devinit pm2fb_probe(struct pci_dev *pdev, | |||
1317 | } | 1317 | } |
1318 | 1318 | ||
1319 | info->fbops = &pm2fb_ops; | 1319 | info->fbops = &pm2fb_ops; |
1320 | info->fix = pm2fb_fix; | 1320 | info->fix = pm2fb_fix; |
1321 | info->pseudo_palette = default_par->palette; | 1321 | info->pseudo_palette = default_par->palette; |
1322 | info->flags = FBINFO_DEFAULT | | 1322 | info->flags = FBINFO_DEFAULT | |
1323 | FBINFO_HWACCEL_YPAN | | 1323 | FBINFO_HWACCEL_YPAN | |
1324 | FBINFO_HWACCEL_COPYAREA | | 1324 | FBINFO_HWACCEL_COPYAREA | |
1325 | FBINFO_HWACCEL_FILLRECT; | 1325 | FBINFO_HWACCEL_FILLRECT; |
1326 | 1326 | ||
1327 | if (!mode) | 1327 | if (!mode) |
1328 | mode = "640x480@60"; | 1328 | mode = "640x480@60"; |
1329 | 1329 | ||
1330 | err = fb_find_mode(&info->var, info, mode, NULL, 0, NULL, 8); | 1330 | err = fb_find_mode(&info->var, info, mode, NULL, 0, NULL, 8); |
1331 | if (!err || err == 4) | 1331 | if (!err || err == 4) |
1332 | info->var = pm2fb_var; | 1332 | info->var = pm2fb_var; |
1333 | 1333 | ||
@@ -1348,8 +1348,8 @@ static int __devinit pm2fb_probe(struct pci_dev *pdev, | |||
1348 | return 0; | 1348 | return 0; |
1349 | 1349 | ||
1350 | err_exit_all: | 1350 | err_exit_all: |
1351 | fb_dealloc_cmap(&info->cmap); | 1351 | fb_dealloc_cmap(&info->cmap); |
1352 | err_exit_both: | 1352 | err_exit_both: |
1353 | iounmap(info->screen_base); | 1353 | iounmap(info->screen_base); |
1354 | release_mem_region(pm2fb_fix.smem_start, pm2fb_fix.smem_len); | 1354 | release_mem_region(pm2fb_fix.smem_start, pm2fb_fix.smem_len); |
1355 | err_exit_mmio: | 1355 | err_exit_mmio: |
@@ -1374,7 +1374,7 @@ static void __devexit pm2fb_remove(struct pci_dev *pdev) | |||
1374 | struct pm2fb_par *par = info->par; | 1374 | struct pm2fb_par *par = info->par; |
1375 | 1375 | ||
1376 | unregister_framebuffer(info); | 1376 | unregister_framebuffer(info); |
1377 | 1377 | ||
1378 | iounmap(info->screen_base); | 1378 | iounmap(info->screen_base); |
1379 | release_mem_region(fix->smem_start, fix->smem_len); | 1379 | release_mem_region(fix->smem_start, fix->smem_len); |
1380 | iounmap(par->v_regs); | 1380 | iounmap(par->v_regs); |
@@ -1402,9 +1402,9 @@ static struct pci_device_id pm2fb_id_table[] = { | |||
1402 | 1402 | ||
1403 | static struct pci_driver pm2fb_driver = { | 1403 | static struct pci_driver pm2fb_driver = { |
1404 | .name = "pm2fb", | 1404 | .name = "pm2fb", |
1405 | .id_table = pm2fb_id_table, | 1405 | .id_table = pm2fb_id_table, |
1406 | .probe = pm2fb_probe, | 1406 | .probe = pm2fb_probe, |
1407 | .remove = __devexit_p(pm2fb_remove), | 1407 | .remove = __devexit_p(pm2fb_remove), |
1408 | }; | 1408 | }; |
1409 | 1409 | ||
1410 | MODULE_DEVICE_TABLE(pci, pm2fb_id_table); | 1410 | MODULE_DEVICE_TABLE(pci, pm2fb_id_table); |
@@ -1423,7 +1423,7 @@ static int __init pm2fb_setup(char *options) | |||
1423 | if (!options || !*options) | 1423 | if (!options || !*options) |
1424 | return 0; | 1424 | return 0; |
1425 | 1425 | ||
1426 | while ((this_opt = strsep(&options, ",")) != NULL) { | 1426 | while ((this_opt = strsep(&options, ",")) != NULL) { |
1427 | if (!*this_opt) | 1427 | if (!*this_opt) |
1428 | continue; | 1428 | continue; |
1429 | if(!strcmp(this_opt, "lowhsync")) { | 1429 | if(!strcmp(this_opt, "lowhsync")) { |