diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-04 18:45:11 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-04 18:51:32 +0100 |
commit | 00f6af2c8ec899258ffab60dc2d9d80c4d9daec8 (patch) | |
tree | 917e076c57a19e9ed88048f344a7cca95de111e4 | |
parent | 501e78b0095b00a635dc1dc182fc132f14f08f22 (diff) | |
download | xorg-driver-xf86-video-intel-00f6af2c8ec899258ffab60dc2d9d80c4d9daec8.tar.gz |
display: Set MONITOR_EDID_COMPLETE_RAWDATA for large EDIDs
Quoting Adam Jackson:
"But the X driver looks like
it never sets MONITOR_EDID_COMPLETE_RAWDATA, which means the X core
doesn't know that any sections beyond the first are present, so it won't
ever hand back more than 128 bytes to clients. Boo."
This patch is based on his.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/intel_display.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/intel_display.c b/src/intel_display.c index 4da27906..b3c8a7ce 100644 --- a/src/intel_display.c +++ b/src/intel_display.c @@ -708,6 +708,7 @@ intel_output_attach_edid(xf86OutputPtr output) drmModeConnectorPtr koutput = intel_output->mode_output; struct intel_mode *mode = intel_output->mode; drmModePropertyBlobPtr edid_blob = NULL; + xf86MonPtr mon = NULL; int i; /* look for an EDID property */ @@ -733,15 +734,16 @@ intel_output_attach_edid(xf86OutputPtr output) } if (edid_blob) { - xf86OutputSetEDID(output, - xf86InterpretEDID(output->scrn->scrnIndex, - edid_blob->data)); + mon = xf86InterpretEDID(output->scrn->scrnIndex, + edid_blob->data); + + if (mon && edid_blob->length > 128) + mon->flags |= MONITOR_EDID_COMPLETE_RAWDATA; + drmModeFreePropertyBlob(edid_blob); - } else { - xf86OutputSetEDID(output, - xf86InterpretEDID(output->scrn->scrnIndex, - NULL)); } + + xf86OutputSetEDID(output, mon); } static DisplayModePtr |