
        VIA Integration Graphic Chip Console Framebuffer Driver

[Platform]
-----------------------
    The console framebuffer driver is for graphics chips of
    VIA UniChrome Family(CLE266, PM800 / CN400 / CN300,
                        P4M800CE / P4M800Pro / CN700 / VN800,
                        CX700 / VX700, K8M890, P4M890,
                        CN896 / P4M900, VX800, VX855)

[Driver features]
------------------------
    Device: CRT, LCD, DVI

    Support viafb_mode:
        CRT:
            640x480(60, 75, 85, 100, 120 Hz), 720x480(60 Hz),
            720x576(60 Hz), 800x600(60, 75, 85, 100, 120 Hz),
            848x480(60 Hz), 856x480(60 Hz), 1024x512(60 Hz),
            1024x768(60, 75, 85, 100 Hz), 1152x864(75 Hz),
            1280x768(60 Hz), 1280x960(60 Hz), 1280x1024(60, 75, 85 Hz),
            1440x1050(60 Hz), 1600x1200(60, 75 Hz), 1280x720(60 Hz),
            1920x1080(60 Hz), 1400x1050(60 Hz), 800x480(60 Hz)

    color depth: 8 bpp, 16 bpp, 32 bpp supports.

    Support 2D hardware accelerator.

[Using the viafb module]
-- -- --------------------
    Start viafb with default settings:
        #modprobe viafb

    Start viafb with with user options:
        #modprobe viafb viafb_mode=800x600 viafb_bpp=16 viafb_refresh=60
                  viafb_active_dev=CRT+DVI viafb_dvi_port=DVP1
                  viafb_mode1=1024x768 viafb_bpp=16 viafb_refresh1=60
                  viafb_SAMM_ON=1

    viafb_mode:
        640x480 (default)
        720x480
        800x600
        1024x768
        ......

    viafb_bpp:
        8, 16, 32 (default:32)

    viafb_refresh:
        60, 75, 85, 100, 120 (default:60)

    viafb_lcd_dsp_method:
        0 : expansion (default)
        1 : centering

    viafb_lcd_mode:
        0 : LCD panel with LSB data format input (default)
        1 : LCD panel with MSB data format input

    viafb_lcd_panel_id:
        0 : Resolution: 640x480, Channel: single, Dithering: Enable
        1 : Resolution: 800x600, Channel: single, Dithering: Enable
        2 : Resolution: 1024x768, Channel: single, Dithering: Enable (default)
        3 : Resolution: 1280x768, Channel: single, Dithering: Enable
        4 : Resolution: 1280x1024, Channel: dual, Dithering: Enable
        5 : Resolution: 1400x1050, Channel: dual, Dithering: Enable
        6 : Resolution: 1600x1200, Channel: dual, Dithering: Enable

        8 : Resolution: 800x480, Channel: single, Dithering: Enable
        9 : Resolution: 1024x768, Channel: dual, Dithering: Enable
        10: Resolution: 1024x768, Channel: single, Dithering: Disable
        11: Resolution: 1024x768, Channel: dual, Dithering: Disable
        12: Resolution: 1280x768, Channel: single, Dithering: Disable
        13: Resolution: 1280x1024, Channel: dual, Dithering: Disable
        14: Resolution: 1400x1050, Channel: dual, Dithering: Disable
        15: Resolution: 1600x1200, Channel: dual, Dithering: Disable
        16: Resolution: 1366x768, Channel: single, Dithering: Disable
        17: Resolution: 1024x600, Channel: single, Dithering: Enable
        18: Resolution: 1280x768, Channel: dual, Dithering: Enable
        19: Resolution: 1280x800, Channel: single, Dithering: Enable

    viafb_accel:
        0 : No 2D Hardware Acceleration
        1 : 2D Hardware Acceleration (default)

    viafb_SAMM_ON:
        0 : viafb_SAMM_ON disable (default)
        1 : viafb_SAMM_ON enable

    viafb_mode1: (secondary display device)
        640x480 (default)
        720x480
        800x600
        1024x768
        ... ...

    viafb_bpp1: (secondary display device)
        8, 16, 32 (default:32)

    viafb_refresh1: (secondary display device)
        60, 75, 85, 100, 120 (default:60)

    viafb_active_dev:
        This option is used to specify active devices.(CRT, DVI, CRT+LCD...)
        DVI stands for DVI or HDMI, E.g., If you want to enable HDMI,
        set viafb_active_dev=DVI. In SAMM case, the previous of
        viafb_active_dev is primary device, and the following is
        secondary device.

        For example:
        To enable one device, such as DVI only, we can use:
            modprobe viafb viafb_active_dev=DVI
        To enable two devices, such as CRT+DVI:
            modprobe viafb viafb_active_dev=CRT+DVI;

        For DuoView case, we can use:
            modprobe viafb viafb_active_dev=CRT+DVI
            OR
            modprobe viafb viafb_active_dev=DVI+CRT...

        For SAMM case:
        If CRT is primary and DVI is secondary, we should use:
            modprobe viafb viafb_active_dev=CRT+DVI viafb_SAMM_ON=1...
        If DVI is primary and CRT is secondary, we should use:
            modprobe viafb viafb_active_dev=DVI+CRT viafb_SAMM_ON=1...

    viafb_display_hardware_layout:
        This option is used to specify display hardware layout for CX700 chip.
        1 : LCD only
        2 : DVI only
        3 : LCD+DVI (default)
        4 : LCD1+LCD2 (internal + internal)
        16: LCD1+ExternalLCD2 (internal + external)

    viafb_second_size:
        This option is used to set second device memory size(MB) in SAMM case.
        The minimal size is 16.

    viafb_platform_epia_dvi:
        This option is used to enable DVI on EPIA - M
        0 : No DVI on EPIA - M (default)
        1 : DVI on EPIA - M

    viafb_bus_width:
        When using 24 - Bit Bus Width Digital Interface,
        this option should be set.
        12: 12-Bit LVDS or 12-Bit TMDS (default)
        24: 24-Bit LVDS or 24-Bit TMDS

    viafb_device_lcd_dualedge:
        When using Dual Edge Panel, this option should be set.
        0 : No Dual Edge Panel (default)
        1 : Dual Edge Panel

    viafb_lcd_port:
        This option is used to specify LCD output port,
        available values are "DVP0" "DVP1" "DFP_HIGHLOW" "DFP_HIGH" "DFP_LOW".
        for external LCD + external DVI on CX700(External LCD is on DVP0),
        we should use:
            modprobe viafb viafb_lcd_port=DVP0...

Notes:
    1. CRT may not display properly for DuoView CRT & DVI display at
       the "640x480" PAL mode with DVI overscan enabled.
    2. SAMM stands for single adapter multi monitors. It is different from
       multi-head since SAMM support multi monitor at driver layers, thus fbcon
       layer doesn't even know about it; SAMM's second screen doesn't have a
       device node file, thus a user mode application can't access it directly.
       When SAMM is enabled, viafb_mode and viafb_mode1, viafb_bpp and
       viafb_bpp1, viafb_refresh and viafb_refresh1 can be different.
    3. When console is depending on viafbinfo1, dynamically change resolution
       and bpp, need to call VIAFB specified ioctl interface VIAFB_SET_DEVICE
       instead of calling common ioctl function FBIOPUT_VSCREENINFO since
       viafb doesn't support multi-head well, or it will cause screen crush.


[Configure viafb with "fbset" tool]
-----------------------------------
    "fbset" is an inbox utility of Linux.
    1. Inquire current viafb information, type,
           # fbset -i

    2. Set various resolutions and viafb_refresh rates,
           # fbset <resolution-vertical_sync>

       example,
           # fbset "1024x768-75"
       or
           # fbset -g 1024 768 1024 768 32
       Check the file "/etc/fb.modes" to find display modes available.

    3. Set the color depth,
           # fbset -depth <value>

       example,
           # fbset -depth 16

[Bootup with viafb]:
--------------------
    Add the following line to your grub.conf:
    append = "video=viafb:viafb_mode=1024x768,viafb_bpp=32,viafb_refresh=85"

