xfree86: Refactor xf86MonitorIsHDMI() using xf86MonitorFindHDMIBlock()

Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
This commit is contained in:
Damien Lespiau 2013-08-07 15:16:21 +01:00
parent a279fb3ff3
commit 95c2287465

View File

@ -757,49 +757,5 @@ validate_version(int scrnIndex, struct edid_version *r)
Bool
xf86MonitorIsHDMI(xf86MonPtr mon)
{
int i = 0, version, offset;
char *edid = NULL;
if (!mon)
return FALSE;
if (!(mon->flags & EDID_COMPLETE_RAWDATA))
return FALSE;
if (!mon->no_sections)
return FALSE;
edid = (char *) mon->rawData;
if (!edid)
return FALSE;
/* find the CEA extension block */
for (i = 1; i <= mon->no_sections; i++)
if (edid[i * 128] == 0x02)
break;
if (i == mon->no_sections + 1)
return FALSE;
edid += (i * 128);
version = edid[1];
offset = edid[2];
if (version < 3 || offset < 4)
return FALSE;
/* walk the cea data blocks */
for (i = 4; i < offset; i += (edid[i] & 0x1f) + 1) {
char *x = edid + i;
/* find a vendor specific block */
if ((x[0] & 0xe0) >> 5 == 0x03) {
int oui = (x[3] << 16) + (x[2] << 8) + x[1];
/* find the HDMI vendor OUI */
if (oui == 0x000c03)
return TRUE;
}
}
/* guess it's not HDMI after all */
return FALSE;
return xf86MonitorFindHDMIBlock(mon) != NULL;
}