
        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 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


[Configure viafb via /proc]
---------------------------
    The following files exist in /proc/viafb

    supported_output_devices

        This read-only file contains a full ',' separated list containing all
        output devices that could be available on your platform. It is likely
        that not all of those have a connector on your hardware but it should
        provide a good starting point to figure out which of those names match
        a real connector.
        Example:
        # cat /proc/viafb/supported_output_devices

    iga1/output_devices
    iga2/output_devices

        These two files are readable and writable. iga1 and iga2 are the two
        independent units that produce the screen image. Those images can be
        forwarded to one or more output devices. Reading those files is a way
        to query which output devices are currently used by an iga.
        Example:
        # cat /proc/viafb/iga1/output_devices
        If there are no output devices printed the output of this iga is lost.
        This can happen for example if only one (the other) iga is used.
        Writing to these files allows adjusting the output devices during
        runtime. One can add new devices, remove existing ones or switch
        between igas. Essentially you can write a ',' separated list of device
        names (or a single one) in the same format as the output to those
        files. You can add a '+' or '-' as a prefix allowing simple addition
        and removal of devices. So a prefix '+' adds the devices from your list
        to the already existing ones, '-' removes the listed devices from the
        existing ones and if no prefix is given it replaces all existing ones
        with the listed ones. If you remove devices they are expected to turn
        off. If you add devices that are already part of the other iga they are
        removed there and added to the new one.
        Examples:
        Add CRT as output device to iga1
        # echo +CRT > /proc/viafb/iga1/output_devices

        Remove (turn off) DVP1 and LVDS1 as output devices of iga2
        # echo -DVP1,LVDS1 > /proc/viafb/iga2/output_devices

        Replace all iga1 output devices by CRT
        # echo CRT > /proc/viafb/iga1/output_devices


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

