ChangeLog         |   63 +++
 NEWS              |   20 -
 configure.ac      |   25 -
 src/Makefile.am   |    6 
 src/via_accel.c   |   89 ++--
 src/via_bios.h    |  106 +++++
 src/via_crtc.c    |  612 +++++++++++++++++++++++++++++++
 src/via_cursor.c  |  532 ++++++++++++++++++++++-----
 src/via_dga.c     |    8 
 src/via_display.c |  128 ++++++
 src/via_driver.c  |  547 +++++++++++++++++----------
 src/via_driver.h  |   61 ++-
 src/via_id.c      |    1 
 src/via_lvds.c    |  121 ++++++
 src/via_memory.c  |    2 
 src/via_mode.c    | 1059 +++++++++++++-----------------------------------------
 src/via_mode.h    |   40 --
 src/via_panel.c   |  461 +++++++++++++++++++++++
 src/via_regs.h    |   21 +
 src/via_swov.c    |   18 
 src/via_timing.c  |  398 ++++++++++++++++++++
 src/via_timing.h  |   51 ++
 src/via_vbe.c     |    6 
 src/via_video.c   |   49 --
 src/via_vt162x.h  |   17 
 src/via_xvmc.c    |   18 
 26 files changed, 3200 insertions(+), 1259 deletions(-)

New commits:
commit dff72f55283e60a2fef23a3c71537cfa794592ab
Author: schlobinux <[EMAIL PROTECTED]>
Date:   Fri Oct 3 10:08:32 2008 +0000

    Allow FullHD with DDR400
    
    git-svn-id: http://svn.openchrome.org/svn/[EMAIL PROTECTED] 
e8d65cb0-85f4-0310-8831-c60e2a5ce829

diff --git a/src/via_mode.h b/src/via_mode.h
index d29013b..7475c51 100644
--- a/src/via_mode.h
+++ b/src/via_mode.h
@@ -32,7 +32,7 @@
  */
 #define VIA_BW_MIN       74000000 /* > [EMAIL PROTECTED]@32bpp */
 #define VIA_BW_DDR200   394000000
-#define VIA_BW_DDR400   461000000
+#define VIA_BW_DDR400   498000000 /* > [EMAIL PROTECTED]@32bpp */
 #define VIA_BW_DDR667   922000000
 
     

commit 87b1e287ef0fb567b4570267869eb9195e3d52bc
Author: schlobinux <[EMAIL PROTECTED]>
Date:   Mon Sep 29 12:59:45 2008 +0000

    disable ARGB cursor for K8M890
    
    git-svn-id: http://svn.openchrome.org/svn/[EMAIL PROTECTED] 
e8d65cb0-85f4-0310-8831-c60e2a5ce829

diff --git a/src/via_cursor.c b/src/via_cursor.c
index 5c45915..64debce 100644
--- a/src/via_cursor.c
+++ b/src/via_cursor.c
@@ -545,6 +545,7 @@ viaCursorRecInit(ScrnInfoPtr pScrn)
             case VIA_CLE266:
             case VIA_KM400:
             case VIA_K8M800:
+            case VIA_K8M890:
                 cursor->isARGBSupported = FALSE;
                 cursor->isARGBEnabled = FALSE;
                 cursor->maxWidth = 32;

commit 2ea001e44c78eb1f255d5603413f937978b20bed
Author: schlobinux <[EMAIL PROTECTED]>
Date:   Thu Sep 25 07:39:35 2008 +0000

    oops, forgot to svn add the new files :-(
    
    git-svn-id: http://svn.openchrome.org/svn/[EMAIL PROTECTED] 
e8d65cb0-85f4-0310-8831-c60e2a5ce829

diff --git a/src/via_crtc.c b/src/via_crtc.c
new file mode 100644
index 0000000..3cf6e21
--- /dev/null
+++ b/src/via_crtc.c
@@ -0,0 +1,612 @@
+/*
+ * Copyright 2005-2007 The Openchrome Project [openchrome.org]
+ * Copyright 2004-2005 The Unichrome Project  [unichrome.sf.net]
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "via.h"
+#include "via_driver.h"
+#include "via_vgahw.h"
+#include "via_id.h"
+
+#include "via_mode.h"
+
+static void
+ViaCRTCSetGraphicsRegisters(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    /* graphics registers */
+    hwp->writeGr(hwp, 0x00, 0x00);
+    hwp->writeGr(hwp, 0x01, 0x00);
+    hwp->writeGr(hwp, 0x02, 0x00);
+    hwp->writeGr(hwp, 0x03, 0x00);
+    hwp->writeGr(hwp, 0x04, 0x00);
+    hwp->writeGr(hwp, 0x05, 0x40);
+    hwp->writeGr(hwp, 0x06, 0x05);
+    hwp->writeGr(hwp, 0x07, 0x0F);
+    hwp->writeGr(hwp, 0x08, 0xFF);
+
+    ViaGrMask(hwp, 0x20, 0, 0xFF);
+    ViaGrMask(hwp, 0x21, 0, 0xFF);
+    ViaGrMask(hwp, 0x22, 0, 0xFF);
+}
+
+static void
+ViaCRTCSetAttributeRegisters(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD8 i;
+
+    /* attribute registers */
+    for (i = 0; i <= 0xF; i++) {
+        hwp->writeAttr(hwp, i, i);
+    }
+    hwp->writeAttr(hwp, 0x10, 0x41);
+    hwp->writeAttr(hwp, 0x11, 0xFF);
+    hwp->writeAttr(hwp, 0x12, 0x0F);
+    hwp->writeAttr(hwp, 0x13, 0x00);
+    hwp->writeAttr(hwp, 0x14, 0x00);
+}
+
+void
+ViaCRTCInit(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    hwp->writeSeq(hwp, 0x10, 0x01); /* unlock extended registers */
+    ViaCrtcMask(hwp, 0x47, 0x00, 0x01); /* unlock CRT registers */
+    ViaCRTCSetGraphicsRegisters(pScrn);
+    ViaCRTCSetAttributeRegisters(pScrn);
+}
+
+void
+ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    VIAPtr pVia = VIAPTR(pScrn);
+    CARD16 temp;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaFirstCRTCSetMode\n"));
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Setting up %s\n", mode->name));
+
+    ViaCrtcMask(hwp, 0x11, 0x00, 0x80); /* modify starting address */
+    ViaCrtcMask(hwp, 0x03, 0x80, 0x80); /* enable vertical retrace access */
+
+    /* Set Misc Register */
+    temp = 0x23;
+    if (mode->Flags & V_NHSYNC)
+        temp |= 0x40;
+    if (mode->Flags & V_NVSYNC)
+        temp |= 0x80;
+    temp |= 0x0C; /* Undefined/external clock */
+    hwp->writeMiscOut(hwp, temp);
+
+    /* Sequence registers */
+    hwp->writeSeq(hwp, 0x00, 0x00);
+
+#if 0
+    if (mode->Flags & V_CLKDIV2)
+        hwp->writeSeq(hwp, 0x01, 0x09);
+    else
+#endif
+        hwp->writeSeq(hwp, 0x01, 0x01);
+
+    hwp->writeSeq(hwp, 0x02, 0x0F);
+    hwp->writeSeq(hwp, 0x03, 0x00);
+    hwp->writeSeq(hwp, 0x04, 0x0E);
+
+    ViaSeqMask(hwp, 0x15, 0x02, 0x02);
+
+    /* bpp */
+    switch (pScrn->bitsPerPixel) {
+        case 8:
+            /* Only CLE266.AX use 6bits LUT. */
+            if (pVia->Chipset == VIA_CLE266 && pVia->ChipRev < 15)
+                ViaSeqMask(hwp, 0x15, 0x22, 0xFE);
+            else
+                ViaSeqMask(hwp, 0x15, 0xA2, 0xFE);
+
+            break;
+        case 16:
+            ViaSeqMask(hwp, 0x15, 0xB6, 0xFE);
+            break;
+        case 24:
+        case 32:
+            ViaSeqMask(hwp, 0x15, 0xAE, 0xFE);
+            break;
+        default:
+            xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unhandled bitdepth: %d\n",
+                       pScrn->bitsPerPixel);
+            break;
+    }
+
+    /* FIXME: check if this is really necessary here */
+    switch (pVia->ChipId) {
+        case VIA_K8M890:
+        case VIA_CX700:
+        case VIA_P4M900:
+            break;
+        default:
+            ViaSeqMask(hwp, 0x16, 0x08, 0xBF);
+            ViaSeqMask(hwp, 0x17, 0x1F, 0xFF);
+            ViaSeqMask(hwp, 0x18, 0x4E, 0xFF);
+            ViaSeqMask(hwp, 0x1A, 0x08, 0xFD);
+            break;
+    }
+
+    /* Crtc registers */
+    /* horizontal total : 4100 */
+    temp = (mode->CrtcHTotal >> 3) - 5;
+    hwp->writeCrtc(hwp, 0x00, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x36, temp >> 5, 0x08);
+
+    /* horizontal address : 2048 */
+    temp = (mode->CrtcHDisplay >> 3) - 1;
+    hwp->writeCrtc(hwp, 0x01, temp & 0xFF);
+
+    /* horizontal blanking start : 2048 */
+    /* temp = (mode->CrtcHDisplay >> 3) - 1; */
+    temp = (mode->CrtcHBlankStart >> 3) - 1;
+    hwp->writeCrtc(hwp, 0x02, temp & 0xFF);
+    /* If HblankStart has more bits anywhere, add them here */
+
+    /* horizontal blanking end : start + 1025 */
+    /* temp = (mode->CrtcHTotal >> 3) - 1; */
+    temp = (mode->CrtcHBlankEnd >> 3) - 1;
+    ViaCrtcMask(hwp, 0x03, temp, 0x1F);
+    ViaCrtcMask(hwp, 0x05, temp << 2, 0x80);
+    ViaCrtcMask(hwp, 0x33, temp >> 1, 0x20);
+
+    /* CrtcHSkew ??? */
+
+    /* horizontal sync start : 4095 */
+    temp = mode->CrtcHSyncStart >> 3;
+    hwp->writeCrtc(hwp, 0x04, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x33, temp >> 4, 0x10);
+
+    /* horizontal sync end : start + 256 */
+    temp = mode->CrtcHSyncEnd >> 3;
+    ViaCrtcMask(hwp, 0x05, temp, 0x1F);
+
+    /* vertical total : 2049 */
+    temp = mode->CrtcVTotal - 2;
+    hwp->writeCrtc(hwp, 0x06, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x07, temp >> 8, 0x01);
+    ViaCrtcMask(hwp, 0x07, temp >> 4, 0x20);
+    ViaCrtcMask(hwp, 0x35, temp >> 10, 0x01);
+
+    /* vertical address : 2048 */
+    temp = mode->CrtcVDisplay - 1;
+    hwp->writeCrtc(hwp, 0x12, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x07, temp >> 7, 0x02);
+    ViaCrtcMask(hwp, 0x07, temp >> 3, 0x40);
+    ViaCrtcMask(hwp, 0x35, temp >> 8, 0x04);
+
+    /* Primary starting address -> 0x00, adjustframe does the rest */
+    hwp->writeCrtc(hwp, 0x0C, 0x00);
+    hwp->writeCrtc(hwp, 0x0D, 0x00);
+    hwp->writeCrtc(hwp, 0x34, 0x00);
+    ViaCrtcMask(hwp, 0x48, 0x00, 0x03); /* is this even possible on CLE266A ? 
*/
+
+    /* vertical sync start : 2047 */
+    temp = mode->CrtcVSyncStart;
+    hwp->writeCrtc(hwp, 0x10, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x07, temp >> 6, 0x04);
+    ViaCrtcMask(hwp, 0x07, temp >> 2, 0x80);
+    ViaCrtcMask(hwp, 0x35, temp >> 9, 0x02);
+
+    /* vertical sync end : start + 16 -- other bits someplace? */
+    ViaCrtcMask(hwp, 0x11, mode->CrtcVSyncEnd, 0x0F);
+
+    /* line compare: We are not doing splitscreen so 0x3FFF */
+    hwp->writeCrtc(hwp, 0x18, 0xFF);
+    ViaCrtcMask(hwp, 0x07, 0x10, 0x10);
+    ViaCrtcMask(hwp, 0x09, 0x40, 0x40);
+    ViaCrtcMask(hwp, 0x33, 0x07, 0x06);
+    ViaCrtcMask(hwp, 0x35, 0x10, 0x10);
+
+    /* zero Maximum scan line */
+    ViaCrtcMask(hwp, 0x09, 0x00, 0x1F);
+    hwp->writeCrtc(hwp, 0x14, 0x00);
+
+    /* vertical blanking start : 2048 */
+    /* temp = mode->CrtcVDisplay - 1; */
+    temp = mode->CrtcVBlankStart - 1;
+    hwp->writeCrtc(hwp, 0x15, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x07, temp >> 5, 0x08);
+    ViaCrtcMask(hwp, 0x09, temp >> 4, 0x20);
+    ViaCrtcMask(hwp, 0x35, temp >> 7, 0x08);
+
+    /* vertical blanking end : start + 257 */
+    /* temp = mode->CrtcVTotal - 1; */
+    temp = mode->CrtcVBlankEnd - 1;
+    hwp->writeCrtc(hwp, 0x16, temp);
+
+    /* FIXME: check if this is really necessary here */
+    switch (pVia->ChipId) {
+        case VIA_K8M890:
+        case VIA_CX700:
+        case VIA_P4M900:
+            break;
+        default:
+            /* some leftovers */
+            hwp->writeCrtc(hwp, 0x08, 0x00);
+            ViaCrtcMask(hwp, 0x32, 0, 0xFF);  /* ? */
+            ViaCrtcMask(hwp, 0x33, 0, 0xC8);
+            break;
+    }
+
+    /* offset */
+    temp = (pScrn->displayWidth * (pScrn->bitsPerPixel >> 3)) >> 3;
+    /* Make sure that this is 32-byte aligned. */
+    if (temp & 0x03) {
+        temp += 0x03;
+        temp &= ~0x03;
+    }
+    hwp->writeCrtc(hwp, 0x13, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x35, temp >> 3, 0xE0);
+
+    /* fetch count */
+    temp = (mode->CrtcHDisplay * (pScrn->bitsPerPixel >> 3)) >> 3;
+    /* Make sure that this is 32-byte aligned. */
+    if (temp & 0x03) {
+        temp += 0x03;
+        temp &= ~0x03;
+    }
+    hwp->writeSeq(hwp, 0x1C, (temp >> 1) & 0xFF);
+    ViaSeqMask(hwp, 0x1D, temp >> 9, 0x03);
+
+    /* FIXME: check if this is really necessary here */
+    switch (pVia->ChipId) {
+        case VIA_K8M890:
+        case VIA_CX700:
+        case VIA_P4M900:
+            break;
+        default:
+            /* some leftovers */
+            ViaCrtcMask(hwp, 0x32, 0, 0xFF);
+            ViaCrtcMask(hwp, 0x33, 0, 0xC8);
+            break;
+    }
+}
+
+void
+ViaFirstCRTCSetStartingAddress(ScrnInfoPtr pScrn, int x, int y)
+{
+    VIAPtr pVia = VIAPTR(pScrn);
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD32 Base;
+    CARD32 tmp;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                     "ViaFirstCRTCSetStartingAddress\n"));
+
+    Base = (y * pScrn->displayWidth + x) * (pScrn->bitsPerPixel / 8);
+    Base = Base >> 1;
+    hwp->writeCrtc(hwp, 0x0C, (Base & 0xFF00) >> 8);
+    hwp->writeCrtc(hwp, 0x0D, Base & 0xFF);
+    hwp->writeCrtc(hwp, 0x34, (Base & 0xFF0000) >> 16);
+
+    if (!(pVia->Chipset == VIA_CLE266 && CLE266_REV_IS_AX(pVia->ChipRev)))
+        ViaCrtcMask(hwp, 0x48, Base >> 24, 0x0F);
+}
+
+void
+ViaSecondCRTCSetStartingAddress(ScrnInfoPtr pScrn, int x, int y)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD32 Base;
+    CARD32 tmp;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                     "ViaSecondCRTCSetStartingAddress\n"));
+
+    Base = (y * pScrn->displayWidth + x) * (pScrn->bitsPerPixel / 8);
+    Base = (Base + pScrn->fbOffset) >> 3;
+
+    tmp = hwp->readCrtc(hwp, 0x62) & 0x01;
+    tmp |= (Base & 0x7F) << 1;
+    hwp->writeCrtc(hwp, 0x62, tmp);
+
+    hwp->writeCrtc(hwp, 0x63, (Base & 0x7F80) >> 7);
+    hwp->writeCrtc(hwp, 0x64, (Base & 0x7F8000) >> 15);
+    hwp->writeCrtc(hwp, 0xA3, (Base & 0x03800000) >> 23);
+}
+
+void
+ViaSecondCRTCHorizontalQWCount(ScrnInfoPtr pScrn, int width)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD16 temp;
+
+    /* fetch count */
+    temp = (width * (pScrn->bitsPerPixel >> 3)) >> 3;
+    /* Make sure that this is 32-byte aligned. */
+    if (temp & 0x03) {
+        temp += 0x03;
+        temp &= ~0x03;
+    }
+    hwp->writeCrtc(hwp, 0x65, (temp >> 1) & 0xFF);
+    ViaCrtcMask(hwp, 0x67, temp >> 7, 0x0C);
+}
+
+void
+ViaSecondCRTCHorizontalOffset(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD16 temp;
+
+    /* offset */
+    temp = (pScrn->displayWidth * (pScrn->bitsPerPixel >> 3)) >> 3;
+    /* Make sure that this is 32-byte aligned. */
+    if (temp & 0x03) {
+        temp += 0x03;
+        temp &= ~0x03;
+    }
+    hwp->writeCrtc(hwp, 0x66, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x67, temp >> 8, 0x03);
+}
+
+void
+ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
+{
+    VIAPtr pVia = VIAPTR(pScrn);
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD16 temp;
+
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mode: %p\n", mode);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mode->name: %p\n", mode->name);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mode->name: %s\n", mode->name);
+
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaSecondCRTCSetMode\n"));
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Setting up %s\n", mode->name));
+    /* bpp */
+    switch (pScrn->bitsPerPixel) {
+        case 8:
+            ViaCrtcMask(hwp, 0x67, 0x00, 0xC0);
+            break;
+        case 16:
+            ViaCrtcMask(hwp, 0x67, 0x40, 0xC0);
+            break;
+        case 24:
+        case 32:
+            ViaCrtcMask(hwp, 0x67, 0xC0, 0xC0);
+            break;
+        default:
+            xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unhandled bitdepth: %d\n",
+                       pScrn->bitsPerPixel);
+            break;
+    }
+
+    /* Crtc registers */
+    /* horizontal total : 4096 */
+    temp = mode->CrtcHTotal - 1;
+    hwp->writeCrtc(hwp, 0x50, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x55, temp >> 8, 0x0F);
+
+    /* horizontal address : 2048 */
+    temp = mode->CrtcHDisplay - 1;
+    hwp->writeCrtc(hwp, 0x51, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x55, temp >> 4, 0x70);
+
+    /* horizontal blanking start : 2048 */
+    /* temp = mode->CrtcHDisplay - 1; */
+    temp = mode->CrtcHBlankStart - 1;
+    hwp->writeCrtc(hwp, 0x52, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x54, temp >> 8, 0x07);
+
+    /* horizontal blanking end : 4096 */
+    /* temp = mode->CrtcHTotal - 1; */
+    temp = mode->CrtcHBlankEnd - 1;
+    hwp->writeCrtc(hwp, 0x53, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x54, temp >> 5, 0x38);
+    ViaCrtcMask(hwp, 0x5D, temp >> 5, 0x40);
+
+    /* horizontal sync start : 2047 */
+    temp = mode->CrtcHSyncStart;
+    hwp->writeCrtc(hwp, 0x56, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x54, temp >> 2, 0xC0);
+    ViaCrtcMask(hwp, 0x5C, temp >> 3, 0x80);
+
+    if (pVia->ChipId != VIA_CLE266 && pVia->ChipId != VIA_KM400)
+        ViaCrtcMask(hwp, 0x5D, temp >> 4, 0x80);
+
+    /* horizontal sync end : sync start + 512 */
+    temp = mode->CrtcHSyncEnd;
+    hwp->writeCrtc(hwp, 0x57, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x5C, temp >> 2, 0x40);
+
+    /* vertical total : 2048 */
+    temp = mode->CrtcVTotal - 1;
+    hwp->writeCrtc(hwp, 0x58, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x5D, temp >> 8, 0x07);
+
+    /* vertical address : 2048 */
+    temp = mode->CrtcVDisplay - 1;
+    hwp->writeCrtc(hwp, 0x59, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x5D, temp >> 5, 0x38);
+
+    /* vertical blanking start : 2048 */
+    /* temp = mode->CrtcVDisplay - 1; */
+    temp = mode->CrtcVBlankStart - 1;
+    hwp->writeCrtc(hwp, 0x5A, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x5C, temp >> 8, 0x07);
+
+    /* vertical blanking end : 2048 */
+    /* temp = mode->CrtcVTotal - 1; */
+    temp = mode->CrtcVBlankEnd - 1;
+    hwp->writeCrtc(hwp, 0x5B, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x5C, temp >> 5, 0x38);
+
+    /* vertical sync start : 2047 */
+    temp = mode->CrtcVSyncStart;
+    hwp->writeCrtc(hwp, 0x5E, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x5F, temp >> 3, 0xE0);
+
+    /* vertical sync end : start + 32 */
+    temp = mode->CrtcVSyncEnd;
+    ViaCrtcMask(hwp, 0x5F, temp, 0x1F);
+
+    ViaSecondCRTCHorizontalOffset(pScrn);
+    ViaSecondCRTCHorizontalQWCount(pScrn, mode->CrtcHDisplay);
+
+}
+
+/*
+ * Checks for limitations imposed by the available VGA timing registers.
+ */
+ModeStatus
+ViaFirstCRTCModeValid(ScrnInfoPtr pScrn, DisplayModePtr mode)
+{
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaFirstCRTCModeValid\n"));
+
+    if (mode->CrtcHTotal > 4100)
+        return MODE_BAD_HVALUE;
+
+    if (mode->CrtcHDisplay > 2048)
+        return MODE_BAD_HVALUE;
+
+    if (mode->CrtcHBlankStart > 2048)
+        return MODE_BAD_HVALUE;
+
+    if ((mode->CrtcHBlankEnd - mode->CrtcHBlankStart) > 1025)
+        return MODE_HBLANK_WIDE;
+
+    if (mode->CrtcHSyncStart > 4095)
+        return MODE_BAD_HVALUE;
+
+    if ((mode->CrtcHSyncEnd - mode->CrtcHSyncStart) > 256)
+        return MODE_HSYNC_WIDE;
+
+    if (mode->CrtcVTotal > 2049)
+        return MODE_BAD_VVALUE;
+
+    if (mode->CrtcVDisplay > 2048)
+        return MODE_BAD_VVALUE;
+
+    if (mode->CrtcVSyncStart > 2047)
+        return MODE_BAD_VVALUE;
+
+    if ((mode->CrtcVSyncEnd - mode->CrtcVSyncStart) > 16)
+        return MODE_VSYNC_WIDE;
+
+    if (mode->CrtcVBlankStart > 2048)
+        return MODE_BAD_VVALUE;
+
+    if ((mode->CrtcVBlankEnd - mode->CrtcVBlankStart) > 257)
+        return MODE_VBLANK_WIDE;
+
+    return MODE_OK;
+}
+
+ModeStatus
+ViaSecondCRTCModeValid(ScrnInfoPtr pScrn, DisplayModePtr mode)
+{
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaSecondCRTCModeValid\n"));
+
+    if (mode->CrtcHTotal > 4096)
+        return MODE_BAD_HVALUE;
+
+    if (mode->CrtcHDisplay > 2048)
+        return MODE_BAD_HVALUE;
+
+    if (mode->CrtcHBlankStart > 2048)
+        return MODE_BAD_HVALUE;
+
+    if (mode->CrtcHBlankEnd > 4096)
+        return MODE_HBLANK_WIDE;
+
+    if (mode->CrtcHSyncStart > 2047)
+        return MODE_BAD_HVALUE;
+
+    if ((mode->CrtcHSyncEnd - mode->CrtcHSyncStart) > 512)
+        return MODE_HSYNC_WIDE;
+
+    if (mode->CrtcVTotal > 2048)
+        return MODE_BAD_VVALUE;
+
+    if (mode->CrtcVDisplay > 2048)
+        return MODE_BAD_VVALUE;
+
+    if (mode->CrtcVBlankStart > 2048)
+        return MODE_BAD_VVALUE;
+
+    if (mode->CrtcVBlankEnd > 2048)
+        return MODE_VBLANK_WIDE;
+
+    if (mode->CrtcVSyncStart > 2047)
+        return MODE_BAD_VVALUE;
+
+    if ((mode->CrtcVSyncEnd - mode->CrtcVSyncStart) > 32)
+        return MODE_VSYNC_WIDE;
+
+    return MODE_OK;
+}
+
+/*
+ * Not tested yet
+ */
+void
+ViaShadowCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
+{
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaShadowCRTCSetMode\n"));
+
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD16 temp;
+
+    temp = (mode->CrtcHTotal >> 3) - 5;
+    hwp->writeCrtc(hwp, 0x6D, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x71, temp >> 5, 0x08);
+
+    temp = (mode->CrtcHBlankEnd >> 3) - 1;
+    hwp->writeCrtc(hwp, 0x6E, temp & 0xFF);
+
+    temp = mode->CrtcVTotal - 2;
+    hwp->writeCrtc(hwp, 0x6F, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x71, temp >> 8, 0x07);
+
+    temp = mode->CrtcVDisplay - 1;
+    hwp->writeCrtc(hwp, 0x70, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x71, temp >> 4, 0x70);
+
+    temp = mode->CrtcVBlankStart - 1;
+    hwp->writeCrtc(hwp, 0x72, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x74, temp >> 4, 0x70);
+
+    temp = mode->CrtcVTotal - 1;
+    hwp->writeCrtc(hwp, 0x73, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x74, temp >> 8, 0x07);
+
+    ViaCrtcMask(hwp, 0x76, mode->CrtcVSyncEnd, 0x0F);
+
+    temp = mode->CrtcVSyncStart;
+    hwp->writeCrtc(hwp, 0x75, temp & 0xFF);
+    ViaCrtcMask(hwp, 0x76, temp >> 4, 0x70);
+}
diff --git a/src/via_display.c b/src/via_display.c
new file mode 100644
index 0000000..ca31a01
--- /dev/null
+++ b/src/via_display.c
@@ -0,0 +1,128 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "via.h"
+#include "via_driver.h"
+#include "via_vgahw.h"
+#include "via_id.h"
+
+/*
+ * Enables the second display channel.
+ */
+void
+ViaSecondDisplayChannelEnable(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                     "ViaSecondDisplayChannelEnable\n"));
+    ViaCrtcMask(hwp, 0x6A, 0x00, 1 << 6);
+    ViaCrtcMask(hwp, 0x6A, 1 << 7, 1 << 7);
+    ViaCrtcMask(hwp, 0x6A, 1 << 6, 1 << 6);
+}
+
+/*
+ * Disables the second display channel.
+ */
+void
+ViaSecondDisplayChannelDisable(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                     "ViaSecondDisplayChannelDisable\n"));
+
+    ViaCrtcMask(hwp, 0x6A, 0x00, 1 << 6);
+    ViaCrtcMask(hwp, 0x6A, 0x00, 1 << 7);
+    ViaCrtcMask(hwp, 0x6A, 1 << 6, 1 << 6);
+}
+
+/*
+ * Initial settings for displays.
+ */
+void
+ViaDisplayInit(ScrnInfoPtr pScrn)
+{
+    VIAPtr pVia = VIAPTR(pScrn);
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaDisplayPreInit\n"));
+
+    ViaSecondDisplayChannelDisable(pScrn);
+    ViaCrtcMask(hwp, 0x6A, 0x00, 0x3D);
+
+    hwp->writeCrtc(hwp, 0x6B, 0x00);
+    hwp->writeCrtc(hwp, 0x6C, 0x00);
+    hwp->writeCrtc(hwp, 0x79, 0x00);
+
+    /* (IGA1 Timing Plus 2, added in VT3259 A3 or later) */
+    if (pVia->Chipset != VIA_CLE266 && pVia->Chipset != VIA_KM400)
+        ViaCrtcMask(hwp, 0x47, 0x00, 0xC8);
+}
+
+/*
+ * Enables simultaneous mode.
+ */
+void
+ViaDisplayEnableSimultaneous(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                     "ViaDisplayEnableSimultaneous\n"));
+    ViaCrtcMask(hwp, 0x6B, 0x08, 0x08);
+}
+
+/*
+ * Disables simultaneous mode.
+ */
+void
+ViaDisplayDisableSimultaneous(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                     "ViaDisplayDisableSimultaneous\n"));
+    ViaCrtcMask(hwp, 0x6B, 0x00, 0x08);
+}
+
+/*
+ * Enables CRT using DPMS registers.
+ */
+void
+ViaDisplayEnableCRT(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaDisplayEnableCRT\n"));
+    ViaCrtcMask(hwp, 0x36, 0x00, 0x30);
+}
+
+/*
+ * Disables CRT using DPMS registers.
+ */
+void
+ViaDisplayDisableCRT(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaDisplayDisableCRT\n"));
+    ViaCrtcMask(hwp, 0x36, 0x30, 0x30);
+}
+
+/*
+ * Sets the primary or secondary display stream on CRT.
+ */
+void
+ViaDisplaySetStreamOnCRT(ScrnInfoPtr pScrn, Bool primary)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaDisplaySetStreamOnCRT\n"));
+
+    if (primary)
+        ViaSeqMask(hwp, 0x16, 0x00, 0x40);
+    else
+        ViaSeqMask(hwp, 0x16, 0x40, 0x40);
+}
diff --git a/src/via_lvds.c b/src/via_lvds.c
new file mode 100644
index 0000000..16ed6fb
--- /dev/null
+++ b/src/via_lvds.c
@@ -0,0 +1,121 @@
+/* 
+ * Copyright 2007 The Openchrome Project [openchrome.org]
+ * Copyright 1998-2007 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2007 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Integrated LVDS power management functions.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "via.h"
+#include "via_driver.h"
+#include "via_vgahw.h"
+#include "via_id.h"
+
+
+static void
+ViaLVDSPowerFirstSequence(ScrnInfoPtr pScrn, Bool on)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    if (on) {
+        /* Use hardware control power sequence. */
+        hwp->writeCrtc(hwp, 0x91, hwp->readCrtc(hwp, 0x91) & 0xFE);
+        /* Turn on back light. */
+        hwp->writeCrtc(hwp, 0x91, hwp->readCrtc(hwp, 0x91) & 0x3F);
+        /* Turn on hardware power sequence. */
+        hwp->writeCrtc(hwp, 0x6A, hwp->readCrtc(hwp, 0x6A) | 0x08);
+    } else {
+        /* Turn off power sequence. */
+        hwp->writeCrtc(hwp, 0x6A, hwp->readCrtc(hwp, 0x6A) & 0xF7);
+        usleep(1);
+        /* Turn off back light. */
+        hwp->writeCrtc(hwp, 0x91, 0xC0);
+    }
+}
+
+static void
+ViaLVDSPowerSecondSequence(ScrnInfoPtr pScrn, Bool on)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    if (on) {
+        /* Use hardware control power sequence. */
+        hwp->writeCrtc(hwp, 0xD3, hwp->readCrtc(hwp, 0xD3) & 0xFE);
+        /* Turn on back light. */
+        hwp->writeCrtc(hwp, 0xD3, hwp->readCrtc(hwp, 0xD3) & 0x3F);
+        /* Turn on hardware power sequence. */
+        hwp->writeCrtc(hwp, 0xD4, hwp->readCrtc(hwp, 0xD4) | 0x02);
+    } else {
+        /* Turn off power sequence. */
+        hwp->writeCrtc(hwp, 0xD4, hwp->readCrtc(hwp, 0xD4) & 0xFD);
+        usleep(1);
+        /* Turn off back light. */
+        hwp->writeCrtc(hwp, 0xD3, 0xC0);
+    }
+}
+
+static void
+ViaLVDSDFPPower(ScrnInfoPtr pScrn, Bool on)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    if (on) {
+        /* Turn DFP High/Low pad on. */
+        hwp->writeSeq(hwp, 0x2A, hwp->readSeq(hwp, 0x2A) | 0x0F);
+    } else {
+        /* Turn DFP High/Low pad off. */
+        hwp->writeSeq(hwp, 0x2A, hwp->readSeq(hwp, 0x2A) & 0x0F);
+    }
+}
+
+static void
+ViaLVDSPowerChannel(ScrnInfoPtr pScrn, Bool on)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD8 lvdsMask;
+
+    if (on) {
+        /* LVDS0: 0x7F, LVDS1: 0xBF */
+        lvdsMask = 0x7F & 0xBF;
+        hwp->writeCrtc(hwp, 0xD2, hwp->readCrtc(hwp, 0xD2) & lvdsMask);
+    } else {
+        /* LVDS0: 0x80, LVDS1: 0x40 */
+        lvdsMask = 0x80 | 0x40;
+        hwp->writeCrtc(hwp, 0xD2, hwp->readCrtc(hwp, 0xD2) | lvdsMask);
+    }
+}
+
+void
+ViaLVDSPower(ScrnInfoPtr pScrn, Bool on)
+{
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaLVDSPower\n"));
+    ViaLVDSPowerFirstSequence(pScrn, on);
+    ViaLVDSPowerSecondSequence(pScrn, on);
+    ViaLVDSDFPPower(pScrn, on);
+    ViaLVDSPowerChannel(pScrn, on);
+}
diff --git a/src/via_panel.c b/src/via_panel.c
new file mode 100644
index 0000000..368bfd7
--- /dev/null
+++ b/src/via_panel.c
@@ -0,0 +1,461 @@
+/*
+ * Copyright 2007 The Openchrome Project [openchrome.org]
+ * Copyright (c) 1997-2003 by The XFree86 Project, Inc.
+ * Copyright 1998-2007 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2007 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Core panel functions.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "via.h"


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to