0001 .. SPDX-License-Identifier: GPL-2.0
0002
0003 ====
0004 EDID
0005 ====
0006
0007 In the good old days when graphics parameters were configured explicitly
0008 in a file called xorg.conf, even broken hardware could be managed.
0009
0010 Today, with the advent of Kernel Mode Setting, a graphics board is
0011 either correctly working because all components follow the standards -
0012 or the computer is unusable, because the screen remains dark after
0013 booting or it displays the wrong area. Cases when this happens are:
0014
0015 - The graphics board does not recognize the monitor.
0016 - The graphics board is unable to detect any EDID data.
0017 - The graphics board incorrectly forwards EDID data to the driver.
0018 - The monitor sends no or bogus EDID data.
0019 - A KVM sends its own EDID data instead of querying the connected monitor.
0020
0021 Adding the kernel parameter "nomodeset" helps in most cases, but causes
0022 restrictions later on.
0023
0024 As a remedy for such situations, the kernel configuration item
0025 CONFIG_DRM_LOAD_EDID_FIRMWARE was introduced. It allows to provide an
0026 individually prepared or corrected EDID data set in the /lib/firmware
0027 directory from where it is loaded via the firmware interface. The code
0028 (see drivers/gpu/drm/drm_edid_load.c) contains built-in data sets for
0029 commonly used screen resolutions (800x600, 1024x768, 1280x1024, 1600x1200,
0030 1680x1050, 1920x1080) as binary blobs, but the kernel source tree does
0031 not contain code to create these data. In order to elucidate the origin
0032 of the built-in binary EDID blobs and to facilitate the creation of
0033 individual data for a specific misbehaving monitor, commented sources
0034 and a Makefile environment are given here.
0035
0036 To create binary EDID and C source code files from the existing data
0037 material, simply type "make" in tools/edid/.
0038
0039 If you want to create your own EDID file, copy the file 1024x768.S,
0040 replace the settings with your own data and add a new target to the
0041 Makefile. Please note that the EDID data structure expects the timing
0042 values in a different way as compared to the standard X11 format.
0043
0044 X11:
0045 HTimings:
0046 hdisp hsyncstart hsyncend htotal
0047 VTimings:
0048 vdisp vsyncstart vsyncend vtotal
0049
0050 EDID::
0051
0052 #define XPIX hdisp
0053 #define XBLANK htotal-hdisp
0054 #define XOFFSET hsyncstart-hdisp
0055 #define XPULSE hsyncend-hsyncstart
0056
0057 #define YPIX vdisp
0058 #define YBLANK vtotal-vdisp
0059 #define YOFFSET vsyncstart-vdisp
0060 #define YPULSE vsyncend-vsyncstart