From: Ondrej Zajicek Add a driver for S3 Trio / S3 Virge. Driver is tested with most versions of S3 Trio and with S3 Virge/DX, on i386. Signed-off-by: Ondrej Zajicek Cc: James Simmons Signed-off-by: Andrew Morton --- Documentation/fb/s3fb.txt | 75 ++ drivers/video/Kconfig | 21 drivers/video/Makefile | 2 drivers/video/s3fb.c | 1251 ++++++++++++++++++++++++++++++++++++ drivers/video/svgalib.c | 455 +++++++++++++ include/linux/svga.h | 113 +++ 6 files changed, 1917 insertions(+) diff -puN /dev/null Documentation/fb/s3fb.txt --- /dev/null +++ a/Documentation/fb/s3fb.txt @@ -0,0 +1,75 @@ + + s3fb - fbdev driver for S3 Trio/Virge chips + =========================================== + + +Supported Hardware +================== + + S3 Trio32 + S3 Trio64 (and variants V+, UV+, V2/DX, V2/GX) + S3 Virge (and variants VX, DX, GX and GX2+) + S3 Plato/PX (completely untested) + S3 Aurora64V+ (completely untested) + + - only PCI bus supported + - only BIOS initialized VGA devices supported + - probably not working on big endian + +I tested s3fb on Trio64 (plain, V+ and V2/DX) and Virge DX, all on i386. + + +Supported Features +================== + + * 4 bpp pseudocolor modes (with 18bit palette, two variants) + * 8 bpp pseudocolor mode (with 18bit palette) + * 16 bpp truecolor modes (RGB 555 and RGB 565) + * 32 bpp truecolor mode (RGB 888) + * text mode (activated by bpp = 0) + * interlaced mode variant (not available in text mode) + * doublescan mode variant (not available in text mode) + * panning in both directions + * DPMS support + +Text mode is supported even in higher resolutions, but there is limitation +to lower pixclocks (maximum between 50-60 MHz, depending on specific hardware). +This limitation is not enforced by driver. Text mode supports 8bit wide fonts +only (hardware limitation) and 16bit tall fonts (driver limitation). + +There are two 4 bpp modes. First mode (selected if nonstd == 0) is mode with +packed pixels, high nibble first. Second mode (selected if nonstd == 1) is mode +with interleaved planes (1 byte interleave), MSB first. Both modes support +8bit wide fonts only (driver limitation). + + +Missing Features +================ +(alias TODO list) + + * secondary (not initialized by BIOS) device support + * suspend/resume support + * big endian support + * Zorro bus support + * MMIO support + * 24 bpp mode support + * support for fontwidths != 8 in 4 bpp modes + * support for fontheight != 16 in text mode + * composite and external sync (is anyone able to test this?) + * hardware cursor + * video overlay support + * vsync synchronization + * feature connector support + * acceleration support (8514-like 2D, Virge 3D, busmaster transfers) + * better values for some magic registers (performance issues) + + +Known bugs +========== + + * cursor disable in text mode doesn't work + * there is some small (but larger than usual) difference between + requested and used timings + +-- +Ondrej Zajicek diff -puN drivers/video/Kconfig~fbdev-driver-for-s3-trio-virge drivers/video/Kconfig --- a/drivers/video/Kconfig~fbdev-driver-for-s3-trio-virge +++ a/drivers/video/Kconfig @@ -92,6 +92,14 @@ config FB_CFB_IMAGEBLIT blitting. This is used by drivers that don't provide their own (accelerated) version. +config FB_SVGALIB + tristate + depends on FB + default n + ---help--- + Common utility functions useful to fbdev drivers of VGA-based + cards. + config FB_MACMODES tristate depends on FB @@ -1151,6 +1159,17 @@ config FB_S3TRIO help If you have a S3 Trio say Y. Say N for S3 Virge. +config FB_S3 + tristate "S3 Trio/Virge support" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_TILEBLITTING + select FB_SVGALIB + ---help--- + Driver for graphics boards with S3 Trio / S3 Virge chip. + config FB_SAVAGE tristate "S3 Savage support" depends on FB && PCI && EXPERIMENTAL @@ -1189,6 +1208,7 @@ config FB_SAVAGE_ACCEL the resulting framebuffer console has bothersome glitches, then choose N here. + config FB_SIS tristate "SiS/XGI display support" depends on FB && PCI @@ -1336,6 +1356,7 @@ config FB_TRIDENT_ACCEL This will compile the Trident frame buffer device with acceleration functions. + config FB_PM3 tristate "Permedia3 support" depends on FB && PCI && BROKEN diff -puN drivers/video/Makefile~fbdev-driver-for-s3-trio-virge drivers/video/Makefile --- a/drivers/video/Makefile~fbdev-driver-for-s3-trio-virge +++ a/drivers/video/Makefile @@ -17,6 +17,7 @@ obj-$(CONFIG_SYSFS) += backlight/ obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o obj-$(CONFIG_FB_CFB_COPYAREA) += cfbcopyarea.o obj-$(CONFIG_FB_CFB_IMAGEBLIT) += cfbimgblt.o +obj-$(CONFIG_FB_SVGALIB) += svgalib.o obj-$(CONFIG_FB_MACMODES) += macmodes.o obj-$(CONFIG_FB_DDC) += fb_ddc.o @@ -54,6 +55,7 @@ obj-$(CONFIG_FB_S3TRIO) += S3t obj-$(CONFIG_FB_FM2) += fm2fb.o obj-$(CONFIG_FB_CYBLA) += cyblafb.o obj-$(CONFIG_FB_TRIDENT) += tridentfb.o +obj-$(CONFIG_FB_S3) += s3fb.o vgastate.o obj-$(CONFIG_FB_STI) += stifb.o obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o obj-$(CONFIG_FB_CG6) += cg6.o sbuslib.o diff -puN /dev/null drivers/video/s3fb.c --- /dev/null +++ a/drivers/video/s3fb.c @@ -0,0 +1,1251 @@ +/* +* linux/drivers/video/s3fb.c -- Frame buffer device driver for S3 Trio32/64 +* +* Copyright (c) 2006 Ondrej Zajicek +* +* This file is subject to the terms and conditions of the GNU General Public +* License. See the file COPYING in the main directory of this archive for +* more details. +* +* Code is based on David Boucher's viafb (http://davesdomain.org.uk/viafb/) +* which is based on the code of neofb. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// #include /* Why should fb driver call console functions? strange ...*/ +#include