From ace9429bb58fd418f0c81d4c2835699bddf6bde6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 Apr 2024 10:27:49 +0200 Subject: Adding upstream version 6.6.15. Signed-off-by: Daniel Baumann --- drivers/video/fbdev/68328fb.c | 483 + drivers/video/fbdev/Kconfig | 1957 ++++ drivers/video/fbdev/Makefile | 130 + drivers/video/fbdev/acornfb.c | 1102 ++ drivers/video/fbdev/acornfb.h | 166 + drivers/video/fbdev/amba-clcd.c | 985 ++ drivers/video/fbdev/amifb.c | 3779 ++++++ drivers/video/fbdev/arcfb.c | 676 ++ drivers/video/fbdev/arkfb.c | 1208 ++ drivers/video/fbdev/asiliantfb.c | 632 + drivers/video/fbdev/atafb.c | 3186 ++++++ drivers/video/fbdev/atafb.h | 37 + drivers/video/fbdev/atafb_iplan2p2.c | 270 + drivers/video/fbdev/atafb_iplan2p4.c | 285 + drivers/video/fbdev/atafb_iplan2p8.c | 322 + drivers/video/fbdev/atafb_mfb.c | 89 + drivers/video/fbdev/atafb_utils.h | 401 + drivers/video/fbdev/atmel_lcdfb.c | 1317 +++ drivers/video/fbdev/aty/Makefile | 16 + drivers/video/fbdev/aty/ati_ids.h | 215 + drivers/video/fbdev/aty/aty128fb.c | 2530 +++++ drivers/video/fbdev/aty/atyfb.h | 371 + drivers/video/fbdev/aty/atyfb_base.c | 4020 +++++++ drivers/video/fbdev/aty/mach64_accel.c | 429 + drivers/video/fbdev/aty/mach64_ct.c | 651 ++ drivers/video/fbdev/aty/mach64_cursor.c | 226 + drivers/video/fbdev/aty/mach64_gx.c | 908 ++ drivers/video/fbdev/aty/radeon_accel.c | 329 + drivers/video/fbdev/aty/radeon_backlight.c | 208 + drivers/video/fbdev/aty/radeon_base.c | 2652 +++++ drivers/video/fbdev/aty/radeon_i2c.c | 168 + drivers/video/fbdev/aty/radeon_monitor.c | 1051 ++ drivers/video/fbdev/aty/radeon_pm.c | 2927 +++++ drivers/video/fbdev/aty/radeonfb.h | 520 + drivers/video/fbdev/au1100fb.c | 598 + drivers/video/fbdev/au1100fb.h | 379 + drivers/video/fbdev/au1200fb.c | 1849 +++ drivers/video/fbdev/au1200fb.h | 286 + drivers/video/fbdev/broadsheetfb.c | 1165 ++ drivers/video/fbdev/bt431.h | 240 + drivers/video/fbdev/bt455.h | 90 + drivers/video/fbdev/bw2.c | 404 + drivers/video/fbdev/c2p.h | 19 + drivers/video/fbdev/c2p_core.h | 153 + drivers/video/fbdev/c2p_iplan2.c | 153 + drivers/video/fbdev/c2p_planar.c | 156 + drivers/video/fbdev/carminefb.c | 793 ++ drivers/video/fbdev/carminefb.h | 65 + drivers/video/fbdev/carminefb_regs.h | 160 + drivers/video/fbdev/cg14.c | 622 + drivers/video/fbdev/cg3.c | 490 + drivers/video/fbdev/cg6.c | 884 ++ drivers/video/fbdev/chipsfb.c | 528 + drivers/video/fbdev/cirrusfb.c | 2952 +++++ drivers/video/fbdev/clps711x-fb.c | 382 + drivers/video/fbdev/cobalt_lcdfb.c | 354 + drivers/video/fbdev/controlfb.c | 1019 ++ drivers/video/fbdev/controlfb.h | 143 + drivers/video/fbdev/core/Kconfig | 198 + drivers/video/fbdev/core/Makefile | 34 + drivers/video/fbdev/core/bitblit.c | 409 + drivers/video/fbdev/core/cfbcopyarea.c | 437 + drivers/video/fbdev/core/cfbfillrect.c | 371 + drivers/video/fbdev/core/cfbimgblt.c | 366 + drivers/video/fbdev/core/fb_backlight.c | 33 + drivers/video/fbdev/core/fb_chrdev.c | 485 + drivers/video/fbdev/core/fb_cmdline.c | 61 + drivers/video/fbdev/core/fb_ddc.c | 127 + drivers/video/fbdev/core/fb_defio.c | 343 + drivers/video/fbdev/core/fb_draw.h | 187 + drivers/video/fbdev/core/fb_info.c | 79 + drivers/video/fbdev/core/fb_internal.h | 67 + drivers/video/fbdev/core/fb_io_fops.c | 133 + drivers/video/fbdev/core/fb_notify.c | 54 + drivers/video/fbdev/core/fb_procfs.c | 62 + drivers/video/fbdev/core/fb_sys_fops.c | 108 + drivers/video/fbdev/core/fbcmap.c | 362 + drivers/video/fbdev/core/fbcon.c | 3432 ++++++ drivers/video/fbdev/core/fbcon.h | 269 + drivers/video/fbdev/core/fbcon_ccw.c | 411 + drivers/video/fbdev/core/fbcon_cw.c | 394 + drivers/video/fbdev/core/fbcon_rotate.c | 111 + drivers/video/fbdev/core/fbcon_rotate.h | 96 + drivers/video/fbdev/core/fbcon_ud.c | 438 + drivers/video/fbdev/core/fbcvt.c | 368 + drivers/video/fbdev/core/fbmem.c | 1202 ++ drivers/video/fbdev/core/fbmon.c | 1520 +++ drivers/video/fbdev/core/fbsysfs.c | 502 + drivers/video/fbdev/core/modedb.c | 1209 ++ drivers/video/fbdev/core/softcursor.c | 76 + drivers/video/fbdev/core/svgalib.c | 667 ++ drivers/video/fbdev/core/syscopyarea.c | 370 + drivers/video/fbdev/core/sysfillrect.c | 325 + drivers/video/fbdev/core/sysimgblt.c | 336 + drivers/video/fbdev/core/tileblit.c | 151 + drivers/video/fbdev/cyber2000fb.c | 1907 ++++ drivers/video/fbdev/cyber2000fb.h | 494 + drivers/video/fbdev/da8xx-fb.c | 1665 +++ drivers/video/fbdev/dnfb.c | 305 + drivers/video/fbdev/edid.h | 138 + drivers/video/fbdev/efifb.c | 693 ++ drivers/video/fbdev/ep93xx-fb.c | 605 + drivers/video/fbdev/ffb.c | 1079 ++ drivers/video/fbdev/fm2fb.c | 320 + drivers/video/fbdev/fsl-diu-fb.c | 1994 ++++ drivers/video/fbdev/g364fb.c | 230 + drivers/video/fbdev/gbefb.c | 1285 +++ drivers/video/fbdev/geode/Kconfig | 53 + drivers/video/fbdev/geode/Makefile | 10 + drivers/video/fbdev/geode/display_gx.c | 180 + drivers/video/fbdev/geode/display_gx1.c | 210 + drivers/video/fbdev/geode/display_gx1.h | 150 + drivers/video/fbdev/geode/geodefb.h | 34 + drivers/video/fbdev/geode/gx1fb_core.c | 476 + drivers/video/fbdev/geode/gxfb.h | 349 + drivers/video/fbdev/geode/gxfb_core.c | 542 + drivers/video/fbdev/geode/lxfb.h | 443 + drivers/video/fbdev/geode/lxfb_core.c | 680 ++ drivers/video/fbdev/geode/lxfb_ops.c | 838 ++ drivers/video/fbdev/geode/suspend_gx.c | 259 + drivers/video/fbdev/geode/video_cs5530.c | 189 + drivers/video/fbdev/geode/video_cs5530.h | 71 + drivers/video/fbdev/geode/video_gx.c | 345 + drivers/video/fbdev/goldfishfb.c | 324 + drivers/video/fbdev/grvga.c | 550 + drivers/video/fbdev/gxt4500.c | 801 ++ drivers/video/fbdev/hecubafb.c | 247 + drivers/video/fbdev/hgafb.c | 669 ++ drivers/video/fbdev/hitfb.c | 512 + drivers/video/fbdev/hpfb.c | 425 + drivers/video/fbdev/hyperv_fb.c | 1396 +++ drivers/video/fbdev/i740_reg.h | 309 + drivers/video/fbdev/i740fb.c | 1316 +++ drivers/video/fbdev/i810/Makefile | 18 + drivers/video/fbdev/i810/i810-i2c.c | 175 + drivers/video/fbdev/i810/i810.h | 298 + drivers/video/fbdev/i810/i810_accel.c | 456 + drivers/video/fbdev/i810/i810_dvt.c | 313 + drivers/video/fbdev/i810/i810_gtf.c | 276 + drivers/video/fbdev/i810/i810_main.c | 2232 ++++ drivers/video/fbdev/i810/i810_main.h | 69 + drivers/video/fbdev/i810/i810_regs.h | 275 + drivers/video/fbdev/imsttfb.c | 1648 +++ drivers/video/fbdev/imxfb.c | 1113 ++ drivers/video/fbdev/intelfb/Makefile | 8 + drivers/video/fbdev/intelfb/intelfb.h | 382 + drivers/video/fbdev/intelfb/intelfb_i2c.c | 209 + drivers/video/fbdev/intelfb/intelfbdrv.c | 1678 +++ drivers/video/fbdev/intelfb/intelfbhw.c | 2115 ++++ drivers/video/fbdev/intelfb/intelfbhw.h | 609 + drivers/video/fbdev/kyro/Makefile | 9 + drivers/video/fbdev/kyro/STG4000InitDevice.c | 323 + drivers/video/fbdev/kyro/STG4000Interface.h | 61 + drivers/video/fbdev/kyro/STG4000OverlayDevice.c | 600 + drivers/video/fbdev/kyro/STG4000Ramdac.c | 163 + drivers/video/fbdev/kyro/STG4000Reg.h | 283 + drivers/video/fbdev/kyro/STG4000VTG.c | 170 + drivers/video/fbdev/kyro/fbdev.c | 814 ++ drivers/video/fbdev/leo.c | 689 ++ drivers/video/fbdev/macfb.c | 899 ++ drivers/video/fbdev/macmodes.c | 414 + drivers/video/fbdev/macmodes.h | 71 + drivers/video/fbdev/matrox/Makefile | 12 + drivers/video/fbdev/matrox/g450_pll.c | 517 + drivers/video/fbdev/matrox/g450_pll.h | 13 + drivers/video/fbdev/matrox/i2c-matroxfb.c | 239 + drivers/video/fbdev/matrox/matroxfb_DAC1064.c | 1114 ++ drivers/video/fbdev/matrox/matroxfb_DAC1064.h | 180 + drivers/video/fbdev/matrox/matroxfb_Ti3026.c | 749 ++ drivers/video/fbdev/matrox/matroxfb_Ti3026.h | 12 + drivers/video/fbdev/matrox/matroxfb_accel.c | 520 + drivers/video/fbdev/matrox/matroxfb_accel.h | 9 + drivers/video/fbdev/matrox/matroxfb_base.c | 2617 +++++ drivers/video/fbdev/matrox/matroxfb_base.h | 709 ++ drivers/video/fbdev/matrox/matroxfb_crtc2.c | 738 ++ drivers/video/fbdev/matrox/matroxfb_crtc2.h | 35 + drivers/video/fbdev/matrox/matroxfb_g450.c | 641 ++ drivers/video/fbdev/matrox/matroxfb_g450.h | 15 + drivers/video/fbdev/matrox/matroxfb_maven.c | 1302 +++ drivers/video/fbdev/matrox/matroxfb_maven.h | 21 + drivers/video/fbdev/matrox/matroxfb_misc.c | 819 ++ drivers/video/fbdev/matrox/matroxfb_misc.h | 22 + drivers/video/fbdev/maxinefb.c | 174 + drivers/video/fbdev/mb862xx/Makefile | 9 + drivers/video/fbdev/mb862xx/mb862xx-i2c.c | 168 + drivers/video/fbdev/mb862xx/mb862xx_reg.h | 189 + drivers/video/fbdev/mb862xx/mb862xxfb.h | 122 + drivers/video/fbdev/mb862xx/mb862xxfb_accel.c | 326 + drivers/video/fbdev/mb862xx/mb862xxfb_accel.h | 204 + drivers/video/fbdev/mb862xx/mb862xxfbdrv.c | 1207 ++ drivers/video/fbdev/metronomefb.c | 724 ++ drivers/video/fbdev/mmp/Kconfig | 12 + drivers/video/fbdev/mmp/Makefile | 4 + drivers/video/fbdev/mmp/core.c | 240 + drivers/video/fbdev/mmp/fb/Kconfig | 8 + drivers/video/fbdev/mmp/fb/Makefile | 2 + drivers/video/fbdev/mmp/fb/mmpfb.c | 669 ++ drivers/video/fbdev/mmp/fb/mmpfb.h | 41 + drivers/video/fbdev/mmp/hw/Kconfig | 17 + drivers/video/fbdev/mmp/hw/Makefile | 3 + drivers/video/fbdev/mmp/hw/mmp_ctrl.c | 581 + drivers/video/fbdev/mmp/hw/mmp_ctrl.h | 1456 +++ drivers/video/fbdev/mmp/hw/mmp_spi.c | 167 + drivers/video/fbdev/mmp/panel/Kconfig | 6 + drivers/video/fbdev/mmp/panel/Makefile | 2 + drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c | 172 + drivers/video/fbdev/n411.c | 208 + drivers/video/fbdev/neofb.c | 2225 ++++ drivers/video/fbdev/ocfb.c | 428 + drivers/video/fbdev/offb.c | 723 ++ drivers/video/fbdev/omap/Kconfig | 49 + drivers/video/fbdev/omap/Makefile | 26 + drivers/video/fbdev/omap/hwa742.c | 1057 ++ drivers/video/fbdev/omap/lcd_ams_delta.c | 175 + drivers/video/fbdev/omap/lcd_dma.c | 444 + drivers/video/fbdev/omap/lcd_dma.h | 63 + drivers/video/fbdev/omap/lcd_mipid.c | 606 + drivers/video/fbdev/omap/lcd_palmte.c | 52 + drivers/video/fbdev/omap/lcdc.c | 780 ++ drivers/video/fbdev/omap/lcdc.h | 45 + drivers/video/fbdev/omap/omapfb.h | 230 + drivers/video/fbdev/omap/omapfb_main.c | 1939 ++++ drivers/video/fbdev/omap/sossi.c | 683 ++ drivers/video/fbdev/omap2/Kconfig | 6 + drivers/video/fbdev/omap2/Makefile | 2 + drivers/video/fbdev/omap2/omapfb/Kconfig | 41 + drivers/video/fbdev/omap2/omapfb/Makefile | 6 + drivers/video/fbdev/omap2/omapfb/displays/Kconfig | 93 + drivers/video/fbdev/omap2/omapfb/displays/Makefile | 15 + .../omap2/omapfb/displays/connector-analog-tv.c | 262 + .../fbdev/omap2/omapfb/displays/connector-dvi.c | 345 + .../fbdev/omap2/omapfb/displays/connector-hdmi.c | 289 + .../fbdev/omap2/omapfb/displays/encoder-opa362.c | 275 + .../fbdev/omap2/omapfb/displays/encoder-tfp410.c | 262 + .../omap2/omapfb/displays/encoder-tpd12s015.c | 328 + .../video/fbdev/omap2/omapfb/displays/panel-dpi.c | 251 + .../fbdev/omap2/omapfb/displays/panel-dsi-cm.c | 1297 +++ .../omapfb/displays/panel-lgphilips-lb035q02.c | 335 + .../omap2/omapfb/displays/panel-nec-nl8048hl11.c | 361 + .../omapfb/displays/panel-sharp-ls037v7dw01.c | 332 + .../omap2/omapfb/displays/panel-sony-acx565akm.c | 862 ++ .../omap2/omapfb/displays/panel-tpo-td028ttec1.c | 476 + .../omap2/omapfb/displays/panel-tpo-td043mtea1.c | 616 + drivers/video/fbdev/omap2/omapfb/dss/Kconfig | 111 + drivers/video/fbdev/omap2/omapfb/dss/Makefile | 18 + drivers/video/fbdev/omap2/omapfb/dss/apply.c | 1689 +++ drivers/video/fbdev/omap2/omapfb/dss/core.c | 286 + .../video/fbdev/omap2/omapfb/dss/dispc-compat.c | 657 ++ .../video/fbdev/omap2/omapfb/dss/dispc-compat.h | 19 + drivers/video/fbdev/omap2/omapfb/dss/dispc.c | 4092 +++++++ drivers/video/fbdev/omap2/omapfb/dss/dispc.h | 907 ++ drivers/video/fbdev/omap2/omapfb/dss/dispc_coefs.c | 314 + .../video/fbdev/omap2/omapfb/dss/display-sysfs.c | 347 + drivers/video/fbdev/omap2/omapfb/dss/display.c | 327 + drivers/video/fbdev/omap2/omapfb/dss/dpi.c | 887 ++ drivers/video/fbdev/omap2/omapfb/dss/dsi.c | 5584 +++++++++ drivers/video/fbdev/omap2/omapfb/dss/dss-of.c | 176 + drivers/video/fbdev/omap2/omapfb/dss/dss.c | 1298 +++ drivers/video/fbdev/omap2/omapfb/dss/dss.h | 522 + .../video/fbdev/omap2/omapfb/dss/dss_features.c | 939 ++ .../video/fbdev/omap2/omapfb/dss/dss_features.h | 97 + drivers/video/fbdev/omap2/omapfb/dss/hdmi.h | 360 + drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c | 811 ++ drivers/video/fbdev/omap2/omapfb/dss/hdmi4_core.c | 885 ++ drivers/video/fbdev/omap2/omapfb/dss/hdmi4_core.h | 262 + drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c | 853 ++ drivers/video/fbdev/omap2/omapfb/dss/hdmi5_core.c | 895 ++ drivers/video/fbdev/omap2/omapfb/dss/hdmi5_core.h | 293 + drivers/video/fbdev/omap2/omapfb/dss/hdmi_common.c | 149 + drivers/video/fbdev/omap2/omapfb/dss/hdmi_phy.c | 221 + drivers/video/fbdev/omap2/omapfb/dss/hdmi_pll.c | 235 + drivers/video/fbdev/omap2/omapfb/dss/hdmi_wp.c | 281 + .../video/fbdev/omap2/omapfb/dss/manager-sysfs.c | 516 + drivers/video/fbdev/omap2/omapfb/dss/manager.c | 251 + .../fbdev/omap2/omapfb/dss/omapdss-boot-init.c | 218 + drivers/video/fbdev/omap2/omapfb/dss/output.c | 256 + .../video/fbdev/omap2/omapfb/dss/overlay-sysfs.c | 447 + drivers/video/fbdev/omap2/omapfb/dss/overlay.c | 191 + drivers/video/fbdev/omap2/omapfb/dss/pll.c | 378 + drivers/video/fbdev/omap2/omapfb/dss/sdi.c | 442 + drivers/video/fbdev/omap2/omapfb/dss/venc.c | 941 ++ drivers/video/fbdev/omap2/omapfb/dss/video-pll.c | 189 + drivers/video/fbdev/omap2/omapfb/omapfb-ioctl.c | 916 ++ drivers/video/fbdev/omap2/omapfb/omapfb-main.c | 2633 +++++ drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c | 588 + drivers/video/fbdev/omap2/omapfb/omapfb.h | 196 + drivers/video/fbdev/omap2/omapfb/vrfb.c | 385 + drivers/video/fbdev/p9100.c | 380 + drivers/video/fbdev/platinumfb.c | 699 ++ drivers/video/fbdev/platinumfb.h | 368 + drivers/video/fbdev/pm2fb.c | 1855 +++ drivers/video/fbdev/pm3fb.c | 1577 +++ drivers/video/fbdev/pmag-aa-fb.c | 301 + drivers/video/fbdev/pmag-ba-fb.c | 290 + drivers/video/fbdev/pmagb-b-fb.c | 408 + drivers/video/fbdev/ps3fb.c | 1305 +++ drivers/video/fbdev/pvr2fb.c | 1148 ++ drivers/video/fbdev/pxa168fb.c | 810 ++ drivers/video/fbdev/pxa168fb.h | 559 + drivers/video/fbdev/pxa3xx-gcu.c | 714 ++ drivers/video/fbdev/pxa3xx-gcu.h | 39 + drivers/video/fbdev/pxa3xx-regs.h | 180 + drivers/video/fbdev/pxafb.c | 2456 ++++ drivers/video/fbdev/pxafb.h | 204 + drivers/video/fbdev/q40fb.c | 151 + drivers/video/fbdev/s1d13xxxfb.c | 1033 ++ drivers/video/fbdev/s3c-fb.c | 1804 +++ drivers/video/fbdev/s3fb.c | 1581 +++ drivers/video/fbdev/sa1100fb.c | 1227 ++ drivers/video/fbdev/sa1100fb.h | 101 + drivers/video/fbdev/savage/Makefile | 10 + drivers/video/fbdev/savage/savagefb-i2c.c | 241 + drivers/video/fbdev/savage/savagefb.h | 406 + drivers/video/fbdev/savage/savagefb_accel.c | 137 + drivers/video/fbdev/savage/savagefb_driver.c | 2573 +++++ drivers/video/fbdev/sbuslib.c | 286 + drivers/video/fbdev/sbuslib.h | 28 + drivers/video/fbdev/sh7760fb.c | 585 + drivers/video/fbdev/sh_mobile_lcdcfb.c | 2663 +++++ drivers/video/fbdev/sh_mobile_lcdcfb.h | 107 + drivers/video/fbdev/simplefb.c | 565 + drivers/video/fbdev/sis/300vtbl.h | 1070 ++ drivers/video/fbdev/sis/310vtbl.h | 1339 +++ drivers/video/fbdev/sis/Makefile | 8 + drivers/video/fbdev/sis/init.c | 3631 ++++++ drivers/video/fbdev/sis/init.h | 1465 +++ drivers/video/fbdev/sis/init301.c | 11380 +++++++++++++++++++ drivers/video/fbdev/sis/init301.h | 136 + drivers/video/fbdev/sis/initdef.h | 708 ++ drivers/video/fbdev/sis/initextlfb.c | 218 + drivers/video/fbdev/sis/oem300.h | 840 ++ drivers/video/fbdev/sis/oem310.h | 432 + drivers/video/fbdev/sis/sis.h | 703 ++ drivers/video/fbdev/sis/sis_accel.c | 410 + drivers/video/fbdev/sis/sis_accel.h | 387 + drivers/video/fbdev/sis/sis_main.c | 6876 +++++++++++ drivers/video/fbdev/sis/sis_main.h | 651 ++ drivers/video/fbdev/sis/vgatypes.h | 97 + drivers/video/fbdev/sis/vstruct.h | 551 + drivers/video/fbdev/skeletonfb.c | 1032 ++ drivers/video/fbdev/sm501fb.c | 2228 ++++ drivers/video/fbdev/sm712.h | 112 + drivers/video/fbdev/sm712fb.c | 1780 +++ drivers/video/fbdev/smscufx.c | 1988 ++++ drivers/video/fbdev/ssd1307fb.c | 816 ++ drivers/video/fbdev/sstfb.c | 1538 +++ drivers/video/fbdev/stifb.c | 1526 +++ drivers/video/fbdev/sunxvr1000.c | 197 + drivers/video/fbdev/sunxvr2500.c | 255 + drivers/video/fbdev/sunxvr500.c | 440 + drivers/video/fbdev/tcx.c | 538 + drivers/video/fbdev/tdfxfb.c | 1667 +++ drivers/video/fbdev/tgafb.c | 1627 +++ drivers/video/fbdev/tridentfb.c | 1839 +++ drivers/video/fbdev/udlfb.c | 2001 ++++ drivers/video/fbdev/uvesafb.c | 2000 ++++ drivers/video/fbdev/valkyriefb.c | 575 + drivers/video/fbdev/valkyriefb.h | 196 + drivers/video/fbdev/vermilion/Makefile | 6 + drivers/video/fbdev/vermilion/cr_pll.c | 195 + drivers/video/fbdev/vermilion/vermilion.c | 1174 ++ drivers/video/fbdev/vermilion/vermilion.h | 245 + drivers/video/fbdev/vesafb.c | 506 + drivers/video/fbdev/vfb.c | 550 + drivers/video/fbdev/vga16fb.c | 1431 +++ drivers/video/fbdev/via/Makefile | 13 + drivers/video/fbdev/via/accel.c | 533 + drivers/video/fbdev/via/accel.h | 197 + drivers/video/fbdev/via/chip.h | 162 + drivers/video/fbdev/via/debug.h | 29 + drivers/video/fbdev/via/dvi.c | 464 + drivers/video/fbdev/via/dvi.h | 51 + drivers/video/fbdev/via/global.c | 36 + drivers/video/fbdev/via/global.h | 72 + drivers/video/fbdev/via/hw.c | 2119 ++++ drivers/video/fbdev/via/hw.h | 662 ++ drivers/video/fbdev/via/ioctl.c | 102 + drivers/video/fbdev/via/ioctl.h | 189 + drivers/video/fbdev/via/lcd.c | 990 ++ drivers/video/fbdev/via/lcd.h | 75 + drivers/video/fbdev/via/share.h | 318 + drivers/video/fbdev/via/tblDPASetting.c | 72 + drivers/video/fbdev/via/tblDPASetting.h | 31 + drivers/video/fbdev/via/via-core.c | 755 ++ drivers/video/fbdev/via/via-gpio.c | 306 + drivers/video/fbdev/via/via-gpio.h | 13 + drivers/video/fbdev/via/via_aux.c | 73 + drivers/video/fbdev/via/via_aux.h | 78 + drivers/video/fbdev/via/via_aux_ch7301.c | 35 + drivers/video/fbdev/via/via_aux_edid.c | 85 + drivers/video/fbdev/via/via_aux_sii164.c | 39 + drivers/video/fbdev/via/via_aux_vt1621.c | 29 + drivers/video/fbdev/via/via_aux_vt1622.c | 35 + drivers/video/fbdev/via/via_aux_vt1625.c | 35 + drivers/video/fbdev/via/via_aux_vt1631.c | 31 + drivers/video/fbdev/via/via_aux_vt1632.c | 39 + drivers/video/fbdev/via/via_aux_vt1636.c | 31 + drivers/video/fbdev/via/via_clock.c | 353 + drivers/video/fbdev/via/via_clock.h | 61 + drivers/video/fbdev/via/via_i2c.c | 280 + drivers/video/fbdev/via/via_modesetting.c | 215 + drivers/video/fbdev/via/via_modesetting.h | 46 + drivers/video/fbdev/via/via_utility.c | 228 + drivers/video/fbdev/via/via_utility.h | 20 + drivers/video/fbdev/via/viafbdev.c | 2146 ++++ drivers/video/fbdev/via/viafbdev.h | 96 + drivers/video/fbdev/via/viamode.c | 369 + drivers/video/fbdev/via/viamode.h | 49 + drivers/video/fbdev/via/vt1636.c | 230 + drivers/video/fbdev/via/vt1636.h | 30 + drivers/video/fbdev/vt8500lcdfb.c | 485 + drivers/video/fbdev/vt8500lcdfb.h | 26 + drivers/video/fbdev/vt8623fb.c | 945 ++ drivers/video/fbdev/wm8505fb.c | 405 + drivers/video/fbdev/wm8505fb_regs.h | 68 + drivers/video/fbdev/wmt_ge_rops.c | 174 + drivers/video/fbdev/wmt_ge_rops.h | 29 + drivers/video/fbdev/xen-fbfront.c | 698 ++ drivers/video/fbdev/xilinxfb.c | 502 + 419 files changed, 266731 insertions(+) create mode 100644 drivers/video/fbdev/68328fb.c create mode 100644 drivers/video/fbdev/Kconfig create mode 100644 drivers/video/fbdev/Makefile create mode 100644 drivers/video/fbdev/acornfb.c create mode 100644 drivers/video/fbdev/acornfb.h create mode 100644 drivers/video/fbdev/amba-clcd.c create mode 100644 drivers/video/fbdev/amifb.c create mode 100644 drivers/video/fbdev/arcfb.c create mode 100644 drivers/video/fbdev/arkfb.c create mode 100644 drivers/video/fbdev/asiliantfb.c create mode 100644 drivers/video/fbdev/atafb.c create mode 100644 drivers/video/fbdev/atafb.h create mode 100644 drivers/video/fbdev/atafb_iplan2p2.c create mode 100644 drivers/video/fbdev/atafb_iplan2p4.c create mode 100644 drivers/video/fbdev/atafb_iplan2p8.c create mode 100644 drivers/video/fbdev/atafb_mfb.c create mode 100644 drivers/video/fbdev/atafb_utils.h create mode 100644 drivers/video/fbdev/atmel_lcdfb.c create mode 100644 drivers/video/fbdev/aty/Makefile create mode 100644 drivers/video/fbdev/aty/ati_ids.h create mode 100644 drivers/video/fbdev/aty/aty128fb.c create mode 100644 drivers/video/fbdev/aty/atyfb.h create mode 100644 drivers/video/fbdev/aty/atyfb_base.c create mode 100644 drivers/video/fbdev/aty/mach64_accel.c create mode 100644 drivers/video/fbdev/aty/mach64_ct.c create mode 100644 drivers/video/fbdev/aty/mach64_cursor.c create mode 100644 drivers/video/fbdev/aty/mach64_gx.c create mode 100644 drivers/video/fbdev/aty/radeon_accel.c create mode 100644 drivers/video/fbdev/aty/radeon_backlight.c create mode 100644 drivers/video/fbdev/aty/radeon_base.c create mode 100644 drivers/video/fbdev/aty/radeon_i2c.c create mode 100644 drivers/video/fbdev/aty/radeon_monitor.c create mode 100644 drivers/video/fbdev/aty/radeon_pm.c create mode 100644 drivers/video/fbdev/aty/radeonfb.h create mode 100644 drivers/video/fbdev/au1100fb.c create mode 100644 drivers/video/fbdev/au1100fb.h create mode 100644 drivers/video/fbdev/au1200fb.c create mode 100644 drivers/video/fbdev/au1200fb.h create mode 100644 drivers/video/fbdev/broadsheetfb.c create mode 100644 drivers/video/fbdev/bt431.h create mode 100644 drivers/video/fbdev/bt455.h create mode 100644 drivers/video/fbdev/bw2.c create mode 100644 drivers/video/fbdev/c2p.h create mode 100644 drivers/video/fbdev/c2p_core.h create mode 100644 drivers/video/fbdev/c2p_iplan2.c create mode 100644 drivers/video/fbdev/c2p_planar.c create mode 100644 drivers/video/fbdev/carminefb.c create mode 100644 drivers/video/fbdev/carminefb.h create mode 100644 drivers/video/fbdev/carminefb_regs.h create mode 100644 drivers/video/fbdev/cg14.c create mode 100644 drivers/video/fbdev/cg3.c create mode 100644 drivers/video/fbdev/cg6.c create mode 100644 drivers/video/fbdev/chipsfb.c create mode 100644 drivers/video/fbdev/cirrusfb.c create mode 100644 drivers/video/fbdev/clps711x-fb.c create mode 100644 drivers/video/fbdev/cobalt_lcdfb.c create mode 100644 drivers/video/fbdev/controlfb.c create mode 100644 drivers/video/fbdev/controlfb.h create mode 100644 drivers/video/fbdev/core/Kconfig create mode 100644 drivers/video/fbdev/core/Makefile create mode 100644 drivers/video/fbdev/core/bitblit.c create mode 100644 drivers/video/fbdev/core/cfbcopyarea.c create mode 100644 drivers/video/fbdev/core/cfbfillrect.c create mode 100644 drivers/video/fbdev/core/cfbimgblt.c create mode 100644 drivers/video/fbdev/core/fb_backlight.c create mode 100644 drivers/video/fbdev/core/fb_chrdev.c create mode 100644 drivers/video/fbdev/core/fb_cmdline.c create mode 100644 drivers/video/fbdev/core/fb_ddc.c create mode 100644 drivers/video/fbdev/core/fb_defio.c create mode 100644 drivers/video/fbdev/core/fb_draw.h create mode 100644 drivers/video/fbdev/core/fb_info.c create mode 100644 drivers/video/fbdev/core/fb_internal.h create mode 100644 drivers/video/fbdev/core/fb_io_fops.c create mode 100644 drivers/video/fbdev/core/fb_notify.c create mode 100644 drivers/video/fbdev/core/fb_procfs.c create mode 100644 drivers/video/fbdev/core/fb_sys_fops.c create mode 100644 drivers/video/fbdev/core/fbcmap.c create mode 100644 drivers/video/fbdev/core/fbcon.c create mode 100644 drivers/video/fbdev/core/fbcon.h create mode 100644 drivers/video/fbdev/core/fbcon_ccw.c create mode 100644 drivers/video/fbdev/core/fbcon_cw.c create mode 100644 drivers/video/fbdev/core/fbcon_rotate.c create mode 100644 drivers/video/fbdev/core/fbcon_rotate.h create mode 100644 drivers/video/fbdev/core/fbcon_ud.c create mode 100644 drivers/video/fbdev/core/fbcvt.c create mode 100644 drivers/video/fbdev/core/fbmem.c create mode 100644 drivers/video/fbdev/core/fbmon.c create mode 100644 drivers/video/fbdev/core/fbsysfs.c create mode 100644 drivers/video/fbdev/core/modedb.c create mode 100644 drivers/video/fbdev/core/softcursor.c create mode 100644 drivers/video/fbdev/core/svgalib.c create mode 100644 drivers/video/fbdev/core/syscopyarea.c create mode 100644 drivers/video/fbdev/core/sysfillrect.c create mode 100644 drivers/video/fbdev/core/sysimgblt.c create mode 100644 drivers/video/fbdev/core/tileblit.c create mode 100644 drivers/video/fbdev/cyber2000fb.c create mode 100644 drivers/video/fbdev/cyber2000fb.h create mode 100644 drivers/video/fbdev/da8xx-fb.c create mode 100644 drivers/video/fbdev/dnfb.c create mode 100644 drivers/video/fbdev/edid.h create mode 100644 drivers/video/fbdev/efifb.c create mode 100644 drivers/video/fbdev/ep93xx-fb.c create mode 100644 drivers/video/fbdev/ffb.c create mode 100644 drivers/video/fbdev/fm2fb.c create mode 100644 drivers/video/fbdev/fsl-diu-fb.c create mode 100644 drivers/video/fbdev/g364fb.c create mode 100644 drivers/video/fbdev/gbefb.c create mode 100644 drivers/video/fbdev/geode/Kconfig create mode 100644 drivers/video/fbdev/geode/Makefile create mode 100644 drivers/video/fbdev/geode/display_gx.c create mode 100644 drivers/video/fbdev/geode/display_gx1.c create mode 100644 drivers/video/fbdev/geode/display_gx1.h create mode 100644 drivers/video/fbdev/geode/geodefb.h create mode 100644 drivers/video/fbdev/geode/gx1fb_core.c create mode 100644 drivers/video/fbdev/geode/gxfb.h create mode 100644 drivers/video/fbdev/geode/gxfb_core.c create mode 100644 drivers/video/fbdev/geode/lxfb.h create mode 100644 drivers/video/fbdev/geode/lxfb_core.c create mode 100644 drivers/video/fbdev/geode/lxfb_ops.c create mode 100644 drivers/video/fbdev/geode/suspend_gx.c create mode 100644 drivers/video/fbdev/geode/video_cs5530.c create mode 100644 drivers/video/fbdev/geode/video_cs5530.h create mode 100644 drivers/video/fbdev/geode/video_gx.c create mode 100644 drivers/video/fbdev/goldfishfb.c create mode 100644 drivers/video/fbdev/grvga.c create mode 100644 drivers/video/fbdev/gxt4500.c create mode 100644 drivers/video/fbdev/hecubafb.c create mode 100644 drivers/video/fbdev/hgafb.c create mode 100644 drivers/video/fbdev/hitfb.c create mode 100644 drivers/video/fbdev/hpfb.c create mode 100644 drivers/video/fbdev/hyperv_fb.c create mode 100644 drivers/video/fbdev/i740_reg.h create mode 100644 drivers/video/fbdev/i740fb.c create mode 100644 drivers/video/fbdev/i810/Makefile create mode 100644 drivers/video/fbdev/i810/i810-i2c.c create mode 100644 drivers/video/fbdev/i810/i810.h create mode 100644 drivers/video/fbdev/i810/i810_accel.c create mode 100644 drivers/video/fbdev/i810/i810_dvt.c create mode 100644 drivers/video/fbdev/i810/i810_gtf.c create mode 100644 drivers/video/fbdev/i810/i810_main.c create mode 100644 drivers/video/fbdev/i810/i810_main.h create mode 100644 drivers/video/fbdev/i810/i810_regs.h create mode 100644 drivers/video/fbdev/imsttfb.c create mode 100644 drivers/video/fbdev/imxfb.c create mode 100644 drivers/video/fbdev/intelfb/Makefile create mode 100644 drivers/video/fbdev/intelfb/intelfb.h create mode 100644 drivers/video/fbdev/intelfb/intelfb_i2c.c create mode 100644 drivers/video/fbdev/intelfb/intelfbdrv.c create mode 100644 drivers/video/fbdev/intelfb/intelfbhw.c create mode 100644 drivers/video/fbdev/intelfb/intelfbhw.h create mode 100644 drivers/video/fbdev/kyro/Makefile create mode 100644 drivers/video/fbdev/kyro/STG4000InitDevice.c create mode 100644 drivers/video/fbdev/kyro/STG4000Interface.h create mode 100644 drivers/video/fbdev/kyro/STG4000OverlayDevice.c create mode 100644 drivers/video/fbdev/kyro/STG4000Ramdac.c create mode 100644 drivers/video/fbdev/kyro/STG4000Reg.h create mode 100644 drivers/video/fbdev/kyro/STG4000VTG.c create mode 100644 drivers/video/fbdev/kyro/fbdev.c create mode 100644 drivers/video/fbdev/leo.c create mode 100644 drivers/video/fbdev/macfb.c create mode 100644 drivers/video/fbdev/macmodes.c create mode 100644 drivers/video/fbdev/macmodes.h create mode 100644 drivers/video/fbdev/matrox/Makefile create mode 100644 drivers/video/fbdev/matrox/g450_pll.c create mode 100644 drivers/video/fbdev/matrox/g450_pll.h create mode 100644 drivers/video/fbdev/matrox/i2c-matroxfb.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_DAC1064.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_DAC1064.h create mode 100644 drivers/video/fbdev/matrox/matroxfb_Ti3026.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_Ti3026.h create mode 100644 drivers/video/fbdev/matrox/matroxfb_accel.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_accel.h create mode 100644 drivers/video/fbdev/matrox/matroxfb_base.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_base.h create mode 100644 drivers/video/fbdev/matrox/matroxfb_crtc2.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_crtc2.h create mode 100644 drivers/video/fbdev/matrox/matroxfb_g450.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_g450.h create mode 100644 drivers/video/fbdev/matrox/matroxfb_maven.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_maven.h create mode 100644 drivers/video/fbdev/matrox/matroxfb_misc.c create mode 100644 drivers/video/fbdev/matrox/matroxfb_misc.h create mode 100644 drivers/video/fbdev/maxinefb.c create mode 100644 drivers/video/fbdev/mb862xx/Makefile create mode 100644 drivers/video/fbdev/mb862xx/mb862xx-i2c.c create mode 100644 drivers/video/fbdev/mb862xx/mb862xx_reg.h create mode 100644 drivers/video/fbdev/mb862xx/mb862xxfb.h create mode 100644 drivers/video/fbdev/mb862xx/mb862xxfb_accel.c create mode 100644 drivers/video/fbdev/mb862xx/mb862xxfb_accel.h create mode 100644 drivers/video/fbdev/mb862xx/mb862xxfbdrv.c create mode 100644 drivers/video/fbdev/metronomefb.c create mode 100644 drivers/video/fbdev/mmp/Kconfig create mode 100644 drivers/video/fbdev/mmp/Makefile create mode 100644 drivers/video/fbdev/mmp/core.c create mode 100644 drivers/video/fbdev/mmp/fb/Kconfig create mode 100644 drivers/video/fbdev/mmp/fb/Makefile create mode 100644 drivers/video/fbdev/mmp/fb/mmpfb.c create mode 100644 drivers/video/fbdev/mmp/fb/mmpfb.h create mode 100644 drivers/video/fbdev/mmp/hw/Kconfig create mode 100644 drivers/video/fbdev/mmp/hw/Makefile create mode 100644 drivers/video/fbdev/mmp/hw/mmp_ctrl.c create mode 100644 drivers/video/fbdev/mmp/hw/mmp_ctrl.h create mode 100644 drivers/video/fbdev/mmp/hw/mmp_spi.c create mode 100644 drivers/video/fbdev/mmp/panel/Kconfig create mode 100644 drivers/video/fbdev/mmp/panel/Makefile create mode 100644 drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c create mode 100644 drivers/video/fbdev/n411.c create mode 100644 drivers/video/fbdev/neofb.c create mode 100644 drivers/video/fbdev/ocfb.c create mode 100644 drivers/video/fbdev/offb.c create mode 100644 drivers/video/fbdev/omap/Kconfig create mode 100644 drivers/video/fbdev/omap/Makefile create mode 100644 drivers/video/fbdev/omap/hwa742.c create mode 100644 drivers/video/fbdev/omap/lcd_ams_delta.c create mode 100644 drivers/video/fbdev/omap/lcd_dma.c create mode 100644 drivers/video/fbdev/omap/lcd_dma.h create mode 100644 drivers/video/fbdev/omap/lcd_mipid.c create mode 100644 drivers/video/fbdev/omap/lcd_palmte.c create mode 100644 drivers/video/fbdev/omap/lcdc.c create mode 100644 drivers/video/fbdev/omap/lcdc.h create mode 100644 drivers/video/fbdev/omap/omapfb.h create mode 100644 drivers/video/fbdev/omap/omapfb_main.c create mode 100644 drivers/video/fbdev/omap/sossi.c create mode 100644 drivers/video/fbdev/omap2/Kconfig create mode 100644 drivers/video/fbdev/omap2/Makefile create mode 100644 drivers/video/fbdev/omap2/omapfb/Kconfig create mode 100644 drivers/video/fbdev/omap2/omapfb/Makefile create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/Kconfig create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/Makefile create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/panel-nec-nl8048hl11.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td028ttec1.c create mode 100644 drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/Kconfig create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/Makefile create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/apply.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/core.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dispc-compat.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dispc-compat.h create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dispc.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dispc.h create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dispc_coefs.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/display.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dpi.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dsi.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dss-of.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dss.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dss.h create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dss_features.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/dss_features.h create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi.h create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi4_core.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi4_core.h create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi5_core.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi5_core.h create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi_common.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi_phy.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi_pll.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/hdmi_wp.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/manager-sysfs.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/manager.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/output.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/overlay.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/pll.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/sdi.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/venc.c create mode 100644 drivers/video/fbdev/omap2/omapfb/dss/video-pll.c create mode 100644 drivers/video/fbdev/omap2/omapfb/omapfb-ioctl.c create mode 100644 drivers/video/fbdev/omap2/omapfb/omapfb-main.c create mode 100644 drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c create mode 100644 drivers/video/fbdev/omap2/omapfb/omapfb.h create mode 100644 drivers/video/fbdev/omap2/omapfb/vrfb.c create mode 100644 drivers/video/fbdev/p9100.c create mode 100644 drivers/video/fbdev/platinumfb.c create mode 100644 drivers/video/fbdev/platinumfb.h create mode 100644 drivers/video/fbdev/pm2fb.c create mode 100644 drivers/video/fbdev/pm3fb.c create mode 100644 drivers/video/fbdev/pmag-aa-fb.c create mode 100644 drivers/video/fbdev/pmag-ba-fb.c create mode 100644 drivers/video/fbdev/pmagb-b-fb.c create mode 100644 drivers/video/fbdev/ps3fb.c create mode 100644 drivers/video/fbdev/pvr2fb.c create mode 100644 drivers/video/fbdev/pxa168fb.c create mode 100644 drivers/video/fbdev/pxa168fb.h create mode 100644 drivers/video/fbdev/pxa3xx-gcu.c create mode 100644 drivers/video/fbdev/pxa3xx-gcu.h create mode 100644 drivers/video/fbdev/pxa3xx-regs.h create mode 100644 drivers/video/fbdev/pxafb.c create mode 100644 drivers/video/fbdev/pxafb.h create mode 100644 drivers/video/fbdev/q40fb.c create mode 100644 drivers/video/fbdev/s1d13xxxfb.c create mode 100644 drivers/video/fbdev/s3c-fb.c create mode 100644 drivers/video/fbdev/s3fb.c create mode 100644 drivers/video/fbdev/sa1100fb.c create mode 100644 drivers/video/fbdev/sa1100fb.h create mode 100644 drivers/video/fbdev/savage/Makefile create mode 100644 drivers/video/fbdev/savage/savagefb-i2c.c create mode 100644 drivers/video/fbdev/savage/savagefb.h create mode 100644 drivers/video/fbdev/savage/savagefb_accel.c create mode 100644 drivers/video/fbdev/savage/savagefb_driver.c create mode 100644 drivers/video/fbdev/sbuslib.c create mode 100644 drivers/video/fbdev/sbuslib.h create mode 100644 drivers/video/fbdev/sh7760fb.c create mode 100644 drivers/video/fbdev/sh_mobile_lcdcfb.c create mode 100644 drivers/video/fbdev/sh_mobile_lcdcfb.h create mode 100644 drivers/video/fbdev/simplefb.c create mode 100644 drivers/video/fbdev/sis/300vtbl.h create mode 100644 drivers/video/fbdev/sis/310vtbl.h create mode 100644 drivers/video/fbdev/sis/Makefile create mode 100644 drivers/video/fbdev/sis/init.c create mode 100644 drivers/video/fbdev/sis/init.h create mode 100644 drivers/video/fbdev/sis/init301.c create mode 100644 drivers/video/fbdev/sis/init301.h create mode 100644 drivers/video/fbdev/sis/initdef.h create mode 100644 drivers/video/fbdev/sis/initextlfb.c create mode 100644 drivers/video/fbdev/sis/oem300.h create mode 100644 drivers/video/fbdev/sis/oem310.h create mode 100644 drivers/video/fbdev/sis/sis.h create mode 100644 drivers/video/fbdev/sis/sis_accel.c create mode 100644 drivers/video/fbdev/sis/sis_accel.h create mode 100644 drivers/video/fbdev/sis/sis_main.c create mode 100644 drivers/video/fbdev/sis/sis_main.h create mode 100644 drivers/video/fbdev/sis/vgatypes.h create mode 100644 drivers/video/fbdev/sis/vstruct.h create mode 100644 drivers/video/fbdev/skeletonfb.c create mode 100644 drivers/video/fbdev/sm501fb.c create mode 100644 drivers/video/fbdev/sm712.h create mode 100644 drivers/video/fbdev/sm712fb.c create mode 100644 drivers/video/fbdev/smscufx.c create mode 100644 drivers/video/fbdev/ssd1307fb.c create mode 100644 drivers/video/fbdev/sstfb.c create mode 100644 drivers/video/fbdev/stifb.c create mode 100644 drivers/video/fbdev/sunxvr1000.c create mode 100644 drivers/video/fbdev/sunxvr2500.c create mode 100644 drivers/video/fbdev/sunxvr500.c create mode 100644 drivers/video/fbdev/tcx.c create mode 100644 drivers/video/fbdev/tdfxfb.c create mode 100644 drivers/video/fbdev/tgafb.c create mode 100644 drivers/video/fbdev/tridentfb.c create mode 100644 drivers/video/fbdev/udlfb.c create mode 100644 drivers/video/fbdev/uvesafb.c create mode 100644 drivers/video/fbdev/valkyriefb.c create mode 100644 drivers/video/fbdev/valkyriefb.h create mode 100644 drivers/video/fbdev/vermilion/Makefile create mode 100644 drivers/video/fbdev/vermilion/cr_pll.c create mode 100644 drivers/video/fbdev/vermilion/vermilion.c create mode 100644 drivers/video/fbdev/vermilion/vermilion.h create mode 100644 drivers/video/fbdev/vesafb.c create mode 100644 drivers/video/fbdev/vfb.c create mode 100644 drivers/video/fbdev/vga16fb.c create mode 100644 drivers/video/fbdev/via/Makefile create mode 100644 drivers/video/fbdev/via/accel.c create mode 100644 drivers/video/fbdev/via/accel.h create mode 100644 drivers/video/fbdev/via/chip.h create mode 100644 drivers/video/fbdev/via/debug.h create mode 100644 drivers/video/fbdev/via/dvi.c create mode 100644 drivers/video/fbdev/via/dvi.h create mode 100644 drivers/video/fbdev/via/global.c create mode 100644 drivers/video/fbdev/via/global.h create mode 100644 drivers/video/fbdev/via/hw.c create mode 100644 drivers/video/fbdev/via/hw.h create mode 100644 drivers/video/fbdev/via/ioctl.c create mode 100644 drivers/video/fbdev/via/ioctl.h create mode 100644 drivers/video/fbdev/via/lcd.c create mode 100644 drivers/video/fbdev/via/lcd.h create mode 100644 drivers/video/fbdev/via/share.h create mode 100644 drivers/video/fbdev/via/tblDPASetting.c create mode 100644 drivers/video/fbdev/via/tblDPASetting.h create mode 100644 drivers/video/fbdev/via/via-core.c create mode 100644 drivers/video/fbdev/via/via-gpio.c create mode 100644 drivers/video/fbdev/via/via-gpio.h create mode 100644 drivers/video/fbdev/via/via_aux.c create mode 100644 drivers/video/fbdev/via/via_aux.h create mode 100644 drivers/video/fbdev/via/via_aux_ch7301.c create mode 100644 drivers/video/fbdev/via/via_aux_edid.c create mode 100644 drivers/video/fbdev/via/via_aux_sii164.c create mode 100644 drivers/video/fbdev/via/via_aux_vt1621.c create mode 100644 drivers/video/fbdev/via/via_aux_vt1622.c create mode 100644 drivers/video/fbdev/via/via_aux_vt1625.c create mode 100644 drivers/video/fbdev/via/via_aux_vt1631.c create mode 100644 drivers/video/fbdev/via/via_aux_vt1632.c create mode 100644 drivers/video/fbdev/via/via_aux_vt1636.c create mode 100644 drivers/video/fbdev/via/via_clock.c create mode 100644 drivers/video/fbdev/via/via_clock.h create mode 100644 drivers/video/fbdev/via/via_i2c.c create mode 100644 drivers/video/fbdev/via/via_modesetting.c create mode 100644 drivers/video/fbdev/via/via_modesetting.h create mode 100644 drivers/video/fbdev/via/via_utility.c create mode 100644 drivers/video/fbdev/via/via_utility.h create mode 100644 drivers/video/fbdev/via/viafbdev.c create mode 100644 drivers/video/fbdev/via/viafbdev.h create mode 100644 drivers/video/fbdev/via/viamode.c create mode 100644 drivers/video/fbdev/via/viamode.h create mode 100644 drivers/video/fbdev/via/vt1636.c create mode 100644 drivers/video/fbdev/via/vt1636.h create mode 100644 drivers/video/fbdev/vt8500lcdfb.c create mode 100644 drivers/video/fbdev/vt8500lcdfb.h create mode 100644 drivers/video/fbdev/vt8623fb.c create mode 100644 drivers/video/fbdev/wm8505fb.c create mode 100644 drivers/video/fbdev/wm8505fb_regs.h create mode 100644 drivers/video/fbdev/wmt_ge_rops.c create mode 100644 drivers/video/fbdev/wmt_ge_rops.h create mode 100644 drivers/video/fbdev/xen-fbfront.c create mode 100644 drivers/video/fbdev/xilinxfb.c (limited to 'drivers/video/fbdev') diff --git a/drivers/video/fbdev/68328fb.c b/drivers/video/fbdev/68328fb.c new file mode 100644 index 0000000000..956dd2399c --- /dev/null +++ b/drivers/video/fbdev/68328fb.c @@ -0,0 +1,483 @@ +/* + * linux/drivers/video/68328fb.c -- Low level implementation of the + * mc68x328 LCD frame buffer device + * + * Copyright (C) 2003 Georges Menie + * + * This driver assumes an already configured controller (e.g. from config.c) + * Keep the code clean of board specific initialization. + * + * This code has not been tested with colors, colormap management functions + * are minimal (no colormap data written to the 68328 registers...) + * + * initial version of this driver: + * Copyright (C) 1998,1999 Kenneth Albanowski , + * The Silver Hammer Group, Ltd. + * + * this version is based on : + * + * linux/drivers/video/vfb.c -- Virtual frame buffer device + * + * Copyright (C) 2002 James Simmons + * + * Copyright (C) 1997 Geert Uytterhoeven + * + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(CONFIG_M68VZ328) +#include +#elif defined(CONFIG_M68EZ328) +#include +#elif defined(CONFIG_M68328) +#include +#else +#error wrong architecture for the MC68x328 frame buffer device +#endif + +static u_long videomemory; +static u_long videomemorysize; + +static struct fb_info fb_info; +static u32 mc68x328fb_pseudo_palette[16]; + +static struct fb_var_screeninfo mc68x328fb_default __initdata = { + .red = { 0, 8, 0 }, + .green = { 0, 8, 0 }, + .blue = { 0, 8, 0 }, + .activate = FB_ACTIVATE_TEST, + .height = -1, + .width = -1, + .pixclock = 20000, + .left_margin = 64, + .right_margin = 64, + .upper_margin = 32, + .lower_margin = 32, + .hsync_len = 64, + .vsync_len = 2, + .vmode = FB_VMODE_NONINTERLACED, +}; + +static const struct fb_fix_screeninfo mc68x328fb_fix __initconst = { + .id = "68328fb", + .type = FB_TYPE_PACKED_PIXELS, + .xpanstep = 1, + .ypanstep = 1, + .ywrapstep = 1, + .accel = FB_ACCEL_NONE, +}; + + /* + * Interface used by the world + */ +static int mc68x328fb_check_var(struct fb_var_screeninfo *var, + struct fb_info *info); +static int mc68x328fb_set_par(struct fb_info *info); +static int mc68x328fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, + u_int transp, struct fb_info *info); +static int mc68x328fb_pan_display(struct fb_var_screeninfo *var, + struct fb_info *info); +static int mc68x328fb_mmap(struct fb_info *info, struct vm_area_struct *vma); + +static const struct fb_ops mc68x328fb_ops = { + .owner = THIS_MODULE, + .fb_check_var = mc68x328fb_check_var, + .fb_set_par = mc68x328fb_set_par, + .fb_setcolreg = mc68x328fb_setcolreg, + .fb_pan_display = mc68x328fb_pan_display, + .fb_fillrect = cfb_fillrect, + .fb_copyarea = cfb_copyarea, + .fb_imageblit = cfb_imageblit, + .fb_mmap = mc68x328fb_mmap, +}; + + /* + * Internal routines + */ + +static u_long get_line_length(int xres_virtual, int bpp) +{ + u_long length; + + length = xres_virtual * bpp; + length = (length + 31) & ~31; + length >>= 3; + return (length); +} + + /* + * Setting the video mode has been split into two parts. + * First part, xxxfb_check_var, must not write anything + * to hardware, it should only verify and adjust var. + * This means it doesn't alter par but it does use hardware + * data from it to check this var. + */ + +static int mc68x328fb_check_var(struct fb_var_screeninfo *var, + struct fb_info *info) +{ + u_long line_length; + + /* + * FB_VMODE_CONUPDATE and FB_VMODE_SMOOTH_XPAN are equal! + * as FB_VMODE_SMOOTH_XPAN is only used internally + */ + + if (var->vmode & FB_VMODE_CONUPDATE) { + var->vmode |= FB_VMODE_YWRAP; + var->xoffset = info->var.xoffset; + var->yoffset = info->var.yoffset; + } + + /* + * Some very basic checks + */ + if (!var->xres) + var->xres = 1; + if (!var->yres) + var->yres = 1; + if (var->xres > var->xres_virtual) + var->xres_virtual = var->xres; + if (var->yres > var->yres_virtual) + var->yres_virtual = var->yres; + if (var->bits_per_pixel <= 1) + var->bits_per_pixel = 1; + else if (var->bits_per_pixel <= 8) + var->bits_per_pixel = 8; + else if (var->bits_per_pixel <= 16) + var->bits_per_pixel = 16; + else if (var->bits_per_pixel <= 24) + var->bits_per_pixel = 24; + else if (var->bits_per_pixel <= 32) + var->bits_per_pixel = 32; + else + return -EINVAL; + + if (var->xres_virtual < var->xoffset + var->xres) + var->xres_virtual = var->xoffset + var->xres; + if (var->yres_virtual < var->yoffset + var->yres) + var->yres_virtual = var->yoffset + var->yres; + + /* + * Memory limit + */ + line_length = + get_line_length(var->xres_virtual, var->bits_per_pixel); + if (line_length * var->yres_virtual > videomemorysize) + return -ENOMEM; + + /* + * Now that we checked it we alter var. The reason being is that the video + * mode passed in might not work but slight changes to it might make it + * work. This way we let the user know what is acceptable. + */ + switch (var->bits_per_pixel) { + case 1: + var->red.offset = 0; + var->red.length = 1; + var->green.offset = 0; + var->green.length = 1; + var->blue.offset = 0; + var->blue.length = 1; + var->transp.offset = 0; + var->transp.length = 0; + break; + case 8: + var->red.offset = 0; + var->red.length = 8; + var->green.offset = 0; + var->green.length = 8; + var->blue.offset = 0; + var->blue.length = 8; + var->transp.offset = 0; + var->transp.length = 0; + break; + case 16: /* RGBA 5551 */ + if (var->transp.length) { + var->red.offset = 0; + var->red.length = 5; + var->green.offset = 5; + var->green.length = 5; + var->blue.offset = 10; + var->blue.length = 5; + var->transp.offset = 15; + var->transp.length = 1; + } else { /* RGB 565 */ + var->red.offset = 0; + var->red.length = 5; + var->green.offset = 5; + var->green.length = 6; + var->blue.offset = 11; + var->blue.length = 5; + var->transp.offset = 0; + var->transp.length = 0; + } + break; + case 24: /* RGB 888 */ + var->red.offset = 0; + var->red.length = 8; + var->green.offset = 8; + var->green.length = 8; + var->blue.offset = 16; + var->blue.length = 8; + var->transp.offset = 0; + var->transp.length = 0; + break; + case 32: /* RGBA 8888 */ + var->red.offset = 0; + var->red.length = 8; + var->green.offset = 8; + var->green.length = 8; + var->blue.offset = 16; + var->blue.length = 8; + var->transp.offset = 24; + var->transp.length = 8; + break; + } + var->red.msb_right = 0; + var->green.msb_right = 0; + var->blue.msb_right = 0; + var->transp.msb_right = 0; + + return 0; +} + +/* This routine actually sets the video mode. It's in here where we + * the hardware state info->par and fix which can be affected by the + * change in par. For this driver it doesn't do much. + */ +static int mc68x328fb_set_par(struct fb_info *info) +{ + info->fix.line_length = get_line_length(info->var.xres_virtual, + info->var.bits_per_pixel); + return 0; +} + + /* + * Set a single color register. The values supplied are already + * rounded down to the hardware's capabilities (according to the + * entries in the var structure). Return != 0 for invalid regno. + */ + +static int mc68x328fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, + u_int transp, struct fb_info *info) +{ + if (regno >= 256) /* no. of hw registers */ + return 1; + /* + * Program hardware... do anything you want with transp + */ + + /* grayscale works only partially under directcolor */ + if (info->var.grayscale) { + /* grayscale = 0.30*R + 0.59*G + 0.11*B */ + red = green = blue = + (red * 77 + green * 151 + blue * 28) >> 8; + } + + /* Directcolor: + * var->{color}.offset contains start of bitfield + * var->{color}.length contains length of bitfield + * {hardwarespecific} contains width of RAMDAC + * cmap[X] is programmed to (X << red.offset) | (X << green.offset) | (X << blue.offset) + * RAMDAC[X] is programmed to (red, green, blue) + * + * Pseudocolor: + * uses offset = 0 && length = RAMDAC register width. + * var->{color}.offset is 0 + * var->{color}.length contains width of DAC + * cmap is not used + * RAMDAC[X] is programmed to (red, green, blue) + * Truecolor: + * does not use DAC. Usually 3 are present. + * var->{color}.offset contains start of bitfield + * var->{color}.length contains length of bitfield + * cmap is programmed to (red << red.offset) | (green << green.offset) | + * (blue << blue.offset) | (transp << transp.offset) + * RAMDAC does not exist + */ +#define CNVT_TOHW(val,width) ((((val)<<(width))+0x7FFF-(val))>>16) + switch (info->fix.visual) { + case FB_VISUAL_TRUECOLOR: + case FB_VISUAL_PSEUDOCOLOR: + red = CNVT_TOHW(red, info->var.red.length); + green = CNVT_TOHW(green, info->var.green.length); + blue = CNVT_TOHW(blue, info->var.blue.length); + transp = CNVT_TOHW(transp, info->var.transp.length); + break; + case FB_VISUAL_DIRECTCOLOR: + red = CNVT_TOHW(red, 8); /* expect 8 bit DAC */ + green = CNVT_TOHW(green, 8); + blue = CNVT_TOHW(blue, 8); + /* hey, there is bug in transp handling... */ + transp = CNVT_TOHW(transp, 8); + break; + } +#undef CNVT_TOHW + /* Truecolor has hardware independent palette */ + if (info->fix.visual == FB_VISUAL_TRUECOLOR) { + u32 v; + + if (regno >= 16) + return 1; + + v = (red << info->var.red.offset) | + (green << info->var.green.offset) | + (blue << info->var.blue.offset) | + (transp << info->var.transp.offset); + switch (info->var.bits_per_pixel) { + case 8: + break; + case 16: + ((u32 *) (info->pseudo_palette))[regno] = v; + break; + case 24: + case 32: + ((u32 *) (info->pseudo_palette))[regno] = v; + break; + } + return 0; + } + return 0; +} + + /* + * Pan or Wrap the Display + * + * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag + */ + +static int mc68x328fb_pan_display(struct fb_var_screeninfo *var, + struct fb_info *info) +{ + if (var->vmode & FB_VMODE_YWRAP) { + if (var->yoffset < 0 + || var->yoffset >= info->var.yres_virtual + || var->xoffset) + return -EINVAL; + } else { + if (var->xoffset + info->var.xres > info->var.xres_virtual || + var->yoffset + info->var.yres > info->var.yres_virtual) + return -EINVAL; + } + info->var.xoffset = var->xoffset; + info->var.yoffset = var->yoffset; + if (var->vmode & FB_VMODE_YWRAP) + info->var.vmode |= FB_VMODE_YWRAP; + else + info->var.vmode &= ~FB_VMODE_YWRAP; + return 0; +} + + /* + * Most drivers don't need their own mmap function + */ + +static int mc68x328fb_mmap(struct fb_info *info, struct vm_area_struct *vma) +{ +#ifndef MMU + /* this is uClinux (no MMU) specific code */ + + vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP); + vma->vm_start = videomemory; + + return 0; +#else + return -EINVAL; +#endif +} + +static int __init mc68x328fb_setup(char *options) +{ + if (!options || !*options) + return 1; + return 1; +} + + /* + * Initialisation + */ + +static int __init mc68x328fb_init(void) +{ +#ifndef MODULE + char *option = NULL; + + if (fb_get_options("68328fb", &option)) + return -ENODEV; + mc68x328fb_setup(option); +#endif + /* + * initialize the default mode from the LCD controller registers + */ + mc68x328fb_default.xres = LXMAX; + mc68x328fb_default.yres = LYMAX+1; + mc68x328fb_default.xres_virtual = mc68x328fb_default.xres; + mc68x328fb_default.yres_virtual = mc68x328fb_default.yres; + mc68x328fb_default.bits_per_pixel = 1 + (LPICF & 0x01); + videomemory = LSSA; + videomemorysize = (mc68x328fb_default.xres_virtual+7) / 8 * + mc68x328fb_default.yres_virtual * mc68x328fb_default.bits_per_pixel; + + fb_info.screen_base = (void *)videomemory; + fb_info.fbops = &mc68x328fb_ops; + fb_info.var = mc68x328fb_default; + fb_info.fix = mc68x328fb_fix; + fb_info.fix.smem_start = videomemory; + fb_info.fix.smem_len = videomemorysize; + fb_info.fix.line_length = + get_line_length(mc68x328fb_default.xres_virtual, mc68x328fb_default.bits_per_pixel); + fb_info.fix.visual = (mc68x328fb_default.bits_per_pixel) == 1 ? + FB_VISUAL_MONO10 : FB_VISUAL_PSEUDOCOLOR; + if (fb_info.var.bits_per_pixel == 1) { + fb_info.var.red.length = fb_info.var.green.length = fb_info.var.blue.length = 1; + fb_info.var.red.offset = fb_info.var.green.offset = fb_info.var.blue.offset = 0; + } + fb_info.pseudo_palette = &mc68x328fb_pseudo_palette; + fb_info.flags = FBINFO_HWACCEL_YPAN; + + if (fb_alloc_cmap(&fb_info.cmap, 256, 0)) + return -ENOMEM; + + if (register_framebuffer(&fb_info) < 0) { + fb_dealloc_cmap(&fb_info.cmap); + return -EINVAL; + } + + fb_info(&fb_info, "%s frame buffer device\n", fb_info.fix.id); + fb_info(&fb_info, "%dx%dx%d at 0x%08lx\n", + mc68x328fb_default.xres_virtual, + mc68x328fb_default.yres_virtual, + 1 << mc68x328fb_default.bits_per_pixel, videomemory); + + return 0; +} + +module_init(mc68x328fb_init); + +#ifdef MODULE + +static void __exit mc68x328fb_cleanup(void) +{ + unregister_framebuffer(&fb_info); + fb_dealloc_cmap(&fb_info.cmap); +} + +module_exit(mc68x328fb_cleanup); + +MODULE_LICENSE("GPL"); +#endif /* MODULE */ diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig new file mode 100644 index 0000000000..c29754b65c --- /dev/null +++ b/drivers/video/fbdev/Kconfig @@ -0,0 +1,1957 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# fbdev configuration +# + +menuconfig FB + tristate "Support for frame buffer device drivers" + select FB_CORE + select FB_NOTIFY + help + The frame buffer device provides an abstraction for the graphics + hardware. It represents the frame buffer of some video hardware and + allows application software to access the graphics hardware through + a well-defined interface, so the software doesn't need to know + anything about the low-level (hardware register) stuff. + + Frame buffer devices work identically across the different + architectures supported by Linux and make the implementation of + application programs easier and more portable; at this point, an X + server exists which uses the frame buffer device exclusively. + On several non-X86 architectures, the frame buffer device is the + only way to use the graphics hardware. + + The device is accessed through special device nodes, usually located + in the /dev directory, i.e. /dev/fb*. + + You need an utility program called fbset to make full use of frame + buffer devices. Please read + and the Framebuffer-HOWTO at + for more + information. + + This enables support for native frame buffer device (fbdev) drivers. + + The DRM subsystem provides support for emulated frame buffer devices + on top of KMS drivers, but this option allows legacy fbdev drivers to + be enabled as well. + + Say Y here and to the driver for your graphics board below if you + are compiling a kernel for a non-x86 architecture. + + If you are compiling for the x86 architecture, you can say Y if you + want to play with it, but it is not essential. Please note that + running graphical applications that directly touch the hardware + (e.g. an accelerated X server) and that are not frame buffer + device-aware may cause unexpected results. If unsure, say N. + +config FB_HECUBA + tristate + depends on FB + select FB_SYSMEM_HELPERS_DEFERRED + +config FB_SVGALIB + tristate + depends on FB + help + Common utility functions useful to fbdev drivers of VGA-based + cards. + +config FB_MACMODES + tristate + depends on FB + +config FB_GRVGA + tristate "Aeroflex Gaisler framebuffer support" + depends on FB && SPARC + select FB_IOMEM_HELPERS + help + This enables support for the SVGACTRL framebuffer in the GRLIB IP library from Aeroflex Gaisler. + +config FB_CIRRUS + tristate "Cirrus Logic support" + depends on FB && (ZORRO || PCI) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VIDEO_NOMODESET + help + This enables support for Cirrus Logic GD542x/543x based boards on + Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum. + + If you have a PCI-based system, this enables support for these + chips: GD-543x, GD-544x, GD-5480. + + Please read the file . + + Say N unless you have such a graphics board or plan to get one + before you next recompile the kernel. + +config FB_PM2 + tristate "Permedia2 support" + depends on FB && ((AMIGA && BROKEN) || PCI) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VIDEO_NOMODESET + help + This is the frame buffer device driver for cards based on + the 3D Labs Permedia, Permedia 2 and Permedia 2V chips. + The driver was tested on the following cards: + Diamond FireGL 1000 PRO AGP + ELSA Gloria Synergy PCI + Appian Jeronimo PRO (both heads) PCI + 3DLabs Oxygen ACX aka EONtronics Picasso P2 PCI + Techsource Raptor GFX-8P (aka Sun PGX-32) on SPARC + ASK Graphic Blaster Exxtreme AGP + + To compile this driver as a module, choose M here: the + module will be called pm2fb. + +config FB_PM2_FIFO_DISCONNECT + bool "enable FIFO disconnect feature" + depends on FB_PM2 && PCI + help + Support the Permedia2 FIFO disconnect feature. + +config FB_ARMCLCD + tristate "ARM PrimeCell PL110 support" + depends on ARM || ARM64 || COMPILE_TEST + depends on FB && ARM_AMBA && HAS_IOMEM + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_MODE_HELPERS if OF + select VIDEOMODE_HELPERS if OF + select BACKLIGHT_CLASS_DEVICE if OF + help + This framebuffer device driver is for the ARM PrimeCell PL110 + Colour LCD controller. ARM PrimeCells provide the building + blocks for System on a Chip devices. + + If you want to compile this as a module (=code which can be + inserted into and removed from the running kernel), say M + here and read . The module + will be called amba-clcd. + +config FB_ACORN + bool "Acorn VIDC support" + depends on (FB = y) && ARM && ARCH_ACORN + select FB_IOMEM_HELPERS + help + This is the frame buffer device driver for the Acorn VIDC graphics + hardware found in Acorn RISC PCs and other ARM-based machines. If + unsure, say N. + +config FB_CLPS711X + tristate "CLPS711X LCD support" + depends on FB && (ARCH_CLPS711X || COMPILE_TEST) + select FB_MODE_HELPERS + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select LCD_CLASS_DEVICE + select VIDEOMODE_HELPERS + help + Say Y to enable the Framebuffer driver for the Cirrus Logic + CLPS711X CPUs. + +config FB_SA1100 + bool "SA-1100 LCD support" + depends on (FB = y) && ARM && ARCH_SA1100 + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is a framebuffer device for the SA-1100 LCD Controller. + See for information on framebuffer + devices. + + If you plan to use the LCD display with your SA-1100 system, say + Y here. + +config FB_IMX + tristate "Freescale i.MX1/21/25/27 LCD support" + depends on FB && HAVE_CLK && HAS_IOMEM + depends on ARCH_MXC || COMPILE_TEST + select LCD_CLASS_DEVICE + select FB_IOMEM_HELPERS + select FB_MODE_HELPERS + select VIDEOMODE_HELPERS + +config FB_CYBER2000 + tristate "CyberPro 2000/2010/5000 support" + depends on FB && PCI && (BROKEN || !SPARC64) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VIDEO_NOMODESET + help + This enables support for the Integraphics CyberPro 20x0 and 5000 + VGA chips used in the Rebel.com Netwinder and other machines. + Say Y if you have a NetWinder or a graphics card containing this + device, otherwise say N. + +config FB_CYBER2000_DDC + bool "DDC for CyberPro support" + depends on FB_CYBER2000 + select FB_DDC + default y + help + Say Y here if you want DDC support for your CyberPro graphics + card. This is only I2C bus support, driver does not use EDID. + +config FB_CYBER2000_I2C + bool "CyberPro 2000/2010/5000 I2C support" + depends on FB_CYBER2000 && I2C && ARCH_NETWINDER + depends on I2C=y || FB_CYBER2000=m + select I2C_ALGOBIT + help + Enable support for the I2C video decoder interface on the + Integraphics CyberPro 20x0 and 5000 VGA chips. This is used + on the Netwinder machines for the SAA7111 video capture. + +config FB_APOLLO + bool + depends on (FB = y) && APOLLO + default y + select FB_CFB_FILLRECT + select FB_CFB_IMAGEBLIT + +config FB_Q40 + bool + depends on (FB = y) && Q40 + default y + select FB_IOMEM_HELPERS + +config FB_AMIGA + tristate "Amiga native chipset support" + depends on FB && AMIGA + help + This is the frame buffer device driver for the builtin graphics + chipset found in Amigas. + + To compile this driver as a module, choose M here: the + module will be called amifb. + +config FB_AMIGA_OCS + bool "Amiga OCS chipset support" + depends on FB_AMIGA + help + This enables support for the original Agnus and Denise video chips, + found in the Amiga 1000 and most A500's and A2000's. If you intend + to run Linux on any of these systems, say Y; otherwise say N. + +config FB_AMIGA_ECS + bool "Amiga ECS chipset support" + depends on FB_AMIGA + help + This enables support for the Enhanced Chip Set, found in later + A500's, later A2000's, the A600, the A3000, the A3000T and CDTV. If + you intend to run Linux on any of these systems, say Y; otherwise + say N. + +config FB_AMIGA_AGA + bool "Amiga AGA chipset support" + depends on FB_AMIGA + help + This enables support for the Advanced Graphics Architecture (also + known as the AGA or AA) Chip Set, found in the A1200, A4000, A4000T + and CD32. If you intend to run Linux on any of these systems, say Y; + otherwise say N. + +config FB_FM2 + bool "Amiga FrameMaster II/Rainbow II support" + depends on (FB = y) && ZORRO + select FB_IOMEM_HELPERS + help + This is the frame buffer device driver for the Amiga FrameMaster + card from BSC (exhibited 1992 but not shipped as a CBM product). + +config FB_ARC + tristate "Arc Monochrome LCD board support" + depends on FB && (X86 || COMPILE_TEST) + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select FB_SYS_FOPS + help + This enables support for the Arc Monochrome LCD board. The board + is based on the KS-108 lcd controller and is typically a matrix + of 2*n chips. This driver was tested with a 128x64 panel. This + driver supports it for use with x86 SBCs through a 16 bit GPIO + interface (8 bit data, 8 bit control). If you anticipate using + this driver, say Y or M; otherwise say N. You must specify the + GPIO IO address to be used for setting control and data. + +config FB_ATARI + bool "Atari native chipset support" + depends on (FB = y) && ATARI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the builtin graphics + chipset found in Ataris. + +config FB_OF + tristate "Open Firmware frame buffer device support" + depends on FB && PPC && (!PPC_PSERIES || PCI) + depends on !DRM_OFDRM + select APERTURE_HELPERS + select FB_IOMEM_HELPERS + select FB_MACMODES + help + Say Y if you want support with Open Firmware for your graphics + board. + +config FB_CONTROL + bool "Apple \"control\" display support" + depends on (FB = y) && ((PPC_PMAC && PPC32) || COMPILE_TEST) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_MACMODES + help + This driver supports a frame buffer for the graphics adapter in the + Power Macintosh 7300 and others. + +config FB_PLATINUM + bool "Apple \"platinum\" display support" + depends on (FB = y) && PPC_PMAC && PPC32 + select FB_IOMEM_HELPERS + select FB_MACMODES + help + This driver supports a frame buffer for the "platinum" graphics + adapter in some Power Macintoshes. + +config FB_VALKYRIE + bool "Apple \"valkyrie\" display support" + depends on (FB = y) && (MAC || (PPC_PMAC && PPC32)) + select FB_IOMEM_HELPERS + select FB_MACMODES + help + This driver supports a frame buffer for the "valkyrie" graphics + adapter in some Power Macintoshes. + +config FB_CT65550 + bool "Chips 65550 display support" + depends on (FB = y) && PPC32 && PCI + select FB_IOMEM_HELPERS + select VIDEO_NOMODESET + help + This is the frame buffer device driver for the Chips & Technologies + 65550 graphics chip in PowerBooks. + +config FB_ASILIANT + bool "Asiliant (Chips) 69000 display support" + depends on (FB = y) && PCI + select FB_IOMEM_HELPERS + select VIDEO_NOMODESET + help + This is the frame buffer device driver for the Asiliant 69030 chipset + +config FB_IMSTT + bool "IMS Twin Turbo display support" + depends on (FB = y) && PCI + select FB_CFB_IMAGEBLIT + select FB_MACMODES if PPC_PMAC + select VIDEO_NOMODESET + help + The IMS Twin Turbo is a PCI-based frame buffer card bundled with + many Macintosh and compatible computers. + +config FB_VGA16 + tristate "VGA 16-color graphics support" + depends on FB && (X86 || PPC) + select APERTURE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VGASTATE + select FONT_8x16 if FRAMEBUFFER_CONSOLE + help + This is the frame buffer device driver for VGA 16 color graphic + cards. Say Y if you have such a card. + + To compile this driver as a module, choose M here: the + module will be called vga16fb. + +config FB_STI + tristate "HP STI frame buffer device support" + depends on FB && PARISC + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select STI_CORE + default y + help + Enabling this option will implement the linux framebuffer device + using calls to the STI BIOS routines for initialisation. + + If you enable this option, you will get a planar framebuffer device + /dev/fb which will work on the most common HP graphic cards of the + NGLE family, including the artist chips (in the 7xx and Bxxx series), + HCRX, HCRX24, CRX, CRX24 and VisEG series. + + It is safe to enable this option, so you should probably say "Y". + +config FB_MAC + bool "Generic Macintosh display support" + depends on (FB = y) && MAC + select FB_IOMEM_HELPERS + select FB_MACMODES + +config FB_HP300 + bool + depends on (FB = y) && DIO + select FB_CFB_IMAGEBLIT + default y + +config FB_TGA + tristate "TGA/SFB+ framebuffer support" + depends on FB + depends on PCI || TC + depends on ALPHA || TC + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select BITREVERSE + select VIDEO_NOMODESET + help + This is the frame buffer device driver for generic TGA and SFB+ + graphic cards. These include DEC ZLXp-E1, -E2 and -E3 PCI cards, + also known as PBXGA-A, -B and -C, and DEC ZLX-E1, -E2 and -E3 + TURBOchannel cards, also known as PMAGD-A, -B and -C. + + Due to hardware limitations ZLX-E2 and E3 cards are not supported + for DECstation 5000/200 systems. Additionally due to firmware + limitations these cards may cause troubles with booting DECstation + 5000/240 and /260 systems, but are fully supported under Linux if + you manage to get it going. ;-) + + Say Y if you have one of those. + +config FB_UVESA + tristate "Userspace VESA VGA graphics support" + depends on FB && CONNECTOR + depends on !UML + select FB_IOMEM_HELPERS + select FB_MODE_HELPERS + help + This is the frame buffer driver for generic VBE 2.0 compliant + graphic cards. It can also take advantage of VBE 3.0 features, + such as refresh rate adjustment. + + This driver generally provides more features than vesafb but + requires a userspace helper application called 'v86d'. See + for more information. + + If unsure, say N. + +config FB_VESA + bool "VESA VGA graphics support" + depends on (FB = y) && X86 + select APERTURE_HELPERS + select FB_IOMEM_HELPERS + select SYSFB + help + This is the frame buffer device driver for generic VESA 2.0 + compliant graphic cards. The older VESA 1.2 cards are not supported. + You will get a boot time penguin logo at no additional cost. Please + read . If unsure, say Y. + +config FB_EFI + bool "EFI-based Framebuffer Support" + depends on (FB = y) && !IA64 && EFI + select APERTURE_HELPERS + select DRM_PANEL_ORIENTATION_QUIRKS + select FB_IOMEM_HELPERS + select SYSFB + help + This is the EFI frame buffer device driver. If the firmware on + your platform is EFI 1.10 or UEFI 2.0, select Y to add support for + using the EFI framebuffer as your console. + +config FB_N411 + tristate "N411 Apollo/Hecuba devkit support" + depends on FB && X86 && MMU + select FB_HECUBA + help + This enables support for the Apollo display controller in its + Hecuba form using the n411 devkit. + +config FB_HGA + tristate "Hercules mono graphics support" + depends on FB && X86 + help + Say Y here if you have a Hercules mono graphics card. + + To compile this driver as a module, choose M here: the + module will be called hgafb. + + As this card technology is at least 25 years old, + most people will answer N here. + +config FB_GBE + bool "SGI Graphics Backend frame buffer support" + depends on (FB = y) && HAS_IOMEM + depends on SGI_IP32 || COMPILE_TEST + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for SGI Graphics Backend. + This chip is used in SGI O2 and Visual Workstation 320/540. + +config FB_GBE_MEM + int "Video memory size in MB" + depends on FB_GBE + default 4 + help + This is the amount of memory reserved for the framebuffer, + which can be any value between 1MB and 8MB. + +config FB_SBUS + bool "SBUS and UPA framebuffers" + depends on (FB = y) && SPARC + help + Say Y if you want support for SBUS or UPA based frame buffer device. + +config FB_BW2 + bool "BWtwo support" + depends on (FB = y) && (SPARC && FB_SBUS) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the BWtwo frame buffer. + +config FB_CG3 + bool "CGthree support" + depends on (FB = y) && (SPARC && FB_SBUS) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the CGthree frame buffer. + +config FB_CG6 + bool "CGsix (GX,TurboGX) support" + depends on (FB = y) && (SPARC && FB_SBUS) + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the CGsix (GX, TurboGX) + frame buffer. + +config FB_FFB + bool "Creator/Creator3D/Elite3D support" + depends on FB_SBUS && SPARC64 + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the Creator, Creator3D, + and Elite3D graphics boards. + +config FB_TCX + bool "TCX (SS4/SS5 only) support" + depends on FB_SBUS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the TCX 24/8bit frame + buffer. + +config FB_CG14 + bool "CGfourteen (SX) support" + depends on FB_SBUS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the CGfourteen frame + buffer on Desktop SPARCsystems with the SX graphics option. + +config FB_P9100 + bool "P9100 (Sparcbook 3 only) support" + depends on FB_SBUS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the P9100 card + supported on Sparcbook 3 machines. + +config FB_LEO + bool "Leo (ZX) support" + depends on FB_SBUS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the SBUS-based Sun ZX + (leo) frame buffer cards. + +config FB_XVR500 + bool "Sun XVR-500 3DLABS Wildcat support" + depends on (FB = y) && PCI && SPARC64 + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VIDEO_NOMODESET + help + This is the framebuffer device for the Sun XVR-500 and similar + graphics cards based upon the 3DLABS Wildcat chipset. The driver + only works on sparc64 systems where the system firmware has + mostly initialized the card already. It is treated as a + completely dumb framebuffer device. + +config FB_XVR2500 + bool "Sun XVR-2500 3DLABS Wildcat support" + depends on (FB = y) && PCI && SPARC64 + select FB_IOMEM_HELPERS + select VIDEO_NOMODESET + help + This is the framebuffer device for the Sun XVR-2500 and similar + graphics cards based upon the 3DLABS Wildcat chipset. The driver + only works on sparc64 systems where the system firmware has + mostly initialized the card already. It is treated as a + completely dumb framebuffer device. + +config FB_XVR1000 + bool "Sun XVR-1000 support" + depends on (FB = y) && SPARC64 + select FB_IOMEM_HELPERS + help + This is the framebuffer device for the Sun XVR-1000 and similar + graphics cards. The driver only works on sparc64 systems where + the system firmware has mostly initialized the card already. It + is treated as a completely dumb framebuffer device. + +config FB_PVR2 + tristate "NEC PowerVR 2 display support" + depends on FB && HAS_IOMEM + depends on SH_DREAMCAST || COMPILE_TEST + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VIDEO_NOMODESET + help + Say Y here if you have a PowerVR 2 card in your box. If you plan to + run linux on your Dreamcast, you will have to say Y here. + This driver may or may not work on other PowerVR 2 cards, but is + totally untested. Use at your own risk. If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called pvr2fb. + + You can pass several parameters to the driver at boot time or at + module load time. The parameters look like "video=pvr2:XXX", where + the meaning of XXX can be found at the end of the main source file + (). Please see the file + . + +config FB_OPENCORES + tristate "OpenCores VGA/LCD core 2.0 framebuffer support" + depends on FB && HAS_DMA + select FB_IOMEM_HELPERS + help + This enables support for the OpenCores VGA/LCD core. + + The OpenCores VGA/LCD core is typically used together with + softcore CPUs (e.g. OpenRISC or Microblaze) or hard processor + systems (e.g. Altera socfpga or Xilinx Zynq) on FPGAs. + + The source code and specification for the core is available at + + +config FB_S1D13XXX + tristate "Epson S1D13XXX framebuffer support" + depends on FB + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + Support for S1D13XXX framebuffer device family (currently only + working with S1D13806). Product specs at + + +config FB_ATMEL + tristate "AT91 LCD Controller support" + depends on FB && OF && HAVE_CLK && HAS_IOMEM + depends on HAVE_FB_ATMEL || COMPILE_TEST + select FB_BACKLIGHT + select FB_IOMEM_HELPERS + select FB_MODE_HELPERS + select VIDEOMODE_HELPERS + help + This enables support for the AT91 LCD Controller. + +config FB_NVIDIA + tristate "nVidia Framebuffer Support" + depends on FB && PCI + select FB_BACKLIGHT if FB_NVIDIA_BACKLIGHT + select FB_MODE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select BITREVERSE + select VGASTATE + select VIDEO_NOMODESET + help + This driver supports graphics boards with the nVidia chips, TNT + and newer. For very old chipsets, such as the RIVA128, then use + the rivafb. + Say Y if you have such a graphics board. + + To compile this driver as a module, choose M here: the + module will be called nvidiafb. + +config FB_NVIDIA_I2C + bool "Enable DDC Support" + depends on FB_NVIDIA + select FB_DDC + help + This enables I2C support for nVidia Chipsets. This is used + only for getting EDID information from the attached display + allowing for robust video mode handling and switching. + + Because fbdev-2.6 requires that drivers must be able to + independently validate video mode parameters, you should say Y + here. + +config FB_NVIDIA_DEBUG + bool "Lots of debug output" + depends on FB_NVIDIA + help + Say Y here if you want the nVidia driver to output all sorts + of debugging information to provide to the maintainer when + something goes wrong. + +config FB_NVIDIA_BACKLIGHT + bool "Support for backlight control" + depends on FB_NVIDIA + default y + help + Say Y here if you want to control the backlight of your display. + +config FB_RIVA + tristate "nVidia Riva support" + depends on FB && PCI + select FB_BACKLIGHT if FB_RIVA_BACKLIGHT + select FB_MODE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select BITREVERSE + select VGASTATE + select VIDEO_NOMODESET + help + This driver supports graphics boards with the nVidia Riva/Geforce + chips. + Say Y if you have such a graphics board. + + To compile this driver as a module, choose M here: the + module will be called rivafb. + +config FB_RIVA_I2C + bool "Enable DDC Support" + depends on FB_RIVA + select FB_DDC + help + This enables I2C support for nVidia Chipsets. This is used + only for getting EDID information from the attached display + allowing for robust video mode handling and switching. + + Because fbdev-2.6 requires that drivers must be able to + independently validate video mode parameters, you should say Y + here. + +config FB_RIVA_DEBUG + bool "Lots of debug output" + depends on FB_RIVA + help + Say Y here if you want the Riva driver to output all sorts + of debugging information to provide to the maintainer when + something goes wrong. + +config FB_RIVA_BACKLIGHT + bool "Support for backlight control" + depends on FB_RIVA + default y + help + Say Y here if you want to control the backlight of your display. + +config FB_I740 + tristate "Intel740 support" + depends on FB && PCI + select FB_IOMEM_HELPERS + select FB_MODE_HELPERS + select VGASTATE + select VIDEO_NOMODESET + select FB_DDC + help + This driver supports graphics cards based on Intel740 chip. + +config FB_I810 + tristate "Intel 810/815 support" + depends on FB && PCI && X86_32 && AGP_INTEL + select FB_MODE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VGASTATE + select VIDEO_NOMODESET + help + This driver supports the on-board graphics built in to the Intel 810 + and 815 chipsets. Say Y if you have and plan to use such a board. + + To compile this driver as a module, choose M here: the + module will be called i810fb. + + For more information, please read + + +config FB_I810_GTF + bool "use VESA Generalized Timing Formula" + depends on FB_I810 + help + If you say Y, then the VESA standard, Generalized Timing Formula + or GTF, will be used to calculate the required video timing values + per video mode. Since the GTF allows nondiscrete timings + (nondiscrete being a range of values as opposed to discrete being a + set of values), you'll be able to use any combination of horizontal + and vertical resolutions, and vertical refresh rates without having + to specify your own timing parameters. This is especially useful + to maximize the performance of an aging display, or if you just + have a display with nonstandard dimensions. A VESA compliant + monitor is recommended, but can still work with non-compliant ones. + If you need or want this, then select this option. The timings may + not be compliant with Intel's recommended values. Use at your own + risk. + + If you say N, the driver will revert to discrete video timings + using a set recommended by Intel in their documentation. + + If unsure, say N. + +config FB_I810_I2C + bool "Enable DDC Support" + depends on FB_I810 && FB_I810_GTF + select FB_DDC + help + Add DDC/I2C support for i810fb. This will allow the driver to get + display information, especially for monitors with fickle timings. + + If unsure, say Y. + +config FB_LE80578 + tristate "Intel LE80578 (Vermilion) support" + depends on FB && PCI && X86 + select FB_MODE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VIDEO_NOMODESET + help + This driver supports the LE80578 (Vermilion Range) chipset + +config FB_CARILLO_RANCH + tristate "Intel Carillo Ranch support" + depends on FB_LE80578 && FB && PCI && X86 + help + This driver supports the LE80578 (Carillo Ranch) board + +config FB_INTEL + tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support" + depends on FB && PCI && X86 && AGP_INTEL && EXPERT + select FB_MODE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select BOOT_VESA_SUPPORT if FB_INTEL = y + select VIDEO_NOMODESET + depends on !DRM_I915 + help + This driver supports the on-board graphics built in to the Intel + 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets. + Say Y if you have and plan to use such a board. + + To make FB_INTEL=Y work you need to say AGP_INTEL=y too. + + To compile this driver as a module, choose M here: the + module will be called intelfb. + + For more information, please read + +config FB_INTEL_DEBUG + bool "Intel driver Debug Messages" + depends on FB_INTEL + help + Say Y here if you want the Intel driver to output all sorts + of debugging information to provide to the maintainer when + something goes wrong. + +config FB_INTEL_I2C + bool "DDC/I2C for Intel framebuffer support" + depends on FB_INTEL + select FB_DDC + default y + help + Say Y here if you want DDC/I2C support for your on-board Intel graphics. + +config FB_MATROX + tristate "Matrox acceleration" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_TILEBLITTING + select FB_MACMODES if PPC_PMAC + select VIDEO_NOMODESET + help + Say Y here if you have a Matrox Millennium, Matrox Millennium II, + Matrox Mystique, Matrox Mystique 220, Matrox Productiva G100, Matrox + Mystique G200, Matrox Millennium G200, Matrox Marvel G200 video, + Matrox G400, G450 or G550 card in your box. + + To compile this driver as a module, choose M here: the + module will be called matroxfb. + + You can pass several parameters to the driver at boot time or at + module load time. The parameters look like "video=matroxfb:XXX", and + are described in . + +config FB_MATROX_MILLENIUM + bool "Millennium I/II support" + depends on FB_MATROX + help + Say Y here if you have a Matrox Millennium or Matrox Millennium II + video card. If you select "Advanced lowlevel driver options" below, + you should check 4 bpp packed pixel, 8 bpp packed pixel, 16 bpp + packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can + also use font widths different from 8. + +config FB_MATROX_MYSTIQUE + bool "Mystique support" + depends on FB_MATROX + help + Say Y here if you have a Matrox Mystique or Matrox Mystique 220 + video card. If you select "Advanced lowlevel driver options" below, + you should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp + packed pixel and 32 bpp packed pixel. You can also use font widths + different from 8. + +config FB_MATROX_G + bool "G100/G200/G400/G450/G550 support" + depends on FB_MATROX + help + Say Y here if you have a Matrox G100, G200, G400, G450 or G550 based + video card. If you select "Advanced lowlevel driver options", you + should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed + pixel and 32 bpp packed pixel. You can also use font widths + different from 8. + + If you need support for G400 secondary head, you must say Y to + "Matrox I2C support" and "G400 second head support" right below. + G450/G550 secondary head and digital output are supported without + additional modules. + + The driver starts in monitor mode. You must use the matroxset tool + (available at ) to + swap primary and secondary head outputs, or to change output mode. + Secondary head driver always start in 640x480 resolution and you + must use fbset to change it. + + Do not forget that second head supports only 16 and 32 bpp + packed pixels, so it is a good idea to compile them into the kernel + too. You can use only some font widths, as the driver uses generic + painting procedures (the secondary head does not use acceleration + engine). + + G450/G550 hardware can display TV picture only from secondary CRTC, + and it performs no scaling, so picture must have 525 or 625 lines. + +config FB_MATROX_I2C + tristate "Matrox I2C support" + depends on FB_MATROX + select FB_DDC + help + This drivers creates I2C buses which are needed for accessing the + DDC (I2C) bus present on all Matroxes, an I2C bus which + interconnects Matrox optional devices, like MGA-TVO on G200 and + G400, and the secondary head DDC bus, present on G400 only. + + You can say Y or M here if you want to experiment with monitor + detection code. You must say Y or M here if you want to use either + second head of G400 or MGA-TVO on G200 or G400. + + If you compile it as module, it will create a module named + i2c-matroxfb. + +config FB_MATROX_MAVEN + tristate "G400 second head support" + depends on FB_MATROX_G && FB_MATROX_I2C + help + WARNING !!! This support does not work with G450 !!! + + Say Y or M here if you want to use a secondary head (meaning two + monitors in parallel) on G400 or MGA-TVO add-on on G200. Secondary + head is not compatible with accelerated XFree 3.3.x SVGA servers - + secondary head output is blanked while you are in X. With XFree + 3.9.17 preview you can use both heads if you use SVGA over fbdev or + the fbdev driver on first head and the fbdev driver on second head. + + If you compile it as module, two modules are created, + matroxfb_crtc2 and matroxfb_maven. Matroxfb_maven is needed for + both G200 and G400, matroxfb_crtc2 is needed only by G400. You must + also load i2c-matroxfb to get it to run. + + The driver starts in monitor mode and you must use the matroxset + tool (available at + ) to switch it to + PAL or NTSC or to swap primary and secondary head outputs. + Secondary head driver also always start in 640x480 resolution, you + must use fbset to change it. + + Also do not forget that second head supports only 16 and 32 bpp + packed pixels, so it is a good idea to compile them into the kernel + too. You can use only some font widths, as the driver uses generic + painting procedures (the secondary head does not use acceleration + engine). + +config FB_RADEON + tristate "ATI Radeon display support" + depends on FB && PCI + select FB_BACKLIGHT if FB_RADEON_BACKLIGHT + select FB_MODE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_MACMODES if PPC + select VIDEO_NOMODESET + help + Choose this option if you want to use an ATI Radeon graphics card as + a framebuffer device. There are both PCI and AGP versions. You + don't need to choose this to run the Radeon in plain VGA mode. + + There is a product page at + https://products.amd.com/en-us/GraphicCardResult.aspx + +config FB_RADEON_I2C + bool "DDC/I2C for ATI Radeon support" + depends on FB_RADEON + select FB_DDC + default y + help + Say Y here if you want DDC/I2C support for your Radeon board. + +config FB_RADEON_BACKLIGHT + bool "Support for backlight control" + depends on FB_RADEON + default y + help + Say Y here if you want to control the backlight of your display. + +config FB_RADEON_DEBUG + bool "Lots of debug output from Radeon driver" + depends on FB_RADEON + help + Say Y here if you want the Radeon driver to output all sorts + of debugging information to provide to the maintainer when + something goes wrong. + +config FB_ATY128 + tristate "ATI Rage128 display support" + depends on FB && PCI + select FB_BACKLIGHT if FB_ATY128_BACKLIGHT + select FB_IOMEM_HELPERS + select FB_MACMODES if PPC_PMAC + select VIDEO_NOMODESET + help + This driver supports graphics boards with the ATI Rage128 chips. + Say Y if you have such a graphics board and read + . + + To compile this driver as a module, choose M here: the + module will be called aty128fb. + +config FB_ATY128_BACKLIGHT + bool "Support for backlight control" + depends on FB_ATY128 + default y + help + Say Y here if you want to control the backlight of your display. + +config FB_ATY + tristate "ATI Mach64 display support" if PCI || ATARI + depends on FB && !SPARC32 + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_BACKLIGHT if FB_ATY_BACKLIGHT + select FB_MACMODES if PPC + select FB_ATY_CT if SPARC64 && PCI + select VIDEO_NOMODESET + help + This driver supports graphics boards with the ATI Mach64 chips. + Say Y if you have such a graphics board. + + To compile this driver as a module, choose M here: the + module will be called atyfb. + +config FB_ATY_CT + bool "Mach64 CT/VT/GT/LT (incl. 3D RAGE) support" + depends on PCI && FB_ATY + help + Say Y here to support use of ATI's 64-bit Rage boards (or other + boards based on the Mach64 CT, VT, GT, and LT chipsets) as a + framebuffer device. The ATI product support page for these boards + is at . + +config FB_ATY_GENERIC_LCD + bool "Mach64 generic LCD support" + depends on FB_ATY_CT + help + Say Y if you have a laptop with an ATI Rage LT PRO, Rage Mobility, + Rage XC, or Rage XL chipset. + +config FB_ATY_GX + bool "Mach64 GX support" if PCI + depends on FB_ATY + default y if ATARI + help + Say Y here to support use of the ATI Mach64 Graphics Expression + board (or other boards based on the Mach64 GX chipset) as a + framebuffer device. The ATI product support page for these boards + is at + . + +config FB_ATY_BACKLIGHT + bool "Support for backlight control" + depends on FB_ATY + default y + help + Say Y here if you want to control the backlight of your display. + +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 + select VGASTATE + select VIDEO_NOMODESET + select FONT_8x16 if FRAMEBUFFER_CONSOLE + help + Driver for graphics boards with S3 Trio / S3 Virge chip. + +config FB_S3_DDC + bool "DDC for S3 support" + depends on FB_S3 + select FB_DDC + default y + help + Say Y here if you want DDC support for your S3 graphics card. + +config FB_SAVAGE + tristate "S3 Savage support" + depends on FB && PCI + select FB_MODE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VGASTATE + select VIDEO_NOMODESET + help + This driver supports notebooks and computers with S3 Savage PCI/AGP + chips. + + Say Y if you have such a graphics card. + + To compile this driver as a module, choose M here; the module + will be called savagefb. + +config FB_SAVAGE_I2C + bool "Enable DDC2 Support" + depends on FB_SAVAGE + select FB_DDC + help + This enables I2C support for S3 Savage Chipsets. This is used + only for getting EDID information from the attached display + allowing for robust video mode handling and switching. + + Because fbdev-2.6 requires that drivers must be able to + independently validate video mode parameters, you should say Y + here. + +config FB_SAVAGE_ACCEL + bool "Enable Console Acceleration" + depends on FB_SAVAGE + help + This option will compile in console acceleration support. If + the resulting framebuffer console has bothersome glitches, then + choose N here. + +config FB_SIS + tristate "SiS/XGI display support" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select BOOT_VESA_SUPPORT if FB_SIS = y + select FB_SIS_300 if !FB_SIS_315 + select VIDEO_NOMODESET + help + This is the frame buffer device driver for the SiS 300, 315, 330 + and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets. + Specs available at and . + + To compile this driver as a module, choose M here; the module + will be called sisfb. + +config FB_SIS_300 + bool "SiS 300 series support" + depends on FB_SIS + help + Say Y here to support use of the SiS 300/305, 540, 630 and 730. + +config FB_SIS_315 + bool "SiS 315/330/340 series and XGI support" + depends on FB_SIS + help + Say Y here to support use of the SiS 315, 330 and 340 series + (315/H/PRO, 55x, 650, 651, 740, 330, 661, 741, 760, 761) as well + as XGI V3XT, V5, V8 and Z7. + +config FB_VIA + tristate "VIA UniChrome (Pro) and Chrome9 display support" + depends on FB && PCI && GPIOLIB && I2C && (X86 || COMPILE_TEST) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select I2C_ALGOBIT + select VIDEO_NOMODESET + help + This is the frame buffer device driver for Graphics chips of VIA + UniChrome (Pro) Family (CLE266,PM800/CN400,P4M800CE/P4M800Pro/ + CN700/VN800,CX700/VX700,P4M890) and Chrome9 Family (K8M890,CN896 + /P4M900,VX800) + Say Y if you have a VIA UniChrome graphics board. + + To compile this driver as a module, choose M here: the + module will be called viafb. + +if FB_VIA + +config FB_VIA_DIRECT_PROCFS + bool "direct hardware access via procfs (DEPRECATED)(DANGEROUS)" + help + Allow direct hardware access to some output registers via procfs. + This is dangerous but may provide the only chance to get the + correct output device configuration. + Its use is strongly discouraged. + +config FB_VIA_X_COMPATIBILITY + bool "X server compatibility" + help + This option reduces the functionality (power saving, ...) of the + framebuffer to avoid negative impact on the OpenChrome X server. + If you use any X server other than fbdev you should enable this + otherwise it should be safe to disable it and allow using all + features. + +endif + +config FB_NEOMAGIC + tristate "NeoMagic display support" + depends on FB && PCI + select FB_MODE_HELPERS + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VGASTATE + select VIDEO_NOMODESET + help + This driver supports notebooks with NeoMagic PCI chips. + Say Y if you have such a graphics card. + + To compile this driver as a module, choose M here: the + module will be called neofb. + +config FB_KYRO + tristate "IMG Kyro support" + depends on FB && PCI + select FB_IOMEM_HELPERS + select VIDEO_NOMODESET + help + Say Y here if you have a STG4000 / Kyro / PowerVR 3 based + graphics board. + + To compile this driver as a module, choose M here: the + module will be called kyrofb. + +config FB_3DFX + tristate "3Dfx Banshee/Voodoo3/Voodoo5 display support" + depends on FB && PCI + select FB_CFB_IMAGEBLIT + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_MODE_HELPERS + select VIDEO_NOMODESET + help + This driver supports graphics boards with the 3Dfx Banshee, + Voodoo3 or VSA-100 (aka Voodoo4/5) chips. Say Y if you have + such a graphics board. + + To compile this driver as a module, choose M here: the + module will be called tdfxfb. + +config FB_3DFX_ACCEL + bool "3Dfx Acceleration functions" + depends on FB_3DFX + help + This will compile the 3Dfx Banshee/Voodoo3/VSA-100 frame buffer + device driver with acceleration functions. + +config FB_3DFX_I2C + bool "Enable DDC/I2C support" + depends on FB_3DFX + select FB_DDC + default y + help + Say Y here if you want DDC/I2C support for your 3dfx Voodoo3. + +config FB_VOODOO1 + tristate "3Dfx Voodoo Graphics (sst1) support" + depends on FB && PCI + depends on FB_DEVICE + select FB_IOMEM_HELPERS + select VIDEO_NOMODESET + help + Say Y here if you have a 3Dfx Voodoo Graphics (Voodoo1/sst1) or + Voodoo2 (cvg) based graphics card. + + To compile this driver as a module, choose M here: the + module will be called sstfb. + + WARNING: Do not use any application that uses the 3D engine + (namely glide) while using this driver. + Please read the for supported + options and other important info support. + +config FB_VT8623 + tristate "VIA VT8623 support" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_TILEBLITTING + select FB_SVGALIB + select VGASTATE + select VIDEO_NOMODESET + select FONT_8x16 if FRAMEBUFFER_CONSOLE + help + Driver for CastleRock integrated graphics core in the + VIA VT8623 [Apollo CLE266] chipset. + +config FB_TRIDENT + tristate "Trident/CyberXXX/CyberBlade support" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_DDC + select FB_MODE_HELPERS + select VIDEO_NOMODESET + help + This is the frame buffer device driver for Trident PCI/AGP chipsets. + Supported chipset families are TGUI 9440/96XX, 3DImage, Blade3D + and Blade XP. + There are also integrated versions of these chips called CyberXXXX, + CyberImage or CyberBlade. These chips are mostly found in laptops + but also on some motherboards including early VIA EPIA motherboards. + For more information, read + + Say Y if you have such a graphics board. + + To compile this driver as a module, choose M here: the + module will be called tridentfb. + +config FB_ARK + tristate "ARK 2000PV support" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_TILEBLITTING + select FB_SVGALIB + select VGASTATE + select VIDEO_NOMODESET + select FONT_8x16 if FRAMEBUFFER_CONSOLE + help + Driver for PCI graphics boards with ARK 2000PV chip + and ICS 5342 RAMDAC. + +config FB_PM3 + tristate "Permedia3 support" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VIDEO_NOMODESET + help + This is the frame buffer device driver for the 3DLabs Permedia3 + chipset, used in Formac ProFormance III, 3DLabs Oxygen VX1 & + similar boards, 3DLabs Permedia3 Create!, Appian Jeronimo 2000 + and maybe other boards. + +config FB_CARMINE + tristate "Fujitsu carmine frame buffer support" + depends on FB && PCI + select FB_IOMEM_HELPERS + select VIDEO_NOMODESET + help + This is the frame buffer device driver for the Fujitsu Carmine chip. + The driver provides two independent frame buffer devices. + +choice + depends on FB_CARMINE + prompt "DRAM timing" + default FB_CARMINE_DRAM_EVAL + +config FB_CARMINE_DRAM_EVAL + bool "Eval board timings" + help + Use timings which work on the eval card. + +config CARMINE_DRAM_CUSTOM + bool "Custom board timings" + help + Use custom board timings. +endchoice + +config FB_AU1100 + bool "Au1100 LCD Driver" + depends on (FB = y) && MIPS_ALCHEMY + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the framebuffer driver for the AMD Au1100 SOC. It can drive + various panels and CRTs by passing in kernel cmd line option + au1100fb:panel=. + +config FB_AU1200 + bool "Au1200/Au1300 LCD Driver" + depends on (FB = y) && MIPS_ALCHEMY + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select FB_SYS_FOPS + help + This is the framebuffer driver for the Au1200/Au1300 SOCs. + It can drive various panels and CRTs by passing in kernel cmd line + option au1200fb:panel=. + +config FB_VT8500 + bool "VIA VT8500 framebuffer support" + depends on (FB = y) && ARM && ARCH_VT8500 + select FB_SYS_FILLRECT if (!FB_WMT_GE_ROPS) + select FB_SYS_COPYAREA if (!FB_WMT_GE_ROPS) + select FB_SYS_IMAGEBLIT + select FB_MODE_HELPERS + select VIDEOMODE_HELPERS + help + This is the framebuffer driver for VIA VT8500 integrated LCD + controller. + +config FB_WM8505 + bool "Wondermedia WM8xxx-series frame buffer support" + depends on (FB = y) && HAS_IOMEM && (ARCH_VT8500 || COMPILE_TEST) + select FB_SYS_FILLRECT if (!FB_WMT_GE_ROPS) + select FB_SYS_COPYAREA if (!FB_WMT_GE_ROPS) + select FB_SYS_IMAGEBLIT + select FB_MODE_HELPERS + select VIDEOMODE_HELPERS + help + This is the framebuffer driver for WonderMedia WM8xxx-series + integrated LCD controller. This driver covers the WM8505, WM8650 + and WM8850 SoCs. + +config FB_WMT_GE_ROPS + bool "VT8500/WM8xxx accelerated raster ops support" + depends on (FB = y) && (FB_VT8500 || FB_WM8505) + help + This adds support for accelerated raster operations on the + VIA VT8500 and Wondermedia 85xx series SoCs. + +source "drivers/video/fbdev/geode/Kconfig" + +config FB_HIT + tristate "HD64461 Frame Buffer support" + depends on FB && HD64461 + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + This is the frame buffer device driver for the Hitachi HD64461 LCD + frame buffer card. + +config FB_PMAG_AA + tristate "PMAG-AA TURBOchannel framebuffer support" + depends on FB && TC + select FB_IOMEM_HELPERS + help + Support for the PMAG-AA TURBOchannel framebuffer card (1280x1024x1) + used mainly in the MIPS-based DECstation series. + +config FB_PMAG_BA + tristate "PMAG-BA TURBOchannel framebuffer support" + depends on FB && TC + select FB_IOMEM_HELPERS + help + Support for the PMAG-BA TURBOchannel framebuffer card (1024x864x8) + used mainly in the MIPS-based DECstation series. + +config FB_PMAGB_B + tristate "PMAGB-B TURBOchannel framebuffer support" + depends on FB && TC + select FB_IOMEM_HELPERS + help + Support for the PMAGB-B TURBOchannel framebuffer card used mainly + in the MIPS-based DECstation series. The card is currently only + supported in 1280x1024x8 mode. + +config FB_MAXINE + bool "Maxine (Personal DECstation) onboard framebuffer support" + depends on (FB = y) && MACH_DECSTATION + select FB_IOMEM_HELPERS + help + Support for the onboard framebuffer (1024x768x8) in the Personal + DECstation series (Personal DECstation 5000/20, /25, /33, /50, + Codename "Maxine"). + +config FB_G364 + bool "G364 frame buffer support" + depends on (FB = y) && (MIPS_MAGNUM_4000 || OLIVETTI_M700) + select FB_IOMEM_HELPERS + help + The G364 driver is the framebuffer used in MIPS Magnum 4000 and + Olivetti M700-10 systems. + +config FB_68328 + bool "Motorola 68328 native frame buffer support" + depends on (FB = y) && (M68328 || M68EZ328 || M68VZ328) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + Say Y here if you want to support the built-in frame buffer of + the Motorola 68328 CPU family. + +config FB_PXA168 + tristate "PXA168/910 LCD framebuffer support" + depends on FB && HAVE_CLK && HAS_IOMEM + depends on CPU_PXA168 || CPU_PXA910 || COMPILE_TEST + select FB_IOMEM_HELPERS + help + Frame buffer driver for the built-in LCD controller in the Marvell + MMP processor. + +config FB_PXA + tristate "PXA LCD framebuffer support" + depends on FB && ARCH_PXA + select FB_IOMEM_HELPERS + select VIDEOMODE_HELPERS if OF + select FB_MODE_HELPERS if OF + help + Frame buffer driver for the built-in LCD controller in the Intel + PXA2x0 processor. + + This driver is also available as a module ( = code which can be + inserted and removed from the running kernel whenever you want). The + module will be called pxafb. If you want to compile it as a module, + say M here and read . + + If unsure, say N. + +config FB_PXA_OVERLAY + bool "Support PXA27x/PXA3xx Overlay(s) as framebuffer" + depends on FB_PXA && (PXA27x || PXA3xx) + +config FB_PXA_SMARTPANEL + bool "PXA Smartpanel LCD support" + depends on FB_PXA + +config FB_PXA_PARAMETERS + bool "PXA LCD command line parameters" + depends on FB_PXA + help + Enable the use of kernel command line or module parameters + to configure the physical properties of the LCD panel when + using the PXA LCD driver. + + This option allows you to override the panel parameters + supplied by the platform in order to support multiple + different models of flatpanel. If you will only be using a + single model of flatpanel then you can safely leave this + option disabled. + + describes the available parameters. + +config PXA3XX_GCU + tristate "PXA3xx 2D graphics accelerator driver" + depends on FB_PXA + help + Kernelspace driver for the 2D graphics controller unit (GCU) + found on PXA3xx processors. There is a counterpart driver in the + DirectFB suite, see http://www.directfb.org/ + + If you compile this as a module, it will be called pxa3xx_gcu. + +config FB_FSL_DIU + tristate "Freescale DIU framebuffer support" + depends on FB && FSL_SOC + select FB_IOMEM_HELPERS + select FB_MODE_HELPERS + select PPC_LIB_RHEAP + help + Framebuffer driver for the Freescale SoC DIU + +config FB_SH_MOBILE_LCDC + tristate "SuperH Mobile LCDC framebuffer support" + depends on FB && HAVE_CLK && HAS_IOMEM + depends on SUPERH || ARCH_RENESAS || COMPILE_TEST + depends on FB_DEVICE + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select FB_SYS_FOPS + select FB_DEFERRED_IO + select FB_BACKLIGHT + help + Frame buffer driver for the on-chip SH-Mobile LCD controller. + +config FB_S3C + tristate "Samsung S3C framebuffer support" + depends on FB && HAVE_CLK && HAS_IOMEM + depends on ARCH_S3C64XX || COMPILE_TEST + select FB_IOMEM_HELPERS + help + Frame buffer driver for the built-in FB controller in the Samsung + SoC line such as the S3C6400 and S3C6410. + + These chips all have the same basic framebuffer design with the + actual capabilities depending on the chip. The S3C6400 + and S3C6410 support 4 hardware windows. + + Currently the support is only for the S3C6400 and S3C6410 SoCs. + +config FB_S3C_DEBUG_REGWRITE + bool "Debug register writes" + depends on FB_S3C + help + Show all register writes via pr_debug() + +config FB_SM501 + tristate "Silicon Motion SM501 framebuffer support" + depends on FB && MFD_SM501 + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + Frame buffer driver for the CRT and LCD controllers in the Silicon + Motion SM501. + + This driver is also available as a module ( = code which can be + inserted and removed from the running kernel whenever you want). The + module will be called sm501fb. If you want to compile it as a module, + say M here and read . + + If unsure, say N. + +config FB_SMSCUFX + tristate "SMSC UFX6000/7000 USB Framebuffer support" + depends on FB && USB + select FB_MODE_HELPERS + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select FB_SYS_FOPS + select FB_DEFERRED_IO + help + This is a kernel framebuffer driver for SMSC UFX USB devices. + Supports fbdev clients like xf86-video-fbdev, kdrive, fbi, and + mplayer -vo fbdev. Supports both UFX6000 (USB 2.0) and UFX7000 + (USB 3.0) devices. + To compile as a module, choose M here: the module name is smscufx. + +config FB_UDL + tristate "Displaylink USB Framebuffer support" + depends on FB && USB + depends on FB_DEVICE + select FB_MODE_HELPERS + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select FB_SYS_FOPS + select FB_DEFERRED_IO + help + This is a kernel framebuffer driver for DisplayLink USB devices. + Supports fbdev clients like xf86-video-fbdev, kdrive, fbi, and + mplayer -vo fbdev. Supports all USB 2.0 era DisplayLink devices. + To compile as a module, choose M here: the module name is udlfb. + +config FB_IBM_GXT4500 + tristate "Framebuffer support for IBM GXT4000P/4500P/6000P/6500P adaptors" + depends on FB + select FB_IOMEM_HELPERS + select VIDEO_NOMODESET + help + Say Y here to enable support for the IBM GXT4000P/6000P and + GXT4500P/6500P display adaptor based on Raster Engine RC1000, + found on some IBM System P (pSeries) machines. This driver + doesn't use Geometry Engine GT1000. This driver also supports + AGP Fire GL2/3/4 cards on x86. + +config FB_PS3 + tristate "PS3 GPU framebuffer driver" + depends on FB && PS3_PS3AV + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select FB_SYS_FOPS + help + Include support for the virtual frame buffer in the PS3 platform. + +config FB_PS3_DEFAULT_SIZE_M + int "PS3 default frame buffer size (in MiB)" + depends on FB_PS3 + default 9 + help + This is the default size (in MiB) of the virtual frame buffer in + the PS3. + The default value can be overridden on the kernel command line + using the "ps3fb" option (e.g. "ps3fb=9M"); + +config FB_XILINX + tristate "Xilinx frame buffer support" + depends on FB && (MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP) + select FB_IOMEM_HELPERS + help + Include support for the Xilinx ML300/ML403 reference design + framebuffer. ML300 carries a 640*480 LCD display on the board, + ML403 uses a standard DB15 VGA connector. + +config FB_GOLDFISH + tristate "Goldfish Framebuffer" + depends on FB + depends on GOLDFISH || COMPILE_TEST + select FB_IOMEM_HELPERS + help + Framebuffer driver for Goldfish Virtual Platform + +config FB_COBALT + tristate "Cobalt server LCD frame buffer support" + depends on FB && MIPS_COBALT + +config FB_SH7760 + bool "SH7760/SH7763/SH7720/SH7721 LCDC support" + depends on FB=y && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \ + || CPU_SUBTYPE_SH7720 || CPU_SUBTYPE_SH7721) + select FB_IOMEM_HELPERS + help + Support for the SH7760/SH7763/SH7720/SH7721 integrated + (D)STN/TFT LCD Controller. + Supports display resolutions up to 1024x1024 pixel, grayscale and + color operation, with depths ranging from 1 bpp to 8 bpp monochrome + and 8, 15 or 16 bpp color; 90 degrees clockwise display rotation for + panels <= 320 pixel horizontal resolution. + +config FB_DA8XX + tristate "DA8xx/OMAP-L1xx/AM335x Framebuffer support" + depends on FB && HAVE_CLK && HAS_IOMEM + depends on ARCH_DAVINCI_DA8XX || SOC_AM33XX || COMPILE_TEST + select FB_CFB_REV_PIXELS_IN_BYTE + select FB_IOMEM_HELPERS + select FB_MODE_HELPERS + select VIDEOMODE_HELPERS + help + This is the frame buffer device driver for the TI LCD controller + found on DA8xx/OMAP-L1xx/AM335x SoCs. + If unsure, say N. + +config FB_VIRTUAL + tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)" + depends on FB + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select FB_SYS_FOPS + help + This is a `virtual' frame buffer device. It operates on a chunk of + unswappable kernel memory instead of on the memory of a graphics + board. This means you cannot see any output sent to this frame + buffer device, while it does consume precious memory. The main use + of this frame buffer device is testing and debugging the frame + buffer subsystem. Do NOT enable it for normal systems! To protect + the innocent, it has to be enabled explicitly at boot time using the + kernel option `video=vfb:'. + + To compile this driver as a module, choose M here: the + module will be called vfb. In order to load it, you must use + the vfb_enable=1 option. + + If unsure, say N. + +config XEN_FBDEV_FRONTEND + tristate "Xen virtual frame buffer support" + depends on FB && XEN + select FB_SYSMEM_HELPERS_DEFERRED + select XEN_XENBUS_FRONTEND + default y + help + This driver implements the front-end of the Xen virtual + frame buffer driver. It communicates with a back-end + in another domain. + +config FB_METRONOME + tristate "E-Ink Metronome/8track controller support" + depends on FB + select FB_SYSMEM_HELPERS_DEFERRED + help + This driver implements support for the E-Ink Metronome + controller. The pre-release name for this device was 8track + and could also have been called by some vendors as PVI-nnnn. + +config FB_MB862XX + tristate "Fujitsu MB862xx GDC support" + depends on FB + depends on PCI || (OF && PPC) + select FB_IOMEM_HELPERS + select VIDEO_NOMODESET + help + Frame buffer driver for Fujitsu Carmine/Coral-P(A)/Lime controllers. + +choice + prompt "GDC variant" + depends on FB_MB862XX + +config FB_MB862XX_PCI_GDC + bool "Carmine/Coral-P(A) GDC" + depends on PCI + help + This enables framebuffer support for Fujitsu Carmine/Coral-P(A) + PCI graphics controller devices. + +config FB_MB862XX_LIME + bool "Lime GDC" + depends on OF && PPC + select FB_FOREIGN_ENDIAN + select FB_LITTLE_ENDIAN + help + Framebuffer support for Fujitsu Lime GDC on host CPU bus. + +endchoice + +config FB_MB862XX_I2C + bool "Support I2C bus on MB862XX GDC" + depends on FB_MB862XX && I2C + depends on FB_MB862XX=m || I2C=y + default y + help + Selecting this option adds Coral-P(A)/Lime GDC I2C bus adapter + driver to support accessing I2C devices on controller's I2C bus. + These are usually some video decoder chips. + +config FB_EP93XX + tristate "EP93XX frame buffer support" + depends on FB && ARCH_EP93XX + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + Framebuffer driver for the Cirrus Logic EP93XX series of processors. + This driver is also available as a module. The module will be called + ep93xx-fb. + +config FB_PRE_INIT_FB + bool "Don't reinitialize, use bootloader's GDC/Display configuration" + depends on FB && FB_MB862XX_LIME + help + Select this option if display contents should be inherited as set by + the bootloader. + +config FB_BROADSHEET + tristate "E-Ink Broadsheet/Epson S1D13521 controller support" + depends on FB && (ARCH_PXA || COMPILE_TEST) + select FB_SYSMEM_HELPERS_DEFERRED + help + This driver implements support for the E-Ink Broadsheet + controller. The release name for this device was Epson S1D13521 + and could also have been called by other names when coupled with + a bridge adapter. + +config FB_HYPERV + tristate "Microsoft Hyper-V Synthetic Video support" + depends on FB && HYPERV + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB_DEFERRED_IO + select DMA_CMA if HAVE_DMA_CONTIGUOUS && CMA + select VIDEO_NOMODESET + help + This framebuffer driver supports Microsoft Hyper-V Synthetic Video. + +config FB_SIMPLE + tristate "Simple framebuffer support" + depends on FB + depends on !DRM_SIMPLEDRM + select APERTURE_HELPERS + select FB_IOMEM_HELPERS + help + Say Y if you want support for a simple frame-buffer. + + This driver assumes that the display hardware has been initialized + before the kernel boots, and the kernel will simply render to the + pre-allocated frame buffer surface. + + Configuration re: surface address, size, and format must be provided + through device tree, or plain old platform data. + +config FB_SSD1307 + tristate "Solomon SSD1307 framebuffer support" + depends on FB && I2C + depends on GPIOLIB || COMPILE_TEST + select FB_BACKLIGHT + select FB_SYSMEM_HELPERS_DEFERRED + help + This driver implements support for the Solomon SSD1307 + OLED controller over I2C. + +config FB_SM712 + tristate "Silicon Motion SM712 framebuffer support" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select VIDEO_NOMODESET + help + Frame buffer driver for the Silicon Motion SM710, SM712, SM721 + and SM722 chips. + + This driver is also available as a module. The module will be + called sm712fb. If you want to compile it as a module, say M + here and read . + +source "drivers/video/fbdev/omap/Kconfig" +source "drivers/video/fbdev/omap2/Kconfig" +source "drivers/video/fbdev/mmp/Kconfig" + +source "drivers/video/fbdev/core/Kconfig" diff --git a/drivers/video/fbdev/Makefile b/drivers/video/fbdev/Makefile new file mode 100644 index 0000000000..70569f7027 --- /dev/null +++ b/drivers/video/fbdev/Makefile @@ -0,0 +1,130 @@ +# SPDX-License-Identifier: GPL-2.0 +# Makefile for the Linux video drivers. +# 5 Aug 1999, James Simmons, +# Rewritten to use lists instead of if-statements. + +# Each configuration option enables a list of files. + +obj-y += core/ + +obj-$(CONFIG_FB_MACMODES) += macmodes.o +obj-$(CONFIG_FB_WMT_GE_ROPS) += wmt_ge_rops.o + +# Hardware specific drivers go first +obj-$(CONFIG_FB_AMIGA) += amifb.o c2p_planar.o +obj-$(CONFIG_FB_ARC) += arcfb.o +obj-$(CONFIG_FB_CLPS711X) += clps711x-fb.o +obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o +obj-$(CONFIG_FB_GRVGA) += grvga.o +obj-$(CONFIG_FB_PM2) += pm2fb.o +obj-$(CONFIG_FB_PM3) += pm3fb.o + +obj-$(CONFIG_FB_I740) += i740fb.o +obj-$(CONFIG_FB_MATROX) += matrox/ +obj-$(CONFIG_FB_RIVA) += riva/ +obj-$(CONFIG_FB_NVIDIA) += nvidia/ +obj-$(CONFIG_FB_ATY) += aty/ macmodes.o +obj-$(CONFIG_FB_ATY128) += aty/ macmodes.o +obj-$(CONFIG_FB_RADEON) += aty/ +obj-$(CONFIG_FB_SIS) += sis/ +obj-$(CONFIG_FB_VIA) += via/ +obj-$(CONFIG_FB_KYRO) += kyro/ +obj-$(CONFIG_FB_SAVAGE) += savage/ +obj-$(CONFIG_FB_GEODE) += geode/ +obj-$(CONFIG_FB_NEOMAGIC) += neofb.o +obj-$(CONFIG_FB_3DFX) += tdfxfb.o +obj-$(CONFIG_FB_CONTROL) += controlfb.o +obj-$(CONFIG_FB_PLATINUM) += platinumfb.o +obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o +obj-$(CONFIG_FB_CT65550) += chipsfb.o +obj-$(CONFIG_FB_IMSTT) += imsttfb.o +obj-$(CONFIG_FB_FM2) += fm2fb.o +obj-$(CONFIG_FB_VT8623) += vt8623fb.o +obj-$(CONFIG_FB_TRIDENT) += tridentfb.o +obj-$(CONFIG_FB_LE80578) += vermilion/ +obj-$(CONFIG_FB_S3) += s3fb.o +obj-$(CONFIG_FB_ARK) += arkfb.o +obj-$(CONFIG_FB_STI) += stifb.o +obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o +obj-$(CONFIG_FB_CG6) += cg6.o sbuslib.o +obj-$(CONFIG_FB_CG3) += cg3.o sbuslib.o +obj-$(CONFIG_FB_BW2) += bw2.o sbuslib.o +obj-$(CONFIG_FB_CG14) += cg14.o sbuslib.o +obj-$(CONFIG_FB_P9100) += p9100.o sbuslib.o +obj-$(CONFIG_FB_TCX) += tcx.o sbuslib.o +obj-$(CONFIG_FB_LEO) += leo.o sbuslib.o +obj-$(CONFIG_FB_ACORN) += acornfb.o +obj-$(CONFIG_FB_ATARI) += atafb.o c2p_iplan2.o atafb_mfb.o \ + atafb_iplan2p2.o atafb_iplan2p4.o atafb_iplan2p8.o +obj-$(CONFIG_FB_MAC) += macfb.o +obj-$(CONFIG_FB_HECUBA) += hecubafb.o +obj-$(CONFIG_FB_N411) += n411.o +obj-$(CONFIG_FB_HGA) += hgafb.o +obj-$(CONFIG_FB_XVR500) += sunxvr500.o +obj-$(CONFIG_FB_XVR2500) += sunxvr2500.o +obj-$(CONFIG_FB_XVR1000) += sunxvr1000.o +obj-$(CONFIG_FB_APOLLO) += dnfb.o +obj-$(CONFIG_FB_Q40) += q40fb.o +obj-$(CONFIG_FB_TGA) += tgafb.o +obj-$(CONFIG_FB_HP300) += hpfb.o +obj-$(CONFIG_FB_G364) += g364fb.o +obj-$(CONFIG_FB_EP93XX) += ep93xx-fb.o +obj-$(CONFIG_FB_SA1100) += sa1100fb.o +obj-$(CONFIG_FB_HIT) += hitfb.o +obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o +obj-$(CONFIG_FB_PVR2) += pvr2fb.o +obj-$(CONFIG_FB_VOODOO1) += sstfb.o +obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o +obj-$(CONFIG_FB_GOLDFISH) += goldfishfb.o +obj-$(CONFIG_FB_68328) += 68328fb.o +obj-$(CONFIG_FB_GBE) += gbefb.o +obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o +obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o +obj-$(CONFIG_FB_PXA) += pxafb.o +obj-$(CONFIG_FB_PXA168) += pxa168fb.o +obj-$(CONFIG_PXA3XX_GCU) += pxa3xx-gcu.o +obj-$(CONFIG_MMP_DISP) += mmp/ +obj-$(CONFIG_FB_AU1100) += au1100fb.o +obj-$(CONFIG_FB_AU1200) += au1200fb.o +obj-$(CONFIG_FB_VT8500) += vt8500lcdfb.o +obj-$(CONFIG_FB_WM8505) += wm8505fb.o +obj-$(CONFIG_FB_PMAG_AA) += pmag-aa-fb.o +obj-$(CONFIG_FB_PMAG_BA) += pmag-ba-fb.o +obj-$(CONFIG_FB_PMAGB_B) += pmagb-b-fb.o +obj-$(CONFIG_FB_MAXINE) += maxinefb.o +obj-$(CONFIG_FB_METRONOME) += metronomefb.o +obj-$(CONFIG_FB_BROADSHEET) += broadsheetfb.o +obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o +obj-$(CONFIG_FB_SH7760) += sh7760fb.o +obj-$(CONFIG_FB_IMX) += imxfb.o +obj-$(CONFIG_FB_S3C) += s3c-fb.o +obj-$(CONFIG_FB_FSL_DIU) += fsl-diu-fb.o +obj-$(CONFIG_FB_COBALT) += cobalt_lcdfb.o +obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o +obj-$(CONFIG_FB_PS3) += ps3fb.o +obj-$(CONFIG_FB_SM501) += sm501fb.o +obj-$(CONFIG_FB_UDL) += udlfb.o +obj-$(CONFIG_FB_SMSCUFX) += smscufx.o +obj-$(CONFIG_FB_XILINX) += xilinxfb.o +obj-$(CONFIG_FB_SH_MOBILE_LCDC) += sh_mobile_lcdcfb.o +obj-y += omap/ +obj-y += omap2/ +obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o +obj-$(CONFIG_FB_CARMINE) += carminefb.o +obj-$(CONFIG_FB_MB862XX) += mb862xx/ +obj-$(CONFIG_FB_HYPERV) += hyperv_fb.o +obj-$(CONFIG_FB_OPENCORES) += ocfb.o +obj-$(CONFIG_FB_SM712) += sm712fb.o + +# Platform or fallback drivers go here +obj-$(CONFIG_FB_UVESA) += uvesafb.o +obj-$(CONFIG_FB_VESA) += vesafb.o +obj-$(CONFIG_FB_EFI) += efifb.o +obj-$(CONFIG_FB_VGA16) += vga16fb.o +obj-$(CONFIG_FB_OF) += offb.o +obj-$(CONFIG_FB_DA8XX) += da8xx-fb.o +obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o +obj-$(CONFIG_FB_SIMPLE) += simplefb.o + +# the test framebuffer is last +obj-$(CONFIG_FB_VIRTUAL) += vfb.o diff --git a/drivers/video/fbdev/acornfb.c b/drivers/video/fbdev/acornfb.c new file mode 100644 index 0000000000..f0600f6ca2 --- /dev/null +++ b/drivers/video/fbdev/acornfb.c @@ -0,0 +1,1102 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * linux/drivers/video/acornfb.c + * + * Copyright (C) 1998-2001 Russell King + * + * Frame buffer code for Acorn platforms + * + * NOTE: Most of the modes with X!=640 will disappear shortly. + * NOTE: Startup setting of HS & VS polarity not supported. + * (do we need to support it if we're coming up in 640x480?) + * + * FIXME: (things broken by the "new improved" FBCON API) + * - Blanking 8bpp displays with VIDC + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "acornfb.h" + +/* + * Default resolution. + * NOTE that it has to be supported in the table towards + * the end of this file. + */ +#define DEFAULT_XRES 640 +#define DEFAULT_YRES 480 +#define DEFAULT_BPP 4 + +/* + * define this to debug the video mode selection + */ +#undef DEBUG_MODE_SELECTION + +/* + * Translation from RISC OS monitor types to actual + * HSYNC and VSYNC frequency ranges. These are + * probably not right, but they're the best info I + * have. Allow 1% either way on the nominal for TVs. + */ +#define NR_MONTYPES 6 +static struct fb_monspecs monspecs[NR_MONTYPES] = { + { /* TV */ + .hfmin = 15469, + .hfmax = 15781, + .vfmin = 49, + .vfmax = 51, + }, { /* Multi Freq */ + .hfmin = 0, + .hfmax = 99999, + .vfmin = 0, + .vfmax = 199, + }, { /* Hi-res mono */ + .hfmin = 58608, + .hfmax = 58608, + .vfmin = 64, + .vfmax = 64, + }, { /* VGA */ + .hfmin = 30000, + .hfmax = 70000, + .vfmin = 60, + .vfmax = 60, + }, { /* SVGA */ + .hfmin = 30000, + .hfmax = 70000, + .vfmin = 56, + .vfmax = 75, + }, { + .hfmin = 30000, + .hfmax = 70000, + .vfmin = 60, + .vfmax = 60, + } +}; + +static struct fb_info fb_info; +static struct acornfb_par current_par; +static struct vidc_timing current_vidc; + +extern unsigned int vram_size; /* set by setup.c */ + +#ifdef HAS_VIDC20 +#include + +#define MAX_SIZE (2*1024*1024) + +/* VIDC20 has a different set of rules from the VIDC: + * hcr : must be multiple of 4 + * hswr : must be even + * hdsr : must be even + * hder : must be even + * vcr : >= 2, (interlace, must be odd) + * vswr : >= 1 + * vdsr : >= 1 + * vder : >= vdsr + */ +static void acornfb_set_timing(struct fb_info *info) +{ + struct fb_var_screeninfo *var = &info->var; + struct vidc_timing vidc; + u_int vcr, fsize; + u_int ext_ctl, dat_ctl; + u_int words_per_line; + + memset(&vidc, 0, sizeof(vidc)); + + vidc.h_sync_width = var->hsync_len - 8; + vidc.h_border_start = vidc.h_sync_width + var->left_margin + 8 - 12; + vidc.h_display_start = vidc.h_border_start + 12 - 18; + vidc.h_display_end = vidc.h_display_start + var->xres; + vidc.h_border_end = vidc.h_display_end + 18 - 12; + vidc.h_cycle = vidc.h_border_end + var->right_margin + 12 - 8; + vidc.h_interlace = vidc.h_cycle / 2; + vidc.v_sync_width = var->vsync_len - 1; + vidc.v_border_start = vidc.v_sync_width + var->upper_margin; + vidc.v_display_start = vidc.v_border_start; + vidc.v_display_end = vidc.v_display_start + var->yres; + vidc.v_border_end = vidc.v_display_end; + vidc.control = acornfb_default_control(); + + vcr = var->vsync_len + var->upper_margin + var->yres + + var->lower_margin; + + if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) { + vidc.v_cycle = (vcr - 3) / 2; + vidc.control |= VIDC20_CTRL_INT; + } else + vidc.v_cycle = vcr - 2; + + switch (var->bits_per_pixel) { + case 1: vidc.control |= VIDC20_CTRL_1BPP; break; + case 2: vidc.control |= VIDC20_CTRL_2BPP; break; + case 4: vidc.control |= VIDC20_CTRL_4BPP; break; + default: + case 8: vidc.control |= VIDC20_CTRL_8BPP; break; + case 16: vidc.control |= VIDC20_CTRL_16BPP; break; + case 32: vidc.control |= VIDC20_CTRL_32BPP; break; + } + + acornfb_vidc20_find_rates(&vidc, var); + fsize = var->vsync_len + var->upper_margin + var->lower_margin - 1; + + if (memcmp(¤t_vidc, &vidc, sizeof(vidc))) { + current_vidc = vidc; + + vidc_writel(VIDC20_CTRL | vidc.control); + vidc_writel(0xd0000000 | vidc.pll_ctl); + vidc_writel(0x80000000 | vidc.h_cycle); + vidc_writel(0x81000000 | vidc.h_sync_width); + vidc_writel(0x82000000 | vidc.h_border_start); + vidc_writel(0x83000000 | vidc.h_display_start); + vidc_writel(0x84000000 | vidc.h_display_end); + vidc_writel(0x85000000 | vidc.h_border_end); + vidc_writel(0x86000000); + vidc_writel(0x87000000 | vidc.h_interlace); + vidc_writel(0x90000000 | vidc.v_cycle); + vidc_writel(0x91000000 | vidc.v_sync_width); + vidc_writel(0x92000000 | vidc.v_border_start); + vidc_writel(0x93000000 | vidc.v_display_start); + vidc_writel(0x94000000 | vidc.v_display_end); + vidc_writel(0x95000000 | vidc.v_border_end); + vidc_writel(0x96000000); + vidc_writel(0x97000000); + } + + iomd_writel(fsize, IOMD_FSIZE); + + ext_ctl = acornfb_default_econtrol(); + + if (var->sync & FB_SYNC_COMP_HIGH_ACT) /* should be FB_SYNC_COMP */ + ext_ctl |= VIDC20_ECTL_HS_NCSYNC | VIDC20_ECTL_VS_NCSYNC; + else { + if (var->sync & FB_SYNC_HOR_HIGH_ACT) + ext_ctl |= VIDC20_ECTL_HS_HSYNC; + else + ext_ctl |= VIDC20_ECTL_HS_NHSYNC; + + if (var->sync & FB_SYNC_VERT_HIGH_ACT) + ext_ctl |= VIDC20_ECTL_VS_VSYNC; + else + ext_ctl |= VIDC20_ECTL_VS_NVSYNC; + } + + vidc_writel(VIDC20_ECTL | ext_ctl); + + words_per_line = var->xres * var->bits_per_pixel / 32; + + if (current_par.using_vram && info->fix.smem_len == 2048*1024) + words_per_line /= 2; + + /* RiscPC doesn't use the VIDC's VRAM control. */ + dat_ctl = VIDC20_DCTL_VRAM_DIS | VIDC20_DCTL_SNA | words_per_line; + + /* The data bus width is dependent on both the type + * and amount of video memory. + * DRAM 32bit low + * 1MB VRAM 32bit + * 2MB VRAM 64bit + */ + if (current_par.using_vram && current_par.vram_half_sam == 2048) + dat_ctl |= VIDC20_DCTL_BUS_D63_0; + else + dat_ctl |= VIDC20_DCTL_BUS_D31_0; + + vidc_writel(VIDC20_DCTL | dat_ctl); + +#ifdef DEBUG_MODE_SELECTION + printk(KERN_DEBUG "VIDC registers for %dx%dx%d:\n", var->xres, + var->yres, var->bits_per_pixel); + printk(KERN_DEBUG " H-cycle : %d\n", vidc.h_cycle); + printk(KERN_DEBUG " H-sync-width : %d\n", vidc.h_sync_width); + printk(KERN_DEBUG " H-border-start : %d\n", vidc.h_border_start); + printk(KERN_DEBUG " H-display-start : %d\n", vidc.h_display_start); + printk(KERN_DEBUG " H-display-end : %d\n", vidc.h_display_end); + printk(KERN_DEBUG " H-border-end : %d\n", vidc.h_border_end); + printk(KERN_DEBUG " H-interlace : %d\n", vidc.h_interlace); + printk(KERN_DEBUG " V-cycle : %d\n", vidc.v_cycle); + printk(KERN_DEBUG " V-sync-width : %d\n", vidc.v_sync_width); + printk(KERN_DEBUG " V-border-start : %d\n", vidc.v_border_start); + printk(KERN_DEBUG " V-display-start : %d\n", vidc.v_display_start); + printk(KERN_DEBUG " V-display-end : %d\n", vidc.v_display_end); + printk(KERN_DEBUG " V-border-end : %d\n", vidc.v_border_end); + printk(KERN_DEBUG " Ext Ctrl (C) : 0x%08X\n", ext_ctl); + printk(KERN_DEBUG " PLL Ctrl (D) : 0x%08X\n", vidc.pll_ctl); + printk(KERN_DEBUG " Ctrl (E) : 0x%08X\n", vidc.control); + printk(KERN_DEBUG " Data Ctrl (F) : 0x%08X\n", dat_ctl); + printk(KERN_DEBUG " Fsize : 0x%08X\n", fsize); +#endif +} + +/* + * We have to take note of the VIDC20's 16-bit palette here. + * The VIDC20 looks up a 16 bit pixel as follows: + * + * bits 111111 + * 5432109876543210 + * red ++++++++ (8 bits, 7 to 0) + * green ++++++++ (8 bits, 11 to 4) + * blue ++++++++ (8 bits, 15 to 8) + * + * We use a pixel which looks like: + * + * bits 111111 + * 5432109876543210 + * red +++++ (5 bits, 4 to 0) + * green +++++ (5 bits, 9 to 5) + * blue +++++ (5 bits, 14 to 10) + */ +static int +acornfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, + u_int trans, struct fb_info *info) +{ + union palette pal; + + if (regno >= current_par.palette_size) + return 1; + + if (regno < 16 && info->fix.visual == FB_VISUAL_DIRECTCOLOR) { + u32 pseudo_val; + + pseudo_val = regno << info->var.red.offset; + pseudo_val |= regno << info->var.green.offset; + pseudo_val |= regno << info->var.blue.offset; + + ((u32 *)info->pseudo_palette)[regno] = pseudo_val; + } + + pal.p = 0; + pal.vidc20.red = red >> 8; + pal.vidc20.green = green >> 8; + pal.vidc20.blue = blue >> 8; + + current_par.palette[regno] = pal; + + if (info->var.bits_per_pixel == 16) { + int i; + + pal.p = 0; + vidc_writel(0x10000000); + for (i = 0; i < 256; i += 1) { + pal.vidc20.red = current_par.palette[i & 31].vidc20.red; + pal.vidc20.green = current_par.palette[(i >> 1) & 31].vidc20.green; + pal.vidc20.blue = current_par.palette[(i >> 2) & 31].vidc20.blue; + vidc_writel(pal.p); + /* Palette register pointer auto-increments */ + } + } else { + vidc_writel(0x10000000 | regno); + vidc_writel(pal.p); + } + + return 0; +} +#endif + +/* + * Before selecting the timing parameters, adjust + * the resolution to fit the rules. + */ +static int +acornfb_adjust_timing(struct fb_info *info, struct fb_var_screeninfo *var, u_int fontht) +{ + u_int font_line_len, sam_size, min_size, size, nr_y; + + /* xres must be even */ + var->xres = (var->xres + 1) & ~1; + + /* + * We don't allow xres_virtual to differ from xres + */ + var->xres_virtual = var->xres; + var->xoffset = 0; + + if (current_par.using_vram) + sam_size = current_par.vram_half_sam * 2; + else + sam_size = 16; + + /* + * Now, find a value for yres_virtual which allows + * us to do ywrap scrolling. The value of + * yres_virtual must be such that the end of the + * displayable frame buffer must be aligned with + * the start of a font line. + */ + font_line_len = var->xres * var->bits_per_pixel * fontht / 8; + min_size = var->xres * var->yres * var->bits_per_pixel / 8; + + /* + * If minimum screen size is greater than that we have + * available, reject it. + */ + if (min_size > info->fix.smem_len) + return -EINVAL; + + /* Find int 'y', such that y * fll == s * sam < maxsize + * y = s * sam / fll; s = maxsize / sam + */ + for (size = info->fix.smem_len; + nr_y = size / font_line_len, min_size <= size; + size -= sam_size) { + if (nr_y * font_line_len == size) + break; + } + nr_y *= fontht; + + if (var->accel_flags & FB_ACCELF_TEXT) { + if (min_size > size) { + /* + * failed, use ypan + */ + size = info->fix.smem_len; + var->yres_virtual = size / (font_line_len / fontht); + } else + var->yres_virtual = nr_y; + } else if (var->yres_virtual > nr_y) + var->yres_virtual = nr_y; + + current_par.screen_end = info->fix.smem_start + size; + + /* + * Fix yres & yoffset if needed. + */ + if (var->yres > var->yres_virtual) + var->yres = var->yres_virtual; + + if (var->vmode & FB_VMODE_YWRAP) { + if (var->yoffset > var->yres_virtual) + var->yoffset = var->yres_virtual; + } else { + if (var->yoffset + var->yres > var->yres_virtual) + var->yoffset = var->yres_virtual - var->yres; + } + + /* hsync_len must be even */ + var->hsync_len = (var->hsync_len + 1) & ~1; + +#if defined(HAS_VIDC20) + /* left_margin must be even */ + if (var->left_margin & 1) { + var->left_margin += 1; + var->right_margin -= 1; + } + + /* right_margin must be even */ + if (var->right_margin & 1) + var->right_margin += 1; +#endif + + if (var->vsync_len < 1) + var->vsync_len = 1; + + return 0; +} + +static int +acornfb_validate_timing(struct fb_var_screeninfo *var, + struct fb_monspecs *monspecs) +{ + unsigned long hs, vs; + + /* + * hs(Hz) = 10^12 / (pixclock * xtotal) + * vs(Hz) = hs(Hz) / ytotal + * + * No need to do long long divisions or anything + * like that if you factor it correctly + */ + hs = 1953125000 / var->pixclock; + hs = hs * 512 / + (var->xres + var->left_margin + var->right_margin + var->hsync_len); + vs = hs / + (var->yres + var->upper_margin + var->lower_margin + var->vsync_len); + + return (vs >= monspecs->vfmin && vs <= monspecs->vfmax && + hs >= monspecs->hfmin && hs <= monspecs->hfmax) ? 0 : -EINVAL; +} + +static inline void +acornfb_update_dma(struct fb_info *info, struct fb_var_screeninfo *var) +{ + u_int off = var->yoffset * info->fix.line_length; + +#if defined(HAS_MEMC) + memc_write(VDMA_INIT, off >> 2); +#elif defined(HAS_IOMD) + iomd_writel(info->fix.smem_start + off, IOMD_VIDINIT); +#endif +} + +static int +acornfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) +{ + u_int fontht; + int err; + + /* + * FIXME: Find the font height + */ + fontht = 8; + + var->red.msb_right = 0; + var->green.msb_right = 0; + var->blue.msb_right = 0; + var->transp.msb_right = 0; + + switch (var->bits_per_pixel) { + case 1: case 2: case 4: case 8: + var->red.offset = 0; + var->red.length = var->bits_per_pixel; + var->green = var->red; + var->blue = var->red; + var->transp.offset = 0; + var->transp.length = 0; + break; + +#ifdef HAS_VIDC20 + case 16: + var->red.offset = 0; + var->red.length = 5; + var->green.offset = 5; + var->green.length = 5; + var->blue.offset = 10; + var->blue.length = 5; + var->transp.offset = 15; + var->transp.length = 1; + break; + + case 32: + var->red.offset = 0; + var->red.length = 8; + var->green.offset = 8; + var->green.length = 8; + var->blue.offset = 16; + var->blue.length = 8; + var->transp.offset = 24; + var->transp.length = 4; + break; +#endif + default: + return -EINVAL; + } + + /* + * Check to see if the pixel rate is valid. + */ + if (!acornfb_valid_pixrate(var)) + return -EINVAL; + + /* + * Validate and adjust the resolution to + * match the video generator hardware. + */ + err = acornfb_adjust_timing(info, var, fontht); + if (err) + return err; + + /* + * Validate the timing against the + * monitor hardware. + */ + return acornfb_validate_timing(var, &info->monspecs); +} + +static int acornfb_set_par(struct fb_info *info) +{ + switch (info->var.bits_per_pixel) { + case 1: + current_par.palette_size = 2; + info->fix.visual = FB_VISUAL_MONO10; + break; + case 2: + current_par.palette_size = 4; + info->fix.visual = FB_VISUAL_PSEUDOCOLOR; + break; + case 4: + current_par.palette_size = 16; + info->fix.visual = FB_VISUAL_PSEUDOCOLOR; + break; + case 8: + current_par.palette_size = VIDC_PALETTE_SIZE; + info->fix.visual = FB_VISUAL_PSEUDOCOLOR; + break; +#ifdef HAS_VIDC20 + case 16: + current_par.palette_size = 32; + info->fix.visual = FB_VISUAL_DIRECTCOLOR; + break; + case 32: + current_par.palette_size = VIDC_PALETTE_SIZE; + info->fix.visual = FB_VISUAL_DIRECTCOLOR; + break; +#endif + default: + BUG(); + } + + info->fix.line_length = (info->var.xres * info->var.bits_per_pixel) / 8; + +#if defined(HAS_MEMC) + { + unsigned long size = info->fix.smem_len - VDMA_XFERSIZE; + + memc_write(VDMA_START, 0); + memc_write(VDMA_END, size >> 2); + } +#elif defined(HAS_IOMD) + { + unsigned long start, size; + u_int control; + + start = info->fix.smem_start; + size = current_par.screen_end; + + if (current_par.using_vram) { + size -= current_par.vram_half_sam; + control = DMA_CR_E | (current_par.vram_half_sam / 256); + } else { + size -= 16; + control = DMA_CR_E | DMA_CR_D | 16; + } + + iomd_writel(start, IOMD_VIDSTART); + iomd_writel(size, IOMD_VIDEND); + iomd_writel(control, IOMD_VIDCR); + } +#endif + + acornfb_update_dma(info, &info->var); + acornfb_set_timing(info); + + return 0; +} + +static int +acornfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) +{ + u_int y_bottom = var->yoffset; + + if (!(var->vmode & FB_VMODE_YWRAP)) + y_bottom += info->var.yres; + + if (y_bottom > info->var.yres_virtual) + return -EINVAL; + + acornfb_update_dma(info, var); + + return 0; +} + +static const struct fb_ops acornfb_ops = { + .owner = THIS_MODULE, + FB_DEFAULT_IOMEM_OPS, + .fb_check_var = acornfb_check_var, + .fb_set_par = acornfb_set_par, + .fb_setcolreg = acornfb_setcolreg, + .fb_pan_display = acornfb_pan_display, +}; + +/* + * Everything after here is initialisation!!! + */ +static struct fb_videomode modedb[] = { + { /* 320x256 @ 50Hz */ + NULL, 50, 320, 256, 125000, 92, 62, 35, 19, 38, 2, + FB_SYNC_COMP_HIGH_ACT, + FB_VMODE_NONINTERLACED + }, { /* 640x250 @ 50Hz, 15.6 kHz hsync */ + NULL, 50, 640, 250, 62500, 185, 123, 38, 21, 76, 3, + 0, + FB_VMODE_NONINTERLACED + }, { /* 640x256 @ 50Hz, 15.6 kHz hsync */ + NULL, 50, 640, 256, 62500, 185, 123, 35, 18, 76, 3, + 0, + FB_VMODE_NONINTERLACED + }, { /* 640x512 @ 50Hz, 26.8 kHz hsync */ + NULL, 50, 640, 512, 41667, 113, 87, 18, 1, 56, 3, + 0, + FB_VMODE_NONINTERLACED + }, { /* 640x250 @ 70Hz, 31.5 kHz hsync */ + NULL, 70, 640, 250, 39722, 48, 16, 109, 88, 96, 2, + 0, + FB_VMODE_NONINTERLACED + }, { /* 640x256 @ 70Hz, 31.5 kHz hsync */ + NULL, 70, 640, 256, 39722, 48, 16, 106, 85, 96, 2, + 0, + FB_VMODE_NONINTERLACED + }, { /* 640x352 @ 70Hz, 31.5 kHz hsync */ + NULL, 70, 640, 352, 39722, 48, 16, 58, 37, 96, 2, + 0, + FB_VMODE_NONINTERLACED + }, { /* 640x480 @ 60Hz, 31.5 kHz hsync */ + NULL, 60, 640, 480, 39722, 48, 16, 32, 11, 96, 2, + 0, + FB_VMODE_NONINTERLACED + }, { /* 800x600 @ 56Hz, 35.2 kHz hsync */ + NULL, 56, 800, 600, 27778, 101, 23, 22, 1, 100, 2, + 0, + FB_VMODE_NONINTERLACED + }, { /* 896x352 @ 60Hz, 21.8 kHz hsync */ + NULL, 60, 896, 352, 41667, 59, 27, 9, 0, 118, 3, + 0, + FB_VMODE_NONINTERLACED + }, { /* 1024x 768 @ 60Hz, 48.4 kHz hsync */ + NULL, 60, 1024, 768, 15385, 160, 24, 29, 3, 136, 6, + 0, + FB_VMODE_NONINTERLACED + }, { /* 1280x1024 @ 60Hz, 63.8 kHz hsync */ + NULL, 60, 1280, 1024, 9090, 186, 96, 38, 1, 160, 3, + 0, + FB_VMODE_NONINTERLACED + } +}; + +static struct fb_videomode acornfb_default_mode = { + .name = NULL, + .refresh = 60, + .xres = 640, + .yres = 480, + .pixclock = 39722, + .left_margin = 56, + .right_margin = 16, + .upper_margin = 34, + .lower_margin = 9, + .hsync_len = 88, + .vsync_len = 2, + .sync = 0, + .vmode = FB_VMODE_NONINTERLACED +}; + +static void acornfb_init_fbinfo(void) +{ + static int first = 1; + + if (!first) + return; + first = 0; + + fb_info.fbops = &acornfb_ops; + fb_info.flags = FBINFO_HWACCEL_YPAN; + fb_info.pseudo_palette = current_par.pseudo_palette; + + strcpy(fb_info.fix.id, "Acorn"); + fb_info.fix.type = FB_TYPE_PACKED_PIXELS; + fb_info.fix.type_aux = 0; + fb_info.fix.xpanstep = 0; + fb_info.fix.ypanstep = 1; + fb_info.fix.ywrapstep = 1; + fb_info.fix.line_length = 0; + fb_info.fix.accel = FB_ACCEL_NONE; + + /* + * setup initial parameters + */ + memset(&fb_info.var, 0, sizeof(fb_info.var)); + +#if defined(HAS_VIDC20) + fb_info.var.red.length = 8; + fb_info.var.transp.length = 4; +#endif + fb_info.var.green = fb_info.var.red; + fb_info.var.blue = fb_info.var.red; + fb_info.var.nonstd = 0; + fb_info.var.activate = FB_ACTIVATE_NOW; + fb_info.var.height = -1; + fb_info.var.width = -1; + fb_info.var.vmode = FB_VMODE_NONINTERLACED; + fb_info.var.accel_flags = FB_ACCELF_TEXT; + + current_par.dram_size = 0; + current_par.montype = -1; + current_par.dpms = 0; +} + +/* + * setup acornfb options: + * + * mon:hmin-hmax:vmin-vmax:dpms:width:height + * Set monitor parameters: + * hmin = horizontal minimum frequency (Hz) + * hmax = horizontal maximum frequency (Hz) (optional) + * vmin = vertical minimum frequency (Hz) + * vmax = vertical maximum frequency (Hz) (optional) + * dpms = DPMS supported? (optional) + * width = width of picture in mm. (optional) + * height = height of picture in mm. (optional) + * + * montype:type + * Set RISC-OS style monitor type: + * 0 (or tv) - TV frequency + * 1 (or multi) - Multi frequency + * 2 (or hires) - Hi-res monochrome + * 3 (or vga) - VGA + * 4 (or svga) - SVGA + * auto, or option missing + * - try hardware detect + * + * dram:size + * Set the amount of DRAM to use for the frame buffer + * (even if you have VRAM). + * size can optionally be followed by 'M' or 'K' for + * MB or KB respectively. + */ +static void acornfb_parse_mon(char *opt) +{ + char *p = opt; + + current_par.montype = -2; + + fb_info.monspecs.hfmin = simple_strtoul(p, &p, 0); + if (*p == '-') + fb_info.monspecs.hfmax = simple_strtoul(p + 1, &p, 0); + else + fb_info.monspecs.hfmax = fb_info.monspecs.hfmin; + + if (*p != ':') + goto bad; + + fb_info.monspecs.vfmin = simple_strtoul(p + 1, &p, 0); + if (*p == '-') + fb_info.monspecs.vfmax = simple_strtoul(p + 1, &p, 0); + else + fb_info.monspecs.vfmax = fb_info.monspecs.vfmin; + + if (*p != ':') + goto check_values; + + fb_info.monspecs.dpms = simple_strtoul(p + 1, &p, 0); + + if (*p != ':') + goto check_values; + + fb_info.var.width = simple_strtoul(p + 1, &p, 0); + + if (*p != ':') + goto check_values; + + fb_info.var.height = simple_strtoul(p + 1, NULL, 0); + +check_values: + if (fb_info.monspecs.hfmax < fb_info.monspecs.hfmin || + fb_info.monspecs.vfmax < fb_info.monspecs.vfmin) + goto bad; + return; + +bad: + printk(KERN_ERR "Acornfb: bad monitor settings: %s\n", opt); + current_par.montype = -1; +} + +static void acornfb_parse_montype(char *opt) +{ + current_par.montype = -2; + + if (strncmp(opt, "tv", 2) == 0) { + opt += 2; + current_par.montype = 0; + } else if (strncmp(opt, "multi", 5) == 0) { + opt += 5; + current_par.montype = 1; + } else if (strncmp(opt, "hires", 5) == 0) { + opt += 5; + current_par.montype = 2; + } else if (strncmp(opt, "vga", 3) == 0) { + opt += 3; + current_par.montype = 3; + } else if (strncmp(opt, "svga", 4) == 0) { + opt += 4; + current_par.montype = 4; + } else if (strncmp(opt, "auto", 4) == 0) { + opt += 4; + current_par.montype = -1; + } else if (isdigit(*opt)) + current_par.montype = simple_strtoul(opt, &opt, 0); + + if (current_par.montype == -2 || + current_par.montype > NR_MONTYPES) { + printk(KERN_ERR "acornfb: unknown monitor type: %s\n", + opt); + current_par.montype = -1; + } else + if (opt && *opt) { + if (strcmp(opt, ",dpms") == 0) + current_par.dpms = 1; + else + printk(KERN_ERR + "acornfb: unknown monitor option: %s\n", + opt); + } +} + +static void acornfb_parse_dram(char *opt) +{ + unsigned int size; + + size = simple_strtoul(opt, &opt, 0); + + if (opt) { + switch (*opt) { + case 'M': + case 'm': + size *= 1024; + fallthrough; + case 'K': + case 'k': + size *= 1024; + default: + break; + } + } + + current_par.dram_size = size; +} + +static struct options { + char *name; + void (*parse)(char *opt); +} opt_table[] = { + { "mon", acornfb_parse_mon }, + { "montype", acornfb_parse_montype }, + { "dram", acornfb_parse_dram }, + { NULL, NULL } +}; + +static int acornfb_setup(char *options) +{ + struct options *optp; + char *opt; + + if (!options || !*options) + return 0; + + acornfb_init_fbinfo(); + + while ((opt = strsep(&options, ",")) != NULL) { + if (!*opt) + continue; + + for (optp = opt_table; optp->name; optp++) { + int optlen; + + optlen = strlen(optp->name); + + if (strncmp(opt, optp->name, optlen) == 0 && + opt[optlen] == ':') { + optp->parse(opt + optlen + 1); + break; + } + } + + if (!optp->name) + printk(KERN_ERR "acornfb: unknown parameter: %s\n", + opt); + } + return 0; +} + +/* + * Detect type of monitor connected + * For now, we just assume SVGA + */ +static int acornfb_detect_monitortype(void) +{ + return 4; +} + +static int acornfb_probe(struct platform_device *dev) +{ + unsigned long size; + u_int h_sync, v_sync; + int rc, i; + char *option = NULL; + + if (fb_get_options("acornfb", &option)) + return -ENODEV; + acornfb_setup(option); + + acornfb_init_fbinfo(); + + current_par.dev = &dev->dev; + + if (current_par.montype == -1) + current_par.montype = acornfb_detect_monitortype(); + + if (current_par.montype == -1 || current_par.montype > NR_MONTYPES) + current_par.montype = 4; + + if (current_par.montype >= 0) { + fb_info.monspecs = monspecs[current_par.montype]; + fb_info.monspecs.dpms = current_par.dpms; + } + + /* + * Try to select a suitable default mode + */ + for (i = 0; i < ARRAY_SIZE(modedb); i++) { + unsigned long hs; + + hs = modedb[i].refresh * + (modedb[i].yres + modedb[i].upper_margin + + modedb[i].lower_margin + modedb[i].vsync_len); + if (modedb[i].xres == DEFAULT_XRES && + modedb[i].yres == DEFAULT_YRES && + modedb[i].refresh >= fb_info.monspecs.vfmin && + modedb[i].refresh <= fb_info.monspecs.vfmax && + hs >= fb_info.monspecs.hfmin && + hs <= fb_info.monspecs.hfmax) { + acornfb_default_mode = modedb[i]; + break; + } + } + + fb_info.screen_base = (char *)SCREEN_BASE; + fb_info.fix.smem_start = SCREEN_START; + current_par.using_vram = 0; + + /* + * If vram_size is set, we are using VRAM in + * a Risc PC. However, if the user has specified + * an amount of DRAM then use that instead. + */ + if (vram_size && !current_par.dram_size) { + size = vram_size; + current_par.vram_half_sam = vram_size / 1024; + current_par.using_vram = 1; + } else if (current_par.dram_size) + size = current_par.dram_size; + else + size = MAX_SIZE; + + /* + * Limit maximum screen size. + */ + if (size > MAX_SIZE) + size = MAX_SIZE; + + size = PAGE_ALIGN(size); + +#if defined(HAS_VIDC20) + if (!current_par.using_vram) { + dma_addr_t handle; + void *base; + + /* + * RiscPC needs to allocate the DRAM memory + * for the framebuffer if we are not using + * VRAM. + */ + base = dma_alloc_wc(current_par.dev, size, &handle, + GFP_KERNEL); + if (base == NULL) { + printk(KERN_ERR "acornfb: unable to allocate screen memory\n"); + return -ENOMEM; + } + + fb_info.screen_base = base; + fb_info.fix.smem_start = handle; + } +#endif + fb_info.fix.smem_len = size; + current_par.palette_size = VIDC_PALETTE_SIZE; + + /* + * Lookup the timing for this resolution. If we can't + * find it, then we can't restore it if we change + * the resolution, so we disable this feature. + */ + do { + rc = fb_find_mode(&fb_info.var, &fb_info, NULL, modedb, + ARRAY_SIZE(modedb), + &acornfb_default_mode, DEFAULT_BPP); + /* + * If we found an exact match, all ok. + */ + if (rc == 1) + break; + + rc = fb_find_mode(&fb_info.var, &fb_info, NULL, NULL, 0, + &acornfb_default_mode, DEFAULT_BPP); + /* + * If we found an exact match, all ok. + */ + if (rc == 1) + break; + + rc = fb_find_mode(&fb_info.var, &fb_info, NULL, modedb, + ARRAY_SIZE(modedb), + &acornfb_default_mode, DEFAULT_BPP); + if (rc) + break; + + rc = fb_find_mode(&fb_info.var, &fb_info, NULL, NULL, 0, + &acornfb_default_mode, DEFAULT_BPP); + } while (0); + + /* + * If we didn't find an exact match, try the + * generic database. + */ + if (rc == 0) { + printk("Acornfb: no valid mode found\n"); + return -EINVAL; + } + + h_sync = 1953125000 / fb_info.var.pixclock; + h_sync = h_sync * 512 / (fb_info.var.xres + fb_info.var.left_margin + + fb_info.var.right_margin + fb_info.var.hsync_len); + v_sync = h_sync / (fb_info.var.yres + fb_info.var.upper_margin + + fb_info.var.lower_margin + fb_info.var.vsync_len); + + printk(KERN_INFO "Acornfb: %dkB %cRAM, %s, using %dx%d, %d.%03dkHz, %dHz\n", + fb_info.fix.smem_len / 1024, + current_par.using_vram ? 'V' : 'D', + VIDC_NAME, fb_info.var.xres, fb_info.var.yres, + h_sync / 1000, h_sync % 1000, v_sync); + + printk(KERN_INFO "Acornfb: Monitor: %d.%03d-%d.%03dkHz, %d-%dHz%s\n", + fb_info.monspecs.hfmin / 1000, fb_info.monspecs.hfmin % 1000, + fb_info.monspecs.hfmax / 1000, fb_info.monspecs.hfmax % 1000, + fb_info.monspecs.vfmin, fb_info.monspecs.vfmax, + fb_info.monspecs.dpms ? ", DPMS" : ""); + + if (fb_set_var(&fb_info, &fb_info.var)) + printk(KERN_ERR "Acornfb: unable to set display parameters\n"); + + if (register_framebuffer(&fb_info) < 0) + return -EINVAL; + return 0; +} + +static struct platform_driver acornfb_driver = { + .probe = acornfb_probe, + .driver = { + .name = "acornfb", + }, +}; + +static int __init acornfb_init(void) +{ + return platform_driver_register(&acornfb_driver); +} + +module_init(acornfb_init); + +MODULE_AUTHOR("Russell King"); +MODULE_DESCRIPTION("VIDC 1/1a/20 framebuffer driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/video/fbdev/acornfb.h b/drivers/video/fbdev/acornfb.h new file mode 100644 index 0000000000..f8df4ecb4f --- /dev/null +++ b/drivers/video/fbdev/acornfb.h @@ -0,0 +1,166 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * linux/drivers/video/acornfb.h + * + * Copyright (C) 1998,1999 Russell King + * + * Frame buffer code for Acorn platforms + */ +#if defined(HAS_VIDC20) +#include +#define VIDC_PALETTE_SIZE 256 +#define VIDC_NAME "VIDC20" +#endif + +#define EXTEND8(x) ((x)|(x)<<8) +#define EXTEND4(x) ((x)|(x)<<4|(x)<<8|(x)<<12) + +struct vidc20_palette { + u_int red:8; + u_int green:8; + u_int blue:8; + u_int ext:4; + u_int unused:4; +}; + +struct vidc_palette { + u_int red:4; + u_int green:4; + u_int blue:4; + u_int trans:1; + u_int sbz1:13; + u_int reg:4; + u_int sbz2:2; +}; + +union palette { + struct vidc20_palette vidc20; + struct vidc_palette vidc; + u_int p; +}; + +struct acornfb_par { + struct device *dev; + unsigned long screen_end; + unsigned int dram_size; + unsigned int vram_half_sam; + unsigned int palette_size; + signed int montype; + unsigned int using_vram : 1; + unsigned int dpms : 1; + + union palette palette[VIDC_PALETTE_SIZE]; + + u32 pseudo_palette[16]; +}; + +struct vidc_timing { + u_int h_cycle; + u_int h_sync_width; + u_int h_border_start; + u_int h_display_start; + u_int h_display_end; + u_int h_border_end; + u_int h_interlace; + + u_int v_cycle; + u_int v_sync_width; + u_int v_border_start; + u_int v_display_start; + u_int v_display_end; + u_int v_border_end; + + u_int control; + + /* VIDC20 only */ + u_int pll_ctl; +}; + +struct modey_params { + u_int y_res; + u_int u_margin; + u_int b_margin; + u_int vsync_len; + u_int vf; +}; + +struct modex_params { + u_int x_res; + u_int l_margin; + u_int r_margin; + u_int hsync_len; + u_int clock; + u_int hf; + const struct modey_params *modey; +}; + +#ifdef HAS_VIDC20 +/* + * VIDC20 registers + */ +#define VIDC20_CTRL 0xe0000000 +#define VIDC20_CTRL_PIX_VCLK (0 << 0) +#define VIDC20_CTRL_PIX_HCLK (1 << 0) +#define VIDC20_CTRL_PIX_RCLK (2 << 0) +#define VIDC20_CTRL_PIX_CK (0 << 2) +#define VIDC20_CTRL_PIX_CK2 (1 << 2) +#define VIDC20_CTRL_PIX_CK3 (2 << 2) +#define VIDC20_CTRL_PIX_CK4 (3 << 2) +#define VIDC20_CTRL_PIX_CK5 (4 << 2) +#define VIDC20_CTRL_PIX_CK6 (5 << 2) +#define VIDC20_CTRL_PIX_CK7 (6 << 2) +#define VIDC20_CTRL_PIX_CK8 (7 << 2) +#define VIDC20_CTRL_1BPP (0 << 5) +#define VIDC20_CTRL_2BPP (1 << 5) +#define VIDC20_CTRL_4BPP (2 << 5) +#define VIDC20_CTRL_8BPP (3 << 5) +#define VIDC20_CTRL_16BPP (4 << 5) +#define VIDC20_CTRL_32BPP (6 << 5) +#define VIDC20_CTRL_FIFO_NS (0 << 8) +#define VIDC20_CTRL_FIFO_4 (1 << 8) +#define VIDC20_CTRL_FIFO_8 (2 << 8) +#define VIDC20_CTRL_FIFO_12 (3 << 8) +#define VIDC20_CTRL_FIFO_16 (4 << 8) +#define VIDC20_CTRL_FIFO_20 (5 << 8) +#define VIDC20_CTRL_FIFO_24 (6 << 8) +#define VIDC20_CTRL_FIFO_28 (7 << 8) +#define VIDC20_CTRL_INT (1 << 12) +#define VIDC20_CTRL_DUP (1 << 13) +#define VIDC20_CTRL_PDOWN (1 << 14) + +#define VIDC20_ECTL 0xc0000000 +#define VIDC20_ECTL_REG(x) ((x) & 0xf3) +#define VIDC20_ECTL_ECK (1 << 2) +#define VIDC20_ECTL_REDPED (1 << 8) +#define VIDC20_ECTL_GREENPED (1 << 9) +#define VIDC20_ECTL_BLUEPED (1 << 10) +#define VIDC20_ECTL_DAC (1 << 12) +#define VIDC20_ECTL_LCDGS (1 << 13) +#define VIDC20_ECTL_HRM (1 << 14) + +#define VIDC20_ECTL_HS_MASK (3 << 16) +#define VIDC20_ECTL_HS_HSYNC (0 << 16) +#define VIDC20_ECTL_HS_NHSYNC (1 << 16) +#define VIDC20_ECTL_HS_CSYNC (2 << 16) +#define VIDC20_ECTL_HS_NCSYNC (3 << 16) + +#define VIDC20_ECTL_VS_MASK (3 << 18) +#define VIDC20_ECTL_VS_VSYNC (0 << 18) +#define VIDC20_ECTL_VS_NVSYNC (1 << 18) +#define VIDC20_ECTL_VS_CSYNC (2 << 18) +#define VIDC20_ECTL_VS_NCSYNC (3 << 18) + +#define VIDC20_DCTL 0xf0000000 +/* 0-9 = number of words in scanline */ +#define VIDC20_DCTL_SNA (1 << 12) +#define VIDC20_DCTL_HDIS (1 << 13) +#define VIDC20_DCTL_BUS_NS (0 << 16) +#define VIDC20_DCTL_BUS_D31_0 (1 << 16) +#define VIDC20_DCTL_BUS_D63_32 (2 << 16) +#define VIDC20_DCTL_BUS_D63_0 (3 << 16) +#define VIDC20_DCTL_VRAM_DIS (0 << 18) +#define VIDC20_DCTL_VRAM_PXCLK (1 << 18) +#define VIDC20_DCTL_VRAM_PXCLK2 (2 << 18) +#define VIDC20_DCTL_VRAM_PXCLK4 (3 << 18) + +#endif diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c new file mode 100644 index 0000000000..24d89e6fb7 --- /dev/null +++ b/drivers/video/fbdev/amba-clcd.c @@ -0,0 +1,985 @@ +/* + * linux/drivers/video/amba-clcd.c + * + * Copyright (C) 2001 ARM Limited, by David A Rusling + * Updated to 2.5, Deep Blue Solutions Ltd. + * + * 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. + * + * ARM PrimeCell PL110 Color LCD Controller + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include