aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/EDID/edid.S
diff options
context:
space:
mode:
authorCarsten Emde <C.Emde@osadl.org>2012-03-18 17:37:33 -0400
committerDave Airlie <airlied@redhat.com>2012-03-20 06:09:28 -0400
commitda0df92b57311aa1b26a2a90599ed16e1e968b90 (patch)
tree428ccd98d8c7cb3b1436a649109cdaa70b64b16c /Documentation/EDID/edid.S
parent3e148baf464e5b5690ba68f3c310b06024bb862b (diff)
drm: allow loading an EDID as firmware to override broken monitor
Broken monitors and/or broken graphic boards may send erroneous or no EDID data. This also applies to broken KVM devices that are unable to correctly forward the EDID data of the connected monitor but invent their own fantasy data. This patch allows to specify an EDID data set to be used instead of probing the monitor for it. It contains built-in data sets of frequently used screen resolutions. In addition, a particular EDID data set may be provided in the /lib/firmware directory and loaded via the firmware interface. The name is passed to the kernel as module parameter of the drm_kms_helper module either when loaded options drm_kms_helper edid_firmware=edid/1280x1024.bin or as kernel commandline parameter drm_kms_helper.edid_firmware=edid/1280x1024.bin It is also possible to restrict the usage of a specified EDID data set to a particular connector. This is done by prepending the name of the connector to the name of the EDID data set using the syntax edid_firmware=[<connector>:]<edid> such as, for example, edid_firmware=DVI-I-1:edid/1920x1080.bin in which case no other connector will be affected. The built-in data sets are Resolution Name -------------------------------- 1024x768 edid/1024x768.bin 1280x1024 edid/1280x1024.bin 1680x1050 edid/1680x1050.bin 1920x1080 edid/1920x1080.bin They are ignored, if a file with the same name is available in the /lib/firmware directory. The built-in EDID data sets are based on standard timings that may not apply to a particular monitor and even crash it. Ideally, EDID data of the connected monitor should be used. They may be obtained through the drm/cardX/cardX-<connector>/edid entry in the /sys/devices PCI directory of a correctly working graphics adapter. It is even possible to specify the name of an EDID data set on-the-fly via the /sys/module interface, e.g. echo edid/myedid.bin >/sys/module/drm_kms_helper/parameters/edid_firmware The new screen mode is considered when the related kernel function is called for the first time after the change. Such calls are made when the X server is started or when the display settings dialog is opened in an already running X server. Signed-off-by: Carsten Emde <C.Emde@osadl.org> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'Documentation/EDID/edid.S')
-rw-r--r--Documentation/EDID/edid.S261
1 files changed, 261 insertions, 0 deletions
diff --git a/Documentation/EDID/edid.S b/Documentation/EDID/edid.S
new file mode 100644
index 000000000000..ea97ae275fca
--- /dev/null
+++ b/Documentation/EDID/edid.S
@@ -0,0 +1,261 @@
1/*
2 edid.S: EDID data template
3
4 Copyright (C) 2012 Carsten Emde <C.Emde@osadl.org>
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19*/
20
21
22/* Manufacturer */
23#define MFG_LNX1 'L'
24#define MFG_LNX2 'N'
25#define MFG_LNX3 'X'
26#define SERIAL 0
27#define YEAR 2012
28#define WEEK 5
29
30/* EDID 1.3 standard definitions */
31#define XY_RATIO_16_10 0b00
32#define XY_RATIO_4_3 0b01
33#define XY_RATIO_5_4 0b10
34#define XY_RATIO_16_9 0b11
35
36#define mfgname2id(v1,v2,v3) \
37 ((((v1-'@')&0x1f)<<10)+(((v2-'@')&0x1f)<<5)+((v3-'@')&0x1f))
38#define swap16(v1) ((v1>>8)+((v1&0xff)<<8))
39#define msbs2(v1,v2) ((((v1>>8)&0x0f)<<4)+((v2>>8)&0x0f))
40#define msbs4(v1,v2,v3,v4) \
41 (((v1&0x03)>>2)+((v2&0x03)>>4)+((v3&0x03)>>6)+((v4&0x03)>>8))
42#define pixdpi2mm(pix,dpi) ((pix*25)/dpi)
43#define xsize pixdpi2mm(XPIX,DPI)
44#define ysize pixdpi2mm(YPIX,DPI)
45
46 .data
47
48/* Fixed header pattern */
49header: .byte 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00
50
51mfg_id: .word swap16(mfgname2id(MFG_LNX1, MFG_LNX2, MFG_LNX3))
52
53prod_code: .word 0
54
55/* Serial number. 32 bits, little endian. */
56serial_number: .long SERIAL
57
58/* Week of manufacture */
59week: .byte WEEK
60
61/* Year of manufacture, less 1990. (1990-2245)
62 If week=255, it is the model year instead */
63year: .byte YEAR-1990
64
65version: .byte VERSION /* EDID version, usually 1 (for 1.3) */
66revision: .byte REVISION /* EDID revision, usually 3 (for 1.3) */
67
68/* If Bit 7=1 Digital input. If set, the following bit definitions apply:
69 Bits 6-1 Reserved, must be 0
70 Bit 0 Signal is compatible with VESA DFP 1.x TMDS CRGB,
71 1 pixel per clock, up to 8 bits per color, MSB aligned,
72 If Bit 7=0 Analog input. If clear, the following bit definitions apply:
73 Bits 6-5 Video white and sync levels, relative to blank
74 00=+0.7/-0.3 V; 01=+0.714/-0.286 V;
75 10=+1.0/-0.4 V; 11=+0.7/0 V
76 Bit 4 Blank-to-black setup (pedestal) expected
77 Bit 3 Separate sync supported
78 Bit 2 Composite sync (on HSync) supported
79 Bit 1 Sync on green supported
80 Bit 0 VSync pulse must be serrated when somposite or
81 sync-on-green is used. */
82video_parms: .byte 0x6d
83
84/* Maximum horizontal image size, in centimetres
85 (max 292 cm/115 in at 16:9 aspect ratio) */
86max_hor_size: .byte xsize/10
87
88/* Maximum vertical image size, in centimetres.
89 If either byte is 0, undefined (e.g. projector) */
90max_vert_size: .byte ysize/10
91
92/* Display gamma, minus 1, times 100 (range 1.00-3.5 */
93gamma: .byte 120
94
95/* Bit 7 DPMS standby supported
96 Bit 6 DPMS suspend supported
97 Bit 5 DPMS active-off supported
98 Bits 4-3 Display type: 00=monochrome; 01=RGB colour;
99 10=non-RGB multicolour; 11=undefined
100 Bit 2 Standard sRGB colour space. Bytes 25-34 must contain
101 sRGB standard values.
102 Bit 1 Preferred timing mode specified in descriptor block 1.
103 Bit 0 GTF supported with default parameter values. */
104dsp_features: .byte 0xea
105
106/* Chromaticity coordinates. */
107/* Red and green least-significant bits
108 Bits 7-6 Red x value least-significant 2 bits
109 Bits 5-4 Red y value least-significant 2 bits
110 Bits 3-2 Green x value lst-significant 2 bits
111 Bits 1-0 Green y value least-significant 2 bits */
112red_green_lsb: .byte 0x5e
113
114/* Blue and white least-significant 2 bits */
115blue_white_lsb: .byte 0xc0
116
117/* Red x value most significant 8 bits.
118 0-255 encodes 0-0.996 (255/256); 0-0.999 (1023/1024) with lsbits */
119red_x_msb: .byte 0xa4
120
121/* Red y value most significant 8 bits */
122red_y_msb: .byte 0x59
123
124/* Green x and y value most significant 8 bits */
125green_x_y_msb: .byte 0x4a,0x98
126
127/* Blue x and y value most significant 8 bits */
128blue_x_y_msb: .byte 0x25,0x20
129
130/* Default white point x and y value most significant 8 bits */
131white_x_y_msb: .byte 0x50,0x54
132
133/* Established timings */
134/* Bit 7 720x400 @ 70 Hz
135 Bit 6 720x400 @ 88 Hz
136 Bit 5 640x480 @ 60 Hz
137 Bit 4 640x480 @ 67 Hz
138 Bit 3 640x480 @ 72 Hz
139 Bit 2 640x480 @ 75 Hz
140 Bit 1 800x600 @ 56 Hz
141 Bit 0 800x600 @ 60 Hz */
142estbl_timing1: .byte 0x00
143
144/* Bit 7 800x600 @ 72 Hz
145 Bit 6 800x600 @ 75 Hz
146 Bit 5 832x624 @ 75 Hz
147 Bit 4 1024x768 @ 87 Hz, interlaced (1024x768)
148 Bit 3 1024x768 @ 60 Hz
149 Bit 2 1024x768 @ 72 Hz
150 Bit 1 1024x768 @ 75 Hz
151 Bit 0 1280x1024 @ 75 Hz */
152estbl_timing2: .byte ESTABLISHED_TIMINGS_BITS
153
154/* Bit 7 1152x870 @ 75 Hz (Apple Macintosh II)
155 Bits 6-0 Other manufacturer-specific display mod */
156estbl_timing3: .byte 0x00
157
158/* Standard timing */
159/* X resolution, less 31, divided by 8 (256-2288 pixels) */
160std_xres: .byte (XPIX/8)-31
161/* Y resolution, X:Y pixel ratio
162 Bits 7-6 X:Y pixel ratio: 00=16:10; 01=4:3; 10=5:4; 11=16:9.
163 Bits 5-0 Vertical frequency, less 60 (60-123 Hz) */
164std_vres: .byte (XY_RATIO<<6)+VFREQ-60
165 .fill 7,2,0x0101 /* Unused */
166
167descriptor1:
168/* Pixel clock in 10 kHz units. (0.-655.35 MHz, little-endian) */
169clock: .word CLOCK/10
170
171/* Horizontal active pixels 8 lsbits (0-4095) */
172x_act_lsb: .byte XPIX&0xff
173/* Horizontal blanking pixels 8 lsbits (0-4095)
174 End of active to start of next active. */
175x_blk_lsb: .byte XBLANK&0xff
176/* Bits 7-4 Horizontal active pixels 4 msbits
177 Bits 3-0 Horizontal blanking pixels 4 msbits */
178x_msbs: .byte msbs2(XPIX,XBLANK)
179
180/* Vertical active lines 8 lsbits (0-4095) */
181y_act_lsb: .byte YPIX&0xff
182/* Vertical blanking lines 8 lsbits (0-4095) */
183y_blk_lsb: .byte YBLANK&0xff
184/* Bits 7-4 Vertical active lines 4 msbits
185 Bits 3-0 Vertical blanking lines 4 msbits */
186y_msbs: .byte msbs2(YPIX,YBLANK)
187
188/* Horizontal sync offset pixels 8 lsbits (0-1023) From blanking start */
189x_snc_off_lsb: .byte XOFFSET&0xff
190/* Horizontal sync pulse width pixels 8 lsbits (0-1023) */
191x_snc_pls_lsb: .byte XPULSE&0xff
192/* Bits 7-4 Vertical sync offset lines 4 lsbits -63)
193 Bits 3-0 Vertical sync pulse width lines 4 lsbits -63) */
194y_snc_lsb: .byte ((YOFFSET-63)<<4)+(YPULSE-63)
195/* Bits 7-6 Horizontal sync offset pixels 2 msbits
196 Bits 5-4 Horizontal sync pulse width pixels 2 msbits
197 Bits 3-2 Vertical sync offset lines 2 msbits
198 Bits 1-0 Vertical sync pulse width lines 2 msbits */
199xy_snc_msbs: .byte msbs4(XOFFSET,XPULSE,YOFFSET,YPULSE)
200
201/* Horizontal display size, mm, 8 lsbits (0-4095 mm, 161 in) */
202x_dsp_size: .byte xsize&0xff
203
204/* Vertical display size, mm, 8 lsbits (0-4095 mm, 161 in) */
205y_dsp_size: .byte ysize&0xff
206
207/* Bits 7-4 Horizontal display size, mm, 4 msbits
208 Bits 3-0 Vertical display size, mm, 4 msbits */
209dsp_size_mbsb: .byte msbs2(xsize,ysize)
210
211/* Horizontal border pixels (each side; total is twice this) */
212x_border: .byte 0
213/* Vertical border lines (each side; total is twice this) */
214y_border: .byte 0
215
216/* Bit 7 Interlaced
217 Bits 6-5 Stereo mode: 00=No stereo; other values depend on bit 0:
218 Bit 0=0: 01=Field sequential, sync=1 during right; 10=similar,
219 sync=1 during left; 11=4-way interleaved stereo
220 Bit 0=1 2-way interleaved stereo: 01=Right image on even lines;
221 10=Left image on even lines; 11=side-by-side
222 Bits 4-3 Sync type: 00=Analog composite; 01=Bipolar analog composite;
223 10=Digital composite (on HSync); 11=Digital separate
224 Bit 2 If digital separate: Vertical sync polarity (1=positive)
225 Other types: VSync serrated (HSync during VSync)
226 Bit 1 If analog sync: Sync on all 3 RGB lines (else green only)
227 Digital: HSync polarity (1=positive)
228 Bit 0 2-way line-interleaved stereo, if bits 4-3 are not 00. */
229features: .byte 0x18+(VSYNC_POL<<2)+(HSYNC_POL<<1)
230
231descriptor2: .byte 0,0 /* Not a detailed timing descriptor */
232 .byte 0 /* Must be zero */
233 .byte 0xff /* Descriptor is monitor serial number (text) */
234 .byte 0 /* Must be zero */
235start1: .ascii "Linux #0"
236end1: .byte 0x0a /* End marker */
237 .fill 12-(end1-start1), 1, 0x20 /* Padded spaces */
238descriptor3: .byte 0,0 /* Not a detailed timing descriptor */
239 .byte 0 /* Must be zero */
240 .byte 0xfd /* Descriptor is monitor range limits */
241 .byte 0 /* Must be zero */
242start2: .byte VFREQ-1 /* Minimum vertical field rate (1-255 Hz) */
243 .byte VFREQ+1 /* Maximum vertical field rate (1-255 Hz) */
244 .byte (CLOCK/(XPIX+XBLANK))-1 /* Minimum horizontal line rate
245 (1-255 kHz) */
246 .byte (CLOCK/(XPIX+XBLANK))+1 /* Maximum horizontal line rate
247 (1-255 kHz) */
248 .byte (CLOCK/10000)+1 /* Maximum pixel clock rate, rounded up
249 to 10 MHz multiple (10-2550 MHz) */
250 .byte 0 /* No extended timing information type */
251end2: .byte 0x0a /* End marker */
252 .fill 12-(end2-start2), 1, 0x20 /* Padded spaces */
253descriptor4: .byte 0,0 /* Not a detailed timing descriptor */
254 .byte 0 /* Must be zero */
255 .byte 0xfc /* Descriptor is text */
256 .byte 0 /* Must be zero */
257start3: .ascii TIMING_NAME
258end3: .byte 0x0a /* End marker */
259 .fill 12-(end3-start3), 1, 0x20 /* Padded spaces */
260extensions: .byte 0 /* Number of extensions to follow */
261checksum: .byte CRC /* Sum of all bytes must be 0 */