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:
parent
a279fb3ff3
commit
95c2287465
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user