Separate DDC mode list creation from MonPtr creation.
This will be used by the intel driver, and likely other RandR 1.2 drivers.
This commit is contained in:
		
							parent
							
								
									fbd0944338
								
							
						
					
					
						commit
						f62ac3ec39
					
				| 
						 | 
					@ -204,32 +204,14 @@ DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					DisplayModePtr
 | 
				
			||||||
 * Fill out MonPtr with xf86MonPtr information.
 | 
					xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    int preferred, i;
 | 
				
			||||||
    DisplayModePtr Modes = NULL, Mode;
 | 
					    DisplayModePtr Modes = NULL, Mode;
 | 
				
			||||||
    int i, clock;
 | 
					 | 
				
			||||||
    Bool have_hsync = FALSE, have_vrefresh = FALSE;
 | 
					 | 
				
			||||||
    int preferred;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!Monitor || !DDC)
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Monitor->DDC = DDC;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    preferred = PREFERRED_TIMING_MODE(DDC->features.msc);
 | 
					    preferred = PREFERRED_TIMING_MODE(DDC->features.msc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Monitor->widthmm = 10 * DDC->features.hsize;
 | 
					 | 
				
			||||||
    Monitor->heightmm = 10 * DDC->features.vsize;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* If this is a digital display, then we can use reduced blanking */
 | 
					 | 
				
			||||||
    if (DDC->features.input_type)
 | 
					 | 
				
			||||||
        Monitor->reducedblanking = TRUE;
 | 
					 | 
				
			||||||
    /* Allow the user to also enable this through config */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* Add established timings */
 | 
					    /* Add established timings */
 | 
				
			||||||
    Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1);
 | 
					    Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1);
 | 
				
			||||||
    Modes = xf86ModesAdd(Modes, Mode);
 | 
					    Modes = xf86ModesAdd(Modes, Mode);
 | 
				
			||||||
| 
						 | 
					@ -238,12 +220,61 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 | 
				
			||||||
    Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2);
 | 
					    Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2);
 | 
				
			||||||
    Modes = xf86ModesAdd(Modes, Mode);
 | 
					    Modes = xf86ModesAdd(Modes, Mode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (i = 0; i < DET_TIMINGS; i++) {
 | 
				
			||||||
 | 
						struct detailed_monitor_section *det_mon = &DDC->det_mon[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        switch (det_mon->type) {
 | 
				
			||||||
 | 
					        case DT:
 | 
				
			||||||
 | 
					            Mode = DDCModeFromDetailedTiming(scrnIndex,
 | 
				
			||||||
 | 
					                                             &det_mon->section.d_timings,
 | 
				
			||||||
 | 
										     preferred);
 | 
				
			||||||
 | 
						    preferred = 0;
 | 
				
			||||||
 | 
					            Modes = xf86ModesAdd(Modes, Mode);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case DS_STD_TIMINGS:
 | 
				
			||||||
 | 
					            Mode = DDCModesFromStandardTiming(scrnIndex,
 | 
				
			||||||
 | 
										      det_mon->section.std_t);
 | 
				
			||||||
 | 
					            Modes = xf86ModesAdd(Modes, Mode);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return Modes;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Fill out MonPtr with xf86MonPtr information.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    DisplayModePtr Modes = NULL, Mode;
 | 
				
			||||||
 | 
					    int i, clock;
 | 
				
			||||||
 | 
					    Bool have_hsync = FALSE, have_vrefresh = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!Monitor || !DDC)
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Monitor->DDC = DDC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Monitor->widthmm = 10 * DDC->features.hsize;
 | 
				
			||||||
 | 
					    Monitor->heightmm = 10 * DDC->features.vsize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* If this is a digital display, then we can use reduced blanking */
 | 
				
			||||||
 | 
					    if (DDC->features.input_type)
 | 
				
			||||||
 | 
					        Monitor->reducedblanking = TRUE;
 | 
				
			||||||
 | 
					    /* Allow the user to also enable this through config */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Modes = xf86DDCGetModes(scrnIndex, DDC);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Skip EDID ranges if they were specified in the config file */
 | 
					    /* Skip EDID ranges if they were specified in the config file */
 | 
				
			||||||
    have_hsync = (Monitor->nHsync != 0);
 | 
					    have_hsync = (Monitor->nHsync != 0);
 | 
				
			||||||
    have_vrefresh = (Monitor->nVrefresh != 0);
 | 
					    have_vrefresh = (Monitor->nVrefresh != 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Go through the detailed monitor sections */
 | 
					    /* Go through the detailed monitor sections */
 | 
				
			||||||
    for (i = 0; i < DET_TIMINGS; i++)
 | 
					    for (i = 0; i < DET_TIMINGS; i++) {
 | 
				
			||||||
        switch (DDC->det_mon[i].type) {
 | 
					        switch (DDC->det_mon[i].type) {
 | 
				
			||||||
        case DS_RANGES:
 | 
					        case DS_RANGES:
 | 
				
			||||||
	    if (!have_hsync) {
 | 
						    if (!have_hsync) {
 | 
				
			||||||
| 
						 | 
					@ -278,22 +309,11 @@ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
 | 
				
			||||||
	    if (clock > Monitor->maxPixClock)
 | 
						    if (clock > Monitor->maxPixClock)
 | 
				
			||||||
		Monitor->maxPixClock = clock;
 | 
							Monitor->maxPixClock = clock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case DT:
 | 
					 | 
				
			||||||
            Mode = DDCModeFromDetailedTiming(scrnIndex,
 | 
					 | 
				
			||||||
                                             &DDC->det_mon[i].section.d_timings,
 | 
					 | 
				
			||||||
					     preferred);
 | 
					 | 
				
			||||||
	    preferred = 0;
 | 
					 | 
				
			||||||
            Modes = xf86ModesAdd(Modes, Mode);
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case DS_STD_TIMINGS:
 | 
					 | 
				
			||||||
            Mode = DDCModesFromStandardTiming(scrnIndex,
 | 
					 | 
				
			||||||
                                             DDC->det_mon[i].section.std_t);
 | 
					 | 
				
			||||||
            Modes = xf86ModesAdd(Modes, Mode);
 | 
					 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (Modes) {
 | 
					    if (Modes) {
 | 
				
			||||||
        /* Print Modes */
 | 
					        /* Print Modes */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,6 +59,8 @@ extern void xf86print_vdif(
 | 
				
			||||||
    xf86vdifPtr v
 | 
					    xf86vdifPtr v
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue