98 lines
3.7 KiB
Plaintext
98 lines
3.7 KiB
Plaintext
DDC.HOWTO
|
|
|
|
This file describes how to add DDC support to a chipset driver.
|
|
|
|
1) DDC INITIALIZATION
|
|
|
|
When implementing DDC in the driver one has the choice between
|
|
DDC1 and DDC2.
|
|
DDC1 data is continuously transmitted by a DDC1 capable display
|
|
device. The data is send serially over a data line; the Vsync
|
|
signal serves as clock. Only one EDID 1.x data block can be
|
|
transmitted using DDC1. Since transmission of an EDID1 block
|
|
using a regular Vsync frequency would take up several seconds
|
|
the driver can increase the Vsync frequency to up to 25 kHz as
|
|
soon as it detects DDC1 activity on the data line.
|
|
DDC2 data is transmitted using the I2C protocol. This requires
|
|
an additional clock line. DDC2 is capable of transmitting EDID1
|
|
and EDID2 block as well as a VDIF block on display devices that
|
|
support these.
|
|
Display devices switch into the DDC2 mode as soon as they detect
|
|
activity on the DDC clock line. Once the are in DDC2 mode they
|
|
stop transmitting DDC1 signals until the next power cycle.
|
|
|
|
Some graphics chipset configurations which are not capable of
|
|
DDC2 might still be able to read DDC1 data. Where available
|
|
DDC2 it is preferable.
|
|
|
|
All relevant prototypes and defines are in xf86DDC.h.
|
|
DDC2 additionally requires I2C support. The I2C prototypes
|
|
are in xf86i2c.h.
|
|
|
|
DDC1 Support:
|
|
|
|
The driver has to provide a read function which waits for the
|
|
end of the next Vsync signal and reads in and returns the status
|
|
of the DDC line:
|
|
|
|
unsigned int XXX_ddc1Read(ScrnInfoPtr pScrn)
|
|
|
|
Additionally a function is required to increase the Vsync
|
|
frequency to max. 25 kHz.
|
|
|
|
void XXX_ddc1SetSpeed(ScrnInfoPtr pScrn, xf86ddcSpeed speed)
|
|
|
|
If the speed argument is DDC_FAST the function should increase
|
|
the Vsync frequency on DDC_SLOW it should restore the original
|
|
value. For convenience a generic ddc1SetSpeed() function is provided
|
|
in the vga module for VGA-like chipsets.
|
|
|
|
void vgaHWddc1SetSpeed(ScrnInfoPtr pScrn, sf86ddcSpeed speed).
|
|
|
|
To read out the DDC1 data the driver should call
|
|
|
|
xf86MonPtr xf86DoEDID_DDC1(int scrnIndex,
|
|
void (*DDC1SetSpeed)(ScrnInfoPtr, xf86ddcSpeed),
|
|
unsigned int (*DDC1Read)(ScrnInfoPtr))
|
|
|
|
in PreInit(). DDC1SetSpeed is a pointer to the SetSpeed()
|
|
function, DDC1Read has to point to the DDC1 read function.
|
|
The function will return a pointer to the xf86Monitor structure
|
|
which contains all information retrieved by DDC.
|
|
NULL will be returned on failure.
|
|
|
|
DDC2 Support
|
|
|
|
To read out DDC2 information I2C has to be initialized first.
|
|
(See documentation for the i2c module).
|
|
The function
|
|
|
|
xf86MonPtr xf86DoEDID_DDC2(int scrnIndex, I2CBusPtr pBus)
|
|
|
|
is provided to read out and process DDC2 data. A pointer
|
|
to the I2CBusRec of the appropriate I2C Bus has to be passed
|
|
as the second argument.
|
|
The function will return a pointer to the xf86Monitor structure
|
|
which contains all information retrieved by DDC.
|
|
NULL will be returned on failure.
|
|
|
|
Printing monitor parameters
|
|
|
|
To print out the information contained in the xf86Monitor
|
|
structure the function
|
|
|
|
xf86MonPtr xf86PrintEDID(xf86MonPtr monitor)
|
|
|
|
is provided.
|
|
|
|
Further processing of the xf86Monitor structure is not yet
|
|
implemented. However, it is planned to use the information
|
|
about video modes, gamma values etc.
|
|
Therefore it is strongly recommended to read out DDC data
|
|
before any video mode processing is done.
|
|
|
|
|
|
|
|
|
|
$XFree86: xc/programs/Xserver/hw/xfree86/ddc/DDC.HOWTO,v 1.2 1998/12/06 13:30:39 dawes Exp $
|