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
|
Bool
|
||||||
xf86MonitorIsHDMI(xf86MonPtr mon)
|
xf86MonitorIsHDMI(xf86MonPtr mon)
|
||||||
{
|
{
|
||||||
int i = 0, version, offset;
|
return xf86MonitorFindHDMIBlock(mon) != NULL;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue