Skip to content

Latest commit

 

History

History
82 lines (67 loc) · 5.23 KB

File metadata and controls

82 lines (67 loc) · 5.23 KB

Injecting EDID to fix display issues

About EDID

EDID stands for Extended Display Identification Data. It's a 128 byte value which describes a displays properties and features. It can be utilized as a last resort measure to fix display issues in macOS if all other attempts of fixing the issue (modifying the Framebuffer, using Whatevergreen boot arguments, etc.) fail.

Possible applications

  • Fixing Black Screen on Wake
  • Fixing 8 Apples Glitch and scrambled screen
  • Issues when a second Monitor is connected
  • Unlocking additional resolutions and refresh rates

Patching Principle

  • Dump EDID
  • Open/modify EDID
  • Export EDID
  • Get EDID Hex Value
  • Inject it via DeviceProperties

Instructions

Obtaining EDID dump

  • Download and unzip DarwinDumper
  • Run the App
  • In "Save Path", select a path like "Documents"
  • Click on "Deselect All Dumps"
  • Select "EDID":
    EDID_01
  • Click on "Run"
  • Once the process is completed, a Finder Window will open and show the dumped files:
    :EDID_02

Extracting the EDID value from EDID.bin

  • Download FixEDID (click on "Code" and select "Download ZIP")
  • Unzip the file
  • Open FixEDID App (located under "FixEDID-master/Release_10.7 and +"). If macOS won't let you run it, open it wia right-click menu.
  • Click on "Open EDID binary file":
    EDID_03
  • Navigate to the dumped EDID.bin file and open it
  • Select "Apple iMac Retina Display (16:9)" if your display supports HD and High DPI, otherwise use whatever is appropriate for your display.
  • Optional: click on "Add/Fix the monitor ranges" (if your EDID doesn't have them or they are bad)
  • Optional: add scaled resolutions by entering the resolution and clicking add. For adding them to the list click the "Add Resolution" button.
  • Finally, click on "Make":
    EDID_05
  • This will output 3 files on the desktop:
    • A modified EDID.bin
    • DisplayMergeNub.kext
    • DisplayVendorID-XXX folder, containing a display override file (without extension)
  • Enter the DisplayVendorID-XXX folder
  • Open the DisplayProductID-… file with a Plist Editor like ProperTree
  • Copy the value under IODisplayEDID to the clipboard:
    EDID_06

Adding the EDID to config.plist

  • Open your config.plist
  • Go to DeviceProperties/Add
  • Locate the Framebuffer Patch for your iGPU in DeviceProperties: PciRoot(0x0)/Pci(0x2,0x0)
  • Add Key AAPL00,override-no-connect, Type: Data
  • Press CMD+V to enter the EDID as hex in the Value field:
    EDID_07
  • Save your config.plist and reboot
  • Verify that the EDID has been applied. Open Terminal and enter:
    ioreg -lw0 | grep -i "IODisplayEDID" | sed -e 's/.*<//' -e 's/>//'
  • The output should be identical to the value in your config.

Hopefully this will resolve the issue!

Important

If you added additional/custom resolutions, you also need to copy the DisplayVendorID-XXX folder containing the display override to /System/Library/Displays/Overrides or install the DisplayMergeNub.kext in /System/Library/Extensions. Since S/L/E is write-protected in macOS 10.15 and newer by default, doing this is not recommended.

Example

  • Default resolutions for my laptop's display (before injecting EDID):
    noEDID
  • After injecting EDID (with "Add/Fix the monitor ranges" option enabled):
    WithEDID

Note

Injecting the EDID only makes sense, if you need a specific resolution and/or display refresh rate (higher or lower) that is supported by the display panel but is not available in the display settings menu!

Alternatives for fixing black screen issues

If the above method doesn't work to fix black screen issues after wake, try HibernationFixup.kext in combination with boot-arg -hbfx-disable-patch-pci instead.

Credits and Resources