read-edid elucidates various very useful informations from a conforming PnP monitor; I wrote it to find out the scan line and frequencies of the 85Hz 1024*768 mode of my monitor.
XFree86 4 (but not version 3) integrates this functionality on some video cards, so read-edid isn't needed then.
If you can't find the data to set your monitor up under XFree86, then read-edid is for you; it should auto detect all necessary info and should even provide a few modes with better refresh rates/resolutions than the standard VESA ones. As of now it won't do everything for you; you'll have to edit XF86Config yourself.
If read-edid doesn't work and you're sure it's the latest version, please contact me. Questions, comments, suggestions are all welcome!
The specifications for the systems used by this program are kept by the VESA people, more or less locked up: access is only to members, and membership is prohibitively expensive for most open-source work. The way that I got them was by begging. A public text seems to have sneaked out since then.
There are two stages: 1) getting the EDID from the hardware, 2) parsing it.
% tar zxf read-edid-$VERSION.tar.gz
% cd read-edid-$VERSION/ % make
root# make read-edid
get-edid (linux or MS-DOS version) uses a VESA VBE 2 interrupt service routine request (the VBE/DDC extension, which is only optionally supported by a VBE implementor) to read a 128 byte EDID version 1 structure from your graphics card. The graphics card has (previously?) asked for this data structure from your monitor, via the Data Display Channel. parse-edid parses this data structure and outputs data about the monitor suitable for inclusion into a XF86Config.
parse-edid I think supports EDID version 1 revisions 0, 1 and 2. Version 1.3 is not supported yet. If you get such an EDID, mail me! My monitor doesn't give me an EDID longer than 128 bytes so it doesn't support long EDIDs. If you have one, mail me!
EDID format data is supposed to start with 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, if that's any help. Send your EDID to me if it seems broken, and I'll see what I can do.
Your VBE implementor (graphics card manufacturer) must implement the VBE/DDC extension. Your monitor must support DDC (to communicate with the graphics card) and EDID (to have something to say). The get-edid program first checks for this but does not abort if it seems your hardware is inadequate.
Message | Meaning |
---|---|
get-edid: output block unchanged | This means that the get EDID call to the BIOS didn't work: you didn't get the EDID data. Try getting the EDID some other way. See fixes, below. |
parse-edid: first bytes don't match EDID version 1 header | The EDID did not start with the EDID version 1 header. Try getting the EDID some other way. See Fixes below. |
parse-edid: checksum failed | The EDID is probably corrupt. Do not blindly trust any modelines generated. Try getting the EDID some other way. See Fixes below. |
C:\GET-EDID.EXE EDID-OUT
This obviously can't be done under DOSEmu in Linux; you'll need to boot to MS-DOS/MS Windows where the true VESA interrupt interface is available.
% ./parse-edid /mnt/dos/EDID-OUT
Mode "1024x768" DotClock 94.500000 HTimings 1024 1072 1168 1376 VTimings 768 769 772 808 EndMode
Option "NoDDC"line to the Device section in your XF86Config.
root# ./get-edid > edid-fileSend the "edid-file" to me as an attachment, (with, obviously, a description of the problem and your monitor and graphics card details).
get-edid will not compile or work as it interfaces with the x86 BIOS. OTOH on powerpc Linux you can run parse-edid on
/proc/device-tree/pci/{video-card}/EDID
People with more than one video card in their system (one card is not connected to a monitor) have reported problems getting the EDID (no-one has been successful, try the support builtin to XFree86 4). There is untested support for cards with more than one monitor, but not for more than one card in the same machine. In fact, the VBE 3 standard says that it is impossible to access a second device.
Monitor | Card | Report |
---|---|---|
ViewSonic P225F | - | Has a special driver to read the EDID data under MS-Windows. The EDID from this program can be used with parse-edid. |
Envision 910e | AGP GeForce 2 | Unable to fetch EDID |
KDS 17" Visual Sensations | Diamond Stealth II S220 (Rendition Verite 2200) | Monitor is knocked out of sync when using get-edid and VBE/DDC READ EDID call fails. No known fix. |
LG FLATRON LCD 575MS | Matrox MGA G 400 AGP | EDID data corrupt - keeps claiming 78 more blocks. |
MAG DX700T-2 | ATI Xpert 98 [RagePro] (8MB) | Partially
corrupt EDID data. Contains at incorrect offsets:
ModelName "MAG DX700T-2" HorizSync 30-70 VertRefresh 50-120 |
[S3 ViRGE (rev 6)] (2 MB EDO Trio64 135 MHz) | MAG XJ796 | EDID from get-edid under linux is corrupt. Use
get-edid under DOS.
Identifier "MAG XJ796" VendorName "Unknown" ModelName "MAG XJ796" HorizSync 30-96 VertRefresh 50-160 # Max dot clock (video bandwidth) 200 MHz Mode "800x600" DotClock 56.250000 HTimings 800 832 896 1048 VTimings 600 601 604 631 EndMode Mode "640x480" DotClock 72.850000 HTimings 640 680 752 864 VTimings 480 481 484 527 EndMode |
LG Studioworks 995E | Asus V7100 Pure (Nvidia GeForce 2 MX) | get-edid loops forever |
Viewsonic PF775 | TNT2 Xentor | get-edid loops forever |
New versions of read-edid are at polypux.org. Thanks to the Poly-poly man!
All files are small (<100kB)