This post mostly contains notes about a quite simple thing to tinker with: a (typically 256-byte) EDID identification sent from the monitor to the signal source. It is documented in Wikipedia and edid-decode utility source codes, so this task is not reverse engineering, but more a task of finding practical ways to tinker with EDIDs.
I made a lot of notes while tinkering with my monitors, and I hope that publishing those notes below would be useful for somebody, even if I didn’t make them in the guide form. Finally, there are results of practices with some 2560x1440 monitors manufactured in 2009-2011 in the end of post.
Overview of EDID adjusting
The EDID is a description of a set of signal types/frequencies/resolutions that the monitor declares as accepted. The signal source selects one of them, but for various reasons sometimes it is not optimal. The goals of injecting modified EDID is to improve this situation, like:
- getting real native resolution by default
- getting higher Hz
- getting to work with modern HDMI instead of phased out DualLinkDVI
This idea behind EDID injecting is dead simple and known for 30+ years: actually the HDMI/DVI/VGA has completely independent “signal format negotiation” and “video transmission”, so the video transmission sink cannot know if the negotiation stage was given original or some modified EDID. So if a sink signal decoder can handle a specific signal - it would handle it, because the signal decoder does NOT consult it nearby IC containig EDID for checking the signal (for 99% of monitors, especially, some very modern ones seems to somehow provide dynamic EDID depending on their settings, nut thats offtopic).
This may sound interesting for some cases, but to make it more practical (not requiring a lot of time/resources) I’d tried to make notes focusing only on simple methods: no disassembling monitors, no soldering, no DIY-crafting cables, no expensive devices. However, since for different situations different EDIDs are required - I’m not discussing the EDID contents here, only injecting methods (except some specific EDIDs from my practice show as examples)
How to apply modded EDID: methods
Permanent variant: apply once to display hardware, use with any source
- Plug display as a second to a PC via any HDMI/DVI cable, get it detected in monitors list.
- Note: if factory EDID of old monitor is not compatible with modern signal source - you may get black picture at this stage. No/bad picture does NOT prevent starting tinkering with EDID since as noted above the EDID communication is completely independent of video signal
- Save original EDID backup before changing it. Software to use:
- Windows + AMD/NVIDIA: Use EDWriter
- Carefully select display to avoid flashing the wrong one, press “Read EDID”
- Press “Save file…”, save backup
- Intel GPUs are NOT supported for writing EDID. But they work fine with already modded, so use another PC for modding or use Linux writer (below)
- Linux + AMD/NVIDIA/Intel: Use edid-checked-writer (see manual on its page)
- Windows + AMD/NVIDIA: Use EDWriter
- Prepare modified EDID. As noted, the things to tinker depends on the task. So, I’m just listing useful software:
- Windows: use Import+Export .bin files via Custom Resolution Utility
- Linux: use wxEDID GUI
- wxEDID seems to lack ability to insert new sections. This is rarely needed, but for those rare cases I used a hex editor for it, copying wanted sections from another EDID examples
- for more details, you may install v4l-utils package and use
edid-decode -C
console utility to dump & check EDID
- Time to write EDID - use the same software as while reading:
- Windows + AMD/NVIDIA: EDWriter
- Press “Load file…”, agree if asked, press “Write EDID”
- Linux + AMD/NVIDIA/Intel: Use edid-checked-writer
- Windows + AMD/NVIDIA: EDWriter
- Possible outcomes:
- If the software succeeds, all done!
- If the software reports that device is write-protected - you are not lucky - your monitor EDID is write-protected [actually most new monitors are locked, but not all old, and EDID tinkering is often wanted with old ones]. So you need one of another methods:
- Either a trivial extra device (the video signal is passing through) - the so called “HDMI lock emulator” in the role of writable-EDID-injector between signal source and HDMI cable. Cheapest one is in a picture below - my instance had writable EDID (no need to disassemble it, internals shown below just for reference). So plug it between signal source and HDMI cable and now “cable+display” combo has writable EDID!
- Or use a software-level method:
Software-level override on a single PC: use as a secondary monitor after OS booted (may lack ability to see boot process)
- Windows: use Custom Resolution Utility
- plug display, start CRU utility, select correct display in the list
- Use “Import…” button to load custom EDI file, press OK
- Run “Restart64” utility to force PC rescan monitors
- Linux:
- place custom EDID file in
/usr/lib/firmware/edid/NAME.bin
- add parameter to kernel cmd line like
drm.edid_firmware=edid/NAME.bin
- distribution-specific: you may need adding the above file into list of files packed into initramfs, see https://wiki.archlinux.org/title/Kernel_mode_setting#Forcing_modes_and_EDID
- place custom EDID file in
Notes specific to Dual-Link-DVI connections
While some Dual-Link-DVI monitor models can be adapted to work from Single-Link/HDMI, some others (mostly pre-2010) truly requires Dual-Link-DVI signal. They will not work with HDMI->DVI cables or Single-link DVI sources, even after EDID flashing.
Hardware-level limitations for Dual-Link-DVI
If the monitor signal decoder truly can’t handle single-link signal - you need to get real Dual-Link-DVI signal source. Quite popular solution is an active DisplayPort->DualLinkDVI converters, but I didn’t try it, so it is not discussed here.
All or almost all integrated GPUs does NOT support Dual-Link-DVI. It is supported by AMD/NVIDIA discrete cards having DVI port, except for RX5500 and GT1030 models, which DVI ports are single-link. The last generation having DVI ports in most models was RX5x0/GTX10x0 from ~2016. On later cards DVI present on Asus RX VEGA, many GTX 16x0 models, and selected RTX 2060/2060Super and 3050 models and the most powerful card with Dual-link-DVI - RTX 2080 Super Founders Edition.
Driver-level limitations for Dual-Link-DVI
Dual-Link-DVI connections often have a driver limitation the artificially limits pixel clock frequency to 330MHz. To get >85Hz@2560x1440 or >75Hz@2560x1600 this limit need to be overcome, regardless of the way used to modify EDID:
- Windows + AMD: For overclocking a Dual-Link-DVI monitor over 330MHz dot clock on AMD GPU - patch the driver with https://www.monitortests.com/forum/Thread-AMD-ATI-Pixel-Clock-Patcher
- Linux + AMD: For overclocking a Dual-Link-DVI monitor over 330MHz dot clock on AMD GPU - boot the kernel with
amdgpu.dc=0
parameter - Windows + NVIDIA: for modes hitting the driver limits on NVIDIA you can’t use EDID to add them, but modes can be constructed manually via NVIDIA control panel
- They are stored in the
CustomDisplay
value of the[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\XXXX]
where XXXX is the windows-generated 4-digit ID of current GPU - So actually they can be saved/restored via writing to a registry given a file with previously exported values (such files are provided below for overclocking 2560x1440 monitors)
- if imported from .reg file, the last 4 digits need to be manually edited in reg file to correspond the actually active GPU
- or the Nvidia Custom Resolutions Backup Tool executed by admin can autodetect the current GPU and import just the value data from .bin file
- They are stored in the
Practices with some 27" 2560x1440 monitors
Yamakasi Catleap Q270 (only DualLink-DVI input)
Testing showed that my instance had board variant that:
- Is NOT overclockable over ~60Hz
- writable EDID (lucky!)
- It’s DualLinkDVI inputs can handle single-link signal (good!)
Handles hdmi-single-link input from ~35 to ~55Hz, so this one was successfully modernnized from deprecated DualLinkDVI to modern HDMI via EDID writing!
So, here is a list of EDID variants that can be flashed into it for using with HDMI source + passive HDMI⇾DVI cable:
- RECOMMENDED YamakasiQ270-54HZ2025.1-edid-256byte.bin 40Hz default + 50, 54Hz selectable on PC, for passive HDMI⇾DVI cable/converter
- EXPERIMENTAL YamakasiQ270-55FreeSync-edid-256byte.bin 40Hz default + 50, 55Hz and FreeSync up to 55Hz selectable on PC, for passive HDMI⇾DVI cable/converter. Developed by ToastyX.
- EXPERIMENTAL YamakasiQ270-60HZ2025.2-edid-256byte.bin 40Hz default + 50, 54, 56, 60Hz selectable on PC, for passive HDMI⇾DVI cable/converter. 60Hz is very unstable/experimental/may depend on cable/source., try pressing power button on a monitor several times until it show normal picture instead of blackscreen. May be very problematic if video source autoselects 60Hz rate.
Shimian QH270 (only DualLink-DVI input)
Testing showed that my instance had board variant that:
- Is overclockable up 100Hz (depending on the quality of DualLinkDVI signal source, best result acheved with RX570 and RTX2060, worst with GTX 1650)
- writable EDID (lucky!)
- It’s DualLinkDVI inputs can NOT handle single-link signal (very bad!)
So, due to hardware limitaion, this one is not hackable into HDMI monitor by flashing EDID. Only HZ overcloking is possible, given this EDID ShimianQH270-DUAL-LINK-DRIVER-PATHCER-FOR100HZ-edid-256byte.bin
It has 80Hz default + 60-85Hz selectable on PC;Selecting 90-95-100Hz require overcomig software driver limits, see above. Or, for nvidia it requires importing .reg file after adjusting the GPU number section on its end
Samsung S27A850D (DualLink-DVI and DisplayPort inputs)
Testing showed that my instance had board variant that:
- Is NOT overclockable over ~60Hz
- NOT writable EDID (cable-level injector needed)
- It’s DualLinkDVI inputs can handle single-link signal (good!)
So I prepared&injected HDMI-optimized SamsungS27A850D-hdmi2k60only-edid-256byte.bin that allowed getting 2560x1440@60 via HDMI->DVI cable; not very interesting though, since while it lacks hdmi port - unlike all previously mentioned monitors it has a native DisplayPort
Those notes have a copy on a github, if you are reading this much later then posted - maybe there are updated version.
Edit by Fernando: Thread title shortened