Fixing Ugly DVI/HDMI Displays due to EDID bugs on nVidia drivers

The good news: nVidia finally released their much awaited 173.14.09 video driver for linux. This officially supports the 2.6.25 kernel and supports the newest line of GeForce graphics cards.

The bad news: When you install the driver your HDMI/DVI digital flatpanel display looks horrible; the text looks jagged or blurred or oversharpened. There are halos and ringing anywhere there is contrast. The colors looked washed out and over bright. However, when you use the D-SUB (VGA) plug, everything works fine.

What is going on?

What is happening: Your monitor is providing EDID information to the driver that identifies that it is actually a TV. EDID stands for "extended display identification data" its a low level standard originally devised in 1994 that is basically a set a flags that tells the computer what the monitors capabilities are. The nVidia drivers see that you have a TV and decide to modify the signal in an attempt to make the picture look 'better' it also sometimes forces the output resolution to the standard TV resolutions (1080p/i, 720p, 480p/i).

How to fix it: You need to provide the nVidia driver with a new set of EDID flags. Specifically you need to change a single field so that the EDID does not report any extensions. Don't worry no soldering iron or hardware mods are required.

First, obtain a copy of your monitor's current EDID information. This can be done with the read-edid utility. However, it is apparently limited to x86-32. Since our network only has x86-64 systems, I had to resort to plugging the monitor into a Windows box and using Phoenix EDID Designer. Phoenix EDID Designer is both an EDID editor and a reader. You want to save the raw binary EDID information.

Update: You can use nvidia-settings to get your EDID info. Run nvidia-settings, click on DFP-0, then click "Acquire EDID..."

Now that you have your EDID information, you need to clear the extensions flag and update the checksum. If you are using the Phoenix EDID Designer, you can just change the field 'Number of extensions' in the General tab to 0. If you used read-edid or nvidia-settings to get your EDID, then you can use edid_disable_exts. It is a small utility that I wrote that does the same thing. See the page dedicated to it for more information.

Once you've created a modified EDID file, copy it to /etc/X11/something.edid

Finally, we have to tell the nVidia driver to use this EDID file instead of the one the monitor sends it. Open /etc/X11/xorg.conf.

Section "Device"
Identifier "nVidia"
Driver "nvidia"
Option "CustomEDID" "DFP-0:/etc/X11/L2410NM-modified.edid"
EndSection

 

Here we are using a Westinghouse L2410NM monitor, which has the EDID problems. We override the EDID with the CustomEDID option provided by the nVidia driver.

Finally, text and pictures look good again!

Discussion for this utility has moved to the edid_disable_exts forum

Comments

Still not working

I did try edid_disable_exts, but without success. I have following in xorg.conf:

Section "Device"
Identifier "Device0"
Driver "nvidia"
Option "CustomEDID" "DFP-1:/etc/X11/p2370hd-m.edid"
VendorName "NVIDIA Corporation"
BoardName "GeForce G210"
BusID "PCI:1:0:0"
Screen 0
EndSection

File does exists and I did not get any errors.

Any ides why it is not working?

Not really

But I've had some success by changing from DFP-1 to DFP-0. (Make sure to move the dvi cable too maybe)

Any Solution to keep HDMI-audio extension?

Hi,thanks for your small tool - it helped. But my problem is that this solution wipes the whole extension block - but i want to use the hdmi audio :(So, do you know a solution fixing the identification of the device without deleting the whole extension block, maybe change one flag in the edid? (disable the overscan/underscan feature or something like this?)Here's all the Information of my TV(LG 42LH3010) from switchresx, including the edid in hex and in textmode:http://www.mediafire.com/file/mimzmz1lh2m/LG TV 

Tough Problem

hmm that sucks.

the audio information is included in the extension block, so yeah that is a problem. i might dabble with it but dont expect anything from me, particularly beacause i have no way to test it.

Much Appreciated!

I have been tearing my hair out ever since I updated my myth box from Fedora 8 to Fedora 10.  Somewhere along the way, nvidia started using edid to scan my TV and it was setting up 1280x720.  The max resolution for my TV when connected to a PC should only have been 1024x768.  I followed your instructions here and got a perfect picture without the overscan.

Thanks!

Thanks!

You, sir, are brilliant. :) my monitor works lovely now.

Help me please..

I have a Samsung LN-S4092D and i'm trying to get resolution 1920x1080 without the overscan on my Debian Lenny amd64! I don't understand your directions, especially the part about running your utility....Help me please, i've saved the edid.bin file in my Misc folder. How do i use your utility to fix the overscan problem?

My assumption

I assume you are having difficulty compiling the program. I have built a static version of the program, and have included it here.

You need to do something like:

wget http://analogbit.com/sites/default/files/edid_disable_exts_amd64_static.tgz
tar xzvf edid_disable_exts_amd64_static.tgz
./edid_disable_exts_amd64_static /path/to/your/edid.input /path/to/your/edid.output

Overscan solution...

I did as u suggested, let me illustrate...

el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid* /home/el1ip3s01d/Desktop/Misc/
ERROR: Input EDID does not appear to be valid.

Here it is again!!!

el1ip3s01d@Iehovah-007:~/Desktop$ sudo ./edid_* edid.bin Samsung.dat
sudo: ./edid_*: command not found
My God, what am i doing wrong???

el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ cd edid_*
bash: cd: edid_disable_exts_amd64_static: Not a directory
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid_* /home/el1p3s01d/Desktop/edid.bin /home/el1ip3s01d/Desktop/Misc/Samsung.dat
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./static* /home/el1p3s01d/Desktop/edid.bin /home/el1ip3s01d/Desktop/Misc/Samsung.dat
sudo: ./static*: command not found
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ ./edid_* /home/el1p3s01d/Desktop/edid.bin /home/el1ip3s01d/Desktop/Misc/Samsung.dat
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ ./edid_* [/home/el1p3s01d/Desktop/edid.bin] [/home/el1ip3s01d/Desktop/Misc/Samsung.da]t
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid_* [/home/el1p3s01d/Desktop/edid.bin] [/home/el1ip3s01d/Desktop/Misc/Samsung.da]t
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid_* [edid.bin] [Samsung.dat]
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]

Look, at what happended now?

el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ ls
AdobeReader_enu-8.1.3-1.i386.deb           compizconfig-python-0.7.6.tar.gz                      glib-2.7.1.tar.gz
atk-1.0.0.tar.gz                           compiz-fusion-plugins-extra-0.7.6-cmake.tar.gz        gspcav1-20071224.tar.gz
atk_1.24.0-1_win32.zip                     compiz-fusion-plugins-extra-0.7.6.tar.gz              gtk+-2.8.0.tar.gz
atk-1.24.0.tar.bz2                         compiz-fusion-plugins-main-0.7.6-cmake.tar.gz         index.pdf
atk-dev_1.24.0-1_win32.zip                 compiz-fusion-plugins-main-0.7.6.tar.gz               lexmark
cairo-java-1.0.1.tar.gz                    compiz-fusion-plugins-unsupported-0.7.6-cmake.tar.gz  libcompizconfig-0.7.6.tar.gz
ccsm-0.7.6.tar.gz                          compiz-fusion-plugins-unsupported-0.7.6.tar.gz        NVIDIA-Linux-x86_64-180.22-pkg2.run
CJLZ35LE-CUPS-2.0-1.TAR.GZ                 compiz-switch-0.4.0~source.tar.gz                     pango-1.0.0.tar.gz
compiz-0.7.6.tar.gz                        diveintopython-pdf-5.4.zip                            perl-5.10.0
compiz-check                               edid_disable_exts_amd64_static                        perl-5.10.0.tar.gz
compizconfig-backend-gconf-0.7.6.tar.gz    edid_disable_exts_amd64_static.tgz                    simple-ccsm-0.7.6.tar.gz
compizconfig-backend-kconfig-0.7.6.tar.gz  emerald-0.7.6.tar.gz                                  uvcvideo-r104.tar.gz
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid_disable_exts_amd64_static [/home/el1ip3s01d/Desktop/edid.bin] [/home/el1ip3s01d/Desktop/Misc/Samsung.dat]
ERROR: Input file "[/home/el1ip3s01d/Desktop/edid.bin]" could not be opened.

You came close

You almost got it.

When you said "My god what am i doing wrong?" you were in the wrong directory. You have to take note of which directory you are currently in and what directory the file is in.

Also your later attempts would have worked if you didnt put brackets around the file names.  The file names do not need brackets.

 

Hello again...

where did i go wrong?

Section "Device"
Identifier     "Device0"
Driver         "nvidia"
VendorName     "NVIDIA Corporation"
Option         "CustomEDID"  "DFP-1:/etc/X11/LN-S4092D-modified.edid"
EndSection

This is confusing?

I'll explain, what would my output be?

./edid_disable_exts_amd64_static /path/to/your/edid.input /path/to/your/edid.output

Tim...

What would my output be? Do you mean that i have to create a output file? And if so, how would i do that?

Output

The program only writes to the screen if there is an error, if everything is successful there should be no message.

The 1st parameter is the EDID input file, the 2nd parameter is the EDID output file. The output file is created by the program.

Will this work with Windows Vista Drivers?

I just acquired 3 Westinghouse L2610NM monitors (1920x1200 native) which I seek to run on nVIDIA 8800 GPUs with Windows Vista.  The EDID in this model monitor appears to report the monitor as a 1080p HDTV.  The nVIDIA Forceware shows HDTV, and everything works well at 1920x1080, except for the considerable 120 lines of overscan distortion.  At 1920x1200 the text is choppy, motly, barely readable hieroglyphics.  It appears that your fix applies to Linux.  Do you think it will work with Vista?

edid

EDID fix for L2610NM in Windows

Yes and no.

The same method works, but you must do it differently. I found a method that I tested and it does work.

http://forums.nvidia.com/index.php?showtopic=58483&st=0&p=330319&#entry330319

Try that out.