--- xorg-server-1.1.1/hw/xfree86/ddc/interpret_edid.c.debug 2007-05-28 12:58:43.000000000 -0400 +++ xorg-server-1.1.1/hw/xfree86/ddc/interpret_edid.c 2007-05-28 13:28:23.000000000 -0400 @@ -309,8 +309,11 @@ static Bool validate_version(int scrnIndex, struct edid_version *r) { - if (r->version != 1) + if (r->version != 1) { + xf86DrvMsg(scrnIndex, X_ERROR,"EDID Major Version %i not valid\n", + r->version); return FALSE; + } if (r->revision > 3) { xf86DrvMsg(scrnIndex, X_ERROR,"EDID Version 1.%i not yet supported\n", r->revision); --- xorg-server-1.1.1/hw/xfree86/vbe/vbe.c.debug 2006-07-05 14:31:42.000000000 -0400 +++ xorg-server-1.1.1/hw/xfree86/vbe/vbe.c 2007-05-28 13:42:02.000000000 -0400 @@ -263,6 +263,9 @@ Bool noddc = FALSE; int screen = pVbe->pInt10->scrnIndex; OptionInfoPtr options; +#define EDID_WIDTH 16 + CARD16 i, j; + char buf[EDID_WIDTH * 2 + 1]; if (!page) return NULL; @@ -276,7 +279,7 @@ if (!vbeProbeDDC(pVbe)) goto error; - memset(page,0,sizeof(vbeInfoPtr)); + memset(page,0,128); /* EDID fetch is 128 bytes */ strcpy(page,vbeVersionString); pVbe->pInt10->ax = 0x4F15; @@ -287,6 +290,7 @@ pVbe->pInt10->di = SEG_OFF(RealOff); pVbe->pInt10->num = 0x10; + sleep(2); /* Pausing here seems to help obtain any data at all. */ xf86ExecX86int10(pVbe->pInt10); if ((pVbe->pInt10->ax & 0xff) != 0x4f) { @@ -297,7 +301,18 @@ case 0x0: xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC read successfully\n"); tmp = (unsigned char *)xnfalloc(128); + if (!tmp) { + xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC bad xnfalloc\n"); + } memcpy(tmp,page,128); + + xf86DrvMsg(screen, X_INFO, "vbeReadEDID DEBUG: EDID AFTER BIOS CALL (in hex):\n"); + for (i = 0; i < 128; i += j) { + for (j = 0; j < EDID_WIDTH; ++j) { + sprintf(&buf[j * 2], "%02x", tmp[i + j]); + } + xf86DrvMsg(screen, X_INFO, "\t%s\n", buf); + } break; case 0x100: xf86DrvMsgVerb(screen,X_INFO,3,"VESA VBE DDC read failed\n");