| Summary: | Change VBE version limitation from 2.0 to 1.2 to allow to perform EDID query by means of VBE/DDC | ||
|---|---|---|---|
| Product: | xorg | Reporter: | Evgeny Zubok <zoubok> |
| Component: | Server/DDX/Xorg | Assignee: | Xorg Project Team <xorg-team> |
| Status: | RESOLVED WONTFIX | QA Contact: | Xorg Project Team <xorg-team> |
| Severity: | normal | ||
| Priority: | medium | CC: | zoubok |
| Version: | git | Keywords: | patch |
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | |||
| i915 platform: | i915 features: | ||
Can anybody apply this patch or tell me what is wrong with it? Only don't leave it without feedback. Patches tend to be more quickly reviewed (though no promises, since we have far more work than available developers/time) if submitted to the xorg-devel mailing list as described on: http://www.x.org/wiki/Development/Documentation/SubmittingPatches and the "Development Process" section of http://www.x.org/wiki/XServer (In reply to comment #2) > Patches tend to be more quickly reviewed (though no promises, since we have > far more work than available developers/time) if submitted to the xorg-devel > mailing list as described on: > http://www.x.org/wiki/Development/Documentation/SubmittingPatches > and the "Development Process" section of http://www.x.org/wiki/XServer The patch had been sent to the mailing list before this bug report was opened: http://www.mail-archive.com/xorg@lists.freedesktop.org/msg07090.html, and after some waiting I decided to dublicate it here. Anyway, thank you for the explanation. I tried in this thread: http://lists.x.org/archives/xorg/2009-May/045495.html later here: http://lists.x.org/archives/xorg-devel/2012-September/033568.html and in the present bugreport. There is no feedback. I close this bugreport with status WONTFIX. |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.
I have S3 Trio64V2 with VESA 1.2. While trying to implement DDC support for the S3 driver I discovered that there is VESA version checking before queriyng the EDID -- if VESA version is less than 2.0 the function returns NULL and didn't perform EDID query. if (pVbe->version < 0x200) return NULL; However my S3 Trio64V2 with VESA Video BIOS 1.2 has DDC extention! I have verified this with get-edid program. What the reason of this limitation on the VESA version? As I understand from VBE/DDC specification [1], the DDC supplements VESA Video BIOS and isn't included into both VESA 1.2 [2] or VESA 2.0 [3]. VESA 1.2 specification defines subfunctions from 00h to 07h, and subfunctions 08h-FFh are declared as reserved [2]. VESA 2.0 defines subfunctions 00h-0Fh, and 10-FFh are reserved for VBE Supplemental Specifications [3]. DDC's subfunction number is 15h. The presence of DDC can be verified by calling function 4F15h of int10h and examining the contents of AX register. If AL != 4FH or AH != 0 after calling, then DDC isn't supported. This procedure is described in Section 6, 6.1 of [2] and 4, 4.1 of [3] and, therefore, actual for both VESA 2.0 and VESA 1.2. The function vbeProbeDDC (hw/xfree86/vbe/vbe.c) already doing this checking of DDC presence (it is called from vbeReadEDID which is called from vbeDoEDID). So, the VBE version in vbeDoEDID can be lowered to 1.2 as the procedure of verifying the presence of subfunction (15h in the case of DDC) is defined in VESA 1.2 and VESA 2.0 specs and is implemented in vbe.c. The attached patch lowers VBE version from 2.0 to 1.2. I tested this patch with my working copy of S3 driver and successfully retrieved EDID from my monitor and got the required modes. [1] DDC - http://www.vesa.org/public/VBE/VBEDDC11.PDF [2] VESA 1.2 - http://docs.ruudkoot.nl/vesasp12.txt [3] VESA 2.0 - http://docs.ruudkoot.nl/vbe20.txt diff --git a/hw/xfree86/vbe/vbe.c b/hw/xfree86/vbe/vbe.c index 4986b5b..0f03a07 100644 --- a/hw/xfree86/vbe/vbe.c +++ b/hw/xfree86/vbe/vbe.c @@ -314,7 +314,7 @@ vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule) unsigned char *DDC_data = NULL; if (!pVbe) return NULL; - if (pVbe->version < 0x200) + if (pVbe->version < 0x102) return NULL; if (!(pModule = pDDCModule)) {