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;
|
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);
|
DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
|
||||||
|
|
||||||
|
extern Bool
|
||||||
|
xf86MonitorIsHDMI(xf86MonPtr mon);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -922,6 +922,7 @@ _X_HIDDEN void *xfree86LookupTab[] = {
|
||||||
SYMFUNC(xf86DoEEDID)
|
SYMFUNC(xf86DoEEDID)
|
||||||
SYMFUNC(xf86DDCMonitorSet)
|
SYMFUNC(xf86DDCMonitorSet)
|
||||||
SYMFUNC(xf86SetDDCproperties)
|
SYMFUNC(xf86SetDDCproperties)
|
||||||
|
SYMFUNC(xf86MonitorIsHDMI)
|
||||||
|
|
||||||
SYMFUNC(xf86CreateI2CBusRec)
|
SYMFUNC(xf86CreateI2CBusRec)
|
||||||
SYMFUNC(xf86CreateI2CDevRec)
|
SYMFUNC(xf86CreateI2CDevRec)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user