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