]> xenbits.xensource.com Git - seabios.git/commitdiff
geodevga: Setup output based on .config
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Mon, 1 Oct 2012 12:02:46 +0000 (14:02 +0200)
committerKevin O'Connor <kevin@koconnor.net>
Mon, 8 Oct 2012 02:05:19 +0000 (22:05 -0400)
The geode hardware can be configured to use different
outputs. This patch adds support this feature based on
the current .config

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
vgasrc/geodevga.c

index 263ef68b7ae82c24994662b8e0aa41f1800b8ab1..942985641994db3c2a667da3d1fc280264e4a537 100644 (file)
@@ -244,12 +244,37 @@ static void dc_setup(void)
 */
 static void vp_setup(void)
 {
+    u32 msr_addr;
+    u64 msr;
+
     dprintf(2,"VP_SETUP\n");
+
     /* set output to crt and RGB/YUV */
     if (CONFIG_VGA_GEODEGX2)
-        geode_msr_mask(VP_MSR_CONFIG_GX2, 0xf8, 0);
+        msr_addr = VP_MSR_CONFIG_GX2;
     else
-        geode_msr_mask(VP_MSR_CONFIG_LX, 0xf8, 0);
+        msr_addr = VP_MSR_CONFIG_LX;
+
+    /* set output mode (RGB/YUV) */
+    msr = geode_msr_read(msr_addr);
+    msr &= ~VP_MSR_CONFIG_FMT;         // mask out FMT (bits 5:3)
+
+    if (CONFIG_VGA_OUTPUT_PANEL || CONFIG_VGA_OUTPUT_CRT_PANEL) {
+        msr |= VP_MSR_CONFIG_FMT_FP;   // flat panel
+
+        if (CONFIG_VGA_OUTPUT_CRT_PANEL) {
+            msr |= VP_MSR_CONFIG_FPC;  // simultaneous Flat Panel and CRT
+            dprintf(1, "output: simultaneous Flat Panel and CRT\n");
+        } else {
+            msr &= ~VP_MSR_CONFIG_FPC; // no simultaneous Flat Panel and CRT
+            dprintf(1, "ouput: flat panel\n");
+        }
+    } else {
+        msr |= VP_MSR_CONFIG_FMT_CRT;  // CRT only
+       dprintf(1, "output: CRT\n");
+    }
+    geode_msr_mask(msr_addr, ~msr, msr);
+
 
     /* Set mmio registers
     * there may be some timing issues here, the reads seem