On Mon, 3 Dec 2001, David S. Miller wrote: (... snip ... Lots of stuff) > > You won't find creator headers in anything Sun publishes. > > > What doesn't work is any sort of DPMS power management, even though > > Solaris knows how (so it is possible). > > > It just kills the VSYNC signal, we do that in the Creator3D kernel FB > driver. It's DAC fiddling: > > tmp = read_dac(0x6000); > tmp &= ~0x1; > write_dac(0x6000, tmp); > > Just set that bit when you want it back. I'm pretty sure I even > document these registers in the ffb_dac.h header file in the > xfree86 sources.
David, Yes, it is documented in ffb_dac.h, thanks a lot. That said, this solves my problem, and I'll start looking for something else to complain about. The short answer is that with David Miller's hint, I have been able to put both screen blanking (xset s on s blank) and DPMS support (xset dpms p q r) into the sunffb_drv.o driver for the Creator3D, FFB2+/Vertical. I'll keep playing with it, and if it seems to keep on working, I'll make it available to anyone who wants it. I hesitate to suggest something like this as a change for the driver in general because this driver has to handle various Creator and Elite cards, and I am able to play with exactly one possible configuration, which is <Creator3D, FFB2+/Vertical, GDM-20E20 monitor>. ***************** For those interested and for anyone who can set me right if what I am trying is a bad thing, here is how I interpreted Miller's advice: 1. In the driver, ffb_driver.c, add DPMS to the option list, and if it there, do something like xf86DPMSInit(pScreen, FFBDPMSMode, 0); /* in FFBScreenInit */ where you have a signature static void FFBDPMSMode(ScrnInfoPtr pScrn, int M, int f) FFBDPMSMode just does FFBDacDPMSMode(GET_FFB_FROM_SCRN(pScrn), M, f); 2. In ffb_dac.c, you add something like void FFBDPmsMode(FFBPtr pFfb, int DPMSMode, int flags) { int tmp; ffb_dacPtr dac = pFfb -> dac; tmp = DACCFG_READ(dac, FFBDAC_CFG_TGEN); /* Get timing reg. */ And, say, if you want to go into suspend mode, what finally seems to work for me looks like: case DPMSModeSuspend: tmp |= FFBDAC_CFG_TGEN_VSD; /* VSYNC Disable */ tmp &= ~FFBDAC_CFG_TGEN_HSD; /* HSYNC Enable */ tmp &= ~FFBDAC_CFG_TGEN_VIDE; /* Kill the video */ break; (Turning the monitor on looks like:) case DPMSModeOn: tmp &= ~(FFBDAC_CFG_TGEN_VSD | FFBDAC_CFG_TGEN_HSD); /* Un-disable Vsync, Hsync */ tmp |= FFBDAC_CFG_TGEN_VIDE; /* Turn video on */ break; And, finally, change the mode with DACFFG_WRITE(dac, FFBDAC_CFG_TGEN, tmp); In fact, what I sketched out above is about 1/3 the total changes I have needed so far. As I said, I can exercise this in only one specific configuration, but it's my interpretation of Miller's suggestion. Regards, Ferris -- Ferris McCormick (P44646, MI) <[EMAIL PROTECTED]> Phone: (703) 392-0303 Fax: (703) 392-0401