Author: daniel
Date: 2003-06-14 22:58:23 -0500 (Sat, 14 Jun 2003)
New Revision: 206

Modified:
   branches/4.3.0/sid/debian/patches/048_radeon_dpms_on_dvi_support.diff
Log:
patch #48 (Radeon DPMS on DVI): new patch from XFree86 Bugzilla, via Madkiss,
that actually works, unlike the last, which apparently didn't.


Modified: branches/4.3.0/sid/debian/patches/048_radeon_dpms_on_dvi_support.diff
==============================================================================
--- branches/4.3.0/sid/debian/patches/048_radeon_dpms_on_dvi_support.diff       
2003-06-14 11:00:52 UTC (rev 205)
+++ branches/4.3.0/sid/debian/patches/048_radeon_dpms_on_dvi_support.diff       
2003-06-15 03:58:23 UTC (rev 206)
@@ -1,58 +1,31 @@
-Patch by Mike A. Harris <[EMAIL PROTECTED]>
-
-The following patch adds DPMS support to the radeon driver for flat panel
-displays (DFP) and LCD panels.  It does not affect the CRT codepath, and
-has been tested on singlehead CRT systems, dualhead CRT, CRT + DFP, and
-dual DFP cards Dell ships.  I've tested it single and dualhead with CRTs
-on Radeon 7000/7500/8500/9000/9700 for regressions and had no problems
-so far.  Tested with suspend/standby/off signals using "xset dpms force".
-
-Patch update: Version 2 (XFree86-4.3.0-ati-radeon-dpms-on-dvi-v2.patch)
-
-Hui Yu from ATI provided additional information about DVI vs. LCD DPMS
-support and indicated the MT_LCD in my original patch was incorrect.  I've
-removed that for now, and will work on this some more after XFree86 4.3.0
-is officially released.
-
---- 
xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c.ati-radeon-dpms-on-dvi
  2003-02-21 15:54:52.000000000 -0500
-+++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c 2003-02-21 
16:54:50.000000000 -0500
-@@ -6503,17 +6503,31 @@
- 
-     if (info->accelOn) info->accel->Sync(pScrn);
- 
-+    /* The entire DPMS code seems overly complicated to me, and perhaps
-+     * could be rewritten to use DISP_PWR_MAN_DPMS instead of manually 
twiddling
-+     * the CRTCs. This perhaps would enable DPMS to work properly on more 
hardware
-+     * without special casing?  - Mike A. Harris <[EMAIL PROTECTED]>
-+     */
-     if (info->FBDev) {
-       fbdevHWDPMSSet(pScrn, PowerManagementMode, flags);
-+    } else if (info->DisplayType == MT_DFP) {
-+      switch (PowerManagementMode) {
-+      case DPMSModeOn:
-+          OUTREG(RADEON_FP_GEN_CNTL,
-+                 INREG(RADEON_FP_GEN_CNTL) | (RADEON_FP_TMDS_EN | 
RADEON_FP_FPON));
-+          break;
-+      case DPMSModeStandby:
-+      case DPMSModeSuspend:
-+      case DPMSModeOff:
-+          OUTREG(RADEON_FP_GEN_CNTL,
-+                 INREG(RADEON_FP_GEN_CNTL) & ~(RADEON_FP_TMDS_EN | 
RADEON_FP_FPON));
-+          break;
-+      }
-     } else {
--      int             mask1     = (RADEON_CRTC_DISPLAY_DIS |
--                                   RADEON_CRTC_HSYNC_DIS |
--                                   RADEON_CRTC_VSYNC_DIS);
--      int             mask2     = (RADEON_CRTC2_DISP_DIS |
--                                   RADEON_CRTC2_VSYNC_DIS |
--                                   RADEON_CRTC2_HSYNC_DIS);
--
--      /* TODO: additional handling for LCD ? */
-+      int mask1 = (RADEON_CRTC_DISPLAY_DIS | RADEON_CRTC_HSYNC_DIS |
-+                   RADEON_CRTC_VSYNC_DIS);
-+      int mask2 = (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS |
-+                   RADEON_CRTC2_HSYNC_DIS);
- 
-       switch (PowerManagementMode) {
-       case DPMSModeOn:
+diff -ruN xc.old/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c 
xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
+--- xc.old/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c     
2003-02-25 04:50:15.000000000 +0100
++++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c 2003-06-14 
16:25:42.000000000 +0200
+@@ -6523,6 +6523,14 @@
+           else {
+               if (info->Clone)
+                   OUTREGP(RADEON_CRTC2_GEN_CNTL, 0, ~mask2);
++              if (info->DisplayType == MT_LCD) {
++                  usleep(RADEONPTR(pScrn)->PanelPwrDly * 1000);
++                  OUTREGP (RADEON_LVDS_GEN_CNTL, (RADEON_LVDS_ON | 
RADEON_LVDS_BLON),
++                           ~(RADEON_LVDS_ON | RADEON_LVDS_BLON));
++              } else if (info->DisplayType == MT_DFP) {
++                  OUTREGP (RADEON_FP_GEN_CNTL, RADEON_FP_FPON | 
RADEON_FP_TMDS_EN, 
++                           ~(RADEON_FP_FPON | RADEON_FP_TMDS_EN));
++              }
+               OUTREGP(RADEON_CRTC_EXT_CNTL, 0, ~mask1);
+           }
+           break;
+@@ -6569,6 +6577,12 @@
+               if (info->Clone)
+                   OUTREGP(RADEON_CRTC2_GEN_CNTL, mask2, ~mask2);
+               OUTREGP(RADEON_CRTC_EXT_CNTL, mask1, ~mask1);
++              if (info->DisplayType == MT_LCD) {
++                  usleep(RADEONPTR(pScrn)->PanelPwrDly * 1000);
++                  OUTREGP (RADEON_LVDS_GEN_CNTL, 0, ~(RADEON_LVDS_ON | 
RADEON_LVDS_BLON));
++              } else if (info->DisplayType == MT_DFP) {
++                  OUTREGP (RADEON_FP_GEN_CNTL, 0, ~(RADEON_FP_FPON | 
RADEON_FP_TMDS_EN));
++              }
+           }
+           break;
+       }

Reply via email to