[Openchrome-devel] xf86-video-openchrome: 2 commits - configure.ac src/Makefile.am src/via_analog.c src/via_outputs.c src/via_ums.h

Kevin Brace kevinbrace at kemper.freedesktop.org
Thu Jul 21 04:10:00 UTC 2016


 configure.ac      |    2 
 src/Makefile.am   |    1 
 src/via_analog.c  |  411 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/via_outputs.c |  335 --------------------------------------------
 src/via_ums.h     |    3 
 5 files changed, 416 insertions(+), 336 deletions(-)

New commits:
commit 50ed9076ed367f90f2b65bc979bf19183244172b
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Wed Jul 20 23:03:18 2016 -0500

    Version bumped to 0.5.109
    
    This version moves analog VGA initialization and management code
    to via_analog.c.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/configure.ac b/configure.ac
index 09ce536..198e5c9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ(2.57)
 AC_INIT([xf86-video-openchrome],
-        [0.5.108],
+        [0.5.109],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome],
         [xf86-video-openchrome])
 
commit da9932abab763065da891e9f0a3d607a90ef41f1
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Wed Jul 20 22:58:31 2016 -0500

    Added a new file called via_analog.c
    
    This module handles analog VGA initialization and management. The
    functions came from via_outputs.c.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/src/Makefile.am b/src/Makefile.am
index b8e993b..bdfa196 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -40,6 +40,7 @@ openchrome_drv_la_SOURCES = \
          via_3d.c \
          via_3d.h \
          via_3d_reg.h \
+         via_analog.c \
          via_rop.h \
          via_exa.c \
          via_exa_h2.c \
diff --git a/src/via_analog.c b/src/via_analog.c
new file mode 100644
index 0000000..6bde721
--- /dev/null
+++ b/src/via_analog.c
@@ -0,0 +1,411 @@
+/*
+ * Copyright 2005-2016 The OpenChrome Project
+ *                     [http://www.freedesktop.org/wiki/Openchrome]
+ * 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.
+ */
+
+/*
+ * via_analog.c
+ *
+ * Handles the initialization and management of analog VGA related
+ * resources.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "via_driver.h"
+#include <unistd.h>
+
+
+static void
+ViaPrintMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
+{
+    xf86PrintModeline(pScrn->scrnIndex, mode);
+
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcHDisplay: 0x%x\n",
+               mode->CrtcHDisplay);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcHBlankStart: 0x%x\n",
+               mode->CrtcHBlankStart);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcHSyncStart: 0x%x\n",
+               mode->CrtcHSyncStart);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcHSyncEnd: 0x%x\n",
+               mode->CrtcHSyncEnd);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcHBlankEnd: 0x%x\n",
+               mode->CrtcHBlankEnd);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcHTotal: 0x%x\n",
+               mode->CrtcHTotal);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcHSkew: 0x%x\n",
+               mode->CrtcHSkew);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcVDisplay: 0x%x\n",
+               mode->CrtcVDisplay);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcVBlankStart: 0x%x\n",
+               mode->CrtcVBlankStart);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcVSyncStart: 0x%x\n",
+               mode->CrtcVSyncStart);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcVSyncEnd: 0x%x\n",
+               mode->CrtcVSyncEnd);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcVBlankEnd: 0x%x\n",
+               mode->CrtcVBlankEnd);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CrtcVTotal: 0x%x\n",
+               mode->CrtcVTotal);
+
+}
+
+/*
+ * Enables or disables analog VGA output by controlling DAC
+ * (Digital to Analog Converter) output state.
+ */
+static void
+viaAnalogOutput(ScrnInfoPtr pScrn, Bool outputState)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Entered viaAnalogOutput.\n"));
+
+    /* This register controls analog VGA DAC output state. */
+    /* 3X5.47[2] - DACOFF Backdoor Register
+     *             0: DAC on
+     *             1: DAC off */
+    ViaCrtcMask(hwp, 0x47, outputState ? 0x00 : 0x04, 0x04);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                "Analog VGA Output: %s\n",
+                outputState ? "On" : "Off");
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting viaAnalogOutput.\n"));
+}
+
+/*
+ * Specifies IGA1 or IGA2 for analog VGA DAC source.
+ */
+static void
+viaAnalogSource(ScrnInfoPtr pScrn, CARD8 displaySource)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    CARD8 value = displaySource;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Entered viaAnalogSource.\n"));
+
+    ViaSeqMask(hwp, 0x16, value << 6, 0x40);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                "Analog VGA Output Source: IGA%d\n",
+                (value & 0x01) + 1);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting viaAnalogSource.\n"));
+}
+
+/*
+ * Intializes analog VGA related registers.
+ */
+static void
+viaAnalogInit(ScrnInfoPtr pScrn)
+{
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    VIAPtr pVia = VIAPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Entered viaAnalogInit.\n"));
+
+    /* 3X5.37[7]   - DAC Power Save Control 1
+     *               0: Depend on Rx3X5.37[5:4] setting
+     *               1: DAC always goes into power save mode
+     * 3X5.37[6]   - DAC Power Down Control
+     *               0: Depend on Rx3X5.47[2] setting
+     *               1: DAC never goes to power down mode
+     * 3X5.37[5:4] - DAC Power Save Control 2
+     *               00: DAC never goes to power save mode
+     *               01: DAC goes to power save mode by line
+     *               10: DAC goes to power save mode by frame
+     *               11: DAC goes to power save mode by line and frame
+     * 3X5.37[3]   - DAC PEDESTAL Control
+     * 3X5.37[2:0] - DAC Factor
+     *               (Default: 100) */
+    ViaCrtcMask(hwp, 0x37, 0x04, 0xFF);
+
+    switch (pVia->Chipset) {
+    case VIA_CX700:
+    case VIA_VX800:
+    case VIA_VX855:
+    case VIA_VX900:
+        /* 3C5.5E[0] - CRT DACOFF Setting
+         *             1: CRT DACOFF controlled by 3C5.01[5] */
+        ViaSeqMask(hwp, 0x5E, 0x01, 0x01);
+        break;
+    default:
+        break;
+    }
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting viaAnalogInit.\n"));
+}
+
+static void
+via_analog_create_resources(xf86OutputPtr output)
+{
+}
+
+#ifdef RANDR_12_INTERFACE
+static Bool
+via_analog_set_property(xf86OutputPtr output, Atom property,
+                        RRPropertyValuePtr value)
+{
+    return TRUE;
+}
+
+static Bool
+via_analog_get_property(xf86OutputPtr output, Atom property)
+{
+    return FALSE;
+}
+#endif
+
+static void
+via_analog_dpms(xf86OutputPtr output, int mode)
+{
+    ScrnInfoPtr pScrn = output->scrn;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Entered via_analog_dpms.\n"));
+
+    switch (mode) {
+    case DPMSModeOn:
+        viaAnalogOutput(pScrn, TRUE);
+        break;
+    case DPMSModeStandby:
+    case DPMSModeSuspend:
+    case DPMSModeOff:
+        viaAnalogOutput(pScrn, FALSE);
+        break;
+    default:
+        break;
+    }
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting via_analog_dpms.\n"));
+}
+
+static void
+via_analog_save(xf86OutputPtr output)
+{
+}
+
+static void
+via_analog_restore(xf86OutputPtr output)
+{
+}
+
+static int
+via_analog_mode_valid(xf86OutputPtr output, DisplayModePtr pMode)
+{
+    ScrnInfoPtr pScrn = output->scrn;
+
+    if (!ViaModeDotClockTranslate(pScrn, pMode))
+        return MODE_NOCLOCK;
+    return MODE_OK;
+}
+
+static Bool
+via_analog_mode_fixup(xf86OutputPtr output, DisplayModePtr mode,
+                      DisplayModePtr adjusted_mode)
+{
+    return TRUE;
+}
+
+static void
+via_analog_prepare(xf86OutputPtr output)
+{
+    via_analog_dpms(output, DPMSModeOff);
+}
+
+static void
+via_analog_commit(xf86OutputPtr output)
+{
+    via_analog_dpms(output, DPMSModeOn);
+}
+
+static void
+via_analog_mode_set(xf86OutputPtr output, DisplayModePtr mode,
+                    DisplayModePtr adjusted_mode)
+{
+    ScrnInfoPtr pScrn = output->scrn;
+    vgaHWPtr hwp = VGAHWPTR(pScrn);
+    drmmode_crtc_private_ptr iga = output->crtc->driver_private;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Entered via_analog_mode_set.\n"));
+
+    viaAnalogInit(pScrn);
+
+    if (output->crtc) {
+        viaAnalogSource(pScrn, iga->index ? 0x01 : 0x00);
+    }
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting via_analog_mode_set.\n"));
+}
+
+static xf86OutputStatus
+via_analog_detect(xf86OutputPtr output)
+{
+    xf86OutputStatus status = XF86OutputStatusDisconnected;
+    ScrnInfoPtr pScrn = output->scrn;
+    VIAPtr pVia = VIAPTR(pScrn);
+    xf86MonPtr mon;
+
+    /* Probe I2C Bus 1 to see if a VGA monitor is connected. */
+    xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                "Probing for a VGA monitor on I2C Bus 1.\n");
+    mon = xf86OutputGetEDID(output, pVia->pI2CBus1);
+    if (mon && (!mon->features.input_type)) {
+        xf86OutputSetEDID(output, mon);
+        status = XF86OutputStatusConnected;
+        xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                    "Detected a VGA monitor on I2C Bus 1.\n");
+    } else {
+        xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                    "Did not detect a VGA monitor on I2C Bus 1.\n");
+
+        /* Probe I2C Bus 2 to see if a VGA monitor is connected. */
+        xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                    "Probing for a VGA monitor on I2C Bus 2.\n");
+        mon = xf86OutputGetEDID(output, pVia->pI2CBus2);
+        if (mon && (!mon->features.input_type)) {
+            xf86OutputSetEDID(output, mon);
+            status = XF86OutputStatusConnected;
+            xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                        "Detected a VGA monitor on I2C Bus 2.\n");
+        } else {
+            xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                        "Did not detect a VGA monitor on I2C Bus 2.\n");
+
+            /* Perform manual detection of a VGA monitor since */
+            /* it was not detected via I2C buses. */
+            xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                        "Now perform manual detection of a VGA "
+                        "monitor.\n");
+            vgaHWPtr hwp = VGAHWPTR(pScrn);
+            CARD8 SR01 = hwp->readSeq(hwp, 0x01);
+            CARD8 SR40 = hwp->readSeq(hwp, 0x40);
+            CARD8 CR36 = hwp->readCrtc(hwp, 0x36);
+
+            /* We have to power on the display to detect it */
+            ViaSeqMask(hwp, 0x01, 0x00, 0x20);
+            ViaCrtcMask(hwp, 0x36, 0x00, 0xF0);
+
+            /* Wait for vblank */
+            usleep(16);
+
+            /* Detect the load on pins */
+            ViaSeqMask(hwp, 0x40, 0x80, 0x80);
+
+            if ((VIA_CX700 == pVia->Chipset) ||
+                (VIA_VX800 == pVia->Chipset) ||
+                (VIA_VX855 == pVia->Chipset) ||
+                (VIA_VX900 == pVia->Chipset))
+                ViaSeqMask(hwp, 0x40, 0x00, 0x80);
+
+            if (ViaVgahwIn(hwp, 0x3C2) & 0x20) {
+                status = XF86OutputStatusConnected;
+                xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                            "Detected a VGA monitor using manual "
+                            "detection method.\n");
+            }
+
+            if ((VIA_CX700 == pVia->Chipset) ||
+                (VIA_VX800 == pVia->Chipset) ||
+                (VIA_VX855 == pVia->Chipset) ||
+                (VIA_VX900 == pVia->Chipset))
+                ViaSeqMask(hwp, 0x40, 0x00, 0x80);
+
+            /* Restore previous state */
+            hwp->writeSeq(hwp, 0x40, SR40);
+            hwp->writeSeq(hwp, 0x01, SR01);
+            hwp->writeCrtc(hwp, 0x36, CR36);
+        }
+    }
+
+    return status;
+}
+
+static void
+via_analog_destroy(xf86OutputPtr output)
+{
+}
+
+static const xf86OutputFuncsRec via_analog_funcs = {
+    .create_resources   = via_analog_create_resources,
+#ifdef RANDR_12_INTERFACE
+    .set_property       = via_analog_set_property,
+#endif
+#ifdef RANDR_13_INTERFACE
+    .get_property       = via_analog_get_property,
+#endif
+    .dpms               = via_analog_dpms,
+    .save               = via_analog_save,
+    .restore            = via_analog_restore,
+    .mode_valid         = via_analog_mode_valid,
+    .mode_fixup         = via_analog_mode_fixup,
+    .prepare            = via_analog_prepare,
+    .commit             = via_analog_commit,
+    .mode_set           = via_analog_mode_set,
+    .detect             = via_analog_detect,
+    .get_modes          = xf86OutputGetEDIDModes,
+    .destroy            = via_analog_destroy,
+};
+
+void
+via_analog_init(ScrnInfoPtr pScrn)
+{
+    VIAPtr pVia = VIAPTR(pScrn);
+    VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+    xf86OutputPtr output = NULL;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Entered via_analog_init.\n"));
+
+    if (!pVia->pI2CBus1 || !pVia->pI2CBus2) {
+        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+                    "I2C Bus 1 or I2C Bus 2 does not exist.\n");
+        DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                            "Exiting via_analog_init.\n"));
+        return;
+    }
+
+    output = xf86OutputCreate(pScrn, &via_analog_funcs, "VGA-1");
+
+    output->possible_crtcs = 0x3;
+    output->possible_clones = 0;
+    output->interlaceAllowed = TRUE;
+    output->doubleScanAllowed = FALSE;
+    pBIOSInfo->analog = output;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting via_analog_init.\n"));
+}
diff --git a/src/via_outputs.c b/src/via_outputs.c
index 157525d..c297359 100644
--- a/src/via_outputs.c
+++ b/src/via_outputs.c
@@ -510,341 +510,6 @@ via_tv_init(ScrnInfoPtr pScrn)
 }
 
 /*
- * Enables or disables analog VGA output by controlling DAC
- * (Digital to Analog Converter) output state.
- */
-static void
-viaAnalogOutput(ScrnInfoPtr pScrn, Bool outputState)
-{
-    vgaHWPtr hwp = VGAHWPTR(pScrn);
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Entered viaAnalogOutput.\n"));
-
-    /* This register controls analog VGA DAC output state. */
-    /* 3X5.47[2] - DACOFF Backdoor Register
-     *             0: DAC on
-     *             1: DAC off */
-    ViaCrtcMask(hwp, 0x47, outputState ? 0x00 : 0x04, 0x04);
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                "Analog VGA Output: %s\n",
-                outputState ? "On" : "Off");
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Exiting viaAnalogOutput.\n"));
-}
-
-/*
- * Specifies IGA1 or IGA2 for analog VGA DAC source.
- */
-static void
-viaAnalogSource(ScrnInfoPtr pScrn, CARD8 displaySource)
-{
-    vgaHWPtr hwp = VGAHWPTR(pScrn);
-    CARD8 value = displaySource;
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Entered viaAnalogSource.\n"));
-
-    ViaSeqMask(hwp, 0x16, value << 6, 0x40);
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                "Analog VGA Output Source: IGA%d\n",
-                (value & 0x01) + 1);
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Exiting viaAnalogSource.\n"));
-}
-
-/*
- * Intializes analog VGA related registers.
- */
-static void
-viaAnalogInit(ScrnInfoPtr pScrn)
-{
-    vgaHWPtr hwp = VGAHWPTR(pScrn);
-    VIAPtr pVia = VIAPTR(pScrn);
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Entered viaAnalogInit.\n"));
-
-    /* 3X5.37[7]   - DAC Power Save Control 1
-     *               0: Depend on Rx3X5.37[5:4] setting
-     *               1: DAC always goes into power save mode
-     * 3X5.37[6]   - DAC Power Down Control
-     *               0: Depend on Rx3X5.47[2] setting
-     *               1: DAC never goes to power down mode
-     * 3X5.37[5:4] - DAC Power Save Control 2
-     *               00: DAC never goes to power save mode
-     *               01: DAC goes to power save mode by line
-     *               10: DAC goes to power save mode by frame
-     *               11: DAC goes to power save mode by line and frame
-     * 3X5.37[3]   - DAC PEDESTAL Control
-     * 3X5.37[2:0] - DAC Factor
-     *               (Default: 100) */
-    ViaCrtcMask(hwp, 0x37, 0x04, 0xFF);
-
-    switch (pVia->Chipset) {
-    case VIA_CX700:
-    case VIA_VX800:
-    case VIA_VX855:
-    case VIA_VX900:
-        /* 3C5.5E[0] - CRT DACOFF Setting
-         *             1: CRT DACOFF controlled by 3C5.01[5] */
-        ViaSeqMask(hwp, 0x5E, 0x01, 0x01);
-        break;
-    default:
-        break;
-    }
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Exiting viaAnalogInit.\n"));
-}
-
-static void
-via_analog_create_resources(xf86OutputPtr output)
-{
-}
-
-#ifdef RANDR_12_INTERFACE
-static Bool
-via_analog_set_property(xf86OutputPtr output, Atom property,
-                        RRPropertyValuePtr value)
-{
-    return TRUE;
-}
-
-static Bool
-via_analog_get_property(xf86OutputPtr output, Atom property)
-{
-    return FALSE;
-}
-#endif
-
-static void
-via_analog_dpms(xf86OutputPtr output, int mode)
-{
-    ScrnInfoPtr pScrn = output->scrn;
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Entered via_analog_dpms.\n"));
-
-    switch (mode) {
-    case DPMSModeOn:
-        viaAnalogOutput(pScrn, TRUE);
-        break;
-    case DPMSModeStandby:
-    case DPMSModeSuspend:
-    case DPMSModeOff:
-        viaAnalogOutput(pScrn, FALSE);
-        break;
-    default:
-        break;
-    }
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Exiting via_analog_dpms.\n"));
-}
-
-static void
-via_analog_save(xf86OutputPtr output)
-{
-}
-
-static void
-via_analog_restore(xf86OutputPtr output)
-{
-}
-
-static int
-via_analog_mode_valid(xf86OutputPtr output, DisplayModePtr pMode)
-{
-    ScrnInfoPtr pScrn = output->scrn;
-
-    if (!ViaModeDotClockTranslate(pScrn, pMode))
-        return MODE_NOCLOCK;
-    return MODE_OK;
-}
-
-static Bool
-via_analog_mode_fixup(xf86OutputPtr output, DisplayModePtr mode,
-                      DisplayModePtr adjusted_mode)
-{
-    return TRUE;
-}
-
-static void
-via_analog_prepare(xf86OutputPtr output)
-{
-    via_analog_dpms(output, DPMSModeOff);
-}
-
-static void
-via_analog_commit(xf86OutputPtr output)
-{
-    via_analog_dpms(output, DPMSModeOn);
-}
-
-static void
-via_analog_mode_set(xf86OutputPtr output, DisplayModePtr mode,
-                    DisplayModePtr adjusted_mode)
-{
-    ScrnInfoPtr pScrn = output->scrn;
-    vgaHWPtr hwp = VGAHWPTR(pScrn);
-    drmmode_crtc_private_ptr iga = output->crtc->driver_private;
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Entered via_analog_mode_set.\n"));
-
-    viaAnalogInit(pScrn);
-
-    if (output->crtc) {
-        viaAnalogSource(pScrn, iga->index ? 0x01 : 0x00);
-    }
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Exiting via_analog_mode_set.\n"));
-}
-
-static xf86OutputStatus
-via_analog_detect(xf86OutputPtr output)
-{
-    xf86OutputStatus status = XF86OutputStatusDisconnected;
-    ScrnInfoPtr pScrn = output->scrn;
-    VIAPtr pVia = VIAPTR(pScrn);
-    xf86MonPtr mon;
-
-    /* Probe I2C Bus 1 to see if a VGA monitor is connected. */
-    xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                "Probing for a VGA monitor on I2C Bus 1.\n");
-    mon = xf86OutputGetEDID(output, pVia->pI2CBus1);
-    if (mon && (!mon->features.input_type)) {
-        xf86OutputSetEDID(output, mon);
-        status = XF86OutputStatusConnected;
-        xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                    "Detected a VGA monitor on I2C Bus 1.\n");
-    } else {
-        xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                    "Did not detect a VGA monitor on I2C Bus 1.\n");
-
-        /* Probe I2C Bus 2 to see if a VGA monitor is connected. */
-        xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                    "Probing for a VGA monitor on I2C Bus 2.\n");
-        mon = xf86OutputGetEDID(output, pVia->pI2CBus2);
-        if (mon && (!mon->features.input_type)) {
-            xf86OutputSetEDID(output, mon);
-            status = XF86OutputStatusConnected;
-            xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                        "Detected a VGA monitor on I2C Bus 2.\n");
-        } else {
-            xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                        "Did not detect a VGA monitor on I2C Bus 2.\n");
-
-            /* Perform manual detection of a VGA monitor since */
-            /* it was not detected via I2C buses. */
-            xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                        "Now perform manual detection of a VGA "
-                        "monitor.\n");
-            vgaHWPtr hwp = VGAHWPTR(pScrn);
-            CARD8 SR01 = hwp->readSeq(hwp, 0x01);
-            CARD8 SR40 = hwp->readSeq(hwp, 0x40);
-            CARD8 CR36 = hwp->readCrtc(hwp, 0x36);
-
-            /* We have to power on the display to detect it */
-            ViaSeqMask(hwp, 0x01, 0x00, 0x20);
-            ViaCrtcMask(hwp, 0x36, 0x00, 0xF0);
-
-            /* Wait for vblank */
-            usleep(16);
-
-            /* Detect the load on pins */
-            ViaSeqMask(hwp, 0x40, 0x80, 0x80);
-
-            if ((VIA_CX700 == pVia->Chipset) ||
-                (VIA_VX800 == pVia->Chipset) ||
-                (VIA_VX855 == pVia->Chipset) ||
-                (VIA_VX900 == pVia->Chipset))
-                ViaSeqMask(hwp, 0x40, 0x00, 0x80);
-
-            if (ViaVgahwIn(hwp, 0x3C2) & 0x20) {
-                status = XF86OutputStatusConnected;
-                xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                            "Detected a VGA monitor using manual "
-                            "detection method.\n");
-            }
-
-            if ((VIA_CX700 == pVia->Chipset) ||
-                (VIA_VX800 == pVia->Chipset) ||
-                (VIA_VX855 == pVia->Chipset) ||
-                (VIA_VX900 == pVia->Chipset))
-                ViaSeqMask(hwp, 0x40, 0x00, 0x80);
-
-            /* Restore previous state */
-            hwp->writeSeq(hwp, 0x40, SR40);
-            hwp->writeSeq(hwp, 0x01, SR01);
-            hwp->writeCrtc(hwp, 0x36, CR36);
-        }
-    }
-
-    return status;
-}
-
-static void
-via_analog_destroy(xf86OutputPtr output)
-{
-}
-
-static const xf86OutputFuncsRec via_analog_funcs = {
-    .create_resources   = via_analog_create_resources,
-#ifdef RANDR_12_INTERFACE
-    .set_property       = via_analog_set_property,
-#endif
-#ifdef RANDR_13_INTERFACE
-    .get_property       = via_analog_get_property,
-#endif
-    .dpms               = via_analog_dpms,
-    .save               = via_analog_save,
-    .restore            = via_analog_restore,
-    .mode_valid         = via_analog_mode_valid,
-    .mode_fixup         = via_analog_mode_fixup,
-    .prepare            = via_analog_prepare,
-    .commit             = via_analog_commit,
-    .mode_set           = via_analog_mode_set,
-    .detect             = via_analog_detect,
-    .get_modes          = xf86OutputGetEDIDModes,
-    .destroy            = via_analog_destroy,
-};
-
-void
-via_analog_init(ScrnInfoPtr pScrn)
-{
-    VIAPtr pVia = VIAPTR(pScrn);
-    VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
-    xf86OutputPtr output = NULL;
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Entered via_analog_init.\n"));
-
-    if (!pVia->pI2CBus1 || !pVia->pI2CBus2) {
-        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-                    "I2C Bus 1 or I2C Bus 2 does not exist.\n");
-        DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                            "Exiting via_analog_init.\n"));
-        return;
-    }
-
-    output = xf86OutputCreate(pScrn, &via_analog_funcs, "VGA-1");
-
-    output->possible_crtcs = 0x3;
-    output->possible_clones = 0;
-    output->interlaceAllowed = TRUE;
-    output->doubleScanAllowed = FALSE;
-    pBIOSInfo->analog = output;
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Exiting via_analog_init.\n"));
-}
-
-/*
  * Reads off the VIA Technologies IGP pin strapping for
  * display detection purposes.
  */
diff --git a/src/via_ums.h b/src/via_ums.h
index 2382300..8f43aed 100644
--- a/src/via_ums.h
+++ b/src/via_ums.h
@@ -223,6 +223,9 @@ void viaIGA2Save(ScrnInfoPtr pScrn);
 void viaIGA2Restore(ScrnInfoPtr pScrn);
 void ViaShadowCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode);
 
+/* via_analog.c */
+void via_analog_init(ScrnInfoPtr pScrn);
+
 /* via_lvds.c */
 void via_lvds_init(ScrnInfoPtr pScrn);
 


More information about the Openchrome-devel mailing list