On Mon, Jun 10, 2002 at 08:12:09 -0500, Watzlavick wrote: > The I-Opener is really just a dumbed-down laptop. In your experience, does the > trident driver seem to turn off the backlight via DPMS on other laptops? If > DPMS properly blanks the screen, can I assume it's basically working even if the > backlight stays on? I can do some more research and debugging but I'm not sure > where to begin. I was poking through the Cyberblade i7 Tech Ref Manual and I > found the section talking about ENPBLT. I can't probe the pins directly because > it's a BGA part - ideally, I'd look to see whether the driver was turning off > the ENPBLT signal on the Cyberblade to see if it was a driver problem or if > there was something in between the Cyberblade and display. > > The bios has three options for "video off method": DPMS support, blank screen, > and V/H SYNC+blank. I've had it set to DPMS but maybe there's another circuit > getting in the way. I'll try V/H SYNC to see if the display will take that. > One more question if I may: what is the trident driver trying to do in the > various DPMS states? That might help me understand the mechanism for backlight > control on the I-Opener. If you can point me to the proper file, I can look to > see what is going on. Get the current CVS, and try this patch. Alan. Index: trident_driver.c =================================================================== RCS file: /home/x-cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c,v retrieving revision 1.172 diff -u -r1.172 trident_driver.c --- trident_driver.c 2002/05/28 10:39:39 1.172 +++ trident_driver.c 2002/06/10 13:54:12 @@ -617,7 +617,7 @@ TRIDENTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags) { TRIDENTPtr pTrident = TRIDENTPTR(pScrn); - CARD8 DPMSCont, PMCont, temp; + CARD8 DPMSCont, PMCont, temp, temp2; if (!pScrn->vtSema) return; @@ -629,27 +629,53 @@ PMCont = INB(0x83C6) & 0xFC; OUTB(0x3CE, 0x23); DPMSCont = INB(0x3CF) & 0xFC; + + /* turn on soft power control for backlight */ + OUTB(0x3CE, 0x25); + temp2 = INB(0x3CF) | 0x08; + OUTB(0x3CF, temp2); + switch (PowerManagementMode) { case DPMSModeOn: /* Screen: On, HSync: On, VSync: On */ PMCont |= 0x03; DPMSCont |= 0x00; + + /* enable backlight */ + OUTB(0x3CE, 0x24); + temp2 = INB(0x3CF) | 0x08; + OUTB(0x3CF, temp2); break; case DPMSModeStandby: /* Screen: Off, HSync: Off, VSync: On */ PMCont |= 0x02; DPMSCont |= 0x01; + OUTB(0x3CE, 0x24); + + /* disable backlight */ + temp2 = INB(0x3CF) & 0xF7; + OUTB(0x3CF, temp2); break; case DPMSModeSuspend: /* Screen: Off, HSync: On, VSync: Off */ PMCont |= 0x02; DPMSCont |= 0x02; + + /* disable backlight */ + OUTB(0x3CE, 0x24); + temp2 = INB(0x3CF) & 0xF7; + OUTB(0x3CF, temp2); break; case DPMSModeOff: /* Screen: Off, HSync: Off, VSync: Off */ PMCont |= 0x00; DPMSCont |= 0x03; + + /* disable backlight */ + OUTB(0x3CE, 0x24); + temp2 = INB(0x3CF) & 0xF7; + OUTB(0x3CF, temp2); break; } OUTB(0x3CF, DPMSCont);