Add xf86MonitorIsHDMI() helper.
This commit is contained in:
parent
a7951a4dad
commit
4cf2f4172a
|
@ -459,3 +459,56 @@ validate_version(int scrnIndex, struct edid_version *r)
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if HDMI, false if definitely not or unknown.
|
||||
*/
|
||||
_X_EXPORT 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;
|
||||
}
|
||||
|
|
|
@ -59,6 +59,7 @@ extern Bool xf86SetDDCproperties(
|
|||
|
||||
DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
|
||||
|
||||
extern Bool
|
||||
xf86MonitorIsHDMI(xf86MonPtr mon);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -922,6 +922,7 @@ _X_HIDDEN void *xfree86LookupTab[] = {
|
|||
SYMFUNC(xf86DoEEDID)
|
||||
SYMFUNC(xf86DDCMonitorSet)
|
||||
SYMFUNC(xf86SetDDCproperties)
|
||||
SYMFUNC(xf86MonitorIsHDMI)
|
||||
|
||||
SYMFUNC(xf86CreateI2CBusRec)
|
||||
SYMFUNC(xf86CreateI2CDevRec)
|
||||
|
|
Loading…
Reference in New Issue
Block a user