Move mode handling helpers from ddcProperty.c to xf86Mode.c.
This commit is contained in:
		
							parent
							
								
									b4b0d901d9
								
							
						
					
					
						commit
						16f8f10dc2
					
				| 
						 | 
				
			
			@ -426,6 +426,7 @@ DisplayModePtr xf86DuplicateMode(DisplayModePtr pMode);
 | 
			
		|||
DisplayModePtr xf86DuplicateModes(ScrnInfoPtr pScrn, DisplayModePtr modeList);
 | 
			
		||||
Bool xf86ModesEqual(DisplayModePtr pMode1, DisplayModePtr pMode2);
 | 
			
		||||
void xf86PrintModeline(int scrnIndex,DisplayModePtr mode);
 | 
			
		||||
DisplayModePtr xf86ModesAdd(DisplayModePtr modes, DisplayModePtr new);
 | 
			
		||||
 | 
			
		||||
/* xf86Option.c */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2178,3 +2178,27 @@ xf86PrintModes(ScrnInfoPtr scrp)
 | 
			
		|||
	p = p->next;
 | 
			
		||||
    } while (p != NULL && p != scrp->modes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Adds the new mode into the mode list, and returns the new list
 | 
			
		||||
 *
 | 
			
		||||
 * \param modes doubly-linked mode list.
 | 
			
		||||
 */
 | 
			
		||||
_X_EXPORT DisplayModePtr
 | 
			
		||||
xf86ModesAdd(DisplayModePtr modes, DisplayModePtr new)
 | 
			
		||||
{
 | 
			
		||||
    if (modes == NULL)
 | 
			
		||||
	return new;
 | 
			
		||||
 | 
			
		||||
    if (new) {
 | 
			
		||||
        DisplayModePtr mode = modes;
 | 
			
		||||
 | 
			
		||||
        while (mode->next)
 | 
			
		||||
            mode = mode->next;
 | 
			
		||||
 | 
			
		||||
        mode->next = new;
 | 
			
		||||
        new->prev = mode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return modes;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,98 +32,6 @@
 | 
			
		|||
#include "propertyst.h"
 | 
			
		||||
#include "xf86DDC.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * xf86Mode.c should have a some more DisplayModePtr list handling.
 | 
			
		||||
 */
 | 
			
		||||
static DisplayModePtr
 | 
			
		||||
xf86ModesAdd(DisplayModePtr Modes, DisplayModePtr Additions)
 | 
			
		||||
{
 | 
			
		||||
    if (!Modes) {
 | 
			
		||||
        if (Additions)
 | 
			
		||||
            return Additions;
 | 
			
		||||
        else
 | 
			
		||||
            return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Additions) {
 | 
			
		||||
        DisplayModePtr Mode = Modes;
 | 
			
		||||
 | 
			
		||||
        while (Mode->next)
 | 
			
		||||
            Mode = Mode->next;
 | 
			
		||||
        
 | 
			
		||||
        Mode->next = Additions;
 | 
			
		||||
        Additions->prev = Mode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Modes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static DisplayModePtr
 | 
			
		||||
xf86ModeCopy(DisplayModePtr Mode)
 | 
			
		||||
{
 | 
			
		||||
    DisplayModePtr New;
 | 
			
		||||
 | 
			
		||||
    if (!Mode)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    New = xnfalloc(sizeof(DisplayModeRec));
 | 
			
		||||
 | 
			
		||||
    memcpy(New, Mode, sizeof(DisplayModeRec));
 | 
			
		||||
    
 | 
			
		||||
    New->name = xnfalloc(strlen(Mode->name) + 1);
 | 
			
		||||
    memcpy(New->name, Mode->name, strlen(Mode->name) + 1);
 | 
			
		||||
 | 
			
		||||
    /* We ignore privates as DDC code doesn't use it currently */
 | 
			
		||||
    return New;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Temporary.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
add(char **p, char *new)
 | 
			
		||||
{
 | 
			
		||||
    *p = xnfrealloc(*p, strlen(*p) + strlen(new) + 2);
 | 
			
		||||
    strcat(*p, " ");
 | 
			
		||||
    strcat(*p, new);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
PrintModeline(int scrnIndex,DisplayModePtr mode)
 | 
			
		||||
{
 | 
			
		||||
    char tmp[256];
 | 
			
		||||
    char *flags = xnfcalloc(1, 1);
 | 
			
		||||
 | 
			
		||||
    if (mode->HSkew) { 
 | 
			
		||||
	snprintf(tmp, 256, "hskew %i", mode->HSkew); 
 | 
			
		||||
	add(&flags, tmp);
 | 
			
		||||
    }
 | 
			
		||||
    if (mode->VScan) { 
 | 
			
		||||
	snprintf(tmp, 256, "vscan %i", mode->VScan); 
 | 
			
		||||
	add(&flags, tmp);
 | 
			
		||||
    }
 | 
			
		||||
    if (mode->Flags & V_INTERLACE) add(&flags, "interlace");
 | 
			
		||||
    if (mode->Flags & V_CSYNC) add(&flags, "composite");
 | 
			
		||||
    if (mode->Flags & V_DBLSCAN) add(&flags, "doublescan");
 | 
			
		||||
    if (mode->Flags & V_BCAST) add(&flags, "bcast");
 | 
			
		||||
    if (mode->Flags & V_PHSYNC) add(&flags, "+hsync");
 | 
			
		||||
    if (mode->Flags & V_NHSYNC) add(&flags, "-hsync");
 | 
			
		||||
    if (mode->Flags & V_PVSYNC) add(&flags, "+vsync");
 | 
			
		||||
    if (mode->Flags & V_NVSYNC) add(&flags, "-vsync");
 | 
			
		||||
    if (mode->Flags & V_PCSYNC) add(&flags, "+csync");
 | 
			
		||||
    if (mode->Flags & V_NCSYNC) add(&flags, "-csync");
 | 
			
		||||
#if 0
 | 
			
		||||
    if (mode->Flags & V_CLKDIV2) add(&flags, "vclk/2");
 | 
			
		||||
#endif
 | 
			
		||||
    xf86DrvMsgVerb(scrnIndex, X_INFO, 3,
 | 
			
		||||
		   "Modeline \"%s\"  %6.2f  %i %i %i %i  %i %i %i %i%s\n",
 | 
			
		||||
		   mode->name, mode->Clock/1000., mode->HDisplay,
 | 
			
		||||
		   mode->HSyncStart, mode->HSyncEnd, mode->HTotal,
 | 
			
		||||
		   mode->VDisplay, mode->VSyncStart, mode->VSyncEnd,
 | 
			
		||||
		   mode->VTotal, flags);
 | 
			
		||||
    xfree(flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * TODO:
 | 
			
		||||
 *  - for those with access to the VESA DMT standard; review please.
 | 
			
		||||
| 
						 | 
				
			
			@ -159,11 +67,12 @@ DDCModesFromEstablished(int scrnIndex, struct established_timings *timing)
 | 
			
		|||
        ((timing->t_manu & 0x80) << 9);
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < 17; i++)
 | 
			
		||||
    for (i = 0; i < 17; i++) {
 | 
			
		||||
        if (bits & (0x01 << i)) {
 | 
			
		||||
            Mode = xf86ModeCopy(&(DDCEstablishedModes[i]));
 | 
			
		||||
            Mode = xf86DusplicateMode(&DDCEstablishedModes[i]);
 | 
			
		||||
            Modes = xf86ModesAdd(Modes, Mode);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Modes;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -392,7 +301,7 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 | 
			
		|||
 | 
			
		||||
        Mode = Modes;
 | 
			
		||||
        while (Mode) {
 | 
			
		||||
            PrintModeline(scrnIndex, Mode);
 | 
			
		||||
            xf86PrintModeline(scrnIndex, Mode);
 | 
			
		||||
            Mode = Mode->next;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue